summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui/elements
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui/elements')
-rw-r--r--src/main/java/cuchaz/enigma/gui/elements/MenuBar.java400
-rw-r--r--src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java139
2 files changed, 262 insertions, 277 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
index 0ccd537..cd11aca 100644
--- a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
+++ b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java
@@ -1,219 +1,207 @@
1package cuchaz.enigma.gui.elements; 1package cuchaz.enigma.gui.elements;
2 2
3import cuchaz.enigma.gui.Gui;
4import cuchaz.enigma.gui.dialog.AboutDialog;
5import cuchaz.enigma.throwables.MappingParseException;
6
7import javax.swing.*;
3import java.awt.event.InputEvent; 8import java.awt.event.InputEvent;
4import java.awt.event.KeyEvent; 9import java.awt.event.KeyEvent;
5import java.io.IOException; 10import java.io.IOException;
6import java.util.jar.JarFile; 11import java.util.jar.JarFile;
7 12
8import javax.swing.*;
9
10import cuchaz.enigma.gui.Gui;
11import cuchaz.enigma.gui.dialog.AboutDialog;
12import cuchaz.enigma.throwables.MappingParseException;
13
14public class MenuBar extends JMenuBar { 13public class MenuBar extends JMenuBar {
15 14
16 private final Gui gui; 15 public final JMenuItem closeJarMenu;
17 16 public final JMenuItem openEnigmaMappingsMenu;
18 public final JMenuItem closeJarMenu; 17 public final JMenuItem saveMappingsMenu;
19 18 public final JMenuItem saveMappingEnigmaFileMenu;
20 public final JMenuItem openEnigmaMappingsMenu; 19 public final JMenuItem saveMappingEnigmaDirectoryMenu;
21 20 public final JMenuItem saveMappingsSrgMenu;
22 public final JMenuItem saveMappingsMenu; 21 public final JMenuItem closeMappingsMenu;
23 public final JMenuItem saveMappingEnigmaFileMenu; 22 public final JMenuItem rebuildMethodNamesMenu;
24 public final JMenuItem saveMappingEnigmaDirectoryMenu; 23 public final JMenuItem exportSourceMenu;
25 public final JMenuItem saveMappingsSrgMenu; 24 public final JMenuItem exportJarMenu;
26 public final JMenuItem closeMappingsMenu; 25 private final Gui gui;
27
28 public final JMenuItem rebuildMethodNamesMenu;
29
30 public final JMenuItem exportSourceMenu;
31 public final JMenuItem exportJarMenu;
32 26
33 public MenuBar(Gui gui) { 27 public MenuBar(Gui gui) {
34 this.gui = gui; 28 this.gui = gui;
35 29
36 { 30 {
37 JMenu menu = new JMenu("File"); 31 JMenu menu = new JMenu("File");
38 this.add(menu); 32 this.add(menu);
39 { 33 {
40 JMenuItem item = new JMenuItem("Open Jar..."); 34 JMenuItem item = new JMenuItem("Open Jar...");
41 menu.add(item); 35 menu.add(item);
42 item.addActionListener(event -> { 36 item.addActionListener(event -> {
43 if (this.gui.jarFileChooser.showOpenDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { 37 if (this.gui.jarFileChooser.showOpenDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
44 // load the jar in a separate thread 38 // load the jar in a separate thread
45 new Thread(() -> 39 new Thread(() ->
46 { 40 {
47 try { 41 try {
48 gui.getController().openJar(new JarFile(gui.jarFileChooser.getSelectedFile())); 42 gui.getController().openJar(new JarFile(gui.jarFileChooser.getSelectedFile()));
49 } catch (IOException ex) { 43 } catch (IOException ex) {
50 throw new Error(ex); 44 throw new Error(ex);
51 } 45 }
52 }).start(); 46 }).start();
53 } 47 }
54 }); 48 });
55 } 49 }
56 { 50 {
57 JMenuItem item = new JMenuItem("Close Jar"); 51 JMenuItem item = new JMenuItem("Close Jar");
58 menu.add(item); 52 menu.add(item);
59 item.addActionListener(event -> this.gui.getController().closeJar()); 53 item.addActionListener(event -> this.gui.getController().closeJar());
60 this.closeJarMenu = item; 54 this.closeJarMenu = item;
61 } 55 }
62 menu.addSeparator(); 56 menu.addSeparator();
63 JMenu openMenu = new JMenu("Open Mappings..."); 57 JMenu openMenu = new JMenu("Open Mappings...");
64 menu.add(openMenu); 58 menu.add(openMenu);
65 { 59 {
66 JMenuItem item = new JMenuItem("Enigma"); 60 JMenuItem item = new JMenuItem("Enigma");
67 openMenu.add(item); 61 openMenu.add(item);
68 item.addActionListener(event -> { 62 item.addActionListener(event -> {
69 if (this.gui.enigmaMappingsFileChooser.showOpenDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { 63 if (this.gui.enigmaMappingsFileChooser.showOpenDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
70 try { 64 try {
71 this.gui.getController().openEnigmaMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile()); 65 this.gui.getController().openEnigmaMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile());
72 } catch (IOException ex) { 66 } catch (IOException ex) {
73 throw new Error(ex); 67 throw new Error(ex);
74 } catch (MappingParseException ex) { 68 } catch (MappingParseException ex) {
75 JOptionPane.showMessageDialog(this.gui.getFrame(), ex.getMessage()); 69 JOptionPane.showMessageDialog(this.gui.getFrame(), ex.getMessage());
76 } 70 }
77 } 71 }
78 }); 72 });
79 this.openEnigmaMappingsMenu = item; 73 this.openEnigmaMappingsMenu = item;
80 } 74 }
81 { 75 {
82 JMenuItem item = new JMenuItem("Save Mappings"); 76 JMenuItem item = new JMenuItem("Save Mappings");
83 menu.add(item); 77 menu.add(item);
84 item.addActionListener(event -> { 78 item.addActionListener(event -> {
85 try { 79 try {
86 this.gui.getController().saveMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile()); 80 this.gui.getController().saveMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile());
87 } catch (IOException ex) { 81 } catch (IOException ex) {
88 throw new Error(ex); 82 throw new Error(ex);
89 } 83 }
90 }); 84 });
91 item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK)); 85 item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
92 this.saveMappingsMenu = item; 86 this.saveMappingsMenu = item;
93 } 87 }
94 JMenu saveMenu = new JMenu("Save Mappings As..."); 88 JMenu saveMenu = new JMenu("Save Mappings As...");
95 menu.add(saveMenu); 89 menu.add(saveMenu);
96 { 90 {
97 JMenuItem item = new JMenuItem("Enigma (single file)"); 91 JMenuItem item = new JMenuItem("Enigma (single file)");
98 saveMenu.add(item); 92 saveMenu.add(item);
99 item.addActionListener(event -> { 93 item.addActionListener(event -> {
100 // TODO: Use a specific file chooser for it 94 // TODO: Use a specific file chooser for it
101 if (this.gui.enigmaMappingsFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { 95 if (this.gui.enigmaMappingsFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
102 try { 96 try {
103 this.gui.getController().saveEnigmaMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile(), false); 97 this.gui.getController().saveEnigmaMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile(), false);
104 this.saveMappingsMenu.setEnabled(true); 98 this.saveMappingsMenu.setEnabled(true);
105 } catch (IOException ex) { 99 } catch (IOException ex) {
106 throw new Error(ex); 100 throw new Error(ex);
107 } 101 }
108 } 102 }
109 }); 103 });
110 this.saveMappingEnigmaFileMenu = item; 104 this.saveMappingEnigmaFileMenu = item;
111 } 105 }
112 { 106 {
113 JMenuItem item = new JMenuItem("Enigma (directory)"); 107 JMenuItem item = new JMenuItem("Enigma (directory)");
114 saveMenu.add(item); 108 saveMenu.add(item);
115 item.addActionListener(event -> { 109 item.addActionListener(event -> {
116 // TODO: Use a specific file chooser for it 110 // TODO: Use a specific file chooser for it
117 if (this.gui.enigmaMappingsFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { 111 if (this.gui.enigmaMappingsFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
118 try { 112 try {
119 this.gui.getController().saveEnigmaMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile(), true); 113 this.gui.getController().saveEnigmaMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile(), true);
120 this.saveMappingsMenu.setEnabled(true); 114 this.saveMappingsMenu.setEnabled(true);
121 } catch (IOException ex) { 115 } catch (IOException ex) {
122 throw new Error(ex); 116 throw new Error(ex);
123 } 117 }
124 } 118 }
125 }); 119 });
126 item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK)); 120 item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
127 this.saveMappingEnigmaDirectoryMenu = item; 121 this.saveMappingEnigmaDirectoryMenu = item;
128 } 122 }
129 { 123 {
130 JMenuItem item = new JMenuItem("SRG (single file)"); 124 JMenuItem item = new JMenuItem("SRG (single file)");
131 saveMenu.add(item); 125 saveMenu.add(item);
132 item.addActionListener(event -> { 126 item.addActionListener(event -> {
133 // TODO: Use a specific file chooser for it 127 // TODO: Use a specific file chooser for it
134 if (this.gui.enigmaMappingsFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { 128 if (this.gui.enigmaMappingsFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
135 try { 129 try {
136 this.gui.getController().saveSRGMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile()); 130 this.gui.getController().saveSRGMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile());
137 this.saveMappingsMenu.setEnabled(true); 131 this.saveMappingsMenu.setEnabled(true);
138 } catch (IOException ex) { 132 } catch (IOException ex) {
139 throw new Error(ex); 133 throw new Error(ex);
140 } 134 }
141 } 135 }
142 }); 136 });
143 this.saveMappingsSrgMenu = item; 137 this.saveMappingsSrgMenu = item;
144 } 138 }
145 { 139 {
146 JMenuItem item = new JMenuItem("Close Mappings"); 140 JMenuItem item = new JMenuItem("Close Mappings");
147 menu.add(item); 141 menu.add(item);
148 item.addActionListener(event -> { 142 item.addActionListener(event -> {
149 if (this.gui.getController().isDirty()) 143 if (this.gui.getController().isDirty()) {
150 { 144 this.gui.showDiscardDiag((response -> {
151 this.gui.showDiscardDiag((response -> { 145 if (response == JOptionPane.YES_OPTION) {
152 if (response == JOptionPane.YES_OPTION) 146 try {
153 { 147 gui.saveMapping();
154 try 148 this.gui.getController().closeMappings();
155 { 149 } catch (IOException e) {
156 gui.saveMapping(); 150 throw new Error(e);
157 this.gui.getController().closeMappings(); 151 }
158 } catch (IOException e) 152 } else if (response == JOptionPane.NO_OPTION)
159 { 153 this.gui.getController().closeMappings();
160 throw new Error(e); 154 return null;
161 } 155 }), "Save and close", "Discard changes", "Cancel");
162 } 156 } else
163 else if (response == JOptionPane.NO_OPTION) 157 this.gui.getController().closeMappings();
164 this.gui.getController().closeMappings();
165 return null;
166 }), "Save and close", "Discard changes", "Cancel");
167 }
168 else
169 this.gui.getController().closeMappings();
170 158
171 }); 159 });
172 this.closeMappingsMenu = item; 160 this.closeMappingsMenu = item;
173 } 161 }
174 menu.addSeparator(); 162 menu.addSeparator();
175 { 163 {
176 JMenuItem item = new JMenuItem("Rebuild Method Names"); 164 JMenuItem item = new JMenuItem("Rebuild Method Names");
177 menu.add(item); 165 menu.add(item);
178 item.addActionListener(event -> this.gui.getController().rebuildMethodNames()); 166 item.addActionListener(event -> this.gui.getController().rebuildMethodNames());
179 this.rebuildMethodNamesMenu = item; 167 this.rebuildMethodNamesMenu = item;
180 } 168 }
181 menu.addSeparator(); 169 menu.addSeparator();
182 { 170 {
183 JMenuItem item = new JMenuItem("Export Source..."); 171 JMenuItem item = new JMenuItem("Export Source...");
184 menu.add(item); 172 menu.add(item);
185 item.addActionListener(event -> { 173 item.addActionListener(event -> {
186 if (this.gui.exportSourceFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { 174 if (this.gui.exportSourceFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
187 this.gui.getController().exportSource(this.gui.exportSourceFileChooser.getSelectedFile()); 175 this.gui.getController().exportSource(this.gui.exportSourceFileChooser.getSelectedFile());
188 } 176 }
189 }); 177 });
190 this.exportSourceMenu = item; 178 this.exportSourceMenu = item;
191 } 179 }
192 { 180 {
193 JMenuItem item = new JMenuItem("Export Jar..."); 181 JMenuItem item = new JMenuItem("Export Jar...");
194 menu.add(item); 182 menu.add(item);
195 item.addActionListener(event -> { 183 item.addActionListener(event -> {
196 if (this.gui.exportJarFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { 184 if (this.gui.exportJarFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) {
197 this.gui.getController().exportJar(this.gui.exportJarFileChooser.getSelectedFile()); 185 this.gui.getController().exportJar(this.gui.exportJarFileChooser.getSelectedFile());
198 } 186 }
199 }); 187 });
200 this.exportJarMenu = item; 188 this.exportJarMenu = item;
201 } 189 }
202 menu.addSeparator(); 190 menu.addSeparator();
203 { 191 {
204 JMenuItem item = new JMenuItem("Exit"); 192 JMenuItem item = new JMenuItem("Exit");
205 menu.add(item); 193 menu.add(item);
206 item.addActionListener(event -> this.gui.close()); 194 item.addActionListener(event -> this.gui.close());
207 } 195 }
208 } 196 }
209 { 197 {
210 JMenu menu = new JMenu("Help"); 198 JMenu menu = new JMenu("Help");
211 this.add(menu); 199 this.add(menu);
212 { 200 {
213 JMenuItem item = new JMenuItem("About"); 201 JMenuItem item = new JMenuItem("About");
214 menu.add(item); 202 menu.add(item);
215 item.addActionListener(event -> AboutDialog.show(this.gui.getFrame())); 203 item.addActionListener(event -> AboutDialog.show(this.gui.getFrame()));
216 } 204 }
217 } 205 }
218 } 206 }
219} 207}
diff --git a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java
index e387ed3..2f6d96c 100644
--- a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java
+++ b/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java
@@ -1,79 +1,76 @@
1package cuchaz.enigma.gui.elements; 1package cuchaz.enigma.gui.elements;
2 2
3import java.awt.event.KeyEvent;
4
5import javax.swing.JMenuItem;
6import javax.swing.JPopupMenu;
7import javax.swing.KeyStroke;
8
9import cuchaz.enigma.gui.Gui; 3import cuchaz.enigma.gui.Gui;
10 4
5import javax.swing.*;
6import java.awt.event.KeyEvent;
7
11public class PopupMenuBar extends JPopupMenu { 8public class PopupMenuBar extends JPopupMenu {
12 9
13 public final JMenuItem renameMenu; 10 public final JMenuItem renameMenu;
14 public final JMenuItem showInheritanceMenu; 11 public final JMenuItem showInheritanceMenu;
15 public final JMenuItem showImplementationsMenu; 12 public final JMenuItem showImplementationsMenu;
16 public final JMenuItem showCallsMenu; 13 public final JMenuItem showCallsMenu;
17 public final JMenuItem openEntryMenu; 14 public final JMenuItem openEntryMenu;
18 public final JMenuItem openPreviousMenu; 15 public final JMenuItem openPreviousMenu;
19 public final JMenuItem toggleMappingMenu; 16 public final JMenuItem toggleMappingMenu;
20 17
21 public PopupMenuBar(Gui gui) { 18 public PopupMenuBar(Gui gui) {
22 { 19 {
23 JMenuItem menu = new JMenuItem("Rename"); 20 JMenuItem menu = new JMenuItem("Rename");
24 menu.addActionListener(event -> gui.startRename()); 21 menu.addActionListener(event -> gui.startRename());
25 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, 0)); 22 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, 0));
26 menu.setEnabled(false); 23 menu.setEnabled(false);
27 this.add(menu); 24 this.add(menu);
28 this.renameMenu = menu; 25 this.renameMenu = menu;
29 } 26 }
30 { 27 {
31 JMenuItem menu = new JMenuItem("Show Inheritance"); 28 JMenuItem menu = new JMenuItem("Show Inheritance");
32 menu.addActionListener(event -> gui.showInheritance()); 29 menu.addActionListener(event -> gui.showInheritance());
33 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, 0)); 30 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, 0));
34 menu.setEnabled(false); 31 menu.setEnabled(false);
35 this.add(menu); 32 this.add(menu);
36 this.showInheritanceMenu = menu; 33 this.showInheritanceMenu = menu;
37 } 34 }
38 { 35 {
39 JMenuItem menu = new JMenuItem("Show Implementations"); 36 JMenuItem menu = new JMenuItem("Show Implementations");
40 menu.addActionListener(event -> gui.showImplementations()); 37 menu.addActionListener(event -> gui.showImplementations());
41 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, 0)); 38 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, 0));
42 menu.setEnabled(false); 39 menu.setEnabled(false);
43 this.add(menu); 40 this.add(menu);
44 this.showImplementationsMenu = menu; 41 this.showImplementationsMenu = menu;
45 } 42 }
46 { 43 {
47 JMenuItem menu = new JMenuItem("Show Calls"); 44 JMenuItem menu = new JMenuItem("Show Calls");
48 menu.addActionListener(event -> gui.showCalls()); 45 menu.addActionListener(event -> gui.showCalls());
49 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, 0)); 46 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, 0));
50 menu.setEnabled(false); 47 menu.setEnabled(false);
51 this.add(menu); 48 this.add(menu);
52 this.showCallsMenu = menu; 49 this.showCallsMenu = menu;
53 } 50 }
54 { 51 {
55 JMenuItem menu = new JMenuItem("Go to Declaration"); 52 JMenuItem menu = new JMenuItem("Go to Declaration");
56 menu.addActionListener(event -> gui.navigateTo(gui.reference.entry)); 53 menu.addActionListener(event -> gui.navigateTo(gui.reference.entry));
57 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, 0)); 54 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, 0));
58 menu.setEnabled(false); 55 menu.setEnabled(false);
59 this.add(menu); 56 this.add(menu);
60 this.openEntryMenu = menu; 57 this.openEntryMenu = menu;
61 } 58 }
62 { 59 {
63 JMenuItem menu = new JMenuItem("Go to previous"); 60 JMenuItem menu = new JMenuItem("Go to previous");
64 menu.addActionListener(event -> gui.getController().openPreviousReference()); 61 menu.addActionListener(event -> gui.getController().openPreviousReference());
65 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, 0)); 62 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, 0));
66 menu.setEnabled(false); 63 menu.setEnabled(false);
67 this.add(menu); 64 this.add(menu);
68 this.openPreviousMenu = menu; 65 this.openPreviousMenu = menu;
69 } 66 }
70 { 67 {
71 JMenuItem menu = new JMenuItem("Mark as deobfuscated"); 68 JMenuItem menu = new JMenuItem("Mark as deobfuscated");
72 menu.addActionListener(event -> gui.toggleMapping()); 69 menu.addActionListener(event -> gui.toggleMapping());
73 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, 0)); 70 menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, 0));
74 menu.setEnabled(false); 71 menu.setEnabled(false);
75 this.add(menu); 72 this.add(menu);
76 this.toggleMappingMenu = menu; 73 this.toggleMappingMenu = menu;
77 } 74 }
78 } 75 }
79} 76}