summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/gui
diff options
context:
space:
mode:
authorGravatar Thog2016-10-28 00:08:07 +0200
committerGravatar Thog2016-10-28 00:08:07 +0200
commitf0be2737087ae82c986a44d6d5bb648ed9a758b3 (patch)
treee95bbed60012771c4e7ab902416757bdae09f588 /src/main/java/cuchaz/enigma/gui
parentRework setFieldName to only check name in the actual class mapping and mother... (diff)
downloadenigma-fork-f0be2737087ae82c986a44d6d5bb648ed9a758b3.tar.gz
enigma-fork-f0be2737087ae82c986a44d6d5bb648ed9a758b3.tar.xz
enigma-fork-f0be2737087ae82c986a44d6d5bb648ed9a758b3.zip
Fix order of packages, hanging of Enigma and classes nodes not renamed when package is renamed (#25)
Diffstat (limited to 'src/main/java/cuchaz/enigma/gui')
-rw-r--r--src/main/java/cuchaz/enigma/gui/ClassMatchingGui.java4
-rw-r--r--src/main/java/cuchaz/enigma/gui/ClassSelector.java51
-rw-r--r--src/main/java/cuchaz/enigma/gui/Gui.java14
-rw-r--r--src/main/java/cuchaz/enigma/gui/GuiController.java6
-rw-r--r--src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java2
-rw-r--r--src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java5
-rw-r--r--src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java7
-rw-r--r--src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java2
-rw-r--r--src/main/java/cuchaz/enigma/gui/panels/PanelObf.java2
9 files changed, 79 insertions, 14 deletions
diff --git a/src/main/java/cuchaz/enigma/gui/ClassMatchingGui.java b/src/main/java/cuchaz/enigma/gui/ClassMatchingGui.java
index 3cd1705..edf1e30 100644
--- a/src/main/java/cuchaz/enigma/gui/ClassMatchingGui.java
+++ b/src/main/java/cuchaz/enigma/gui/ClassMatchingGui.java
@@ -131,7 +131,7 @@ public class ClassMatchingGui {
131 sourceTypePanel.add(button); 131 sourceTypePanel.add(button);
132 } 132 }
133 133
134 m_sourceClasses = new ClassSelector(null, ClassSelector.DEOBF_CLASS_COMPARATOR); 134 m_sourceClasses = new ClassSelector(null, ClassSelector.DEOBF_CLASS_COMPARATOR, false);
135 m_sourceClasses.setSelectionListener(this::setSourceClass); 135 m_sourceClasses.setSelectionListener(this::setSourceClass);
136 JScrollPane sourceScroller = new JScrollPane(m_sourceClasses); 136 JScrollPane sourceScroller = new JScrollPane(m_sourceClasses);
137 sourcePanel.add(sourceScroller); 137 sourcePanel.add(sourceScroller);
@@ -147,7 +147,7 @@ public class ClassMatchingGui {
147 destPanel.add(m_top10Matches); 147 destPanel.add(m_top10Matches);
148 m_top10Matches.addActionListener(event -> toggleTop10Matches()); 148 m_top10Matches.addActionListener(event -> toggleTop10Matches());
149 149
150 m_destClasses = new ClassSelector(null, ClassSelector.DEOBF_CLASS_COMPARATOR); 150 m_destClasses = new ClassSelector(null, ClassSelector.DEOBF_CLASS_COMPARATOR, false);
151 m_destClasses.setSelectionListener(this::setDestClass); 151 m_destClasses.setSelectionListener(this::setDestClass);
152 JScrollPane destScroller = new JScrollPane(m_destClasses); 152 JScrollPane destScroller = new JScrollPane(m_destClasses);
153 destPanel.add(destScroller); 153 destPanel.add(destScroller);
diff --git a/src/main/java/cuchaz/enigma/gui/ClassSelector.java b/src/main/java/cuchaz/enigma/gui/ClassSelector.java
index 92fcaba..c6ef0e2 100644
--- a/src/main/java/cuchaz/enigma/gui/ClassSelector.java
+++ b/src/main/java/cuchaz/enigma/gui/ClassSelector.java
@@ -44,7 +44,7 @@ public class ClassSelector extends JTree {
44 private RenameSelectionListener renameSelectionListener; 44 private RenameSelectionListener renameSelectionListener;
45 private Comparator<ClassEntry> comparator; 45 private Comparator<ClassEntry> comparator;
46 46
47 public ClassSelector(Gui gui, Comparator<ClassEntry> comparator) { 47 public ClassSelector(Gui gui, Comparator<ClassEntry> comparator, boolean isRenamable) {
48 this.comparator = comparator; 48 this.comparator = comparator;
49 49
50 // configure the tree control 50 // configure the tree control
@@ -77,7 +77,7 @@ public class ClassSelector extends JTree {
77 { 77 {
78 @Override public boolean isCellEditable(EventObject event) 78 @Override public boolean isCellEditable(EventObject event)
79 { 79 {
80 return !(event instanceof MouseEvent) && super.isCellEditable(event); 80 return isRenamable && !(event instanceof MouseEvent) && super.isCellEditable(event);
81 } 81 }
82 }; 82 };
83 this.setCellEditor(editor); 83 this.setCellEditor(editor);
@@ -112,7 +112,7 @@ public class ClassSelector extends JTree {
112 try 112 try
113 { 113 {
114 renameSelectionListener.onSelectionRename(node.getUserObject(), objectData, node); 114 renameSelectionListener.onSelectionRename(node.getUserObject(), objectData, node);
115 node.setUserObject(objectData); 115 node.setUserObject(objectData); // Make sure that it's modified
116 } catch (IllegalNameException ex) 116 } catch (IllegalNameException ex)
117 { 117 {
118 JOptionPane.showOptionDialog(gui.getFrame(), ex.getMessage(), "Enigma - Error", JOptionPane.OK_OPTION, 118 JOptionPane.showOptionDialog(gui.getFrame(), ex.getMessage(), "Enigma - Error", JOptionPane.OK_OPTION,
@@ -447,6 +447,51 @@ public class ClassSelector extends JTree {
447 model.insertNodeInto(classNode, packageNode, getPlacementIndex(packageNode, classNode)); 447 model.insertNodeInto(classNode, packageNode, getPlacementIndex(packageNode, classNode));
448 } 448 }
449 449
450 public void reload()
451 {
452 DefaultTreeModel model = (DefaultTreeModel) getModel();
453 model.reload(sort(rootNodes));
454 }
455
456 private DefaultMutableTreeNode sort(DefaultMutableTreeNode node) {
457
458 for(int i = 0; i < node.getChildCount() - 1; i++) {
459 DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(i);
460 if (child == null)
461 continue;
462 String nt = child.toString();
463
464 for(int j = i + 1; j <= node.getChildCount() - 1; j++) {
465 DefaultMutableTreeNode prevNode = (DefaultMutableTreeNode) node.getChildAt(j);
466 if (prevNode == null || prevNode.getUserObject() == null)
467 continue;
468 String np = prevNode.getUserObject().toString();
469
470 if(nt.compareToIgnoreCase(np) > 0) {
471 node.insert(child, j);
472 node.insert(prevNode, i);
473 }
474 }
475 if(child.getChildCount() > 0) {
476 sort(child);
477 }
478 }
479
480 for(int i = 0; i < node.getChildCount() - 1; i++) {
481 DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(i);
482 for(int j = i + 1; j <= node.getChildCount() - 1; j++) {
483 DefaultMutableTreeNode prevNode = (DefaultMutableTreeNode) node.getChildAt(j);
484
485 if(!prevNode.isLeaf() && child.isLeaf()) {
486 node.insert(child, j);
487 node.insert(prevNode, i);
488 }
489 }
490 }
491
492 return node;
493 }
494
450 private int getPlacementIndex(ClassSelectorPackageNode newPackageNode, ClassSelectorClassNode classNode) 495 private int getPlacementIndex(ClassSelectorPackageNode newPackageNode, ClassSelectorClassNode classNode)
451 { 496 {
452 List<ClassSelectorClassNode> classNodes = classNodes(newPackageNode); 497 List<ClassSelectorClassNode> classNodes = classNodes(newPackageNode);
diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java
index 2a35507..6d9ea1d 100644
--- a/src/main/java/cuchaz/enigma/gui/Gui.java
+++ b/src/main/java/cuchaz/enigma/gui/Gui.java
@@ -778,12 +778,16 @@ public class Gui {
778 DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) node.getChildAt(i); 778 DefaultMutableTreeNode childNode = (DefaultMutableTreeNode) node.getChildAt(i);
779 ClassEntry prevDataChild = (ClassEntry) childNode.getUserObject(); 779 ClassEntry prevDataChild = (ClassEntry) childNode.getUserObject();
780 ClassEntry dataChild = new ClassEntry(data + "/" + prevDataChild.getSimpleName()); 780 ClassEntry dataChild = new ClassEntry(data + "/" + prevDataChild.getSimpleName());
781 this.controller.rename(new EntryReference<>(prevDataChild, prevDataChild.getName()), dataChild.getName(), false); 781 this.controller.rename(new EntryReference<>(prevDataChild, prevDataChild.getName()), dataChild.getName(), false, i + 1 == node.getChildCount());
782 childNode.setUserObject(dataChild);
782 } 783 }
784 node.setUserObject(data);
785 // Ob package will never be modified, just reload deob view
786 this.deobfPanel.deobfClasses.reload();
783 } 787 }
784 // class rename 788 // class rename
785 else if (data instanceof ClassEntry) 789 else if (data instanceof ClassEntry)
786 this.controller.rename(new EntryReference<>((ClassEntry) prevData, ((ClassEntry) prevData).getName()), ((ClassEntry) data).getName(), false); 790 this.controller.rename(new EntryReference<>((ClassEntry) prevData, ((ClassEntry) prevData).getName()), ((ClassEntry) data).getName(), false, true);
787 } 791 }
788 792
789 public void moveClassTree(EntryReference<Entry, Entry> deobfReference, String newName) 793 public void moveClassTree(EntryReference<Entry, Entry> deobfReference, String newName)
@@ -806,6 +810,8 @@ public class Gui {
806 ClassSelectorPackageNode packageNode = this.obfPanel.obfClasses.getPackageNode(oldEntry); 810 ClassSelectorPackageNode packageNode = this.obfPanel.obfClasses.getPackageNode(oldEntry);
807 this.obfPanel.obfClasses.removeNode(packageNode, oldEntry); 811 this.obfPanel.obfClasses.removeNode(packageNode, oldEntry);
808 this.obfPanel.obfClasses.removeNodeIfEmpty(packageNode); 812 this.obfPanel.obfClasses.removeNodeIfEmpty(packageNode);
813 this.deobfPanel.deobfClasses.reload();
814 this.obfPanel.obfClasses.reload();
809 } 815 }
810 // Deob -> ob 816 // Deob -> ob
811 else if (isNewOb && !isOldOb) 817 else if (isNewOb && !isOldOb)
@@ -814,17 +820,21 @@ public class Gui {
814 ClassSelectorPackageNode packageNode = this.deobfPanel.deobfClasses.getPackageNode(oldEntry); 820 ClassSelectorPackageNode packageNode = this.deobfPanel.deobfClasses.getPackageNode(oldEntry);
815 this.deobfPanel.deobfClasses.removeNode(packageNode, oldEntry); 821 this.deobfPanel.deobfClasses.removeNode(packageNode, oldEntry);
816 this.deobfPanel.deobfClasses.removeNodeIfEmpty(packageNode); 822 this.deobfPanel.deobfClasses.removeNodeIfEmpty(packageNode);
823 this.deobfPanel.deobfClasses.reload();
824 this.obfPanel.obfClasses.reload();
817 } 825 }
818 // Local move 826 // Local move
819 else if (isOldOb) 827 else if (isOldOb)
820 { 828 {
821 this.obfPanel.obfClasses.moveClassTree(oldEntry, newEntry, null); 829 this.obfPanel.obfClasses.moveClassTree(oldEntry, newEntry, null);
822 this.obfPanel.obfClasses.removeNodeIfEmpty(this.obfPanel.obfClasses.getPackageNode(oldEntry)); 830 this.obfPanel.obfClasses.removeNodeIfEmpty(this.obfPanel.obfClasses.getPackageNode(oldEntry));
831 this.obfPanel.obfClasses.reload();
823 } 832 }
824 else 833 else
825 { 834 {
826 this.deobfPanel.deobfClasses.moveClassTree(oldEntry, newEntry, null); 835 this.deobfPanel.deobfClasses.moveClassTree(oldEntry, newEntry, null);
827 this.deobfPanel.deobfClasses.removeNodeIfEmpty(this.deobfPanel.deobfClasses.getPackageNode(oldEntry)); 836 this.deobfPanel.deobfClasses.removeNodeIfEmpty(this.deobfPanel.deobfClasses.getPackageNode(oldEntry));
837 this.deobfPanel.deobfClasses.reload();
828 } 838 }
829 } 839 }
830} 840}
diff --git a/src/main/java/cuchaz/enigma/gui/GuiController.java b/src/main/java/cuchaz/enigma/gui/GuiController.java
index 2d0f7ae..70fb4cf 100644
--- a/src/main/java/cuchaz/enigma/gui/GuiController.java
+++ b/src/main/java/cuchaz/enigma/gui/GuiController.java
@@ -193,13 +193,13 @@ public class GuiController {
193 } 193 }
194 194
195 public void rename(EntryReference<Entry, Entry> deobfReference, String newName) { 195 public void rename(EntryReference<Entry, Entry> deobfReference, String newName) {
196 rename(deobfReference, newName, true); 196 rename(deobfReference, newName, true, true);
197 } 197 }
198 198
199 public void rename(EntryReference<Entry, Entry> deobfReference, String newName, boolean refreshClassTree) 199 public void rename(EntryReference<Entry, Entry> deobfReference, String newName, boolean refreshClassTree, boolean clearTranslationCache)
200 { 200 {
201 EntryReference<Entry, Entry> obfReference = this.deobfuscator.obfuscateReference(deobfReference); 201 EntryReference<Entry, Entry> obfReference = this.deobfuscator.obfuscateReference(deobfReference);
202 this.deobfuscator.rename(obfReference.getNameableEntry(), newName); 202 this.deobfuscator.rename(obfReference.getNameableEntry(), newName, clearTranslationCache);
203 this.isDirty = true; 203 this.isDirty = true;
204 204
205 if (refreshClassTree && deobfReference.entry instanceof ClassEntry && !((ClassEntry) deobfReference.entry).isInnerClass()) 205 if (refreshClassTree && deobfReference.entry instanceof ClassEntry && !((ClassEntry) deobfReference.entry).isInnerClass())
diff --git a/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java b/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java
index 5055091..ecc280d 100644
--- a/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java
+++ b/src/main/java/cuchaz/enigma/gui/MemberMatchingGui.java
@@ -138,7 +138,7 @@ public class MemberMatchingGui<T extends Entry> {
138 sourceTypePanel.add(button); 138 sourceTypePanel.add(button);
139 } 139 }
140 140
141 m_sourceClasses = new ClassSelector(null, ClassSelector.DEOBF_CLASS_COMPARATOR); 141 m_sourceClasses = new ClassSelector(null, ClassSelector.DEOBF_CLASS_COMPARATOR, false);
142 m_sourceClasses.setSelectionListener(this::setSourceClass); 142 m_sourceClasses.setSelectionListener(this::setSourceClass);
143 JScrollPane sourceScroller = new JScrollPane(m_sourceClasses); 143 JScrollPane sourceScroller = new JScrollPane(m_sourceClasses);
144 classesPanel.add(sourceScroller); 144 classesPanel.add(sourceScroller);
diff --git a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java b/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java
index 1c9dad4..8341826 100644
--- a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java
+++ b/src/main/java/cuchaz/enigma/gui/node/ClassSelectorClassNode.java
@@ -49,6 +49,11 @@ public class ClassSelectorClassNode extends DefaultMutableTreeNode {
49 super.setUserObject(classEntry); 49 super.setUserObject(classEntry);
50 } 50 }
51 51
52 @Override public Object getUserObject()
53 {
54 return classEntry;
55 }
56
52 public boolean equals(ClassSelectorClassNode other) { 57 public boolean equals(ClassSelectorClassNode other) {
53 return this.classEntry.equals(other.classEntry); 58 return this.classEntry.equals(other.classEntry);
54 } 59 }
diff --git a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java b/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java
index 629d20c..31b4ebf 100644
--- a/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java
+++ b/src/main/java/cuchaz/enigma/gui/node/ClassSelectorPackageNode.java
@@ -33,9 +33,14 @@ public class ClassSelectorPackageNode extends DefaultMutableTreeNode {
33 super.setUserObject(userObject); 33 super.setUserObject(userObject);
34 } 34 }
35 35
36 @Override public Object getUserObject()
37 {
38 return packageName;
39 }
40
36 @Override 41 @Override
37 public String toString() { 42 public String toString() {
38 return Descriptor.toJavaName(this.packageName); 43 return !packageName.equals("(none)") ? Descriptor.toJavaName(this.packageName) : "(none)";
39 } 44 }
40 45
41 @Override 46 @Override
diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java b/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java
index 447c51a..4f55175 100644
--- a/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java
+++ b/src/main/java/cuchaz/enigma/gui/panels/PanelDeobf.java
@@ -17,7 +17,7 @@ public class PanelDeobf extends JPanel {
17 public PanelDeobf(Gui gui) { 17 public PanelDeobf(Gui gui) {
18 this.gui = gui; 18 this.gui = gui;
19 19
20 this.deobfClasses = new ClassSelector(gui, ClassSelector.DEOBF_CLASS_COMPARATOR); 20 this.deobfClasses = new ClassSelector(gui, ClassSelector.DEOBF_CLASS_COMPARATOR, true);
21 this.deobfClasses.setSelectionListener(gui::navigateTo); 21 this.deobfClasses.setSelectionListener(gui::navigateTo);
22 this.deobfClasses.setRenameSelectionListener(gui::onPanelRename); 22 this.deobfClasses.setRenameSelectionListener(gui::onPanelRename);
23 23
diff --git a/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java b/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java
index 74772a5..27bb70b 100644
--- a/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java
+++ b/src/main/java/cuchaz/enigma/gui/panels/PanelObf.java
@@ -28,7 +28,7 @@ public class PanelObf extends JPanel {
28 return aname.compareTo(bname); 28 return aname.compareTo(bname);
29 }; 29 };
30 30
31 this.obfClasses = new ClassSelector(gui, obfClassComparator); 31 this.obfClasses = new ClassSelector(gui, obfClassComparator, false);
32 this.obfClasses.setSelectionListener(gui::navigateTo); 32 this.obfClasses.setSelectionListener(gui::navigateTo);
33 this.obfClasses.setRenameSelectionListener(gui::onPanelRename); 33 this.obfClasses.setRenameSelectionListener(gui::onPanelRename);
34 34