diff --git a/trunk/src/com/jpexs/asdec/Main.java b/trunk/src/com/jpexs/asdec/Main.java index 70ca64f87..dec45a031 100644 --- a/trunk/src/com/jpexs/asdec/Main.java +++ b/trunk/src/com/jpexs/asdec/Main.java @@ -19,6 +19,7 @@ package com.jpexs.asdec; import com.jpexs.asdec.abc.NotSameException; +import com.jpexs.asdec.gui.AboutDialog; import com.jpexs.asdec.gui.LoadingDialog; import com.jpexs.asdec.gui.ModeFrame; import com.jpexs.asdec.gui.View; @@ -464,4 +465,9 @@ public class Main { saveReplacements(); System.exit(0); } + + public static void about() + { + (new AboutDialog()).setVisible(true); + } } diff --git a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java index dc5fa5e4c..b9929cd53 100644 --- a/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java +++ b/trunk/src/com/jpexs/asdec/abc/gui/MainFrame.java @@ -283,6 +283,13 @@ public class MainFrame extends JFrame implements ActionListener, ItemListener { menuTools.add(miProxy); menuBar.add(menuTools); + JMenu menuHelp = new JMenu("Help"); + JMenuItem miAbout = new JMenuItem("About..."); + miAbout.setActionCommand("ABOUT"); + miAbout.addActionListener(this); + menuHelp.add(miAbout); + menuBar.add(menuHelp); + setJMenuBar(menuBar); /* Constants */ @@ -327,6 +334,10 @@ public class MainFrame extends JFrame implements ActionListener, ItemListener { Main.exit(); } if (Main.isWorking()) return; + + if (e.getActionCommand().equals("ABOUT")) { + Main.about(); + } if (e.getActionCommand().equals("SHOWPROXY")) { diff --git a/trunk/src/com/jpexs/asdec/action/Action.java b/trunk/src/com/jpexs/asdec/action/Action.java index 8e0f42afb..89033a2ae 100644 --- a/trunk/src/com/jpexs/asdec/action/Action.java +++ b/trunk/src/com/jpexs/asdec/action/Action.java @@ -430,10 +430,14 @@ public class Action { * @return address */ public static long ip2adr(List actions, int ip, int version) { - if (ip == actions.size()) { + if (ip >= actions.size()) { if (actions.size() == 0) return 0; return actions.get(actions.size() - 1).getAddress() + actions.get(actions.size() - 1).getBytes(version).length; } + if(ip==-1) + { + return 0; + } return actions.get(ip).getAddress(); } diff --git a/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java b/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java index 6e81313a6..338576e7f 100644 --- a/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java +++ b/trunk/src/com/jpexs/asdec/action/gui/MainFrame.java @@ -177,6 +177,13 @@ public class MainFrame extends JFrame implements TreeSelectionListener, ActionLi menuTools.add(miProxy); menuBar.add(menuTools); + JMenu menuHelp = new JMenu("Help"); + JMenuItem miAbout = new JMenuItem("About..."); + miAbout.setActionCommand("ABOUT"); + miAbout.addActionListener(this); + menuHelp.add(miAbout); + menuBar.add(menuHelp); + setJMenuBar(menuBar); setTitle(Main.applicationName + " - " + Main.getFileTitle()); @@ -195,8 +202,12 @@ public class MainFrame extends JFrame implements TreeSelectionListener, ActionLi @Override public void run() { editor.setText(asm.getASMSource(10)); //TODO:Ensure correct version here - if(Main.DO_DECOMPILE) - decompiledEditor.setText(Highlighting.stripHilights(com.jpexs.asdec.action.Action.actionsToSource(asm.getActions(10), 10))); //TODO:Ensure correct version here + if(Main.DO_DECOMPILE){ + List as=asm.getActions(10);//TODO:Ensure correct version here + com.jpexs.asdec.action.Action.setActionsAddresses(as, 0, 10);//TODO:Ensure correct version here + + decompiledEditor.setText(Highlighting.stripHilights(com.jpexs.asdec.action.Action.actionsToSource(as, 10))); //TODO:Ensure correct version here + } Main.stopWork(); } }).start(); @@ -214,6 +225,9 @@ public class MainFrame extends JFrame implements TreeSelectionListener, ActionLi if (e.getActionCommand().equals("EXIT")) { System.exit(0); } + if (e.getActionCommand().equals("ABOUT")) { + Main.about(); + } if (e.getActionCommand().equals("SHOWPROXY")) { Main.showProxy(); } diff --git a/trunk/src/com/jpexs/asdec/gui/AboutDialog.java b/trunk/src/com/jpexs/asdec/gui/AboutDialog.java new file mode 100644 index 000000000..16bd63bd0 --- /dev/null +++ b/trunk/src/com/jpexs/asdec/gui/AboutDialog.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2011 JPEXS + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.jpexs.asdec.gui; + +import com.jpexs.asdec.Main; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.SwingConstants; + +/** + * + * @author JPEXS + */ +public class AboutDialog extends JDialog { + public AboutDialog() { + setDefaultCloseOperation(HIDE_ON_CLOSE); + setSize(new Dimension(300,270)); + setTitle("About"); + + + Container cp=getContentPane(); + cp.setLayout(new FlowLayout()); + + JLabel jpLabel=new JLabel("JP"); + jpLabel.setForeground(new Color(0,0,160)); + jpLabel.setFont(new Font("Tahoma",Font.BOLD,25)); + jpLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(jpLabel); + + JLabel asLabel=new JLabel("ActionScript"); + asLabel.setFont(new Font("Tahoma",Font.BOLD,25)); + asLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(asLabel); + + JLabel decLabel=new JLabel("Decompiler"); + decLabel.setForeground(Color.red); + decLabel.setFont(new Font("Tahoma",Font.BOLD,25)); + decLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(decLabel); + + JLabel verLabel=new JLabel("version "+Main.version); + verLabel.setPreferredSize(new Dimension(300, 15)); + verLabel.setFont(new Font("Tahoma",Font.BOLD,15)); + verLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(verLabel); + + + JLabel byLabel=new JLabel("by"); + byLabel.setPreferredSize(new Dimension(300, 15)); + byLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(byLabel); + + JLabel jpexsLabel=new JLabel("JPEXS"); + jpexsLabel.setForeground(new Color(0,0,160)); + jpexsLabel.setFont(new Font("Tahoma",Font.BOLD,20)); + jpexsLabel.setPreferredSize(new Dimension(300, 25)); + jpexsLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(jpexsLabel); + + JLabel dateLabel=new JLabel("2010-2011"); + dateLabel.setPreferredSize(new Dimension(300, 10)); + dateLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(dateLabel); + + LinkLabel wwwLabel=new LinkLabel("http://code.google.com/p/asdec/"); + wwwLabel.setForeground(Color.blue); + wwwLabel.setPreferredSize(new Dimension(300, 25)); + wwwLabel.setHorizontalAlignment(SwingConstants.CENTER); + cp.add(wwwLabel); + + JButton okButton=new JButton("OK"); + cp.add(okButton); + okButton.addActionListener(new ActionListener(){ + + public void actionPerformed(ActionEvent e) { + setVisible(false); + } + }); + + setModal(true); + View.centerScreen(this); + View.setWindowIcon(this); + } + + +} diff --git a/trunk/src/com/jpexs/asdec/gui/LinkLabel.java b/trunk/src/com/jpexs/asdec/gui/LinkLabel.java new file mode 100644 index 000000000..3dca092da --- /dev/null +++ b/trunk/src/com/jpexs/asdec/gui/LinkLabel.java @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2011 JPEXS + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package com.jpexs.asdec.gui; + + +import java.awt.Cursor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import javax.swing.JLabel; + + +/** + * An extension of JLabel which looks like a link and responds appropriately + * when clicked. Note that this class will only work with Swing 1.1.1 and later. + * Note that because of the way this class is implemented, getText() will not + * return correct values, user getNormalText instead. + */ + +public class LinkLabel extends JLabel{ + + + + /** + * The normal text set by the user. + */ + + private String text; + + + + + /** + * Creates a new LinkLabel with the given text. + */ + + public LinkLabel(String text){ + super(text); + + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + enableEvents(MouseEvent.MOUSE_EVENT_MASK); + } + + + + + /** + * Sets the text of the label. + */ + + public void setText(String text){ + super.setText(""+text+""); + this.text = text; + } + + + + + /** + * Returns the text set by the user. + */ + + public String getNormalText(){ + return text; + } + + + + + /** + * Processes mouse events and responds to clicks. + */ + + protected void processMouseEvent(MouseEvent evt){ + super.processMouseEvent(evt); + if (evt.getID() == MouseEvent.MOUSE_CLICKED) + clicked(); + } + + + protected void clicked(){ + if(java.awt.Desktop.isDesktopSupported() ) + { + java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); + try { + java.net.URI uri = new java.net.URI( getNormalText() ); + desktop.browse( uri ); + } + catch ( Exception e ) { + + System.err.println( e.getMessage() ); + } + } + } + + +} diff --git a/trunk/src/com/jpexs/asdec/gui/View.java b/trunk/src/com/jpexs/asdec/gui/View.java index d9780df42..51875ee7b 100644 --- a/trunk/src/com/jpexs/asdec/gui/View.java +++ b/trunk/src/com/jpexs/asdec/gui/View.java @@ -61,7 +61,7 @@ public class View { * * @param f Frame to set icon in */ - public static void setWindowIcon(Frame f) { + public static void setWindowIcon(Window f) { java.util.List images = new ArrayList(); images.add(loadImage("com/jpexs/asdec/gui/graphics/icon16.png")); images.add(loadImage("com/jpexs/asdec/gui/graphics/icon32.png")); @@ -74,7 +74,7 @@ public class View { * * @param f Frame to center on the screen */ - public static void centerScreen(Frame f) { + public static void centerScreen(Window f) { Dimension dim = f.getToolkit().getScreenSize(); Rectangle abounds = f.getBounds(); f.setLocation((dim.width - abounds.width) / 2,