org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.freeplane.core.ui.components.OptionalDontShowMeAgainDialog.java

Source

/*
 *  Freeplane - mind map editor
 *  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
 *
 *  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, see <http://www.gnu.org/licenses/>.
 */
package org.freeplane.core.ui.components;

import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;

import org.apache.commons.lang.StringUtils;
import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.ui.MenuBuilder;
import org.freeplane.core.util.TextUtils;
import org.freeplane.features.map.IMapSelection;
import org.freeplane.features.map.NodeModel;
import org.freeplane.features.mode.Controller;

/**
 * Dialog with a decision that can be disabled.
 *
 * @author foltin
 */
public class OptionalDontShowMeAgainDialog {
    public final static int BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED = 1;
    public final static int ONLY_OK_SELECTION_IS_STORED = 0;
    public final static int ONLY_OK_SELECTION_IS_SHOWN = 2;

    static public int show(final String pMessageId, final String pTitleId, final String pPropertyName,
            final int pMessageType) {
        return new OptionalDontShowMeAgainDialog(pMessageId, pTitleId, pPropertyName, pMessageType).show()
                .getResult();
    }

    // //    private final Controller controller;
    private JDialog mDialog;
    private JCheckBox mDontShowAgainBox;
    final private String mMessageId;
    final private int mMessageType;
    final private NodeModel mNode;
    final private Frame mParent;
    final private String mPropertyName;
    private int mResult = JOptionPane.CANCEL_OPTION;
    final private String mTitleId;

    private OptionalDontShowMeAgainDialog(final String pMessageId, final String pTitleId,
            final String pPropertyName, final int pMessageType) {
        //      this.controller = controller;
        Controller controller = Controller.getCurrentController();
        mParent = controller.getViewController().getFrame();
        final IMapSelection selection = controller.getSelection();
        if (selection != null) {
            mNode = selection.getSelected();
        } else {
            mNode = null;
        }
        mMessageId = pMessageId;
        mTitleId = pTitleId;
        mPropertyName = pPropertyName;
        mMessageType = pMessageType;
    }

    private void close(final int pResult) {
        mResult = pResult;
        if (mDontShowAgainBox.isSelected()) {
            if (mMessageType == OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED) {
                if (mResult == JOptionPane.OK_OPTION) {
                    setProperty("true");
                }
            } else {
                setProperty((mResult == JOptionPane.OK_OPTION) ? "true" : "false");
            }
        } else {
            setProperty("");
        }
        mDialog.setVisible(false);
        mDialog.dispose();
    }

    private String getProperty() {
        return ResourceController.getResourceController().getProperty(mPropertyName);
    }

    /**
     * @return an int from JOptionPane (eg. JOptionPane.OK_OPTION).
     */
    private int getResult() {
        return mResult;
    }

    private void setProperty(final String value) {
        ResourceController.getResourceController().setProperty(mPropertyName, value);
    }

    private OptionalDontShowMeAgainDialog show() {
        final String property = getProperty();
        if (StringUtils.equals(property, "true")) {
            mResult = JOptionPane.OK_OPTION;
            return this;
        }
        if (mMessageType == BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED && StringUtils.equals(property, "false")) {
            mResult = JOptionPane.CANCEL_OPTION;
            return this;
        }
        mDialog = null;
        mDialog = new JDialog(mParent, TextUtils.getText(mTitleId));
        mDialog.setModal(true);
        mDialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        final AbstractAction cancelAction = new AbstractAction() {
            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            public void actionPerformed(final ActionEvent pE) {
                close(JOptionPane.CANCEL_OPTION);
            }
        };
        final AbstractAction okAction = new AbstractAction() {
            /**
             * 
             */
            private static final long serialVersionUID = 1L;

            public void actionPerformed(final ActionEvent pE) {
                close(JOptionPane.OK_OPTION);
            }
        };
        UITools.addEscapeActionToDialog(mDialog, cancelAction);
        mDialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(final WindowEvent pE) {
                close(JOptionPane.CANCEL_OPTION);
            }
        });
        mDialog.getContentPane().setLayout(new GridBagLayout());
        mDialog.getContentPane().add(new JLabel(TextUtils.getText(mMessageId)), new GridBagConstraints(1, 0, 1, 1,
                1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 0, 0), 0, 0));
        final ImageIcon questionMark;
        if (mMessageType == ONLY_OK_SELECTION_IS_SHOWN) {
            questionMark = new ImageIcon(
                    ResourceController.getResourceController().getResource("/images/icons/messagebox_warning.png"));
        } else {
            questionMark = new ImageIcon(
                    ResourceController.getResourceController().getResource("/images/icons/help.png"));
        }
        mDialog.getContentPane().add(new JLabel(questionMark), new GridBagConstraints(0, 0, 1, 2, 1.0, 2.0,
                GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 0, 0), 0, 0));
        String boxString;
        if (mMessageType != OptionalDontShowMeAgainDialog.BOTH_OK_AND_CANCEL_OPTIONS_ARE_STORED) {
            boxString = "OptionalDontShowMeAgainDialog.dontShowAgain";
        } else {
            boxString = "OptionalDontShowMeAgainDialog.rememberMyDescision";
        }
        mDontShowAgainBox = new JCheckBox(TextUtils.getRawText(boxString));
        MenuBuilder.setLabelAndMnemonic(mDontShowAgainBox, null);
        mDialog.getContentPane().add(mDontShowAgainBox, new GridBagConstraints(0, 2, 3, 1, 1.0, 1.0,
                GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 0, 0), 0, 0));
        final String okText;
        if (mMessageType == ONLY_OK_SELECTION_IS_SHOWN) {
            okText = TextUtils.getRawText("ok");
        } else {
            okText = TextUtils.getRawText("OptionalDontShowMeAgainDialog.ok");
        }
        final JButton okButton = new JButton(okText);
        MenuBuilder.setLabelAndMnemonic(okButton, null);
        okButton.addActionListener(okAction);
        mDialog.getContentPane().add(okButton, new GridBagConstraints(2, 3, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
                GridBagConstraints.BOTH, new Insets(5, 5, 0, 0), 0, 0));
        if (mMessageType != ONLY_OK_SELECTION_IS_SHOWN) {
            final JButton cancelButton = new JButton(TextUtils.getRawText("OptionalDontShowMeAgainDialog.cancel"));
            MenuBuilder.setLabelAndMnemonic(cancelButton, null);
            cancelButton.addActionListener(cancelAction);
            mDialog.getContentPane().add(cancelButton, new GridBagConstraints(3, 3, 1, 1, 1.0, 1.0,
                    GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(5, 5, 0, 0), 0, 0));
        }
        mDialog.getRootPane().setDefaultButton(okButton);
        mDialog.pack();
        if (mNode != null) {
            UITools.setDialogLocationRelativeTo(mDialog, mNode);
        } else {
            mDialog.setLocationRelativeTo(null);
        }
        mDialog.setVisible(true);
        return this;
    }
}