Package org.freeplane.core.resources.components

Source Code of org.freeplane.core.resources.components.PropertyAction

/*
*  Freeplane - mind map editor
*  Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
*
*  This file is modified by Dimitry Polivaev in 2008.
*
*  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.resources.components;

import java.awt.Component;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Properties;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.tree.DefaultMutableTreeNode;

import org.freeplane.core.resources.ResourceController;
import org.freeplane.core.resources.components.OptionPanel.IOptionPanelFeedback;
import org.freeplane.core.ui.AFreeplaneAction;
import org.freeplane.core.ui.components.UITools;
import org.freeplane.core.util.TextUtils;

/**
* @author foltin
*/
public class PropertyAction extends AFreeplaneAction {
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  private final DefaultMutableTreeNode controls;

  /**
   * @param controls
   *
   */
  public PropertyAction( final DefaultMutableTreeNode controls) {
    super("PropertyAction");
    this.controls = controls;
  }

  public void actionPerformed(final ActionEvent e) {
    JDialog dialog = null;
    if(e != null){
      final Object source = e.getSource();
      if(source instanceof Component){
        final Window window = SwingUtilities.getWindowAncestor((Component) source);
        if(window instanceof Dialog){
          dialog= new JDialog((Dialog)window, true /* modal */);
        }
        else if(window instanceof Frame){
          dialog= new JDialog((Frame)window, true /* modal */);
        }
      }
    }
    if(dialog == null)
      dialog= new JDialog(UITools.getFrame(), true /* modal */);
    dialog.setResizable(true);
    dialog.setUndecorated(false);
    final OptionPanel options = new OptionPanel(dialog, new IOptionPanelFeedback() {
      public void writeProperties(final Properties props) {
        boolean propertiesChanged = false;
        for (final Object keyObject : props.keySet()) {
          final String key = keyObject.toString();
          final String newProperty = props.getProperty(key);
          propertiesChanged = propertiesChanged
                  || !newProperty.equals(ResourceController.getResourceController().getProperty(key));
          ResourceController.getResourceController().setProperty(key, newProperty);
        }
        if (propertiesChanged) {
          JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils
              .getText("option_changes_may_require_restart"));
          ResourceController.getResourceController().saveProperties();
        }
      }
    });
    final String marshalled = ResourceController.getResourceController().getProperty(
        OptionPanel.PREFERENCE_STORAGE_PROPERTY);
    final OptionPanelWindowConfigurationStorage storage = OptionPanelWindowConfigurationStorage.decorateDialog(
        marshalled, dialog);
    if (storage != null) {
      options.setSelectedPanel(storage.getPanel());
    }
    options.buildPanel(controls);
    options.setProperties();
    final String title = TextUtils.getText("PropertyAction.dialog");
    dialog.setTitle(title);
    dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    dialog.addWindowListener(new WindowAdapter() {
      @Override
      public void windowClosing(final WindowEvent event) {
        options.closeWindow();
      }
    });
    final Action action = new AbstractAction() {
      /**
       *
       */
      private static final long serialVersionUID = 1L;

      public void actionPerformed(final ActionEvent arg0) {
        options.closeWindow();
      }
    };
    UITools.addEscapeActionToDialog(dialog, action);
    if (storage == null) {
      UITools.setBounds(dialog, -1, -1, dialog.getPreferredSize().width + 50, -1);
    }
    dialog.setVisible(true);
  }

  @Override
    public void afterMapChange(final Object newMap) {
    }
}
TOP

Related Classes of org.freeplane.core.resources.components.PropertyAction

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.