diff options
| author | 2018-11-28 00:15:46 +0100 | |
|---|---|---|
| committer | 2018-11-28 00:20:50 +0100 | |
| commit | f8223ed5b3cb2f5f60a770804b06750ad94928b1 (patch) | |
| tree | b514d1b28ff7ea48ddb23975333bf96a8640aa89 /src | |
| parent | do not propagate non-argument local variable names (diff) | |
| download | enigma-f8223ed5b3cb2f5f60a770804b06750ad94928b1.tar.gz enigma-f8223ed5b3cb2f5f60a770804b06750ad94928b1.tar.xz enigma-f8223ed5b3cb2f5f60a770804b06750ad94928b1.zip | |
fix #68
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/cuchaz/enigma/Constants.java | 4 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/ClassSelector.java | 56 | ||||
| -rw-r--r-- | src/main/java/cuchaz/enigma/gui/Gui.java | 7 |
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 | ||
| 14 | public class Constants { | 14 | public 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 | } |