diff options
Diffstat (limited to 'src/cuchaz/enigma/gui/ClassSelector.java')
| -rw-r--r-- | src/cuchaz/enigma/gui/ClassSelector.java | 142 |
1 files changed, 130 insertions, 12 deletions
diff --git a/src/cuchaz/enigma/gui/ClassSelector.java b/src/cuchaz/enigma/gui/ClassSelector.java index e5f550b..2a63675 100644 --- a/src/cuchaz/enigma/gui/ClassSelector.java +++ b/src/cuchaz/enigma/gui/ClassSelector.java | |||
| @@ -15,6 +15,7 @@ import java.awt.event.MouseEvent; | |||
| 15 | import java.util.Collection; | 15 | import java.util.Collection; |
| 16 | import java.util.Collections; | 16 | import java.util.Collections; |
| 17 | import java.util.Comparator; | 17 | import java.util.Comparator; |
| 18 | import java.util.Enumeration; | ||
| 18 | import java.util.List; | 19 | import java.util.List; |
| 19 | import java.util.Map; | 20 | import java.util.Map; |
| 20 | 21 | ||
| @@ -41,19 +42,12 @@ public class ClassSelector extends JTree { | |||
| 41 | public static Comparator<ClassEntry> ObfuscatedClassEntryComparator; | 42 | public static Comparator<ClassEntry> ObfuscatedClassEntryComparator; |
| 42 | public static Comparator<ClassEntry> DeobfuscatedClassEntryComparator; | 43 | public static Comparator<ClassEntry> DeobfuscatedClassEntryComparator; |
| 43 | 44 | ||
| 44 | private static String getClassEntryDisplayName(ClassEntry entry) { | ||
| 45 | if (entry instanceof DecoratedClassEntry) { | ||
| 46 | return ((DecoratedClassEntry)entry).getDecoration() + entry.getName(); | ||
| 47 | } | ||
| 48 | return entry.getName(); | ||
| 49 | } | ||
| 50 | |||
| 51 | static { | 45 | static { |
| 52 | ObfuscatedClassEntryComparator = new Comparator<ClassEntry>() { | 46 | ObfuscatedClassEntryComparator = new Comparator<ClassEntry>() { |
| 53 | @Override | 47 | @Override |
| 54 | public int compare(ClassEntry a, ClassEntry b) { | 48 | public int compare(ClassEntry a, ClassEntry b) { |
| 55 | String aname = getClassEntryDisplayName(a); | 49 | String aname = a.getName(); |
| 56 | String bname = getClassEntryDisplayName(b); | 50 | String bname = a.getName(); |
| 57 | if (aname.length() != bname.length()) { | 51 | if (aname.length() != bname.length()) { |
| 58 | return aname.length() - bname.length(); | 52 | return aname.length() - bname.length(); |
| 59 | } | 53 | } |
| @@ -64,9 +58,13 @@ public class ClassSelector extends JTree { | |||
| 64 | DeobfuscatedClassEntryComparator = new Comparator<ClassEntry>() { | 58 | DeobfuscatedClassEntryComparator = new Comparator<ClassEntry>() { |
| 65 | @Override | 59 | @Override |
| 66 | public int compare(ClassEntry a, ClassEntry b) { | 60 | public int compare(ClassEntry a, ClassEntry b) { |
| 67 | String aname = getClassEntryDisplayName(a); | 61 | if (a instanceof ScoredClassEntry && b instanceof ScoredClassEntry) { |
| 68 | String bname = getClassEntryDisplayName(b); | 62 | return Float.compare( |
| 69 | return aname.compareTo(bname); | 63 | ((ScoredClassEntry)b).getScore(), |
| 64 | ((ScoredClassEntry)a).getScore() | ||
| 65 | ); | ||
| 66 | } | ||
| 67 | return a.getName().compareTo(b.getName()); | ||
| 70 | } | 68 | } |
| 71 | }; | 69 | }; |
| 72 | } | 70 | } |
| @@ -172,4 +170,124 @@ public class ClassSelector extends JTree { | |||
| 172 | // finally, update the tree control | 170 | // finally, update the tree control |
| 173 | setModel(new DefaultTreeModel(root)); | 171 | setModel(new DefaultTreeModel(root)); |
| 174 | } | 172 | } |
| 173 | |||
| 174 | public ClassEntry getSelectedClass() { | ||
| 175 | if (!isSelectionEmpty()) { | ||
| 176 | Object selectedNode = getSelectionPath().getLastPathComponent(); | ||
| 177 | if (selectedNode instanceof ClassSelectorClassNode) { | ||
| 178 | ClassSelectorClassNode classNode = (ClassSelectorClassNode)selectedNode; | ||
| 179 | return classNode.getClassEntry(); | ||
| 180 | } | ||
| 181 | } | ||
| 182 | return null; | ||
| 183 | } | ||
| 184 | |||
| 185 | public String getSelectedPackage() { | ||
| 186 | if (!isSelectionEmpty()) { | ||
| 187 | Object selectedNode = getSelectionPath().getLastPathComponent(); | ||
| 188 | if (selectedNode instanceof ClassSelectorPackageNode) { | ||
| 189 | ClassSelectorPackageNode packageNode = (ClassSelectorPackageNode)selectedNode; | ||
| 190 | return packageNode.getPackageName(); | ||
| 191 | } else if (selectedNode instanceof ClassSelectorClassNode) { | ||
| 192 | ClassSelectorClassNode classNode = (ClassSelectorClassNode)selectedNode; | ||
| 193 | return classNode.getClassEntry().getPackageName(); | ||
| 194 | } | ||
| 195 | } | ||
| 196 | return null; | ||
| 197 | } | ||
| 198 | |||
| 199 | public Iterable<ClassSelectorPackageNode> packageNodes() { | ||
| 200 | List<ClassSelectorPackageNode> nodes = Lists.newArrayList(); | ||
| 201 | DefaultMutableTreeNode root = (DefaultMutableTreeNode)getModel().getRoot(); | ||
| 202 | Enumeration<?> children = root.children(); | ||
| 203 | while (children.hasMoreElements()) { | ||
| 204 | ClassSelectorPackageNode packageNode = (ClassSelectorPackageNode)children.nextElement(); | ||
| 205 | nodes.add(packageNode); | ||
| 206 | } | ||
| 207 | return nodes; | ||
| 208 | } | ||
| 209 | |||
| 210 | public Iterable<ClassSelectorClassNode> classNodes(ClassSelectorPackageNode packageNode) { | ||
| 211 | List<ClassSelectorClassNode> nodes = Lists.newArrayList(); | ||
| 212 | Enumeration<?> children = packageNode.children(); | ||
| 213 | while (children.hasMoreElements()) { | ||
| 214 | ClassSelectorClassNode classNode = (ClassSelectorClassNode)children.nextElement(); | ||
| 215 | nodes.add(classNode); | ||
| 216 | } | ||
| 217 | return nodes; | ||
| 218 | } | ||
| 219 | |||
| 220 | public void expandPackage(String packageName) { | ||
| 221 | if (packageName == null) { | ||
| 222 | return; | ||
| 223 | } | ||
| 224 | for (ClassSelectorPackageNode packageNode : packageNodes()) { | ||
| 225 | if (packageNode.getPackageName().equals(packageName)) { | ||
| 226 | expandPath(new TreePath(new Object[] {getModel().getRoot(), packageNode})); | ||
| 227 | return; | ||
| 228 | } | ||
| 229 | } | ||
| 230 | } | ||
| 231 | |||
| 232 | public void expandAll() { | ||
| 233 | for (ClassSelectorPackageNode packageNode : packageNodes()) { | ||
| 234 | expandPath(new TreePath(new Object[] {getModel().getRoot(), packageNode})); | ||
| 235 | } | ||
| 236 | } | ||
| 237 | |||
| 238 | public ClassEntry getFirstClass() { | ||
| 239 | for (ClassSelectorPackageNode packageNode : packageNodes()) { | ||
| 240 | for (ClassSelectorClassNode classNode : classNodes(packageNode)) { | ||
| 241 | return classNode.getClassEntry(); | ||
| 242 | } | ||
| 243 | } | ||
| 244 | return null; | ||
| 245 | } | ||
| 246 | |||
| 247 | public ClassSelectorPackageNode getPackageNode(ClassEntry entry) { | ||
| 248 | for (ClassSelectorPackageNode packageNode : packageNodes()) { | ||
| 249 | if (packageNode.getPackageName().equals(entry.getPackageName())) { | ||
| 250 | return packageNode; | ||
| 251 | } | ||
| 252 | } | ||
| 253 | return null; | ||
| 254 | } | ||
| 255 | |||
| 256 | public ClassEntry getNextClass(ClassEntry entry) { | ||
| 257 | boolean foundIt = false; | ||
| 258 | for (ClassSelectorPackageNode packageNode : packageNodes()) { | ||
| 259 | if (!foundIt) { | ||
| 260 | // skip to the package with our target in it | ||
| 261 | if (packageNode.getPackageName().equals(entry.getPackageName())) { | ||
| 262 | for (ClassSelectorClassNode classNode : classNodes(packageNode)) { | ||
| 263 | if (!foundIt) { | ||
| 264 | if (classNode.getClassEntry().equals(entry)) { | ||
| 265 | foundIt = true; | ||
| 266 | } | ||
| 267 | } else { | ||
| 268 | // return the next class | ||
| 269 | return classNode.getClassEntry(); | ||
| 270 | } | ||
| 271 | } | ||
| 272 | } | ||
| 273 | } else { | ||
| 274 | // return the next class | ||
| 275 | for (ClassSelectorClassNode classNode : classNodes(packageNode)) { | ||
| 276 | return classNode.getClassEntry(); | ||
| 277 | } | ||
| 278 | } | ||
| 279 | } | ||
| 280 | return null; | ||
| 281 | } | ||
| 282 | |||
| 283 | public void setSelectionClass(ClassEntry classEntry) { | ||
| 284 | expandPackage(classEntry.getPackageName()); | ||
| 285 | for (ClassSelectorPackageNode packageNode : packageNodes()) { | ||
| 286 | for (ClassSelectorClassNode classNode : classNodes(packageNode)) { | ||
| 287 | if (classNode.getClassEntry().equals(classEntry)) { | ||
| 288 | setSelectionPath(new TreePath(new Object[] {getModel().getRoot(), packageNode, classNode})); | ||
| 289 | } | ||
| 290 | } | ||
| 291 | } | ||
| 292 | } | ||
| 175 | } | 293 | } |