Package org.openpnp.gui.support

Source Code of org.openpnp.gui.support.AbstractConfigurationWizard

/*
  Copyright (C) 2011 Jason von Nieda <jason@vonnieda.org>
 
  This file is part of OpenPnP.
 
OpenPnP 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 3 of the License, or
(at your option) any later version.

OpenPnP 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 OpenPnP.  If not, see <http://www.gnu.org/licenses/>.
 
  For more information about OpenPnP visit http://openpnp.org
*/

package org.openpnp.gui.support;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

import org.jdesktop.beansbinding.AutoBinding;
import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;
import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.beansbinding.Bindings;
import org.jdesktop.beansbinding.Converter;
import org.openpnp.gui.support.JBindings.WrappedBinding;
import org.openpnp.model.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public abstract class AbstractConfigurationWizard extends JPanel implements Wizard {
  protected final Logger logger = LoggerFactory.getLogger(getClass());
  protected WizardContainer wizardContainer;
  private JButton btnApply;
  private JButton btnReset;
  protected JPanel contentPanel;
  private JScrollPane scrollPane;
 
  private List<WrappedBinding> wrappedBindings = new ArrayList<WrappedBinding>();
  private ApplyResetBindingListener listener;
 
  public AbstractConfigurationWizard() {
    setLayout(new BorderLayout());

    contentPanel = new JPanel();
    contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));

    scrollPane = new JScrollPane(contentPanel);
   
    scrollPane.setBorder(null);
    add(scrollPane, BorderLayout.CENTER);

    JPanel panelActions = new JPanel();
    panelActions.setLayout(new FlowLayout(FlowLayout.RIGHT));
    add(panelActions, BorderLayout.SOUTH);

    btnReset = new JButton(resetAction);
    panelActions.add(btnReset);
   
    btnApply = new JButton(applyAction);
    panelActions.add(btnApply);
  }
 
  public abstract void createBindings();
 
  public void validateInput() throws Exception {
   
  }
 
  /**
   * This method should be called when the caller wishes to notify the user
   * that there has been a change to the state of the wizard. This is done
   * automatically for wrapped bindings but this method is provided for
   * operations that do not use wrapped bindings.
   */
  protected void notifyChange() {
      applyAction.setEnabled(true);
      resetAction.setEnabled(true);
  }
 
  /**
   * When overriding this method you should call super.loadFromModel()
   * AFTER doing any work that you need to do, not before.
   */
  protected void loadFromModel() {
    for (WrappedBinding wrappedBinding : wrappedBindings) {
      wrappedBinding.reset();
    }
    applyAction.setEnabled(false);
    resetAction.setEnabled(false);
  }

    /**
     * When overriding this method you should call super.loadFromModel()
     * AFTER doing any work that you need to do, not before.
     */
  protected void saveToModel() {
    try {
      validateInput();
    }
    catch (Exception e) {
      MessageBoxes.errorBox(getTopLevelAncestor(), "Validation Error", e.getMessage());
    }
    for (WrappedBinding wrappedBinding : wrappedBindings) {
      wrappedBinding.save();
    }
    applyAction.setEnabled(false);
    resetAction.setEnabled(false);
  }
 
  public WrappedBinding addWrappedBinding(Object source, String sourceProperty, JComponent component, String componentProperty, Converter converter) {
    return addWrappedBinding(JBindings.bind(source, sourceProperty, component, componentProperty, converter));
  }
 
  public WrappedBinding addWrappedBinding(Object source, String sourceProperty, JComponent component, String componentProperty) {
    return addWrappedBinding(JBindings.bind(source, sourceProperty, component, componentProperty));
  }
 
  public AutoBinding bind(UpdateStrategy updateStrategy, Object source, String sourceProperty, Object target, String targetProperty) {
    AutoBinding binding = Bindings.createAutoBinding(
        updateStrategy,
        source,
        BeanProperty.create(sourceProperty),
        target,
        BeanProperty.create(targetProperty));
    binding.bind();
    return binding;
  }
 
  public WrappedBinding addWrappedBinding(WrappedBinding binding) {
    binding.addBindingListener(listener);
    wrappedBindings.add(binding);
    return binding;
  }
 
  @Override
  public void setWizardContainer(WizardContainer wizardContainer) {
    this.wizardContainer = wizardContainer;
    scrollPane.getVerticalScrollBar().setUnitIncrement(Configuration.get().getVerticalScrollUnitIncrement());
    listener = new ApplyResetBindingListener(applyAction, resetAction);
    createBindings();
    loadFromModel();
  }

  @Override
  public JPanel getWizardPanel() {
    return this;
  }

  @Override
  public String getWizardName() {
    return null;
  }
 
  protected Action applyAction = new AbstractAction("Apply") {
    @Override
    public void actionPerformed(ActionEvent arg0) {
      saveToModel();
      wizardContainer.wizardCompleted(AbstractConfigurationWizard.this);
    }
  };

  protected Action resetAction = new AbstractAction("Reset") {
    @Override
    public void actionPerformed(ActionEvent arg0) {
      loadFromModel();
    }
  };
}
TOP

Related Classes of org.openpnp.gui.support.AbstractConfigurationWizard

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.