summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/gui/Gui.java
diff options
context:
space:
mode:
authorGravatar jeff2014-09-01 20:40:11 -0400
committerGravatar jeff2014-09-01 20:40:11 -0400
commita146283291d5529eb9363b2fbc6fd5e643dee85a (patch)
tree79b6459bef4e8549e98d8e334e2582331f282339 /src/cuchaz/enigma/gui/Gui.java
parentadded checks to prevent renaming classes/fields/methods/arguments to the same... (diff)
downloadenigma-fork-a146283291d5529eb9363b2fbc6fd5e643dee85a.tar.gz
enigma-fork-a146283291d5529eb9363b2fbc6fd5e643dee85a.tar.xz
enigma-fork-a146283291d5529eb9363b2fbc6fd5e643dee85a.zip
made obfuscated/deobfuscated class selector a bit easier to use
Diffstat (limited to 'src/cuchaz/enigma/gui/Gui.java')
-rw-r--r--src/cuchaz/enigma/gui/Gui.java126
1 files changed, 20 insertions, 106 deletions
diff --git a/src/cuchaz/enigma/gui/Gui.java b/src/cuchaz/enigma/gui/Gui.java
index 46395ac..8ae16f4 100644
--- a/src/cuchaz/enigma/gui/Gui.java
+++ b/src/cuchaz/enigma/gui/Gui.java
@@ -31,7 +31,6 @@ import java.io.IOException;
31import java.lang.Thread.UncaughtExceptionHandler; 31import java.lang.Thread.UncaughtExceptionHandler;
32import java.util.Collection; 32import java.util.Collection;
33import java.util.Collections; 33import java.util.Collections;
34import java.util.Comparator;
35import java.util.List; 34import java.util.List;
36import java.util.Vector; 35import java.util.Vector;
37 36
@@ -79,6 +78,7 @@ import cuchaz.enigma.analysis.MethodImplementationsTreeNode;
79import cuchaz.enigma.analysis.MethodInheritanceTreeNode; 78import cuchaz.enigma.analysis.MethodInheritanceTreeNode;
80import cuchaz.enigma.analysis.ReferenceTreeNode; 79import cuchaz.enigma.analysis.ReferenceTreeNode;
81import cuchaz.enigma.analysis.Token; 80import cuchaz.enigma.analysis.Token;
81import cuchaz.enigma.gui.ClassSelector.ClassSelectionListener;
82import cuchaz.enigma.mapping.ArgumentEntry; 82import cuchaz.enigma.mapping.ArgumentEntry;
83import cuchaz.enigma.mapping.ClassEntry; 83import cuchaz.enigma.mapping.ClassEntry;
84import cuchaz.enigma.mapping.ConstructorEntry; 84import cuchaz.enigma.mapping.ConstructorEntry;
@@ -90,61 +90,12 @@ import cuchaz.enigma.mapping.MethodEntry;
90 90
91public class Gui 91public class Gui
92{ 92{
93 private static Comparator<String> m_obfClassSorter;
94 private static Comparator<String> m_deobfClassSorter;
95
96 static
97 {
98 m_obfClassSorter = new Comparator<String>( )
99 {
100 @Override
101 public int compare( String a, String b )
102 {
103 if( a.length() != b.length() )
104 {
105 return a.length() - b.length();
106 }
107 return a.compareTo( b );
108 }
109 };
110
111 m_deobfClassSorter = new Comparator<String>( )
112 {
113 @Override
114 public int compare( String a, String b )
115 {
116 // I can never keep this rule straight when writing these damn things...
117 // a < b => -1, a == b => 0, a > b => +1
118
119 String[] aparts = a.split( "\\." );
120 String[] bparts = b.split( "\\." );
121 for( int i=0; true; i++ )
122 {
123 if( i >= aparts.length )
124 {
125 return -1;
126 }
127 else if( i >= bparts.length )
128 {
129 return 1;
130 }
131
132 int result = aparts[i].compareTo( bparts[i] );
133 if( result != 0 )
134 {
135 return result;
136 }
137 }
138 }
139 };
140 }
141
142 private GuiController m_controller; 93 private GuiController m_controller;
143 94
144 // controls 95 // controls
145 private JFrame m_frame; 96 private JFrame m_frame;
146 private JList<String> m_obfClasses; 97 private ClassSelector m_obfClasses;
147 private JList<String> m_deobfClasses; 98 private ClassSelector m_deobfClasses;
148 private JEditorPane m_editor; 99 private JEditorPane m_editor;
149 private JPanel m_classesPanel; 100 private JPanel m_classesPanel;
150 private JSplitPane m_splitClasses; 101 private JSplitPane m_splitClasses;
@@ -205,27 +156,17 @@ public class Gui
205 m_exportFileChooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); 156 m_exportFileChooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
206 157
207 // init obfuscated classes list 158 // init obfuscated classes list
208 m_obfClasses = new JList<String>(); 159 m_obfClasses = new ClassSelector( ClassSelector.ObfuscatedClassEntryComparator );
209 m_obfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); 160 m_obfClasses.setListener( new ClassSelectionListener( )
210 m_obfClasses.setLayoutOrientation( JList.VERTICAL );
211 m_obfClasses.setCellRenderer( new ClassListCellRenderer() );
212 m_obfClasses.addMouseListener( new MouseAdapter()
213 { 161 {
214 @Override 162 @Override
215 public void mouseClicked( MouseEvent event ) 163 public void onSelectClass( ClassEntry classEntry )
216 { 164 {
217 if( event.getClickCount() == 2 ) 165 if( m_reference != null )
218 { 166 {
219 String selected = m_obfClasses.getSelectedValue(); 167 m_controller.savePreviousReference( m_reference );
220 if( selected != null )
221 {
222 if( m_reference != null )
223 {
224 m_controller.savePreviousReference( m_reference );
225 }
226 m_controller.openDeclaration( new ClassEntry( selected ) );
227 }
228 } 168 }
169 m_controller.openDeclaration( classEntry );
229 } 170 }
230 } ); 171 } );
231 JScrollPane obfScroller = new JScrollPane( m_obfClasses ); 172 JScrollPane obfScroller = new JScrollPane( m_obfClasses );
@@ -235,27 +176,17 @@ public class Gui
235 obfPanel.add( obfScroller, BorderLayout.CENTER ); 176 obfPanel.add( obfScroller, BorderLayout.CENTER );
236 177
237 // init deobfuscated classes list 178 // init deobfuscated classes list
238 m_deobfClasses = new JList<String>(); 179 m_deobfClasses = new ClassSelector( ClassSelector.DeobfuscatedClassEntryComparator );
239 m_deobfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); 180 m_deobfClasses.setListener( new ClassSelectionListener( )
240 m_deobfClasses.setLayoutOrientation( JList.VERTICAL );
241 m_deobfClasses.setCellRenderer( new ClassListCellRenderer() );
242 m_deobfClasses.addMouseListener( new MouseAdapter()
243 { 181 {
244 @Override 182 @Override
245 public void mouseClicked( MouseEvent event ) 183 public void onSelectClass( ClassEntry classEntry )
246 { 184 {
247 if( event.getClickCount() == 2 ) 185 if( m_reference != null )
248 { 186 {
249 String selected = m_deobfClasses.getSelectedValue(); 187 m_controller.savePreviousReference( m_reference );
250 if( selected != null )
251 {
252 if( m_reference != null )
253 {
254 m_controller.savePreviousReference( m_reference );
255 }
256 m_controller.openDeclaration( new ClassEntry( selected ) );
257 }
258 } 188 }
189 m_controller.openDeclaration( classEntry );
259 } 190 }
260 } ); 191 } );
261 JScrollPane deobfScroller = new JScrollPane( m_deobfClasses ); 192 JScrollPane deobfScroller = new JScrollPane( m_deobfClasses );
@@ -266,6 +197,7 @@ public class Gui
266 197
267 // set up classes panel (don't add the splitter yet) 198 // set up classes panel (don't add the splitter yet)
268 m_splitClasses = new JSplitPane( JSplitPane.VERTICAL_SPLIT, true, obfPanel, deobfPanel ); 199 m_splitClasses = new JSplitPane( JSplitPane.VERTICAL_SPLIT, true, obfPanel, deobfPanel );
200 m_splitClasses.setResizeWeight( 0.3 );
269 m_classesPanel = new JPanel(); 201 m_classesPanel = new JPanel();
270 m_classesPanel.setLayout( new BorderLayout() ); 202 m_classesPanel.setLayout( new BorderLayout() );
271 m_classesPanel.setPreferredSize( new Dimension( 250, 0 ) ); 203 m_classesPanel.setPreferredSize( new Dimension( 250, 0 ) );
@@ -847,32 +779,14 @@ public class Gui
847 redraw(); 779 redraw();
848 } 780 }
849 781
850 public void setObfClasses( List<String> obfClasses ) 782 public void setObfClasses( Collection<ClassEntry> obfClasses )
851 { 783 {
852 if( obfClasses != null ) 784 m_obfClasses.setClasses( obfClasses );
853 {
854 Vector<String> sortedClasses = new Vector<String>( obfClasses );
855 Collections.sort( sortedClasses, m_obfClassSorter );
856 m_obfClasses.setListData( sortedClasses );
857 }
858 else
859 {
860 m_obfClasses.setListData( new Vector<String>() );
861 }
862 } 785 }
863 786
864 public void setDeobfClasses( List<String> deobfClasses ) 787 public void setDeobfClasses( Collection<ClassEntry> deobfClasses )
865 { 788 {
866 if( deobfClasses != null ) 789 m_deobfClasses.setClasses( deobfClasses );
867 {
868 Vector<String> sortedClasses = new Vector<String>( deobfClasses );
869 Collections.sort( sortedClasses, m_deobfClassSorter );
870 m_deobfClasses.setListData( sortedClasses );
871 }
872 else
873 {
874 m_deobfClasses.setListData( new Vector<String>() );
875 }
876 } 790 }
877 791
878 public void setMappingsFile( File file ) 792 public void setMappingsFile( File file )