Package net.sourceforge.marathon.display

Source Code of net.sourceforge.marathon.display.PreferencesDialog

/*******************************************************************************
*  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;
    }
}
TOP

Related Classes of net.sourceforge.marathon.display.PreferencesDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.