summaryrefslogtreecommitdiff
path: root/enigma-swing
diff options
context:
space:
mode:
authorGravatar Yanis482021-04-02 21:43:58 +0200
committerGravatar Yanis482021-04-02 21:43:58 +0200
commit9b5141471a42be0a105e27eb97ca8f972c958ca1 (patch)
tree00f9fb2a5ffcceeb3df1b2ab3a95cb1b7c53fdce /enigma-swing
parentBump version (diff)
downloadenigma-9b5141471a42be0a105e27eb97ca8f972c958ca1.tar.gz
enigma-9b5141471a42be0a105e27eb97ca8f972c958ca1.tar.xz
enigma-9b5141471a42be0a105e27eb97ca8f972c958ca1.zip
Copy method/field descriptor on click
Diffstat (limited to 'enigma-swing')
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/panels/IdentifierPanel.java23
-rw-r--r--enigma-swing/src/main/java/cuchaz/enigma/gui/util/GuiUtil.java19
2 files changed, 40 insertions, 2 deletions
diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/IdentifierPanel.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/IdentifierPanel.java
index 255fe81d..a4914678 100644
--- a/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/IdentifierPanel.java
+++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/panels/IdentifierPanel.java
@@ -5,6 +5,8 @@ import java.awt.Container;
5import java.awt.GridBagConstraints; 5import java.awt.GridBagConstraints;
6import java.awt.GridBagLayout; 6import java.awt.GridBagLayout;
7import java.awt.event.ItemEvent; 7import java.awt.event.ItemEvent;
8import java.awt.event.MouseAdapter;
9import java.awt.event.MouseEvent;
8import java.util.function.Consumer; 10import java.util.function.Consumer;
9 11
10import javax.swing.BorderFactory; 12import javax.swing.BorderFactory;
@@ -97,7 +99,7 @@ public class IdentifierPanel {
97 FieldEntry fe = (FieldEntry) deobfEntry; 99 FieldEntry fe = (FieldEntry) deobfEntry;
98 this.nameField = th.addRenameTextField(I18n.translate("info_panel.identifier.field"), fe.getName()); 100 this.nameField = th.addRenameTextField(I18n.translate("info_panel.identifier.field"), fe.getName());
99 th.addStringRow(I18n.translate("info_panel.identifier.class"), fe.getParent().getFullName()); 101 th.addStringRow(I18n.translate("info_panel.identifier.class"), fe.getParent().getFullName());
100 th.addStringRow(I18n.translate("info_panel.identifier.type_descriptor"), fe.getDesc().toString()); 102 th.addCopiableStringRow(I18n.translate("info_panel.identifier.type_descriptor"), fe.getDesc().toString());
101 th.addModifierRow(I18n.translate("info_panel.identifier.modifier"), this::onModifierChanged); 103 th.addModifierRow(I18n.translate("info_panel.identifier.modifier"), this::onModifierChanged);
102 } else if (deobfEntry instanceof MethodEntry) { 104 } else if (deobfEntry instanceof MethodEntry) {
103 MethodEntry me = (MethodEntry) deobfEntry; 105 MethodEntry me = (MethodEntry) deobfEntry;
@@ -107,7 +109,7 @@ public class IdentifierPanel {
107 this.nameField = th.addRenameTextField(I18n.translate("info_panel.identifier.method"), me.getName()); 109 this.nameField = th.addRenameTextField(I18n.translate("info_panel.identifier.method"), me.getName());
108 th.addStringRow(I18n.translate("info_panel.identifier.class"), me.getParent().getFullName()); 110 th.addStringRow(I18n.translate("info_panel.identifier.class"), me.getParent().getFullName());
109 } 111 }
110 th.addStringRow(I18n.translate("info_panel.identifier.method_descriptor"), me.getDesc().toString()); 112 th.addCopiableStringRow(I18n.translate("info_panel.identifier.method_descriptor"), me.getDesc().toString());
111 th.addModifierRow(I18n.translate("info_panel.identifier.modifier"), this::onModifierChanged); 113 th.addModifierRow(I18n.translate("info_panel.identifier.modifier"), this::onModifierChanged);
112 } else if (deobfEntry instanceof LocalVariableEntry) { 114 } else if (deobfEntry instanceof LocalVariableEntry) {
113 LocalVariableEntry lve = (LocalVariableEntry) deobfEntry; 115 LocalVariableEntry lve = (LocalVariableEntry) deobfEntry;
@@ -207,6 +209,19 @@ public class IdentifierPanel {
207 this.row += 1; 209 this.row += 1;
208 } 210 }
209 211
212 public void addCopiableRow(JLabel c1, JLabel c2) {
213 c2.addMouseListener(new MouseAdapter() {
214 @Override
215 public void mouseClicked(MouseEvent e) {
216 if (e.getButton() == MouseEvent.BUTTON1) {
217 GuiUtil.copyToClipboard(c2.getText());
218 GuiUtil.showPopup(c2, I18n.translate("popup.copied"), e.getXOnScreen(), e.getYOnScreen());
219 }
220 }
221 });
222 addRow(c1, c2);
223 }
224
210 public ConvertingTextField addConvertingTextField(String c1, String c2) { 225 public ConvertingTextField addConvertingTextField(String c1, String c2) {
211 ConvertingTextField textField = new ConvertingTextField(c2); 226 ConvertingTextField textField = new ConvertingTextField(c2);
212 addRow(new JLabel(c1), textField.getUi()); 227 addRow(new JLabel(c1), textField.getUi());
@@ -226,6 +241,10 @@ public class IdentifierPanel {
226 addRow(new JLabel(c1), GuiUtil.unboldLabel(new JLabel(c2))); 241 addRow(new JLabel(c1), GuiUtil.unboldLabel(new JLabel(c2)));
227 } 242 }
228 243
244 public void addCopiableStringRow(String c1, String c2) {
245 addCopiableRow(new JLabel(c1), GuiUtil.unboldLabel(new JLabel(c2)));
246 }
247
229 public JComboBox<AccessModifier> addModifierRow(String c1, Consumer<AccessModifier> changeListener) { 248 public JComboBox<AccessModifier> addModifierRow(String c1, Consumer<AccessModifier> changeListener) {
230 if (!project.isRenamable(e)) 249 if (!project.isRenamable(e))
231 return null; 250 return null;
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 7f08fc25..e26c29b3 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
@@ -9,6 +9,7 @@ import cuchaz.enigma.utils.Os;
9 9
10import javax.swing.*; 10import javax.swing.*;
11import java.awt.*; 11import java.awt.*;
12import java.awt.datatransfer.StringSelection;
12import java.awt.event.MouseAdapter; 13import java.awt.event.MouseAdapter;
13import java.awt.event.MouseEvent; 14import java.awt.event.MouseEvent;
14import java.awt.font.TextAttribute; 15import java.awt.font.TextAttribute;
@@ -53,6 +54,24 @@ public class GuiUtil {
53 return label; 54 return label;
54 } 55 }
55 56
57 /**
58 * Puts the provided {@code text} in the system clipboard.
59 */
60 public static void copyToClipboard(String text) {
61 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(text), null);
62 }
63
64 public static void showPopup(JComponent component, String text, int x, int y) {
65 // from https://stackoverflow.com/questions/39955015/java-swing-show-tooltip-as-a-message-dialog
66 JToolTip tooltip = new JToolTip();
67 tooltip.setTipText(text);
68 Popup p = PopupFactory.getSharedInstance().getPopup(component, tooltip, x + 10, y);
69 p.show();
70 Timer t = new Timer(1000, e -> p.hide());
71 t.setRepeats(false);
72 t.start();
73 }
74
56 public static void showToolTipNow(JComponent component) { 75 public static void showToolTipNow(JComponent component) {
57 // HACKHACK: trick the tooltip manager into showing the tooltip right now 76 // HACKHACK: trick the tooltip manager into showing the tooltip right now
58 ToolTipManager manager = ToolTipManager.sharedInstance(); 77 ToolTipManager manager = ToolTipManager.sharedInstance();