Java tutorial
/******************************************************************************* * * Copyright (C) 2010 Jalian Systems Private Ltd. * Copyright (C) 2010 Contributors to Marathon OSS Project * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Project website: http://www.marathontesting.com * Help: Marathon help forum @ http://groups.google.com/group/marathon-testing * *******************************************************************************/ package net.sourceforge.marathon.display; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Point; 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.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import net.sourceforge.marathon.Constants; import net.sourceforge.marathon.junit.TestCreator; import net.sourceforge.marathon.mpf.BannerPanel; import net.sourceforge.marathon.navigator.Navigator; import net.sourceforge.marathon.util.ContextMenuTriggers; import net.sourceforge.marathon.util.EscapeDialog; import net.sourceforge.marathon.util.OSUtils; import net.sourceforge.marathon.util.UIUtils; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.factories.Borders; import com.jgoodies.forms.factories.ButtonBarFactory; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; public class PreferencesDialog extends EscapeDialog { private static final long serialVersionUID = 1L; private JTextField mouseTrigger = new JTextField(15); private JButton mouseTriggerClick = new JButton("Click here"); private JTextField keyTrigger = new JTextField(15); private JTextField hideFilesNavigator = new JTextField(15); private JTextField hideFilesJUnit = new JTextField(15); private JButton okButton = UIUtils.createOKButton(); private JButton cancelButton = UIUtils.createCancelButton(); private JButton defaultsButton = UIUtils.createLoadDefaultsButton(); private Preferences prefs = Preferences.userNodeForPackage(Constants.class); private JFrame parent; private boolean needRefresh = true; public PreferencesDialog(JFrame parent) { super(parent, "Preferences", true); this.parent = parent; setTitle("Preferences"); setModal(true); BannerPanel bannerPanel = new BannerPanel(); String[] lines = { "Set marathon preferences" }; BannerPanel.Sheet sheet = new BannerPanel.Sheet("Preferences", lines); bannerPanel.addSheet(sheet, "main"); getContentPane().add(bannerPanel, BorderLayout.NORTH); getContentPane().add(getPreferencesPanel()); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { needRefresh = false; dispose(); } }); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { prefs.put(Constants.PREF_RECORDER_MOUSE_TRIGGER, mouseTrigger.getText()); prefs.put(Constants.PREF_RECORDER_KEYBOARD_TRIGGER, keyTrigger.getText()); prefs.put(Constants.PREF_NAVIGATOR_HIDEFILES, hideFilesNavigator.getText()); prefs.put(Constants.PREF_JUNIT_HIDEFILES, hideFilesJUnit.getText()); try { prefs.flush(); } catch (BackingStoreException e1) { JOptionPane.showMessageDialog(PreferencesDialog.this, e1.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); e1.printStackTrace(); } System.setProperty(Constants.PROP_RECORDER_KEYTRIGGER, keyTrigger.getText()); System.setProperty(Constants.PROP_RECORDER_MOUSETRIGGER, mouseTrigger.getText()); ContextMenuTriggers.setContextMenuKey(); ContextMenuTriggers.setContextMenuModifiers(); Navigator.setHideFilePattern(hideFilesNavigator.getText()); TestCreator.setHideFilePattern(hideFilesJUnit.getText()); dispose(); } }); defaultsButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { prefs.clear(); prefs.flush(); } catch (BackingStoreException e1) { JOptionPane.showMessageDialog(PreferencesDialog.this, e1.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); e1.printStackTrace(); } mouseTrigger.setText( OSUtils.inputEventGetModifiersExText(ContextMenuTriggers.getContextMenuModifiers())); keyTrigger.setText( OSUtils.inputEventGetModifiersExText(ContextMenuTriggers.getContextMenuKeyModifiers()) + "+" + OSUtils.keyEventGetKeyText(ContextMenuTriggers.getContextMenuKeyCode())); System.setProperty(Constants.PROP_RECORDER_KEYTRIGGER, keyTrigger.getText()); System.setProperty(Constants.PROP_RECORDER_MOUSETRIGGER, mouseTrigger.getText()); ContextMenuTriggers.setContextMenuKey(); ContextMenuTriggers.setContextMenuModifiers(); Navigator.setHideFilePattern(null); TestCreator.setHideFilePattern(null); hideFilesJUnit.setText(TestCreator.getHideFilePattern()); hideFilesNavigator.setText(Navigator.getHideFilePattern()); } }); JPanel buttonPanel = ButtonBarFactory .buildRightAlignedBar(new JButton[] { defaultsButton, okButton, cancelButton }); buttonPanel.setBorder(Borders.createEmptyBorder("0dlu, 0dlu, 3dlu, 7dlu")); getContentPane().add(buttonPanel, BorderLayout.SOUTH); setResizable(false); pack(); setWindowInCenter(); } private void setWindowInCenter() { Dimension size = getParent().getSize(); Dimension oursize = getSize(); if (oursize.height > size.height || oursize.width > size.width) { setLocationRelativeTo(getParent()); return; } Point newLocation = new Point((size.width - oursize.width) / 2, (size.height - oursize.height) / 2); setLocation(newLocation); } public void dispose() { super.dispose(); if (parent == null) System.exit(0); } private JPanel getPreferencesPanel() { PanelBuilder builder = new PanelBuilder(new FormLayout("left:p:none, 3dlu, pref, 3dlu, pref", "pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref")); builder.setDefaultDialogBorder(); CellConstraints constraints = new CellConstraints(); builder.addLabel("Mouse Trigger:", constraints.xy(1, 1)); mouseTrigger.setToolTipText("Mouse trigger to popup the Recorder assert menu"); mouseTrigger.setEditable(false); mouseTrigger.setBackground(Color.GRAY); mouseTrigger.setText(OSUtils.inputEventGetModifiersExText(ContextMenuTriggers.getContextMenuModifiers())); builder.add(mouseTrigger, constraints.xy(3, 1)); mouseTriggerClick.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { mouseTrigger.setText(OSUtils.inputEventGetModifiersExText(e.getModifiersEx())); } }); builder.add(mouseTriggerClick, constraints.xy(5, 1)); builder.addLabel("Keyboard Trigger:", constraints.xy(1, 3)); keyTrigger.setToolTipText("Keyboard trigger to popup the Recorder assert menu"); keyTrigger.setEditable(false); keyTrigger.setBackground(Color.GRAY); keyTrigger.setText(OSUtils.inputEventGetModifiersExText(ContextMenuTriggers.getContextMenuKeyModifiers()) + "+" + OSUtils.keyEventGetKeyText(ContextMenuTriggers.getContextMenuKeyCode())); keyTrigger.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_CONTROL || e.getKeyCode() == KeyEvent.VK_SHIFT || e.getKeyCode() == KeyEvent.VK_ALT || e.getKeyCode() == KeyEvent.VK_META) return; String keyText = e.getModifiersEx() == 0 ? "" : (OSUtils.inputEventGetModifiersExText(e.getModifiersEx()) + "+"); keyText += OSUtils.keyEventGetKeyText(e.getKeyCode()); keyTrigger.setText(keyText); } }); builder.add(keyTrigger, constraints.xy(3, 3)); builder.addLabel("Files to hide from navigator view:", constraints.xy(1, 5)); hideFilesNavigator.setToolTipText("Give patterns to exclude from the navigator view of Marathon"); hideFilesNavigator.setText(Navigator.getHideFilePattern()); builder.add(hideFilesNavigator, constraints.xy(3, 5)); builder.addLabel("Files to hide from test view:", constraints.xy(1, 7)); hideFilesJUnit.setToolTipText("Give patterns to exclude from the test view of Marathon"); hideFilesJUnit.setText(TestCreator.getHideFilePattern()); builder.add(hideFilesJUnit, constraints.xy(3, 7)); return builder.getPanel(); } public boolean isNeedRefresh() { return needRefresh; } @Override public JButton getOKButton() { return okButton; } @Override public JButton getCloseButton() { return cancelButton; } }