diff --git a/pmd/src/net/sourceforge/pmd/util/designer/CreateXMLRulePanel.java b/pmd/src/net/sourceforge/pmd/util/designer/CreateXMLRulePanel.java new file mode 100644 index 0000000000..4ebc729d40 --- /dev/null +++ b/pmd/src/net/sourceforge/pmd/util/designer/CreateXMLRulePanel.java @@ -0,0 +1,140 @@ +package net.sourceforge.pmd.util.designer; + +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import net.sourceforge.pmd.PMD; + +/** + * This class is responsible for creating the + * contentpanel for the Create Rule XML Frame. + */ +public class CreateXMLRulePanel extends JPanel implements ActionListener{ + + private static final JTextField rulenameField = new JTextField(30); + private static final JTextField rulemsgField = new JTextField(30); + private static final JTextArea ruledescField = new JTextArea(5,30); + private static final JTextArea ruleXMLArea = new JTextArea(30, 30); + private JTextArea xpathQueryArea = new JTextArea(); + private CodeEditorTextPane codeEditorPane = new CodeEditorTextPane(); + + public CreateXMLRulePanel(JTextArea xpathQueryArea, CodeEditorTextPane codeEditorPane){ + super(); + this.xpathQueryArea = xpathQueryArea; + this.codeEditorPane = codeEditorPane; + GridBagConstraints gbc = new GridBagConstraints(); + // We use a gridbaglayout for a nice and sturdy look and feel + GridBagLayout gbl = new GridBagLayout(); + setLayout(gbl); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.fill = GridBagConstraints.NONE; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = 0.5; + JLabel rulenameLabel = new JLabel("Rule name : "); + gbl.setConstraints(rulenameLabel, gbc); + add(rulenameLabel); + gbc.weightx = 0.5; + gbc.anchor = GridBagConstraints.WEST; + gbc.gridx = 1; + gbl.setConstraints(rulenameField, gbc); + add(rulenameField); + + gbc.gridx = 0; + gbc.gridy = 1; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = 0.5; + JLabel rulemsgLabel = new JLabel("Rule msg : "); + gbl.setConstraints(rulemsgLabel, gbc); + add(rulemsgLabel); + gbc.gridx = 1; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 0.5; + gbl.setConstraints(rulemsgField, gbc); + add(rulemsgField); + + gbc.gridx = 0; + gbc.gridy = 2; + gbc.anchor = GridBagConstraints.EAST; + gbc.weightx = 0.5; + JLabel ruledescLabel = new JLabel("Rule desc : "); + gbl.setConstraints(ruledescLabel,gbc); + add(ruledescLabel); + gbc.gridx = 1; + gbc.anchor = GridBagConstraints.WEST; + gbc.weightx = 0.5; + gbl.setConstraints(ruledescField,gbc); + add(ruledescField); + + gbc.gridx = 0; + gbc.gridy = 3; + gbc.gridwidth = 2; + gbc.anchor = GridBagConstraints.NORTH; + JButton createRuleBtn = new JButton("Create rule XML"); + createRuleBtn.addActionListener(this); + gbl.setConstraints(createRuleBtn, gbc); + add(createRuleBtn); + + gbc.gridx = 0; + gbc.gridy = 4; + gbc.anchor = GridBagConstraints.NORTH; + gbc.fill = GridBagConstraints.BOTH; + gbc.weightx = 1.0; + gbc.weighty = 1.0; + JScrollPane ruleXMLPane = new JScrollPane(ruleXMLArea); + gbl.setConstraints(ruleXMLPane, gbc); + add(ruleXMLPane); + + repaint(); + } + + + /** + * We let our class implement the ActionListener interface + * and use it to generate the xml code when the user presses + * the "Create rule XML" button. + * + */ + public void actionPerformed(ActionEvent exception) { + StringBuffer buffer = new StringBuffer(); + buffer.append("" + PMD.EOL); + buffer.append(" " + PMD.EOL); + buffer.append(" " + ruledescField.getText() + PMD.EOL); + buffer.append(" " + PMD.EOL); + if (xpathQueryArea.getText().length() != 0) { + buffer.append(" " + PMD.EOL); + buffer.append(" " + PMD.EOL); + buffer.append(" " + PMD.EOL); + buffer.append("" + PMD.EOL); + buffer.append(" " + PMD.EOL); + buffer.append(" " + PMD.EOL); + buffer.append(" " + PMD.EOL); + } + buffer.append(" 3" + PMD.EOL); + buffer.append(" " + PMD.EOL); + buffer.append("" + PMD.EOL); + buffer.append(" " + PMD.EOL); + buffer.append("" + PMD.EOL); + + ruleXMLArea.setText(buffer.toString()); + repaint(); + } + +} + diff --git a/pmd/src/net/sourceforge/pmd/util/designer/Designer.java b/pmd/src/net/sourceforge/pmd/util/designer/Designer.java index 7001630f33..99e19f2409 100644 --- a/pmd/src/net/sourceforge/pmd/util/designer/Designer.java +++ b/pmd/src/net/sourceforge/pmd/util/designer/Designer.java @@ -48,6 +48,7 @@ import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.ComponentEvent; import java.awt.event.KeyEvent; import java.io.IOException; import java.io.StringReader; @@ -457,13 +458,12 @@ public class Designer implements ClipboardOwner { int screenHeight = screenSize.height; int screenWidth = screenSize.width; - frame.setSize(screenHeight - (screenHeight / 4), screenHeight - (screenHeight / 4)); - frame.setLocation((screenWidth / 2) - frame.getWidth() / 2, (screenHeight / 2) - frame.getHeight() / 2); - frame.setVisible(true); frame.pack(); - frame.show(); + frame.setSize((screenWidth*3/4),(screenHeight*3/4)); + frame.setLocation((screenWidth -frame.getWidth()) / 2, (screenHeight - frame.getHeight()) / 2); + frame.setVisible(true); resultsSplitPane.setDividerLocation(resultsSplitPane.getMaximumDividerLocation() - (resultsSplitPane.getMaximumDividerLocation() / 2)); - //containerSplitPane.setDividerLocation(containerSplitPane.getMaximumDividerLocation() / 2); + containerSplitPane.setDividerLocation(containerSplitPane.getMaximumDividerLocation() / 2); } private JMenuBar createMenuBar() { @@ -501,82 +501,24 @@ public class Designer implements ClipboardOwner { } private void createRuleXML() { - JPanel rulenamePanel = new JPanel(); - rulenamePanel.setLayout(new FlowLayout()); - rulenamePanel.add(new JLabel("Rule name")); - final JTextField rulenameField = new JTextField(30); - rulenamePanel.add(rulenameField); - JPanel rulemsgPanel = new JPanel(); - rulemsgPanel.setLayout(new FlowLayout()); - rulemsgPanel.add(new JLabel("Rule msg")); - final JTextField rulemsgField = new JTextField(60); - rulemsgPanel.add(rulemsgField); - JPanel ruledescPanel = new JPanel(); - ruledescPanel.setLayout(new FlowLayout()); - ruledescPanel.add(new JLabel("Rule desc")); - final JTextField ruledescField = new JTextField(60); - ruledescPanel.add(ruledescField); - JPanel ruleXMLPanel = new JPanel(); - final JTextArea ruleXMLArea = new JTextArea(30, 50); - makeTextComponentUndoable(ruleXMLArea); - ruleXMLPanel.add(ruleXMLArea); - JButton go = new JButton("Create rule XML"); - go.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - StringBuffer sb = new StringBuffer(); - sb.append("" + PMD.EOL); - sb.append(" " + PMD.EOL); - sb.append(" " + ruledescField.getText() + PMD.EOL); - sb.append(" " + PMD.EOL); - if (xpathQueryArea.getText().length() != 0) { - sb.append(" " + PMD.EOL); - sb.append(" " + PMD.EOL); - sb.append(" " + PMD.EOL); - sb.append("" + PMD.EOL); - sb.append(" " + PMD.EOL); - sb.append(" " + PMD.EOL); - sb.append(" " + PMD.EOL); - } - sb.append(" 3" + PMD.EOL); - sb.append(" " + PMD.EOL); - sb.append("" + PMD.EOL); - sb.append(" " + PMD.EOL); - sb.append("" + PMD.EOL); - - ruleXMLArea.setText(sb.toString()); - } - }); - - JPanel fieldsPanel = new JPanel(); - fieldsPanel.setLayout(new BorderLayout()); - fieldsPanel.add(rulenamePanel, BorderLayout.NORTH); - fieldsPanel.add(rulemsgPanel, BorderLayout.CENTER); - fieldsPanel.add(ruledescPanel, BorderLayout.SOUTH); - - JPanel fieldBtnPanel = new JPanel(); - fieldBtnPanel.setLayout(new BorderLayout()); - fieldBtnPanel.add(fieldsPanel, BorderLayout.NORTH); - fieldBtnPanel.add(go, BorderLayout.SOUTH); - - JPanel outer = new JPanel(new BorderLayout()); - outer.add(fieldBtnPanel, BorderLayout.NORTH); - outer.add(ruleXMLPanel, BorderLayout.SOUTH); - - JDialog d = new JDialog(frame); - d.setSize(200, 300); - d.getContentPane().add(outer); + CreateXMLRulePanel rulePanel = new CreateXMLRulePanel(xpathQueryArea, codeEditorPane); + JFrame xmlframe = new JFrame("Create XML Rule"); + xmlframe.setContentPane(rulePanel); + xmlframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + xmlframe.setSize(new Dimension(600, 700)); + xmlframe.addComponentListener(new java.awt.event.ComponentAdapter() { + public void componentResized(ComponentEvent e) { + JFrame tmp = (JFrame)e.getSource(); + if (tmp.getWidth()<600 || tmp.getHeight()<700) { + tmp.setSize(600, 700); + } + } + }); int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; int screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width; - d.setLocation((screenWidth / 2) - frame.getWidth() / 2, (screenHeight / 2) - frame.getHeight() / 2); - d.setVisible(true); - d.pack(); - d.show(); + xmlframe.pack(); + xmlframe.setLocation((screenWidth - xmlframe.getWidth()) / 2, (screenHeight - xmlframe.getHeight()) / 2); + xmlframe.setVisible(true); } private JComponent createASTPanel() {