summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/gui/ClassSelector.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/gui/ClassSelector.java')
-rw-r--r--src/cuchaz/enigma/gui/ClassSelector.java142
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;
15import java.util.Collection; 15import java.util.Collection;
16import java.util.Collections; 16import java.util.Collections;
17import java.util.Comparator; 17import java.util.Comparator;
18import java.util.Enumeration;
18import java.util.List; 19import java.util.List;
19import java.util.Map; 20import 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}