content: /*
   *    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, write to the Free Software
   *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  /*
   *    SetupModePanel.java
   *    Copyright (C) 2002 University of Waikato, Hamilton, New Zealand
   *
   */
  
  package weka.gui.experiment;
  
  import weka.experiment.Experiment;
  
  import java.awt.BorderLayout;
  import java.awt.GridLayout;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.beans.PropertyChangeListener;
  
  import javax.swing.ButtonGroup;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JRadioButton;
  
  /** 
   * This panel switches between simple and advanced experiment setup panels.
   *
   * @author Richard Kirkby (rkirkby@cs.waikato.ac.nz)
   * @version $Revision: 1.5 $
   */
  public class SetupModePanel
    extends JPanel {
  
    /** for serialization */
    private static final long serialVersionUID = -3758035565520727822L;
  
    /** The button for choosing simple setup mode */
    protected JRadioButton m_SimpleSetupRBut = 
      new JRadioButton("Simple");
  
    /** The button for choosing advanced setup mode */
    protected JRadioButton m_AdvancedSetupRBut = 
      new JRadioButton("Advanced");  
  
    /** The simple setup panel */
    protected SimpleSetupPanel m_simplePanel = new SimpleSetupPanel();
  
    /** The advanced setup panel */
    protected SetupPanel m_advancedPanel = new SetupPanel();
  
    /**
     * Creates the setup panel with no initial experiment.
     */
    public SetupModePanel() {
  
      m_simplePanel.setModePanel(this);
  
      m_SimpleSetupRBut.setMnemonic('S');
      m_SimpleSetupRBut.addActionListener(new ActionListener() {
  	public void actionPerformed(ActionEvent e) {
  	  switchToSimple(null);
  	}
        });
  
      m_AdvancedSetupRBut.setMnemonic('A');
      m_AdvancedSetupRBut.addActionListener(new ActionListener() {
  	public void actionPerformed(ActionEvent e) {
  	  switchToAdvanced(null);
  	}
        });
  
      ButtonGroup modeBG = new ButtonGroup();
      modeBG.add(m_SimpleSetupRBut);
      modeBG.add(m_AdvancedSetupRBut);
      m_SimpleSetupRBut.setSelected(true);
  
      JPanel modeButtons = new JPanel();
      modeButtons.setLayout(new GridLayout(1,0));
      modeButtons.add(m_SimpleSetupRBut);
      modeButtons.add(m_AdvancedSetupRBut);
  
      JPanel switchPanel = new JPanel();
      switchPanel.setLayout(new GridLayout(1,0));
      switchPanel.add(new JLabel("Experiment Configuration Mode:"));
      switchPanel.add(modeButtons);
  
      setLayout(new BorderLayout());
      add(switchPanel, BorderLayout.NORTH);
      add(m_simplePanel, BorderLayout.CENTER);
    }
  
    /**
     * Switches to the advanced setup mode.
     *
     * @param exp the experiment to configure
     */
    public void switchToAdvanced(Experiment exp) {
   
      if (exp == null) {
        exp = m_simplePanel.getExperiment();
      }
      if (exp != null) {
        m_AdvancedSetupRBut.setSelected(true);
        m_advancedPanel.setExperiment(exp);
      }
      remove(m_simplePanel);
      m_simplePanel.removeNotesFrame();
      add(m_advancedPanel, BorderLayout.CENTER);
      validate();
      repaint();
    }
    
    /**
     * Switches to the simple setup mode only if allowed to.
     *
     * @param exp the experiment to configure
     */
    public void switchToSimple(Experiment exp) {
      
      if (exp == null) {
        exp = m_advancedPanel.getExperiment();
      }
      if (exp != null && !m_simplePanel.setExperiment(exp)) {
        m_AdvancedSetupRBut.setSelected(true);
        switchToAdvanced(exp);
      } else {
        remove(m_advancedPanel);
        m_advancedPanel.removeNotesFrame();
        add(m_simplePanel, BorderLayout.CENTER);
        validate();
        repaint();
      }
    }
  
    /**
     * Adds a PropertyChangeListener who will be notified of value changes.
     *
     * @param l a value of type 'PropertyChangeListener'
     */
    public void addPropertyChangeListener(PropertyChangeListener l) {
  
      m_simplePanel.addPropertyChangeListener(l);
      m_advancedPanel.addPropertyChangeListener(l);
    }
  
    /**
     * Gets the currently configured experiment.
     *
     * @return the currently configured experiment.
     */
    public Experiment getExperiment() {
  
      if (m_SimpleSetupRBut.isSelected()) return m_simplePanel.getExperiment();
      else return m_advancedPanel.getExperiment();
    }
  }
  