1717import javax .swing .filechooser .FileFilter ;
1818import java .awt .*;
1919import java .awt .event .*;
20+ import java .beans .PropertyVetoException ;
2021import java .io .File ;
2122import java .util .*;
2223import java .util .List ;
2829 */
2930public class MainViewerGUI extends JFrame implements FileChangeNotifier , IPersistentWindow
3031{
32+ public boolean isMaximized = false ;
33+ public Point unmaximizedPos ;
34+ public Dimension unmaximizedSize ;
35+
36+ private static final Color COLOR_DESKTOP_BACKGROUND = new Color (58 , 110 , 165 );
37+ public JDesktopPane desktop ;
38+ public static ArrayList <VisibleComponent > rfComps = new ArrayList <>();
39+ public FileNavigationPane navigator ;
40+ public WorkPane workPane ;
41+
42+ public AboutWindow aboutWindow = new AboutWindow ();
43+ public IntroWindow introWindow = new IntroWindow ();
44+
45+ public final ButtonGroup panelGroup1 = new ButtonGroup ();
46+ public final ButtonGroup panelGroup2 = new ButtonGroup ();
47+ public final ButtonGroup panelGroup3 = new ButtonGroup ();
48+ public List <ButtonGroup > allPanes = Collections .unmodifiableList (Arrays .asList (panelGroup1 , panelGroup2 , panelGroup3 ));
49+
50+ public Map <ButtonGroup , Map <JRadioButtonMenuItem , Decompiler >> allDecompilers = new HashMap <>();
51+ public Map <ButtonGroup , Map <Decompiler , JRadioButtonMenuItem >> allDecompilersRev = new HashMap <>();
52+ public Map <ButtonGroup , Map <Decompiler , JCheckBoxMenuItem >> editButtons = new HashMap <>();
53+
54+ public final JMenuItem mntmNewWorkspace = new JMenuItem ("New Workspace" );
55+ public JMenu mnRecentFiles = new JMenu ("Recent Files" );
56+ public final JMenuItem mntmDecompileSaveAllClasses = new JMenuItem ("Decompile & Save All Classes.." );
57+ public final JMenuItem mntmAbout = new JMenuItem ("About" );
58+ public final JMenuItem mntmIntro = new JMenuItem ("Help" );
59+ public final JMenuItem mntmSaveAsRunnableJar = new JMenuItem ("Save As Runnable Jar.." );
60+ public final JCheckBoxMenuItem mntmUpdateCheck = new JCheckBoxMenuItem ("Update Check" );
61+ public final JMenuItem mntmDecompileSaveOpenedClasses = new JMenuItem ("Decompile & Save Opened Class.." );
62+ public final JCheckBoxMenuItem refreshOnChange = new JCheckBoxMenuItem ("Refresh On View Change" );
63+ public final JCheckBox mnShowContainer = new JCheckBox ("Show Containing File's Name" );
64+ public final JCheckBox mnSnapToEdges = new JCheckBox ("Snap Windows to Edges" );
65+ public final JMenuItem mntmSetOptionalLibrary = new JMenuItem ("Set Optional Library Folder" );
66+ public final JMenu mnFontSize = new JMenu ("Font Size" );
67+ public final JMenuItem mntmReloadResources = new JMenuItem ("Reload Resources" );
68+
69+ public final JMenuBar menuBar ;
70+ public final JMenu viewMenu ;
71+ public final JMenu fileMenu ;
72+ public final JMenu windowMenu ;
73+ public final JMenu settingsMenu ;
74+
3175 public void setOptionalLibrary ()
3276 {
3377 final JTextField text = new JTextField ();
@@ -88,28 +132,22 @@ private JMenu generatePane(int id)
88132 JMenu menu = new JMenu ("Pane " + (id + 1 ));
89133 JRadioButtonMenuItem none = new JRadioButtonMenuItem ("None" );
90134 JRadioButtonMenuItem bytecode = new JRadioButtonMenuItem ("Bytecode" );
91- JRadioButtonMenuItem hexcode = new JRadioButtonMenuItem ("Hex Dump" );
92135 ButtonGroup group = allPanes .get (id );
93136
94137 group .add (none );
95138 group .add (bytecode );
96- group .add (hexcode );
97139 allDecompilers .get (group ).put (none , null );
98140 allDecompilersRev .get (group ).put (null , none );
99141 allDecompilers .get (group ).put (bytecode , Decompiler .BYTECODE );
100142 allDecompilersRev .get (group ).put (Decompiler .BYTECODE , bytecode );
101- allDecompilers .get (group ).put (hexcode , Decompiler .HEXCODE );
102- allDecompilersRev .get (group ).put (Decompiler .HEXCODE , hexcode );
103143
104144 menu .add (none );
105145 menu .add (new JSeparator ());
106146 menu .add (generateDecompilerMenu (Decompiler .PROCYON , id ));
107147 menu .add (generateDecompilerMenu (Decompiler .CFR , id ));
108148 menu .add (generateDecompilerMenu (Decompiler .FERNFLOWER , id ));
109149 menu .add (new JSeparator ());
110- menu .add (new JSeparator ());
111150 menu .add (bytecode );
112- menu .add (hexcode );
113151 return menu ;
114152 }
115153
@@ -157,42 +195,6 @@ else if (e.getID() == KeyEvent.KEY_RELEASED)
157195 }
158196 }
159197
160- public boolean isMaximized = false ;
161- public Point unmaximizedPos ;
162- public Dimension unmaximizedSize ;
163-
164- private static final Color COLOR_DESKTOP_BACKGROUND = new Color (58 , 110 , 165 );
165- public JDesktopPane desktop ;
166- public static ArrayList <VisibleComponent > rfComps = new ArrayList <>();
167- public FileNavigationPane navigator ;
168- public WorkPane workPane ;
169-
170- public AboutWindow aboutWindow = new AboutWindow ();
171- public IntroWindow introWindow = new IntroWindow ();
172-
173- public final ButtonGroup panelGroup1 = new ButtonGroup ();
174- public final ButtonGroup panelGroup2 = new ButtonGroup ();
175- public final ButtonGroup panelGroup3 = new ButtonGroup ();
176- public List <ButtonGroup > allPanes = Collections .unmodifiableList (Arrays .asList (panelGroup1 , panelGroup2 , panelGroup3 ));
177-
178- public Map <ButtonGroup , Map <JRadioButtonMenuItem , Decompiler >> allDecompilers = new HashMap <>();
179- public Map <ButtonGroup , Map <Decompiler , JRadioButtonMenuItem >> allDecompilersRev = new HashMap <>();
180- public Map <ButtonGroup , Map <Decompiler , JCheckBoxMenuItem >> editButtons = new HashMap <>();
181-
182- public final JMenuItem mntmNewWorkspace = new JMenuItem ("New Workspace" );
183- public JMenu mnRecentFiles = new JMenu ("Recent Files" );
184- public final JMenuItem mntmDecompileSaveAllClasses = new JMenuItem ("Decompile & Save All Classes.." );
185- public final JMenuItem mntmAbout = new JMenuItem ("About" );
186- public final JMenuItem mntmIntro = new JMenuItem ("Help" );
187- public final JMenuItem mntmSaveAsRunnableJar = new JMenuItem ("Save As Runnable Jar.." );
188- public final JCheckBoxMenuItem mntmUpdateCheck = new JCheckBoxMenuItem ("Update Check" );
189- public final JMenuItem mntmDecompileSaveOpenedClasses = new JMenuItem ("Decompile & Save Opened Class.." );
190- public final JCheckBoxMenuItem refreshOnChange = new JCheckBoxMenuItem ("Refresh On View Change" );
191- public final JCheckBox mnShowContainer = new JCheckBox ("Show Containing File's Name" );
192- private final JMenuItem mntmSetOptionalLibrary = new JMenuItem ("Set Optional Library Folder" );
193- private final JMenu mnFontSize = new JMenu ("Font Size" );
194- private final JMenuItem mntmReloadResources = new JMenuItem ("Reload Resources" );
195-
196198 public MainViewerGUI ()
197199 {
198200 initializeWindows ();
@@ -231,7 +233,6 @@ else if ((oldState & Frame.ICONIFIED) != 0 && (newState & Frame.ICONIFIED) == 0)
231233 }
232234 else if ((oldState & Frame .MAXIMIZED_BOTH ) != 0 && (newState & Frame .MAXIMIZED_BOTH ) == 0 )
233235 {
234- isMaximized = false ;
235236 setSize (unmaximizedSize );
236237 setLocation (unmaximizedPos );
237238 }
@@ -258,10 +259,11 @@ public void componentMoved(ComponentEvent e)
258259
259260 this .setIconImages (Resources .iconList );
260261
261- JMenuBar menuBar = new JMenuBar ();
262- JMenu fileMenu = new JMenu ("File" );
263- JMenu viewMenu = new JMenu ("View" );
264- JMenu settingsMenu = new JMenu ("Settings" );
262+ menuBar = new JMenuBar ();
263+ fileMenu = new JMenu ("File" );
264+ viewMenu = new JMenu ("View" );
265+ windowMenu = new JMenu ("Window" );
266+ settingsMenu = new JMenu ("Settings" );
265267 setJMenuBar (menuBar );
266268
267269 setDefaultCloseOperation (WindowConstants .EXIT_ON_CLOSE );
@@ -318,6 +320,29 @@ public void componentMoved(ComponentEvent e)
318320 viewMenu .add (generatePane (1 ));
319321 viewMenu .add (generatePane (2 ));
320322
323+ for (VisibleComponent frame : rfComps )
324+ {
325+ JMenuItem button = new JMenuItem (frame .getName ());
326+ button .addActionListener (e -> {
327+ try
328+ {
329+ frame .setIcon (false );
330+ frame .setVisible (true );
331+ }
332+ catch (PropertyVetoException e1 )
333+ {
334+ }
335+ });
336+ windowMenu .add (button );
337+ }
338+ windowMenu .add (new JSeparator ());
339+
340+ mnSnapToEdges .setSelected (Settings .SNAP_TO_EDGES .getBool ());
341+ mnSnapToEdges .addItemListener (e -> Settings .SNAP_TO_EDGES .set (mnSnapToEdges .isSelected ()));
342+ windowMenu .add (mnSnapToEdges );
343+
344+ menuBar .add (windowMenu );
345+
321346 settingsMenu .add (refreshOnChange );
322347
323348 settingsMenu .add (new JSeparator ());
@@ -367,7 +392,6 @@ public void componentMoved(ComponentEvent e)
367392 settingsMenu .add (bytecodeSettingsMenu );
368393
369394 menuBar .add (settingsMenu );
370-
371395 menuBar .add (spinnerMenu );
372396
373397 if (JDA .previewCopy )
0 commit comments