From 6b4107aaf1e9e799f3debfacf8492ba54b637df4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Sat, 2 Mar 2013 22:59:51 +0100 Subject: [PATCH] AS3 classes search homepage link in the menu --- .../flash/abc/gui/ClassesListTree.java | 2 +- .../jpexs/decompiler/flash/gui/MainFrame.java | 121 +++++++++++++++++- .../decompiler/flash/gui/graphics/as16.png | Bin 603 -> 587 bytes .../flash/gui/graphics/cancel16.png | Bin 0 -> 587 bytes .../flash/gui/graphics/homepage16.png | Bin 0 -> 806 bytes .../flash/gui/graphics/search16.png | Bin 715 -> 615 bytes 6 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 trunk/src/com/jpexs/decompiler/flash/gui/graphics/cancel16.png create mode 100644 trunk/src/com/jpexs/decompiler/flash/gui/graphics/homepage16.png diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java index 8f625da38..b8718f4e6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/gui/ClassesListTree.java @@ -34,7 +34,7 @@ import javax.swing.tree.TreeSelectionModel; public class ClassesListTree extends JTree implements TreeSelectionListener { private List abcList; - private HashMap treeList; + public HashMap treeList; private ABCPanel abcPanel; public void selectClass(int classIndex) { diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java index bdfc762d1..668d4fb8c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.Main; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFOutputStream; import com.jpexs.decompiler.flash.abc.gui.ABCPanel; +import com.jpexs.decompiler.flash.abc.gui.ClassesListTreeModel; import com.jpexs.decompiler.flash.abc.gui.DeobfuscationDialog; import com.jpexs.decompiler.flash.abc.gui.TreeElement; import com.jpexs.decompiler.flash.abc.gui.TreeLeafScript; @@ -78,6 +79,10 @@ import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.ByteArrayOutputStream; @@ -91,6 +96,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Icon; +import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFileChooser; import javax.swing.JFrame; @@ -104,10 +110,13 @@ import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; +import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.SwingConstants; import javax.swing.SwingWorker; import javax.swing.border.BevelBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultTreeCellRenderer; @@ -147,6 +156,8 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi JSplitPane splitPane1; JSplitPane splitPane2; private JPanel detailPanel; + private JTextField filterField = new JTextField(""); + private JPanel searchPanel; public void setPercent(int percent) { progressBar.setValue(percent); @@ -324,10 +335,16 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi miDonate.setActionCommand("DONATE"); miDonate.setIcon(View.getIcon("donate16")); miDonate.addActionListener(this); + + JMenuItem miHomepage = new JMenuItem("Visit homepage"); + miHomepage.setActionCommand("HOMEPAGE"); + miHomepage.setIcon(View.getIcon("homepage16")); + miHomepage.addActionListener(this); menuHelp.add(miCheckUpdates); menuHelp.add(miDonate); + menuHelp.add(miHomepage); menuHelp.add(miAbout); menuBar.add(menuHelp); @@ -349,7 +366,7 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi CardLayout cl2 = (CardLayout) (detailPanel.getLayout()); cl2.show(detailPanel, DETAILCARDEMPTYPANEL); - + abcList = new ArrayList(); getActionScript3(objs, abcList); if (!abcList.isEmpty()) { @@ -446,16 +463,84 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi } CardLayout cl = (CardLayout) (displayPanel.getLayout()); cl.show(displayPanel, CARDEMPTYPANEL); + + searchPanel = new JPanel(); + searchPanel.setLayout(new BorderLayout()); + searchPanel.add(filterField, BorderLayout.CENTER); + searchPanel.add(new JLabel(View.getIcon("search16")), BorderLayout.WEST); + JLabel closeSearchButton=new JLabel(View.getIcon("cancel16")); + closeSearchButton.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + filterField.setText(""); + doFilter(); + searchPanel.setVisible(false); + } + + }); + searchPanel.add(closeSearchButton, BorderLayout.EAST); + JPanel pan1 = new JPanel(new BorderLayout()); + pan1.add(new JScrollPane(tagTree), BorderLayout.CENTER); + pan1.add(searchPanel, BorderLayout.SOUTH); + + filterField.setActionCommand("FILTERSCRIPT"); + filterField.addActionListener(this); + + searchPanel.setVisible(false); + + filterField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void changedUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void insertUpdate(DocumentEvent e) { + warn(); + } + + public void warn() { + doFilter(); + } + }); + //displayPanel.setBorder(BorderFactory.createLineBorder(Color.black)); - splitPane2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(tagTree), detailPanel); + splitPane2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, pan1, detailPanel); splitPane1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, splitPane2, displayPanel); cnt.add(splitPane1, BorderLayout.CENTER); splitPane1.setDividerLocation(0.5); View.centerScreen(this); + tagTree.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if((e.getKeyCode()=='F')&&(e.isControlDown())){ + searchPanel.setVisible(true); + filterField.requestFocusInWindow(); + } + } + + }); + detailPanel.setVisible(false); } + public void doFilter() { + TagNode n = getASTagNode(tagTree); + if (n != null) { + if (n.tag instanceof ClassesListTreeModel) { + n.tag = new ClassesListTreeModel(abcPanel.classTree.treeList, filterField.getText()); + } + tagTree.updateUI(); + } + } + @Override public void setVisible(boolean b) { super.setVisible(b); @@ -466,8 +551,9 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi if (actionPanel != null) { actionPanel.initSplits(); } - splitPane1.setDividerLocation(getWidth() / 3); + splitPane1.setDividerLocation(getWidth() / 3); splitPane2.setDividerLocation(splitPane2.getHeight() * 3 / 5); + splitPos=splitPane2.getDividerLocation(); } } @@ -784,7 +870,7 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi if (node instanceof TagNode) { Object tag = ((TagNode) tm.getChild(root, i)).tag; if (tag != null) { - if (tag.equals("scripts")) { + if (tag.toString().equals("scripts")) { return (TagNode) node; } } @@ -1070,6 +1156,20 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi JOptionPane.showMessageDialog(null, "Please visit\r\n" + donateURL + "\r\nfor details."); } } + + if (e.getActionCommand().equals("HOMEPAGE")) { + String homePageURL = Main.projectPage; + if (java.awt.Desktop.isDesktopSupported()) { + java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); + try { + java.net.URI uri = new java.net.URI(homePageURL); + desktop.browse(uri); + } catch (Exception ex) { + } + } else { + JOptionPane.showMessageDialog(null, "Visit homepage at: \r\n" + homePageURL); + } + } if (e.getActionCommand().startsWith("RESTORECONTROLFLOW")) { Main.startWork("Restoring control flow..."); @@ -1223,9 +1323,22 @@ public class MainFrame extends JFrame implements ActionListener, TreeSelectionLi } } + private int splitPos=0; public void showDetail(String card) { CardLayout cl = (CardLayout) (detailPanel.getLayout()); cl.show(detailPanel, card); + if(card.equals(DETAILCARDEMPTYPANEL)){ + if(detailPanel.isVisible()){ + splitPos=splitPane2.getDividerLocation(); + detailPanel.setVisible(false); + } + }else{ + if(!detailPanel.isVisible()){ + detailPanel.setVisible(true); + splitPane2.setDividerLocation(splitPos); + } + } + } public void showCard(String card) { diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/graphics/as16.png b/trunk/src/com/jpexs/decompiler/flash/gui/graphics/as16.png index 0c76bd1297751b66230f74719504b2adb02b1615..87a69145075afd8f8fd8b391c5da1249ec8b2889 100644 GIT binary patch delta 508 zcmV`_iMH&pW)P^)o zTM*K&h89HhlL*Nn-#|Zr2S0>86z!oWu_fE=pX}_+ZZ^9~{Wy^E#IitPBPNHXIJGN23vDA?s*1n|~j&lB}RW;UEYQhM~sy zeR!USZnvu>rfH(pYH3LtzC!}~Ac`Wyajf2i5CV)bSeB&({eBHz%Z_E@mD3xCmQKpY<+vaXbbW{L4q(TsjXEJvb}e%XOU>AD#A$3hbi|RrC(GBsDni zYKVIlk|a@3cuGLKuzY`h)p}orRbNv@cmMe~%v>GLG9^e4(!a>lIg^_Nzizq*Gq~1* yKa#v`P)LQ_gypwF-QJ8~i6pnU&M9>Dmwp3~i@keBpk_J%0000_GxbD3wZ(Wx1^-HWN?qC>)8-ewQ${TV%n+fr7aM8H!>1ttg7ZD&cv)Rq%BA zPtVZ1yy~aKgxflFU-Eg5hJWKrNg$?o1VyS)KHh$Q#8&K`92L;nB=&B~a(qCe&U P0000FS^-G}e*;M)Q6>s#cP zI`Y#S($G6W`W@NI5g|L-MKl0Zmu$m^(0~^Lwo5OO~d#(vPfz1KIqEP)v;U&v3%|^C`Ga3?LtY&4dQB4Oz;1v;J%z!D&%WRH@BZ?x; z3)8@IUIv@hG|@IwyHLC`l{1<4BK>wam95g|i|?Cfzt876&-Zx_0f5*l-9`IJI&mHu zE6$@xB)6N}7VeR;!X8D!TAw;;&0Bsj?A071cO>X3K0wl7WZ1;Tg!4LHyNcnzoeQ7t zNW`aSlm8WXYkek&ir$13=ngczvf zV0vnjNpCF&K8px}dunv+`LIb-sOC$_jD(;IBI$xC|7`(+9cA>Vir_V#z{?k7SX^Ah z^71m~W@q439Ycqfhi7+gp#A14n1n1!e>$EdeATG|f798Y=ggzwEKH2Q!qU2QA(Se?dwqG69%>n$6rtE z%F(845Az8c{w(XgimJg96!jLMz?zS6I1HUm2baqQx7&@nx;lhHA!r6vs2|fqJETOu zLxeu2OQ(3(au%dg>AcZsWI(zXn9XJg1cLe8k~0h0wOL=&HK}7X k{AKr*U4z7Szv)i%9gTgghwgU$Q~&?~07*qoM6N<$g31kYk^lez literal 0 HcmV?d00001 diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/graphics/search16.png b/trunk/src/com/jpexs/decompiler/flash/gui/graphics/search16.png index 15ca0b92bd019bce2fa58ec9e11ef7add81642bf..cf3d97f75e9cde9c143980d89272fe61fc2d64ee 100644 GIT binary patch delta 589 zcmV-T0eSaefwW^{L9a%BKPWN%_+AW3au zXJt}lVPtu6$z?nM00H?)L_t(I%cYXPYm;FR$G`87Bu1>MnxqheKj={P4-hIspha-V z)U6;6f;d!n-MR>l4yJ>Pi_%R5J5)s>B8Zwn(8gBKL<=#|*nbKpZ{Fv5?w)h7RwQ|q z;%B*=KKH%j91+3);QwkK*VwhzmWZXu%sFBUL);+Z1!H(-dOU3h2^cF83?VXs*3<}%h3`5Wld)N2zJnk%Agw<~3k)sP zTLFd=F5;d8-bj-09SkQuynfflNcZLN!^_37fdZvzrhnG#l$SnyL(BuRLq4)8A8}Xk zyxK(PYZH^X);6VrCwDF$8|(W60JwVhy=#a{#&A&+=g2S&@uzfeNl&C+9n2p-ipI(d zysg}C8xtNsb?wc{AA%?rXHUen4(HSR4o&SpGLF^dXQ)>0wa;9yXEs;(8z*NUXr+Sb zdiCk;MzCV_|S*E^l&Yo9;Xs0006=Nklp>8zkqN@mRs*7&A=q3m+x~qwd7k~X5?5@iocTu-NBoq=x zzm_9Rti;G^t8Gl3ZaeRJx|jpY8GhmL91hR(;rl%2A!bGc(b(8n2Q!Dm;c$9rXsFyM z2>@t2Ael_cPqVYb0Nn*(u~M3J)iP2&^MY^0;PH3CG8@>FY60R#aS0k)_`xqo%oAFx=c*6o0LKOaT8xE8t&U>pC1Uvbu2LL?k$uUEf?PR30Q#ncII2@qd~~f6sv_o?0rd zojwq-4fy8ZnU<4#1^|HQT)tl@>0eXd3L8RTMJtdB?YV`z2D@YDC7~xD$&OD>vaY}X Y0p!x_DJbM5kN^Mx07*qoM6N<$f+Yz(`Tzg`