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 ++++ .../enigma/analysis/ClassInheritanceTreeNode.java | 7 +++ .../enigma/analysis/MethodInheritanceTreeNode.java | 3 ++ .../cuchaz/enigma/analysis/ReferenceTreeNode.java | 3 ++ .../cuchaz/enigma/analysis/StructureTreeNode.java | 2 +- 14 files changed, 203 insertions(+), 78 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 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;
+ }
}
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
index 7904c5f0..788c5347 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ClassInheritanceTreeNode.java
@@ -44,6 +44,13 @@ public class ClassInheritanceTreeNode extends DefaultMutableTreeNode {
return null;
}
+ /**
+ * Returns the class entry represented by this tree node.
+ */
+ public ClassEntry getClassEntry() {
+ return this.obfClassEntry;
+ }
+
public String getObfClassName() {
return this.obfClassEntry.getFullName();
}
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
index e77b5cce..7bee4dc7 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/MethodInheritanceTreeNode.java
@@ -48,6 +48,9 @@ public class MethodInheritanceTreeNode extends DefaultMutableTreeNode {
return null;
}
+ /**
+ * Returns the method entry represented by this tree node.
+ */
public MethodEntry getMethodEntry() {
return this.entry;
}
diff --git a/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java b/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java
index c0a3a754..ce23cb6d 100644
--- a/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java
+++ b/enigma/src/main/java/cuchaz/enigma/analysis/ReferenceTreeNode.java
@@ -14,6 +14,9 @@ package cuchaz.enigma.analysis;
import cuchaz.enigma.translation.representation.entry.Entry;
public interface ReferenceTreeNode