From f043200fa3e819b9e8b1856ae79f9a71db84039e Mon Sep 17 00:00:00 2001 From: Yanis48 Date: Wed, 17 Mar 2021 19:09:16 +0100 Subject: Icons everywhere --- .../src/main/java/cuchaz/enigma/gui/Gui.java | 10 +++- .../cuchaz/enigma/gui/MessageListCellRenderer.java | 24 ---------- .../cuchaz/enigma/gui/MethodTreeCellRenderer.java | 43 ------------------ .../enigma/gui/elements/EditorTabPopupMenu.java | 19 ++++++-- .../cuchaz/enigma/gui/panels/StructurePanel.java | 6 +-- .../enigma/gui/renderer/CallsTreeCellRenderer.java | 45 ++++++++++++++++++ .../renderer/ImplementationsTreeCellRenderer.java | 34 ++++++++++++++ .../gui/renderer/InheritanceTreeCellRenderer.java | 53 ++++++++++++++++++++++ .../gui/renderer/MessageListCellRenderer.java | 24 ++++++++++ .../main/java/cuchaz/enigma/gui/util/GuiUtil.java | 8 ++++ 10 files changed, 189 insertions(+), 77 deletions(-) delete mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java delete mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java create mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/CallsTreeCellRenderer.java create mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/ImplementationsTreeCellRenderer.java create mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/InheritanceTreeCellRenderer.java create mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/MessageListCellRenderer.java (limited to 'enigma-swing/src/main/java') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java index a999cfa5..c5f827ef 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/Gui.java @@ -40,6 +40,10 @@ import cuchaz.enigma.gui.dialog.SearchDialog; import cuchaz.enigma.gui.elements.*; import cuchaz.enigma.gui.events.EditorActionListener; import cuchaz.enigma.gui.panels.*; +import cuchaz.enigma.gui.renderer.CallsTreeCellRenderer; +import cuchaz.enigma.gui.renderer.ImplementationsTreeCellRenderer; +import cuchaz.enigma.gui.renderer.InheritanceTreeCellRenderer; +import cuchaz.enigma.gui.renderer.MessageListCellRenderer; import cuchaz.enigma.gui.util.History; import cuchaz.enigma.gui.util.LanguageChangeListener; import cuchaz.enigma.gui.util.LanguageUtil; @@ -167,6 +171,7 @@ public class Gui implements LanguageChangeListener { // init inheritance panel inheritanceTree = new JTree(); inheritanceTree.setModel(null); + inheritanceTree.setCellRenderer(new InheritanceTreeCellRenderer(this)); inheritanceTree.setShowsRootHandles(true); inheritanceTree.addMouseListener(new MouseAdapter() { @Override @@ -191,8 +196,6 @@ public class Gui implements LanguageChangeListener { } } }); - TreeCellRenderer cellRenderer = inheritanceTree.getCellRenderer(); - inheritanceTree.setCellRenderer(new MethodTreeCellRenderer(cellRenderer)); JPanel inheritancePanel = new JPanel(); inheritancePanel.setLayout(new BorderLayout()); @@ -201,6 +204,7 @@ public class Gui implements LanguageChangeListener { // init implementations panel implementationsTree = new JTree(); implementationsTree.setModel(null); + implementationsTree.setCellRenderer(new ImplementationsTreeCellRenderer(this)); implementationsTree.setShowsRootHandles(true); implementationsTree.addMouseListener(new MouseAdapter() { @Override @@ -230,6 +234,7 @@ public class Gui implements LanguageChangeListener { // init call panel callsTree = new JTree(); callsTree.setModel(null); + callsTree.setCellRenderer(new CallsTreeCellRenderer(this)); callsTree.setShowsRootHandles(true); callsTree.addMouseListener(new MouseAdapter() { @SuppressWarnings("unchecked") @@ -947,6 +952,7 @@ public class Gui implements LanguageChangeListener { this.deobfPanelPopupMenu.retranslateUi(); this.infoPanel.retranslateUi(); this.structurePanel.retranslateUi(); + this.editorTabPopupMenu.retranslateUi(); this.editors.values().forEach(EditorPanel::retranslateUi); } diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java deleted file mode 100644 index 1d603409..00000000 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/MessageListCellRenderer.java +++ /dev/null @@ -1,24 +0,0 @@ -package cuchaz.enigma.gui; - -import java.awt.Component; - -import javax.swing.DefaultListCellRenderer; -import javax.swing.JList; - -import cuchaz.enigma.network.Message; - -// For now, just render the translated text. -// TODO: Icons or something later? -public class MessageListCellRenderer extends DefaultListCellRenderer { - - @Override - public Component getListCellRendererComponent(JList> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - Message message = (Message) value; - if (message != null) { - setText(message.translate()); - } - return this; - } - -} diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java deleted file mode 100644 index 3f38f4fc..00000000 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/MethodTreeCellRenderer.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2015 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Lesser General Public - * License v3.0 which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/lgpl.html - *
- * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ - -package cuchaz.enigma.gui; - -import java.awt.Component; -import java.awt.Font; - -import javax.swing.JTree; -import javax.swing.tree.TreeCellRenderer; - -import cuchaz.enigma.analysis.MethodInheritanceTreeNode; -import cuchaz.enigma.gui.config.UiConfig; - -class MethodTreeCellRenderer implements TreeCellRenderer { - - private final TreeCellRenderer parent; - - MethodTreeCellRenderer(TreeCellRenderer parent) { - this.parent = parent; - } - - @Override - public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { - Component ret = parent.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - if (!(value instanceof MethodInheritanceTreeNode) || ((MethodInheritanceTreeNode) value).isImplemented()) { - ret.setForeground(UiConfig.getTextColor()); - ret.setFont(ret.getFont().deriveFont(Font.PLAIN)); - } else { - ret.setForeground(UiConfig.getNumberColor()); - ret.setFont(ret.getFont().deriveFont(Font.ITALIC)); - } - return ret; - } -} diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorTabPopupMenu.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorTabPopupMenu.java index 39ed9789..c2982cd0 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorTabPopupMenu.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/EditorTabPopupMenu.java @@ -28,26 +28,28 @@ public class EditorTabPopupMenu { this.ui = new JPopupMenu(); - this.close = new JMenuItem(I18n.translate("popup_menu.editor_tab.close")); + this.close = new JMenuItem(); this.close.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_4, KeyEvent.CTRL_DOWN_MASK)); this.close.addActionListener(a -> gui.closeEditor(editor)); this.ui.add(this.close); - this.closeAll = new JMenuItem(I18n.translate("popup_menu.editor_tab.close_all")); + this.closeAll = new JMenuItem(); this.closeAll.addActionListener(a -> gui.closeAllEditorTabs()); this.ui.add(this.closeAll); - this.closeOthers = new JMenuItem(I18n.translate("popup_menu.editor_tab.close_others")); + this.closeOthers = new JMenuItem(); this.closeOthers.addActionListener(a -> gui.closeTabsExcept(editor)); this.ui.add(this.closeOthers); - this.closeLeft = new JMenuItem(I18n.translate("popup_menu.editor_tab.close_left")); + this.closeLeft = new JMenuItem(); this.closeLeft.addActionListener(a -> gui.closeTabsLeftOf(editor)); this.ui.add(this.closeLeft); - this.closeRight = new JMenuItem(I18n.translate("popup_menu.editor_tab.close_right")); + this.closeRight = new JMenuItem(); this.closeRight.addActionListener(a -> gui.closeTabsRightOf(editor)); this.ui.add(this.closeRight); + + this.retranslateUi(); } public void show(Component invoker, int x, int y, EditorPanel editorPanel) { @@ -55,4 +57,11 @@ public class EditorTabPopupMenu { ui.show(invoker, x, y); } + public void retranslateUi() { + this.close.setText(I18n.translate("popup_menu.editor_tab.close")); + this.closeAll.setText(I18n.translate("popup_menu.editor_tab.close_all")); + this.closeOthers.setText(I18n.translate("popup_menu.editor_tab.close_others")); + this.closeLeft.setText(I18n.translate("popup_menu.editor_tab.close_left")); + this.closeRight.setText(I18n.translate("popup_menu.editor_tab.close_right")); + } } diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/StructurePanel.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/StructurePanel.java index 12f1d758..6078145f 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/StructurePanel.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/StructurePanel.java @@ -84,13 +84,13 @@ public class StructurePanel extends JPanel { @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { - JComponent c = (JComponent) super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); - ParentedEntry entry = ((StructureTreeNode) value).getEntry(); + Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + ParentedEntry> entry = ((StructureTreeNode) value).getEntry(); if (entry instanceof ClassEntry) { this.setIcon(GuiUtil.getClassIcon(gui, (ClassEntry) entry)); } else if (entry instanceof MethodEntry) { - this.setIcon(((MethodEntry) entry).isConstructor() ? GuiUtil.CONSTRUCTOR_ICON : GuiUtil.METHOD_ICON); + this.setIcon(GuiUtil.getMethodIcon((MethodEntry) entry)); } else if (entry instanceof FieldEntry) { this.setIcon(GuiUtil.FIELD_ICON); } diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/CallsTreeCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/CallsTreeCellRenderer.java new file mode 100644 index 00000000..d5cfdab8 --- /dev/null +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/CallsTreeCellRenderer.java @@ -0,0 +1,45 @@ +package cuchaz.enigma.gui.renderer; + +import cuchaz.enigma.analysis.*; +import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.gui.config.UiConfig; +import cuchaz.enigma.gui.util.GuiUtil; +import cuchaz.enigma.translation.representation.entry.MethodEntry; + +import javax.swing.*; +import javax.swing.tree.DefaultTreeCellRenderer; +import java.awt.*; + +public class CallsTreeCellRenderer extends DefaultTreeCellRenderer { + private final Gui gui; + + public CallsTreeCellRenderer(Gui gui) { + this.gui = gui; + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + Component c = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + EntryReference, ?> reference = ((ReferenceTreeNode, ?>) value).getReference(); + + this.setForeground(UiConfig.getTextColor()); + + // if the node represents the method calling the entry + if (reference != null) { + if (reference.context instanceof MethodEntry) { + this.setIcon(GuiUtil.getMethodIcon((MethodEntry) reference.context)); + } + // if the node represents the called entry + } else { + if (value instanceof ClassReferenceTreeNode) { + this.setIcon(GuiUtil.getClassIcon(this.gui, ((ClassReferenceTreeNode) value).getEntry())); + } else if (value instanceof MethodReferenceTreeNode) { + this.setIcon(GuiUtil.getMethodIcon(((MethodReferenceTreeNode) value).getEntry())); + } else if (value instanceof FieldReferenceTreeNode) { + this.setIcon(GuiUtil.FIELD_ICON); + } + } + + return c; + } +} diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/ImplementationsTreeCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/ImplementationsTreeCellRenderer.java new file mode 100644 index 00000000..2eb7efc4 --- /dev/null +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/ImplementationsTreeCellRenderer.java @@ -0,0 +1,34 @@ +package cuchaz.enigma.gui.renderer; + +import cuchaz.enigma.analysis.ClassImplementationsTreeNode; +import cuchaz.enigma.analysis.MethodImplementationsTreeNode; +import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.gui.config.UiConfig; +import cuchaz.enigma.gui.util.GuiUtil; + +import javax.swing.*; +import javax.swing.tree.DefaultTreeCellRenderer; +import java.awt.*; + +public class ImplementationsTreeCellRenderer extends DefaultTreeCellRenderer { + private final Gui gui; + + public ImplementationsTreeCellRenderer(Gui gui) { + this.gui = gui; + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + Component c = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + + this.setForeground(UiConfig.getTextColor()); + + if (value instanceof ClassImplementationsTreeNode) { + this.setIcon(GuiUtil.getClassIcon(this.gui, ((ClassImplementationsTreeNode) value).getClassEntry())); + } else if (value instanceof MethodImplementationsTreeNode) { + this.setIcon(GuiUtil.getMethodIcon(((MethodImplementationsTreeNode) value).getMethodEntry())); + } + + return c; + } +} diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/InheritanceTreeCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/InheritanceTreeCellRenderer.java new file mode 100644 index 00000000..e377b9a3 --- /dev/null +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/InheritanceTreeCellRenderer.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2015 Jeff Martin. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Lesser General Public + * License v3.0 which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/lgpl.html + *
+ * Contributors: + * Jeff Martin - initial API and implementation + ******************************************************************************/ + +package cuchaz.enigma.gui.renderer; + +import java.awt.Component; +import java.awt.Font; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeCellRenderer; + +import cuchaz.enigma.analysis.ClassInheritanceTreeNode; +import cuchaz.enigma.analysis.MethodInheritanceTreeNode; +import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.gui.config.UiConfig; +import cuchaz.enigma.gui.util.GuiUtil; + +public class InheritanceTreeCellRenderer extends DefaultTreeCellRenderer { + private final Gui gui; + + public InheritanceTreeCellRenderer(Gui gui) { + this.gui = gui; + } + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { + Component ret = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); + + if (!(value instanceof MethodInheritanceTreeNode) || ((MethodInheritanceTreeNode) value).isImplemented()) { + ret.setForeground(UiConfig.getTextColor()); + ret.setFont(ret.getFont().deriveFont(Font.PLAIN)); + if (value instanceof ClassInheritanceTreeNode) { + this.setIcon(GuiUtil.getClassIcon(this.gui, ((ClassInheritanceTreeNode) value).getClassEntry())); + } else if (value instanceof MethodInheritanceTreeNode) { + this.setIcon(GuiUtil.getMethodIcon(((MethodInheritanceTreeNode) value).getMethodEntry())); + } + } else { + ret.setForeground(UiConfig.getNumberColor()); + ret.setFont(ret.getFont().deriveFont(Font.ITALIC)); + this.setIcon(GuiUtil.CLASS_ICON); + } + + return ret; + } +} diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/MessageListCellRenderer.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/MessageListCellRenderer.java new file mode 100644 index 00000000..b6ae0c50 --- /dev/null +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/renderer/MessageListCellRenderer.java @@ -0,0 +1,24 @@ +package cuchaz.enigma.gui.renderer; + +import java.awt.Component; + +import javax.swing.DefaultListCellRenderer; +import javax.swing.JList; + +import cuchaz.enigma.network.Message; + +// For now, just render the translated text. +// TODO: Icons or something later? +public class MessageListCellRenderer extends DefaultListCellRenderer { + + @Override + public Component getListCellRendererComponent(JList> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + Message message = (Message) value; + if (message != null) { + setText(message.translate()); + } + return this; + } + +} diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java index 95f08539..1a86148d 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java @@ -3,6 +3,7 @@ package cuchaz.enigma.gui.util; import cuchaz.enigma.gui.Gui; import cuchaz.enigma.translation.representation.AccessFlags; import cuchaz.enigma.translation.representation.entry.ClassEntry; +import cuchaz.enigma.translation.representation.entry.MethodEntry; import cuchaz.enigma.utils.Os; import javax.imageio.ImageIO; @@ -106,4 +107,11 @@ public class GuiUtil { return CLASS_ICON; } + + public static Icon getMethodIcon(MethodEntry entry) { + if (entry.isConstructor()) { + return CONSTRUCTOR_ICON; + } + return METHOD_ICON; + } } -- cgit v1.2.3