From 999c64037fb7251f87bd7b105231b3763e003c07 Mon Sep 17 00:00:00 2001 From: hg Date: Sun, 27 Jul 2014 00:52:28 -0400 Subject: made gui responsive to caret position and show identifier info --- src/cuchaz/enigma/Controller.java | 83 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/cuchaz/enigma/Controller.java (limited to 'src/cuchaz/enigma/Controller.java') diff --git a/src/cuchaz/enigma/Controller.java b/src/cuchaz/enigma/Controller.java new file mode 100644 index 0000000..debc5e3 --- /dev/null +++ b/src/cuchaz/enigma/Controller.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * 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; + +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; + +import cuchaz.enigma.analysis.Analyzer; +import cuchaz.enigma.analysis.SourceIndex; +import cuchaz.enigma.gui.ClassSelectionListener; +import cuchaz.enigma.gui.Gui; +import cuchaz.enigma.gui.RenameListener; +import cuchaz.enigma.mapping.Entry; + +public class Controller implements ClassSelectionListener, CaretListener, RenameListener +{ + private Deobfuscator m_deobfuscator; + private Gui m_gui; + private SourceIndex m_index; + + public Controller( Deobfuscator deobfuscator, Gui gui ) + { + m_deobfuscator = deobfuscator; + m_gui = gui; + m_index = null; + + // update GUI + gui.setTitle( deobfuscator.getJarName() ); + gui.setObfClasses( deobfuscator.getObfuscatedClasses() ); + + // handle events + gui.setClassSelectionListener( this ); + gui.setCaretListener( this ); + gui.setRenameListener( this ); + } + + @Override + public void classSelected( final ClassFile classFile ) + { + m_gui.setSource( "(deobfuscating...)" ); + + // run the deobfuscator in a separate thread so we don't block the GUI event queue + new Thread( ) + { + @Override + public void run( ) + { + // deobfuscate the bytecode + String source = m_deobfuscator.getSource( classFile ); + m_gui.setSource( source ); + + // index the source file + m_index = Analyzer.analyze( classFile.getName(), source ); + m_gui.highlightTokens( m_index.tokens() ); + } + }.start(); + } + + @Override + public void caretUpdate( CaretEvent event ) + { + if( m_index != null ) + { + int pos = event.getDot(); + m_gui.showEntry( m_index.getEntry( pos ) ); + } + } + + @Override + public void rename( Entry entry, String newName ) + { + // TEMP + System.out.println( "Rename " + entry + " to " + newName ); + } +} -- cgit v1.2.3