From faae0a6514c2565a10f9a62dd18c5d79fbbe4156 Mon Sep 17 00:00:00 2001 From: jeff Date: Thu, 31 Jul 2014 22:27:26 -0400 Subject: fixed bug with save mappings menu gui shows deobfuscated classes list now working on name validation/sanitization --- src/cuchaz/enigma/gui/ClassListCellRenderer.java | 40 ++++++++++++++ src/cuchaz/enigma/gui/Gui.java | 64 ++++++++++++++++++++-- src/cuchaz/enigma/gui/GuiController.java | 18 +++++- .../gui/ObfuscatedClassListCellRenderer.java | 40 -------------- 4 files changed, 114 insertions(+), 48 deletions(-) create mode 100644 src/cuchaz/enigma/gui/ClassListCellRenderer.java delete mode 100644 src/cuchaz/enigma/gui/ObfuscatedClassListCellRenderer.java (limited to 'src/cuchaz/enigma/gui') diff --git a/src/cuchaz/enigma/gui/ClassListCellRenderer.java b/src/cuchaz/enigma/gui/ClassListCellRenderer.java new file mode 100644 index 0000000..302f140 --- /dev/null +++ b/src/cuchaz/enigma/gui/ClassListCellRenderer.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2014 Jeff Martin. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + * + * Contributors: + * Jeff Martin - initial API and implementation + ******************************************************************************/ +package cuchaz.enigma.gui; + +import java.awt.Component; + +import javax.swing.DefaultListCellRenderer; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.ListCellRenderer; + +import cuchaz.enigma.ClassFile; + +public class ClassListCellRenderer implements ListCellRenderer +{ + private DefaultListCellRenderer m_defaultRenderer; + + public ClassListCellRenderer( ) + { + m_defaultRenderer = new DefaultListCellRenderer(); + } + + @Override + public Component getListCellRendererComponent( JList list, ClassFile classFile, int index, boolean isSelected, boolean hasFocus ) + { + JLabel label = (JLabel)m_defaultRenderer.getListCellRendererComponent( list, classFile, index, isSelected, hasFocus ); + + label.setText( classFile.getName() ); + + return label; + } +} 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; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Vector; @@ -58,6 +60,25 @@ import cuchaz.enigma.mapping.MethodEntry; public class Gui { + private static Comparator m_obfuscatedClassSorter; + + static + { + m_obfuscatedClassSorter = new Comparator( ) + { + @Override + public int compare( ClassFile a, ClassFile b ) + { + if( a.getName().length() != b.getName().length() ) + { + return a.getName().length() - b.getName().length(); + } + + return a.getName().compareTo( b.getName() ); + } + }; + } + private GuiController m_controller; // controls @@ -101,7 +122,7 @@ public class Gui m_obfClasses = new JList(); m_obfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); m_obfClasses.setLayoutOrientation( JList.VERTICAL ); - m_obfClasses.setCellRenderer( new ObfuscatedClassListCellRenderer() ); + m_obfClasses.setCellRenderer( new ClassListCellRenderer() ); m_obfClasses.addMouseListener( new MouseAdapter() { public void mouseClicked( MouseEvent event ) @@ -124,8 +145,23 @@ public class Gui // init deobfuscated classes list m_deobfClasses = new JList(); - m_obfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); - m_obfClasses.setLayoutOrientation( JList.VERTICAL ); + m_deobfClasses.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); + m_deobfClasses.setLayoutOrientation( JList.VERTICAL ); + m_deobfClasses.setCellRenderer( new ClassListCellRenderer() ); + m_deobfClasses.addMouseListener( new MouseAdapter() + { + public void mouseClicked( MouseEvent event ) + { + if( event.getClickCount() == 2 ) + { + ClassFile selected = m_deobfClasses.getSelectedValue(); + if( selected != null ) + { + m_controller.deobfuscateClass( selected ); + } + } + } + } ); JScrollPane deobfScroller = new JScrollPane( m_deobfClasses ); JPanel deobfPanel = new JPanel(); deobfPanel.setLayout( new BorderLayout() ); @@ -248,7 +284,6 @@ public class Gui try { m_controller.openMappings( m_mappingFileChooser.getSelectedFile() ); - m_saveMappingsMenu.setEnabled( true ); } catch( IOException ex ) { @@ -383,7 +418,9 @@ public class Gui { if( classes != null ) { - m_obfClasses.setListData( new Vector( classes ) ); + Vector sortedClasses = new Vector( classes ); + Collections.sort( sortedClasses, m_obfuscatedClassSorter ); + m_obfClasses.setListData( sortedClasses ); } else { @@ -391,6 +428,23 @@ public class Gui } } + public void setDeobfClasses( List classes ) + { + if( classes != null ) + { + m_deobfClasses.setListData( new Vector( classes ) ); + } + else + { + m_deobfClasses.setListData( new Vector() ); + } + } + + public void setMappingsLoaded( boolean isLoaded ) + { + m_saveMappingsMenu.setEnabled( isLoaded ); + } + public void setSource( String source ) { setSource( source, null ); diff --git a/src/cuchaz/enigma/gui/GuiController.java b/src/cuchaz/enigma/gui/GuiController.java index fb22b96..ce1c31b 100644 --- a/src/cuchaz/enigma/gui/GuiController.java +++ b/src/cuchaz/enigma/gui/GuiController.java @@ -14,6 +14,8 @@ import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import cuchaz.enigma.ClassFile; import cuchaz.enigma.Deobfuscator; @@ -45,7 +47,7 @@ public class GuiController { m_deobfuscator = new Deobfuscator( file ); m_gui.onOpenJar( m_deobfuscator.getJarName() ); - m_gui.setObfClasses( m_deobfuscator.getObfuscatedClasses() ); + refreshClasses(); } public void closeJar( ) @@ -60,8 +62,8 @@ public class GuiController FileReader in = new FileReader( file ); m_deobfuscator.setMappings( new MappingsReader().read( in ) ); in.close(); - // TEMP - System.out.println( m_deobfuscator.getMappings() ); + m_gui.setMappingsLoaded( true ); + refreshClasses(); refreshOpenFiles(); } @@ -76,6 +78,7 @@ public class GuiController public void closeMappings( ) { m_deobfuscator.setMappings( null ); + m_gui.setMappingsLoaded( false ); refreshOpenFiles(); } @@ -119,6 +122,15 @@ public class GuiController refreshOpenFiles(); } + private void refreshClasses( ) + { + List obfClasses = new ArrayList(); + List deobfClasses = new ArrayList(); + m_deobfuscator.getSortedClasses( obfClasses, deobfClasses ); + m_gui.setObfClasses( obfClasses ); + m_gui.setDeobfClasses( deobfClasses ); + } + private void refreshOpenFiles( ) { if( m_currentFile != null ) diff --git a/src/cuchaz/enigma/gui/ObfuscatedClassListCellRenderer.java b/src/cuchaz/enigma/gui/ObfuscatedClassListCellRenderer.java deleted file mode 100644 index 0badb3b..0000000 --- a/src/cuchaz/enigma/gui/ObfuscatedClassListCellRenderer.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ -package cuchaz.enigma.gui; - -import java.awt.Component; - -import javax.swing.DefaultListCellRenderer; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.ListCellRenderer; - -import cuchaz.enigma.ClassFile; - -public class ObfuscatedClassListCellRenderer implements ListCellRenderer -{ - private DefaultListCellRenderer m_defaultRenderer; - - public ObfuscatedClassListCellRenderer( ) - { - m_defaultRenderer = new DefaultListCellRenderer(); - } - - @Override - public Component getListCellRendererComponent( JList list, ClassFile classFile, int index, boolean isSelected, boolean hasFocus ) - { - JLabel label = (JLabel)m_defaultRenderer.getListCellRendererComponent( list, classFile, index, isSelected, hasFocus ); - - label.setText( classFile.getName() ); - - return label; - } -} -- cgit v1.2.3