From 0f47403d0220757fed189b76e2071e25b1025cb8 Mon Sep 17 00:00:00 2001 From: Runemoro Date: Wed, 3 Jun 2020 13:39:42 -0400 Subject: Split GUI code to separate module (#242) * Split into modules * Post merge compile fixes Co-authored-by: modmuss50 --- .../enigma/gui/elements/CollapsibleTabbedPane.java | 40 --- .../java/cuchaz/enigma/gui/elements/MenuBar.java | 386 --------------------- .../cuchaz/enigma/gui/elements/PopupMenuBar.java | 125 ------- 3 files changed, 551 deletions(-) delete mode 100644 src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java delete mode 100644 src/main/java/cuchaz/enigma/gui/elements/MenuBar.java delete mode 100644 src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java (limited to 'src/main/java/cuchaz/enigma/gui/elements') diff --git a/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java b/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java deleted file mode 100644 index fb497b1..0000000 --- a/src/main/java/cuchaz/enigma/gui/elements/CollapsibleTabbedPane.java +++ /dev/null @@ -1,40 +0,0 @@ -package cuchaz.enigma.gui.elements; - -import java.awt.event.MouseEvent; - -import javax.swing.JTabbedPane; - -public class CollapsibleTabbedPane extends JTabbedPane { - - public CollapsibleTabbedPane() { - } - - public CollapsibleTabbedPane(int tabPlacement) { - super(tabPlacement); - } - - public CollapsibleTabbedPane(int tabPlacement, int tabLayoutPolicy) { - super(tabPlacement, tabLayoutPolicy); - } - - @Override - protected void processMouseEvent(MouseEvent e) { - int id = e.getID(); - if (id == MouseEvent.MOUSE_PRESSED) { - if (!isEnabled()) return; - int tabIndex = getUI().tabForCoordinate(this, e.getX(), e.getY()); - if (tabIndex >= 0 && isEnabledAt(tabIndex)) { - if (tabIndex == getSelectedIndex()) { - if (isFocusOwner() && isRequestFocusEnabled()) { - requestFocus(); - } else { - setSelectedIndex(-1); - } - return; - } - } - } - super.processMouseEvent(e); - } - -} diff --git a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java deleted file mode 100644 index dc2cf8f..0000000 --- a/src/main/java/cuchaz/enigma/gui/elements/MenuBar.java +++ /dev/null @@ -1,386 +0,0 @@ -package cuchaz.enigma.gui.elements; - -import cuchaz.enigma.config.Config; -import cuchaz.enigma.config.Themes; -import cuchaz.enigma.gui.Gui; -import cuchaz.enigma.gui.dialog.AboutDialog; -import cuchaz.enigma.gui.dialog.ChangeDialog; -import cuchaz.enigma.gui.dialog.ConnectToServerDialog; -import cuchaz.enigma.gui.dialog.CreateServerDialog; -import cuchaz.enigma.gui.dialog.StatsDialog; -import cuchaz.enigma.gui.util.ScaleUtil; -import cuchaz.enigma.translation.mapping.serde.MappingFormat; -import cuchaz.enigma.utils.I18n; -import cuchaz.enigma.utils.Pair; - -import java.awt.Desktop; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.*; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; -import javax.swing.*; - -public class MenuBar extends JMenuBar { - - public final JMenuItem closeJarMenu; - public final List openMappingsMenus; - public final JMenuItem saveMappingsMenu; - public final List saveMappingsMenus; - public final JMenuItem closeMappingsMenu; - public final JMenuItem dropMappingsMenu; - public final JMenuItem exportSourceMenu; - public final JMenuItem exportJarMenu; - public final JMenuItem connectToServerMenu; - public final JMenuItem startServerMenu; - private final Gui gui; - - public MenuBar(Gui gui) { - this.gui = gui; - - /* - * File menu - */ - { - JMenu menu = new JMenu(I18n.translate("menu.file")); - this.add(menu); - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.jar.open")); - menu.add(item); - item.addActionListener(event -> { - this.gui.jarFileChooser.setVisible(true); - String file = this.gui.jarFileChooser.getFile(); - // checks if the file name is not empty - if (file != null) { - Path path = Paths.get(this.gui.jarFileChooser.getDirectory()).resolve(file); - // checks if the file name corresponds to an existing file - if (Files.exists(path)) { - gui.getController().openJar(path); - } - } - }); - } - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.jar.close")); - menu.add(item); - item.addActionListener(event -> this.gui.getController().closeJar()); - this.closeJarMenu = item; - } - menu.addSeparator(); - JMenu openMenu = new JMenu(I18n.translate("menu.file.mappings.open")); - menu.add(openMenu); - { - openMappingsMenus = new ArrayList<>(); - for (MappingFormat format : MappingFormat.values()) { - if (format.getReader() != null) { - JMenuItem item = new JMenuItem(I18n.translate("mapping_format." + format.name().toLowerCase(Locale.ROOT))); - openMenu.add(item); - item.addActionListener(event -> { - if (this.gui.enigmaMappingsFileChooser.showOpenDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { - File selectedFile = this.gui.enigmaMappingsFileChooser.getSelectedFile(); - this.gui.getController().openMappings(format, selectedFile.toPath()); - } - }); - openMappingsMenus.add(item); - } - } - } - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.mappings.save")); - menu.add(item); - item.addActionListener(event -> { - this.gui.getController().saveMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile().toPath()); - }); - item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK)); - this.saveMappingsMenu = item; - } - JMenu saveMenu = new JMenu(I18n.translate("menu.file.mappings.save_as")); - menu.add(saveMenu); - { - saveMappingsMenus = new ArrayList<>(); - for (MappingFormat format : MappingFormat.values()) { - if (format.getWriter() != null) { - JMenuItem item = new JMenuItem(I18n.translate("mapping_format." + format.name().toLowerCase(Locale.ROOT))); - saveMenu.add(item); - item.addActionListener(event -> { - // TODO: Use a specific file chooser for it - if (this.gui.enigmaMappingsFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { - this.gui.getController().saveMappings(this.gui.enigmaMappingsFileChooser.getSelectedFile().toPath(), format); - this.saveMappingsMenu.setEnabled(true); - } - }); - saveMappingsMenus.add(item); - } - } - } - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.mappings.close")); - menu.add(item); - item.addActionListener(event -> { - if (this.gui.getController().isDirty()) { - this.gui.showDiscardDiag((response -> { - if (response == JOptionPane.YES_OPTION) { - gui.saveMapping(); - this.gui.getController().closeMappings(); - } else if (response == JOptionPane.NO_OPTION) - this.gui.getController().closeMappings(); - return null; - }), I18n.translate("prompt.close.save"), I18n.translate("prompt.close.discard"), I18n.translate("prompt.close.cancel")); - } else - this.gui.getController().closeMappings(); - - }); - this.closeMappingsMenu = item; - } - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.mappings.drop")); - menu.add(item); - item.addActionListener(event -> this.gui.getController().dropMappings()); - this.dropMappingsMenu = item; - } - menu.addSeparator(); - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.export.source")); - menu.add(item); - item.addActionListener(event -> { - if (this.gui.exportSourceFileChooser.showSaveDialog(this.gui.getFrame()) == JFileChooser.APPROVE_OPTION) { - this.gui.getController().exportSource(this.gui.exportSourceFileChooser.getSelectedFile().toPath()); - } - }); - this.exportSourceMenu = item; - } - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.export.jar")); - menu.add(item); - item.addActionListener(event -> { - this.gui.exportJarFileChooser.setVisible(true); - if (this.gui.exportJarFileChooser.getFile() != null) { - Path path = Paths.get(this.gui.exportJarFileChooser.getDirectory(), this.gui.exportJarFileChooser.getFile()); - this.gui.getController().exportJar(path); - } - }); - this.exportJarMenu = item; - } - menu.addSeparator(); - { - JMenuItem stats = new JMenuItem(I18n.translate("menu.file.stats")); - menu.add(stats); - stats.addActionListener(event -> StatsDialog.show(this.gui)); - } - menu.addSeparator(); - { - JMenuItem item = new JMenuItem(I18n.translate("menu.file.exit")); - menu.add(item); - item.addActionListener(event -> this.gui.close()); - } - } - - /* - * Decompiler menu - */ - { - JMenu menu = new JMenu(I18n.translate("menu.decompiler")); - this.add(menu); - - ButtonGroup decompilerGroup = new ButtonGroup(); - - for (Config.Decompiler decompiler : Config.Decompiler.values()) { - JRadioButtonMenuItem decompilerButton = new JRadioButtonMenuItem(decompiler.name); - decompilerGroup.add(decompilerButton); - if (decompiler.equals(Config.getInstance().decompiler)) { - decompilerButton.setSelected(true); - } - menu.add(decompilerButton); - decompilerButton.addActionListener(event -> { - gui.getController().setDecompiler(decompiler.service); - - try { - Config.getInstance().decompiler = decompiler; - Config.getInstance().saveConfig(); - } catch (IOException e) { - throw new RuntimeException(e); - } - }); - } - } - - /* - * View menu - */ - { - JMenu menu = new JMenu(I18n.translate("menu.view")); - this.add(menu); - { - JMenu themes = new JMenu(I18n.translate("menu.view.themes")); - menu.add(themes); - ButtonGroup themeGroup = new ButtonGroup(); - for (Config.LookAndFeel lookAndFeel : Config.LookAndFeel.values()) { - JRadioButtonMenuItem themeButton = new JRadioButtonMenuItem(I18n.translate("menu.view.themes." + lookAndFeel.name().toLowerCase(Locale.ROOT))); - themeGroup.add(themeButton); - if (lookAndFeel.equals(Config.getInstance().lookAndFeel)) { - themeButton.setSelected(true); - } - themes.add(themeButton); - themeButton.addActionListener(event -> Themes.setLookAndFeel(gui, lookAndFeel)); - } - } - { - JMenu languages = new JMenu(I18n.translate("menu.view.languages")); - menu.add(languages); - ButtonGroup languageGroup = new ButtonGroup(); - for (String lang : I18n.getAvailableLanguages()) { - JRadioButtonMenuItem languageButton = new JRadioButtonMenuItem(I18n.getLanguageName(lang)); - languageGroup.add(languageButton); - if (lang.equals(Config.getInstance().language)) { - languageButton.setSelected(true); - } - languages.add(languageButton); - languageButton.addActionListener(event -> { - I18n.setLanguage(lang); - ChangeDialog.show(this.gui); - }); - } - } - { - JMenu scale = new JMenu(I18n.translate("menu.view.scale")); - { - ButtonGroup scaleGroup = new ButtonGroup(); - Map map = IntStream.of(100, 125, 150, 175, 200) - .mapToObj(scaleFactor -> { - float realScaleFactor = scaleFactor / 100f; - JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem(String.format("%d%%", scaleFactor)); - menuItem.addActionListener(event -> ScaleUtil.setScaleFactor(realScaleFactor)); - menuItem.addActionListener(event -> ChangeDialog.show(this.gui)); - scaleGroup.add(menuItem); - scale.add(menuItem); - return new Pair<>(realScaleFactor, menuItem); - }) - .collect(Collectors.toMap(x -> x.a, x -> x.b)); - - JMenuItem customScale = new JMenuItem(I18n.translate("menu.view.scale.custom")); - customScale.addActionListener(event -> { - String answer = (String) JOptionPane.showInputDialog(gui.getFrame(), I18n.translate("menu.view.scale.custom.title"), I18n.translate("menu.view.scale.custom.title"), - JOptionPane.QUESTION_MESSAGE, null, null, Float.toString(ScaleUtil.getScaleFactor() * 100)); - if (answer == null) return; - float newScale = 1.0f; - try { - newScale = Float.parseFloat(answer) / 100f; - } catch (NumberFormatException ignored) { - } - ScaleUtil.setScaleFactor(newScale); - ChangeDialog.show(this.gui); - }); - scale.add(customScale); - ScaleUtil.addListener((newScale, _oldScale) -> { - JRadioButtonMenuItem mi = map.get(newScale); - if (mi != null) { - mi.setSelected(true); - } else { - scaleGroup.clearSelection(); - } - }); - JRadioButtonMenuItem mi = map.get(ScaleUtil.getScaleFactor()); - if (mi != null) { - mi.setSelected(true); - } - } - menu.add(scale); - } - menu.addSeparator(); - { - JMenuItem search = new JMenuItem(I18n.translate("menu.view.search")); - search.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.SHIFT_MASK)); - menu.add(search); - search.addActionListener(event -> { - if (this.gui.getController().project != null) { - this.gui.getSearchDialog().show(); - } - }); - } - } - - /* - * Collab menu - */ - { - JMenu menu = new JMenu(I18n.translate("menu.collab")); - this.add(menu); - { - JMenuItem item = new JMenuItem(I18n.translate("menu.collab.connect")); - menu.add(item); - item.addActionListener(event -> { - if (this.gui.getController().getClient() != null) { - this.gui.getController().disconnectIfConnected(null); - return; - } - ConnectToServerDialog.Result result = ConnectToServerDialog.show(this.gui.getFrame()); - if (result == null) { - return; - } - this.gui.getController().disconnectIfConnected(null); - try { - this.gui.getController().createClient(result.getUsername(), result.getIp(), result.getPort(), result.getPassword()); - } catch (IOException e) { - JOptionPane.showMessageDialog(this.gui.getFrame(), e.toString(), I18n.translate("menu.collab.connect.error"), JOptionPane.ERROR_MESSAGE); - this.gui.getController().disconnectIfConnected(null); - } - Arrays.fill(result.getPassword(), (char)0); - }); - this.connectToServerMenu = item; - } - { - JMenuItem item = new JMenuItem(I18n.translate("menu.collab.server.start")); - menu.add(item); - item.addActionListener(event -> { - if (this.gui.getController().getServer() != null) { - this.gui.getController().disconnectIfConnected(null); - return; - } - CreateServerDialog.Result result = CreateServerDialog.show(this.gui.getFrame()); - if (result == null) { - return; - } - this.gui.getController().disconnectIfConnected(null); - try { - this.gui.getController().createServer(result.getPort(), result.getPassword()); - } catch (IOException e) { - JOptionPane.showMessageDialog(this.gui.getFrame(), e.toString(), I18n.translate("menu.collab.server.start.error"), JOptionPane.ERROR_MESSAGE); - this.gui.getController().disconnectIfConnected(null); - } - }); - this.startServerMenu = item; - } - } - - /* - * Help menu - */ - { - JMenu menu = new JMenu(I18n.translate("menu.help")); - this.add(menu); - { - JMenuItem item = new JMenuItem(I18n.translate("menu.help.about")); - menu.add(item); - item.addActionListener(event -> AboutDialog.show(this.gui.getFrame())); - } - { - JMenuItem item = new JMenuItem(I18n.translate("menu.help.github")); - menu.add(item); - item.addActionListener(event -> { - try { - Desktop.getDesktop().browse(new URL("https://github.com/FabricMC/Enigma").toURI()); - } catch (URISyntaxException | IOException ignored) { - } - }); - } - } - } -} diff --git a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java b/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java deleted file mode 100644 index b92041c..0000000 --- a/src/main/java/cuchaz/enigma/gui/elements/PopupMenuBar.java +++ /dev/null @@ -1,125 +0,0 @@ -package cuchaz.enigma.gui.elements; - -import cuchaz.enigma.gui.Gui; -import cuchaz.enigma.utils.I18n; - -import javax.swing.*; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; - -public class PopupMenuBar extends JPopupMenu { - - public final JMenuItem renameMenu; - public final JMenuItem editJavadocMenu; - public final JMenuItem showInheritanceMenu; - public final JMenuItem showImplementationsMenu; - public final JMenuItem showCallsMenu; - public final JMenuItem showCallsSpecificMenu; - public final JMenuItem openEntryMenu; - public final JMenuItem openPreviousMenu; - public final JMenuItem openNextMenu; - public final JMenuItem toggleMappingMenu; - - public PopupMenuBar(Gui gui) { - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.rename")); - menu.addActionListener(event -> gui.startRename()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.renameMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.javadoc")); - menu.addActionListener(event -> gui.startDocChange()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.editJavadocMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.inheritance")); - menu.addActionListener(event -> gui.showInheritance()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.showInheritanceMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.implementations")); - menu.addActionListener(event -> gui.showImplementations()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.showImplementationsMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.calls")); - menu.addActionListener(event -> gui.showCalls(true)); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.showCallsMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.calls.specific")); - menu.addActionListener(event -> gui.showCalls(false)); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK + InputEvent.SHIFT_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.showCallsSpecificMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.declaration")); - menu.addActionListener(event -> gui.getController().navigateTo(gui.cursorReference.entry)); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.openEntryMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.back")); - menu.addActionListener(event -> gui.getController().openPreviousReference()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.openPreviousMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.forward")); - menu.addActionListener(event -> gui.getController().openNextReference()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.openNextMenu = menu; - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.mark_deobfuscated")); - menu.addActionListener(event -> gui.toggleMapping()); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK)); - menu.setEnabled(false); - this.add(menu); - this.toggleMappingMenu = menu; - } - { - this.add(new JSeparator()); - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.zoom.in")); - menu.addActionListener(event -> gui.editor.offsetEditorZoom(2)); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, InputEvent.CTRL_DOWN_MASK)); - this.add(menu); - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.zoom.out")); - menu.addActionListener(event -> gui.editor.offsetEditorZoom(-2)); - menu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, InputEvent.CTRL_DOWN_MASK)); - this.add(menu); - } - { - JMenuItem menu = new JMenuItem(I18n.translate("popup_menu.zoom.reset")); - menu.addActionListener(event -> gui.editor.resetEditorZoom()); - this.add(menu); - } - } -} -- cgit v1.2.3