summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cuchaz/enigma/gui/ClassMatchingGui.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/cuchaz/enigma/gui/ClassMatchingGui.java b/src/cuchaz/enigma/gui/ClassMatchingGui.java
index 89b19c3..416b01f 100644
--- a/src/cuchaz/enigma/gui/ClassMatchingGui.java
+++ b/src/cuchaz/enigma/gui/ClassMatchingGui.java
@@ -17,6 +17,8 @@ import java.awt.FlowLayout;
17import java.awt.event.ActionEvent; 17import java.awt.event.ActionEvent;
18import java.awt.event.ActionListener; 18import java.awt.event.ActionListener;
19import java.util.Collection; 19import java.util.Collection;
20import java.util.Collections;
21import java.util.Comparator;
20import java.util.List; 22import java.util.List;
21import java.util.Map; 23import java.util.Map;
22 24
@@ -108,6 +110,7 @@ public class ClassMatchingGui {
108 private JButton m_matchButton; 110 private JButton m_matchButton;
109 private Map<SourceType,JRadioButton> m_sourceTypeButtons; 111 private Map<SourceType,JRadioButton> m_sourceTypeButtons;
110 private JCheckBox m_advanceCheck; 112 private JCheckBox m_advanceCheck;
113 private JCheckBox m_top10Matches;
111 114
112 private ClassMatches m_classMatches; 115 private ClassMatches m_classMatches;
113 private Deobfuscator m_sourceDeobfuscator; 116 private Deobfuscator m_sourceDeobfuscator;
@@ -170,6 +173,15 @@ public class ClassMatchingGui {
170 pane.add(destPanel, BorderLayout.WEST); 173 pane.add(destPanel, BorderLayout.WEST);
171 destPanel.add(new JLabel("Destination Classes")); 174 destPanel.add(new JLabel("Destination Classes"));
172 175
176 m_top10Matches = new JCheckBox("Show only top 10 matches");
177 destPanel.add(m_top10Matches);
178 m_top10Matches.addActionListener(new ActionListener() {
179 @Override
180 public void actionPerformed(ActionEvent event) {
181 toggleTop10Matches();
182 }
183 });
184
173 m_destClasses = new ClassSelector(ClassSelector.DeobfuscatedClassEntryComparator); 185 m_destClasses = new ClassSelector(ClassSelector.DeobfuscatedClassEntryComparator);
174 m_destClasses.setListener(new ClassSelectionListener() { 186 m_destClasses.setListener(new ClassSelectionListener() {
175 @Override 187 @Override
@@ -397,6 +409,19 @@ public class ClassMatchingGui {
397 /(sourceIdentity.getMaxMatchScore() + destIdentity.getMaxMatchScore()); 409 /(sourceIdentity.getMaxMatchScore() + destIdentity.getMaxMatchScore());
398 scoredDestClasses.add(new ScoredClassEntry(unmatchedDestClass, score)); 410 scoredDestClasses.add(new ScoredClassEntry(unmatchedDestClass, score));
399 } 411 }
412
413 if (m_top10Matches.isSelected() && scoredDestClasses.size() > 10) {
414 Collections.sort(scoredDestClasses, new Comparator<ClassEntry>() {
415 @Override
416 public int compare(ClassEntry a, ClassEntry b) {
417 ScoredClassEntry sa = (ScoredClassEntry)a;
418 ScoredClassEntry sb = (ScoredClassEntry)b;
419 return -Float.compare(sa.getScore(), sb.getScore());
420 }
421 });
422 scoredDestClasses = scoredDestClasses.subList(0, 10);
423 }
424
400 return scoredDestClasses; 425 return scoredDestClasses;
401 426
402 } catch (ClassNotFoundException ex) { 427 } catch (ClassNotFoundException ex) {
@@ -586,4 +611,12 @@ public class ClassMatchingGui {
586 setDestClass(destClass); 611 setDestClass(destClass);
587 m_destClasses.setSelectionClass(destClass); 612 m_destClasses.setSelectionClass(destClass);
588 } 613 }
614
615 private void toggleTop10Matches() {
616 if (m_sourceClass != null) {
617 m_destClasses.clearSelection();
618 m_destClasses.setClasses(deobfuscateClasses(getLikelyMatches(m_sourceClass), m_destDeobfuscator));
619 m_destClasses.expandAll();
620 }
621 }
589} 622}