View Javadoc

1   package net.sourceforge.pmd.util.viewer.gui;
2   
3   import net.sourceforge.pmd.ast.ParseException;
4   import net.sourceforge.pmd.util.viewer.model.ViewerModel;
5   import net.sourceforge.pmd.util.viewer.model.ViewerModelEvent;
6   import net.sourceforge.pmd.util.viewer.model.ViewerModelListener;
7   import net.sourceforge.pmd.util.viewer.util.NLS;
8   
9   import javax.swing.*;
10  import java.awt.BorderLayout;
11  import java.awt.FlowLayout;
12  import java.awt.event.ActionEvent;
13  import java.awt.event.ActionListener;
14  
15  
16  /***
17   * viewer's main frame
18   *
19   * @author Boris Gruschko ( boris at gruschko.org )
20   * @version $Id: MainFrame.java,v 1.10 2005/09/02 19:36:22 tomcopeland Exp $
21   */
22  
23  public class MainFrame
24          extends JFrame
25          implements ActionListener, ActionCommands, ViewerModelListener {
26      private ViewerModel model;
27      private SourceCodePanel sourcePanel;
28      private ASTPanel astPanel;
29      private XPathPanel xPathPanel;
30      private JButton compileBtn;
31      private JButton evalBtn;
32      private JLabel statusLbl;
33  
34      /***
35       * constructs and shows the frame
36       */
37      public MainFrame() {
38          super(NLS.nls("MAIN.FRAME.TITLE"));
39          init();
40      }
41  
42      private void init() {
43          model = new ViewerModel();
44          model.addViewerModelListener(this);
45          sourcePanel = new SourceCodePanel(model);
46          astPanel = new ASTPanel(model);
47          xPathPanel = new XPathPanel(model);
48          getContentPane().setLayout(new BorderLayout());
49          JSplitPane editingPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, sourcePanel, astPanel);
50          editingPane.setResizeWeight(0.5d);
51          JPanel interactionsPane = new JPanel(new BorderLayout());
52          interactionsPane.add(xPathPanel, BorderLayout.SOUTH);
53          interactionsPane.add(editingPane, BorderLayout.CENTER);
54          getContentPane().add(interactionsPane, BorderLayout.CENTER);
55          compileBtn = new JButton(NLS.nls("MAIN.FRAME.COMPILE_BUTTON.TITLE"));
56          compileBtn.setActionCommand(COMPILE_ACTION);
57          compileBtn.addActionListener(this);
58          evalBtn = new JButton(NLS.nls("MAIN.FRAME.EVALUATE_BUTTON.TITLE"));
59          evalBtn.setActionCommand(EVALUATE_ACTION);
60          evalBtn.addActionListener(this);
61          evalBtn.setEnabled(false);
62          statusLbl = new JLabel();
63          statusLbl.setHorizontalAlignment(SwingConstants.RIGHT);
64          JPanel btnPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
65          btnPane.add(compileBtn);
66          btnPane.add(evalBtn);
67          btnPane.add(statusLbl);
68          getContentPane().add(btnPane, BorderLayout.SOUTH);
69          setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
70          pack();
71          setSize(800, 600);
72          setVisible(true);
73      }
74  
75      /***
76       * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
77       */
78      public void actionPerformed(ActionEvent e) {
79          String command = e.getActionCommand();
80          long t0, t1;
81          if (command.equals(COMPILE_ACTION)) {
82              try {
83                  t0 = System.currentTimeMillis();
84                  model.commitSource(sourcePanel.getSourceCode());
85                  t1 = System.currentTimeMillis();
86                  setStatus(NLS.nls("MAIN.FRAME.COMPILATION.TOOK") + " " + (t1 - t0) + " ms");
87              } catch (ParseException exc) {
88                  setStatus(NLS.nls("MAIN.FRAME.COMPILATION.PROBLEM") + " " + exc.toString());
89                  new ParseExceptionHandler(this, exc);
90              }
91          } else if (command.equals(EVALUATE_ACTION)) {
92              try {
93                  t0 = System.currentTimeMillis();
94                  model.evaluateXPathExpression(xPathPanel.getXPathExpression(), this);
95                  t1 = System.currentTimeMillis();
96                  setStatus(NLS.nls("MAIN.FRAME.EVALUATION.TOOK") + " " + (t1 - t0) + " ms");
97              } catch (Exception exc) {
98                  setStatus(NLS.nls("MAIN.FRAME.EVALUATION.PROBLEM") + " " + exc.toString());
99                  new ParseExceptionHandler(this, exc);
100             }
101         }
102     }
103 
104     /***
105      * Sets the status bar message
106      *
107      * @param string the new status, the empty string will be set if the value is <code>null</code>
108      */
109     private void setStatus(String string) {
110         if (string == null)
111             string = "";
112         statusLbl.setText(string);
113     }
114 
115     /***
116      * @see ViewerModelListener#viewerModelChanged(ViewerModelEvent)
117      */
118     public void viewerModelChanged(ViewerModelEvent e) {
119         evalBtn.setEnabled(model.hasCompiledTree());
120     }
121 }