summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/cuchaz/enigma/Constants.java4
-rw-r--r--src/main/java/cuchaz/enigma/gui/ClassSelector.java56
-rw-r--r--src/main/java/cuchaz/enigma/gui/Gui.java7
3 files changed, 47 insertions, 20 deletions
diff --git a/src/main/java/cuchaz/enigma/Constants.java b/src/main/java/cuchaz/enigma/Constants.java
index b08438a3..afffb5d3 100644
--- a/src/main/java/cuchaz/enigma/Constants.java
+++ b/src/main/java/cuchaz/enigma/Constants.java
@@ -13,8 +13,8 @@ package cuchaz.enigma;
13 13
14public class Constants { 14public class Constants {
15 public static final String NAME = "Enigma"; 15 public static final String NAME = "Enigma";
16 public static final String VERSION = "0.11.0 (Fabric Fork)"; 16 public static final String VERSION = "@VERSION@/Fabric";
17 public static final String URL = "http://www.cuchazinteractive.com/enigma"; 17 public static final String URL = "https://fabric.asie.pl";
18 public static final int MiB = 1024 * 1024; // 1 mebibyte 18 public static final int MiB = 1024 * 1024; // 1 mebibyte
19 public static final int KiB = 1024; // 1 kebibyte 19 public static final int KiB = 1024; // 1 kebibyte
20} 20}
diff --git a/src/main/java/cuchaz/enigma/gui/ClassSelector.java b/src/main/java/cuchaz/enigma/gui/ClassSelector.java
index 93c5d4ba..b032526f 100644
--- a/src/main/java/cuchaz/enigma/gui/ClassSelector.java
+++ b/src/main/java/cuchaz/enigma/gui/ClassSelector.java
@@ -141,7 +141,7 @@ public class ClassSelector extends JTree {
141 } 141 }
142 142
143 public void setClasses(Collection<ClassEntry> classEntries) { 143 public void setClasses(Collection<ClassEntry> classEntries) {
144 String state = getExpansionState(this, 0); 144 List<StateEntry> state = getExpansionState(this);
145 if (classEntries == null) { 145 if (classEntries == null) {
146 setModel(null); 146 setModel(null);
147 return; 147 return;
@@ -210,7 +210,7 @@ public class ClassSelector extends JTree {
210 // finally, update the tree control 210 // finally, update the tree control
211 setModel(new DefaultTreeModel(rootNodes)); 211 setModel(new DefaultTreeModel(rootNodes));
212 212
213 restoreExpanstionState(this, 0, state); 213 restoreExpansionState(this, state);
214 } 214 }
215 215
216 public ClassEntry getSelectedClass() { 216 public ClassEntry getSelectedClass() {
@@ -251,28 +251,48 @@ public class ClassSelector extends JTree {
251 return path1.equals(path2); 251 return path1.equals(path2);
252 } 252 }
253 253
254 public String getExpansionState(JTree tree, int row) { 254 public enum State {
255 TreePath rowPath = tree.getPathForRow(row); 255 EXPANDED,
256 StringBuilder buf = new StringBuilder(); 256 SELECTED
257 }
258
259 public static class StateEntry {
260 public final State state;
261 public final TreePath path;
262
263 public StateEntry(State state, TreePath path) {
264 this.state = state;
265 this.path = path;
266 }
267 }
268
269 public List<StateEntry> getExpansionState(JTree tree) {
270 List<StateEntry> state = new ArrayList<>();
257 int rowCount = tree.getRowCount(); 271 int rowCount = tree.getRowCount();
258 for (int i = row; i < rowCount; i++) { 272 for (int i = 0; i < rowCount; i++) {
259 TreePath path = tree.getPathForRow(i); 273 TreePath path = tree.getPathForRow(i);
260 if (i == row || isDescendant(path, rowPath)) { 274 if (tree.isPathSelected(path)) {
261 if (tree.isExpanded(path)) { 275 state.add(new StateEntry(State.SELECTED, path));
262 buf.append(",").append((i - row)); 276 }
263 } 277 if (tree.isExpanded(path)) {
264 } else { 278 state.add(new StateEntry(State.EXPANDED, path));
265 break;
266 } 279 }
267 } 280 }
268 return buf.toString(); 281 return state;
269 } 282 }
270 283
271 public void restoreExpanstionState(JTree tree, int row, String expansionState) { 284 public void restoreExpansionState(JTree tree, List<StateEntry> expansionState) {
272 StringTokenizer stok = new StringTokenizer(expansionState, ","); 285 tree.clearSelection();
273 while (stok.hasMoreTokens()) { 286
274 int token = row + Integer.parseInt(stok.nextToken()); 287 for (StateEntry entry : expansionState) {
275 tree.expandRow(token); 288 switch (entry.state) {
289 case SELECTED:
290 tree.addSelectionPath(entry.path);
291 break;
292 case EXPANDED:
293 tree.expandPath(entry.path);
294 break;
295 }
276 } 296 }
277 } 297 }
278 298
diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java
index 1fc8bf34..71bf5dcc 100644
--- a/src/main/java/cuchaz/enigma/gui/Gui.java
+++ b/src/main/java/cuchaz/enigma/gui/Gui.java
@@ -792,11 +792,15 @@ public class Gui {
792 newEntry == null); 792 newEntry == null);
793 } 793 }
794 794
795 // TODO: getExpansionState will *not* actually update itself based on name changes!
795 public void moveClassTree(EntryReference<Entry, Entry> deobfReference, String newName, boolean isOldOb, boolean isNewOb) { 796 public void moveClassTree(EntryReference<Entry, Entry> deobfReference, String newName, boolean isOldOb, boolean isNewOb) {
796 ClassEntry oldEntry = deobfReference.entry.getOwnerClassEntry(); 797 ClassEntry oldEntry = deobfReference.entry.getOwnerClassEntry();
797 ClassEntry newEntry = new ClassEntry(newName); 798 ClassEntry newEntry = new ClassEntry(newName);
798 799
799 // Ob -> deob 800 // Ob -> deob
801 List<ClassSelector.StateEntry> stateDeobf = this.deobfPanel.deobfClasses.getExpansionState(this.deobfPanel.deobfClasses);
802 List<ClassSelector.StateEntry> stateObf = this.obfPanel.obfClasses.getExpansionState(this.obfPanel.obfClasses);
803
800 if (isOldOb && !isNewOb) { 804 if (isOldOb && !isNewOb) {
801 this.deobfPanel.deobfClasses.moveClassTree(oldEntry, newEntry, obfPanel.obfClasses); 805 this.deobfPanel.deobfClasses.moveClassTree(oldEntry, newEntry, obfPanel.obfClasses);
802 ClassSelectorPackageNode packageNode = this.obfPanel.obfClasses.getPackageNode(oldEntry); 806 ClassSelectorPackageNode packageNode = this.obfPanel.obfClasses.getPackageNode(oldEntry);
@@ -824,5 +828,8 @@ public class Gui {
824 this.deobfPanel.deobfClasses.removeNodeIfEmpty(this.deobfPanel.deobfClasses.getPackageNode(oldEntry)); 828 this.deobfPanel.deobfClasses.removeNodeIfEmpty(this.deobfPanel.deobfClasses.getPackageNode(oldEntry));
825 this.deobfPanel.deobfClasses.reload(); 829 this.deobfPanel.deobfClasses.reload();
826 } 830 }
831
832 this.deobfPanel.deobfClasses.restoreExpansionState(this.deobfPanel.deobfClasses, stateDeobf);
833 this.obfPanel.obfClasses.restoreExpansionState(this.obfPanel.obfClasses, stateObf);
827 } 834 }
828} 835}