1010import java .awt .Font ;
1111import java .awt .GridBagConstraints ;
1212import java .awt .GridBagLayout ;
13- import java .awt .event .ActionListener ;
1413import java .awt .event .ComponentAdapter ;
1514import java .awt .event .ComponentEvent ;
1615import java .awt .image .BufferedImage ;
@@ -57,17 +56,22 @@ public class MCPFrame extends JFrame {
5756 public MainGUI mcp ;
5857 public boolean loadingVersions = true ;
5958
59+ public static BufferedImage ICON ;
60+
61+ static {
62+ try {
63+ URL resource = MCPFrame .class .getResource ("/icon/rmcp.png" );
64+ ICON = ImageIO .read (resource );
65+ } catch (Exception e ) {
66+ System .err .println ("Can't load icon" );
67+ }
68+ }
69+
6070 public MCPFrame (MainGUI mcp ) {
6171 super ("RetroMCP " + MCP .VERSION );
6272 this .mcp = mcp ;
6373 setDefaultCloseOperation (JFrame .EXIT_ON_CLOSE );
64- try {
65- URL resource = getClass ().getResource ("/icon/rmcp.png" );
66- BufferedImage image = ImageIO .read (resource );
67- setIconImage (image );
68- } catch (Exception e ) {
69- e .printStackTrace ();
70- }
74+ setIconImage (ICON );
7175 initFrameContents ();
7276 pack ();
7377 setMinimumSize (getMinimumSize ());
@@ -92,34 +96,8 @@ public void componentResized(ComponentEvent componentEvent) {
9296 });
9397
9498 for (TaskMode task : MainGUI .TASKS ) {
95- TaskButton button ;
96- if (task == TaskMode .DECOMPILE ) {
97- ActionListener defaultActionListener = event -> operateOnThread (() -> {
98- int response = 0 ;
99- if (TaskMode .RECOMPILE .isAvailable (mcp , mcp .getSide ())) {
100- response = JOptionPane .showConfirmDialog (this , "Are you sure you want to delete sources and decompile again?" , "Confirm Action" , JOptionPane .YES_NO_OPTION );
101- }
102- if (response == 0 ) {
103- mcp .performTask (TaskMode .DECOMPILE , mcp .getSide ());
104- }
105- });
106- button = new TaskButton (this , task , defaultActionListener );
107- }
108- else if (task == TaskMode .UPDATE_MD5 ) {
109- ActionListener defaultActionListener = event -> operateOnThread (() -> {
110- int response = JOptionPane .showConfirmDialog (this , "Are you sure you want to regenerate original hashes?" , "Confirm Action" , JOptionPane .YES_NO_OPTION );
111- if (response == 0 ) {
112- mcp .performTask (task , mcp .getSide ());
113- }
114- });
115- button = new TaskButton (this , task , defaultActionListener );
116- }
117- else {
118- button = new TaskButton (this , task );
119- }
120- button .setPreferredSize (new Dimension (110 , 30 ));
99+ TaskButton button = mcp .getButton (task );
121100 buttons .add (button );
122- button .setEnabled (false );
123101 topLeftContainer .add (button );
124102 }
125103
@@ -160,8 +138,8 @@ else if(task == TaskMode.UPDATE_MD5) {
160138
161139 public void reloadVersionList () {
162140
163- this . verLabel = new JLabel ("Current version:" );
164- this . verList = new JComboBox <>(new String [] {"Loading..." });
141+ verLabel = new JLabel ("Current version:" );
142+ verList = new JComboBox <>(new String [] {"Loading..." });
165143 verLabel .setEnabled (false );
166144 verList .setEnabled (false );
167145 topRightContainer .removeAll ();
@@ -170,8 +148,8 @@ public void reloadVersionList() {
170148 operateOnThread (() -> {
171149 try {
172150 loadingVersions = true ;
173- this . verList = new JComboBox <>(VersionsParser .getVersionList ().toArray (new String [0 ]));
174- this . verList .addPopupMenuListener (new PopupMenuListener () {
151+ verList = new JComboBox <>(VersionsParser .getVersionList ().toArray (new String [0 ]));
152+ verList .addPopupMenuListener (new PopupMenuListener () {
175153
176154 @ Override
177155 public void popupMenuWillBecomeVisible (PopupMenuEvent e ) {
@@ -201,31 +179,34 @@ public void popupMenuCanceled(PopupMenuEvent e) {
201179
202180 });
203181 if (Files .exists (MCPPaths .get (mcp , MCPPaths .VERSION ))) {
204- setCurrentVersion (mcp . currentVersion = VersionsParser .setCurrentVersion (mcp , new String (Files .readAllBytes (MCPPaths .get (mcp , MCPPaths .VERSION )))));
182+ setCurrentVersion (VersionsParser .setCurrentVersion (mcp , new String (Files .readAllBytes (MCPPaths .get (mcp , MCPPaths .VERSION )))));
205183 }
206184 else {
207- setCurrentVersion (mcp . currentVersion = null );
185+ setCurrentVersion (null );
208186 }
209- this .verList .setMaximumRowCount (20 );
210- this .verLabel = new JLabel ("Current version:" );
211- topRightContainer .removeAll ();
212- topRightContainer .add (this .verLabel );
213- topRightContainer .add (this .verList );
187+ verList .setMaximumRowCount (20 );
188+ verLabel = new JLabel ("Current version:" );
214189 } catch (Exception e ) {
215190 verLabel = new JLabel ("Unable to get version list!" );
216191 verLabel .setBorder (new EmptyBorder (4 , 0 , 0 , 2 ));
217192 verLabel .setForeground (Color .RED );
218- topRightContainer .removeAll ();
219- topRightContainer .add (verLabel );
193+ verList = null ;
220194 }
221- loadingVersions = false ;
222- synchronized ( mcp ) {
223- if ( mcp . isActive ) {
224- if (verList != null ) verList . setEnabled ( true );
225- verLabel . setEnabled ( true );
195+ SwingUtilities . invokeLater (() -> {
196+ topRightContainer . removeAll ();
197+ topRightContainer . add ( this . verLabel );
198+ if (verList != null ) {
199+ topRightContainer . add ( this . verList );
226200 }
227- }
228- topRightContainer .updateUI ();
201+ loadingVersions = false ;
202+ synchronized (mcp ) {
203+ if (mcp .isActive ) {
204+ if (verList != null ) verList .setEnabled (true );
205+ verLabel .setEnabled (true );
206+ }
207+ }
208+ topRightContainer .updateUI ();
209+ });
229210 });
230211 }
231212
@@ -247,6 +228,7 @@ public void setAllButtonsInactive() {
247228 }
248229
249230 public void setCurrentVersion (String version ) {
231+ mcp .currentVersion = version ;
250232 verList .setSelectedItem (version );
251233 verList .repaint ();
252234 }
0 commit comments