diff options
Diffstat (limited to 'src/cuchaz/enigma/gui/Gui.java')
| -rw-r--r-- | src/cuchaz/enigma/gui/Gui.java | 64 |
1 files changed, 59 insertions, 5 deletions
diff --git a/src/cuchaz/enigma/gui/Gui.java b/src/cuchaz/enigma/gui/Gui.java index a86ff9b..d448dc2 100644 --- a/src/cuchaz/enigma/gui/Gui.java +++ b/src/cuchaz/enigma/gui/Gui.java | |||
| @@ -21,6 +21,8 @@ import java.awt.event.ActionListener; | |||
| 21 | import java.awt.event.MouseAdapter; | 21 | import java.awt.event.MouseAdapter; |
| 22 | import java.awt.event.MouseEvent; | 22 | import java.awt.event.MouseEvent; |
| 23 | import java.io.IOException; | 23 | import java.io.IOException; |
| 24 | import java.util.Collections; | ||
| 25 | import java.util.Comparator; | ||
| 24 | import java.util.List; | 26 | import java.util.List; |
| 25 | import java.util.Vector; | 27 | import java.util.Vector; |
| 26 | 28 | ||
| @@ -58,6 +60,25 @@ import cuchaz.enigma.mapping.MethodEntry; | |||
| 58 | 60 | ||
| 59 | public class Gui | 61 | public class Gui |
| 60 | { | 62 | { |
| 63 | private static Comparator<ClassFile> m_obfuscatedClassSorter; | ||
| 64 | |||
| 65 | static | ||
| 66 | { | ||
| 67 | m_obfuscatedClassSorter = new Comparator<ClassFile>( ) | ||
| 68 | { | ||
| 69 | @Override | ||
| 70 | public int compare( ClassFile a, ClassFile b ) | ||
| 71 | { | ||
| 72 | if( a.getName().length() != b.getName().length() ) | ||
| 73 | { | ||
| 74 | return a.getName().length() - b.getName().length(); | ||
| 75 | } | ||
| 76 | |||
| 77 | return a.getName().compareTo( b.getName() ); | ||
| 78 | } | ||
| 79 | }; | ||
| 80 | } | ||
| 81 | |||
| 61 | private GuiController m_controller; | 82 | private GuiController m_controller; |
| 62 | 83 | ||
| 63 | // controls | 84 | // controls |
| @@ -101,7 +122,7 @@ public class Gui | |||
| 101 | m_obfClasses = new JList<ClassFile>(); | 122 | m_obfClasses = new JList<ClassFile>(); |
| 102 | m_obfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); | 123 | m_obfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); |
| 103 | m_obfClasses.setLayoutOrientation( JList.VERTICAL ); | 124 | m_obfClasses.setLayoutOrientation( JList.VERTICAL ); |
| 104 | m_obfClasses.setCellRenderer( new ObfuscatedClassListCellRenderer() ); | 125 | m_obfClasses.setCellRenderer( new ClassListCellRenderer() ); |
| 105 | m_obfClasses.addMouseListener( new MouseAdapter() | 126 | m_obfClasses.addMouseListener( new MouseAdapter() |
| 106 | { | 127 | { |
| 107 | public void mouseClicked( MouseEvent event ) | 128 | public void mouseClicked( MouseEvent event ) |
| @@ -124,8 +145,23 @@ public class Gui | |||
| 124 | 145 | ||
| 125 | // init deobfuscated classes list | 146 | // init deobfuscated classes list |
| 126 | m_deobfClasses = new JList<ClassFile>(); | 147 | m_deobfClasses = new JList<ClassFile>(); |
| 127 | m_obfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); | 148 | m_deobfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); |
| 128 | m_obfClasses.setLayoutOrientation( JList.VERTICAL ); | 149 | m_deobfClasses.setLayoutOrientation( JList.VERTICAL ); |
| 150 | m_deobfClasses.setCellRenderer( new ClassListCellRenderer() ); | ||
| 151 | m_deobfClasses.addMouseListener( new MouseAdapter() | ||
| 152 | { | ||
| 153 | public void mouseClicked( MouseEvent event ) | ||
| 154 | { | ||
| 155 | if( event.getClickCount() == 2 ) | ||
| 156 | { | ||
| 157 | ClassFile selected = m_deobfClasses.getSelectedValue(); | ||
| 158 | if( selected != null ) | ||
| 159 | { | ||
| 160 | m_controller.deobfuscateClass( selected ); | ||
| 161 | } | ||
| 162 | } | ||
| 163 | } | ||
| 164 | } ); | ||
| 129 | JScrollPane deobfScroller = new JScrollPane( m_deobfClasses ); | 165 | JScrollPane deobfScroller = new JScrollPane( m_deobfClasses ); |
| 130 | JPanel deobfPanel = new JPanel(); | 166 | JPanel deobfPanel = new JPanel(); |
| 131 | deobfPanel.setLayout( new BorderLayout() ); | 167 | deobfPanel.setLayout( new BorderLayout() ); |
| @@ -248,7 +284,6 @@ public class Gui | |||
| 248 | try | 284 | try |
| 249 | { | 285 | { |
| 250 | m_controller.openMappings( m_mappingFileChooser.getSelectedFile() ); | 286 | m_controller.openMappings( m_mappingFileChooser.getSelectedFile() ); |
| 251 | m_saveMappingsMenu.setEnabled( true ); | ||
| 252 | } | 287 | } |
| 253 | catch( IOException ex ) | 288 | catch( IOException ex ) |
| 254 | { | 289 | { |
| @@ -383,7 +418,9 @@ public class Gui | |||
| 383 | { | 418 | { |
| 384 | if( classes != null ) | 419 | if( classes != null ) |
| 385 | { | 420 | { |
| 386 | m_obfClasses.setListData( new Vector<ClassFile>( classes ) ); | 421 | Vector<ClassFile> sortedClasses = new Vector<ClassFile>( classes ); |
| 422 | Collections.sort( sortedClasses, m_obfuscatedClassSorter ); | ||
| 423 | m_obfClasses.setListData( sortedClasses ); | ||
| 387 | } | 424 | } |
| 388 | else | 425 | else |
| 389 | { | 426 | { |
| @@ -391,6 +428,23 @@ public class Gui | |||
| 391 | } | 428 | } |
| 392 | } | 429 | } |
| 393 | 430 | ||
| 431 | public void setDeobfClasses( List<ClassFile> classes ) | ||
| 432 | { | ||
| 433 | if( classes != null ) | ||
| 434 | { | ||
| 435 | m_deobfClasses.setListData( new Vector<ClassFile>( classes ) ); | ||
| 436 | } | ||
| 437 | else | ||
| 438 | { | ||
| 439 | m_deobfClasses.setListData( new Vector<ClassFile>() ); | ||
| 440 | } | ||
| 441 | } | ||
| 442 | |||
| 443 | public void setMappingsLoaded( boolean isLoaded ) | ||
| 444 | { | ||
| 445 | m_saveMappingsMenu.setEnabled( isLoaded ); | ||
| 446 | } | ||
| 447 | |||
| 394 | public void setSource( String source ) | 448 | public void setSource( String source ) |
| 395 | { | 449 | { |
| 396 | setSource( source, null ); | 450 | setSource( source, null ); |