/*
 * $Id: PanelModelCustomizer.java,v 1.3 2003/08/27 23:29:40 dwd Exp $
 *
 * This software is provided by NOAA for full, free and open release.  It is
 * understood by the recipient/user that NOAA assumes no liability for any
 * errors contained in the code.  Although this software is released without
 * conditions or restrictions in its use, it is expected that appropriate
 * credit be given to its author and to the National Oceanic and Atmospheric
 * Administration should the software be included by the recipient as an
 * element in other product development.
 */

package sgtplot.beans;

import java.beans.Customizer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableColumn;
import javax.swing.ListSelectionModel;
import javax.swing.border.*;
import java.util.Vector;
import java.util.Iterator;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;

import sgtplot.SGLabel;
import sgtplot.pmel.swing.MRJUtil;
import sgtplot.util.Point2D;
import sgtplot.util.Rectangle2D;
import sgtplot.util.SimpleFileFilter;
/**
 * Used at design time to customize a PanelModel.  This class is also
 * used by PanelModelEditor for run-time changes to the PanelModel.
 *
 * @author Donald Denbo
 * @version $Revision: 1.3 $, $Date: 2003/08/27 23:29:40 $
 * @since 3.0
 * @see PanelModelEditor
 * @see PanelModel
 */
public class PanelModelCustomizer extends JComponent implements Customizer, PropertyChangeListener {
  /**
   * @supplierCardinality 1
   */
  private PanelModel panelModel_ = null;
  private JFileChooser fileChooser_ = null;
  private BorderLayout borderLayout1 = new BorderLayout();
  private JPanel messagePanel = new JPanel();
  private JTextField message = new JTextField();
  private BorderLayout borderLayout2 = new BorderLayout();
  private JPanel mainPanel = new JPanel();
  private BorderLayout borderLayout3 = new BorderLayout();
  private JPanel layoutPanel = new JPanel();
  private BorderLayout borderLayout4 = new BorderLayout();
  private JPanel toolPanel = new JPanel();
  private JButton newPanelButton = new JButton();

  /**
     *@link aggregationByValue
     *     @associates <{PanelView}>
     * @supplierCardinality *
     */
  /* private Vector lnkPanelView; */
  private DesignPanel designPanel_ = new DesignPanel();
  private FlowLayout flowLayout1 = new FlowLayout();
  private JButton alignBottomButton = new JButton();
  private JButton alignTopButton = new JButton();
  private JButton alignLeftButton = new JButton();
  private JButton alignRightButton = new JButton();
  private JButton justVerticalButton = new JButton();
  private JButton justHorizontalButton = new JButton();
  private ImageIcon alignBottom_ = new ImageIcon(getClass().getResource("images/AlignBottom24.gif"),"Align Bottom");
  private ImageIcon alignTop_ = new ImageIcon(getClass().getResource("images/AlignTop24.gif"),"Align Top");
  private ImageIcon alignLeft_ = new ImageIcon(getClass().getResource("images/AlignLeft24.gif"),"Align Left");
  private ImageIcon alignRight_ = new ImageIcon(getClass().getResource("images/AlignRight24.gif"),"Align Right");
  private ImageIcon justifyVertical_ = new ImageIcon(getClass().getResource("images/AlignJustifyVertical24.gif"),"Justify Vertical");
  private ImageIcon justifyHorizontal_ = new ImageIcon(getClass().getResource("images/AlignJustifyHorizontal24.gif"),"Justify Horizontal");
  private ImageIcon newPanel_ = new ImageIcon(getClass().getResource("images/New24.gif"), "New Panel");
  private ImageIcon newDataGroup_ = new ImageIcon(getClass().getResource("images/NewDataGroup24.gif"), "New Data Group");
  private ImageIcon newLabel_ = new ImageIcon(getClass().getResource("images/NewLabel24.gif"), "New Label");
  private ImageIcon newLegend_ = new ImageIcon(getClass().getResource("images/NewLegend24.gif"), "New Legend");
  private ImageIcon removePanel_ = new ImageIcon(getClass().getResource("images/Remove24.gif"), "Remove Panel");
  private ImageIcon saveAsPanel_ = new ImageIcon(getClass().getResource("images/SaveAs24.gif"), "Save PanelModel");
  private ImageIcon openPanel_ = new ImageIcon(getClass().getResource("images/Open24.gif"), "Open PanelModel");
  private Component component2;
  private Component component3;
  private JButton removeButton = new JButton();
  private Component component1;
  private JPanel propertyPanel = new JPanel();
  private JPanel leftPanel = new JPanel();
  private TitledBorder propertyBorder;
  private JScrollPane jScrollPane1 = new JScrollPane();
  private BorderLayout borderLayout5 = new BorderLayout();
  private JButton newDataGroupButton = new JButton();
  private JButton newLabelButton = new JButton();
  private JButton newLegendButton = new JButton();
  private JScrollPane designScroller = new JScrollPane();

  private PanelHolderPropertyPanel phPropertyPanel_ = null;
  private LabelPropertyPanel labelPropertyPanel_ = null;
  private LegendPropertyPanel legendPropertyPanel_ = null;
  private DataGroupPropertyPanel agPropertyPanel_ = null;
  private AxisHolderPropertyPanel ahPropertyPanel_ = null;
  private PanelModelPropertyPanel pmPropertyPanel_ = null;
  private PropertyPanel currentPropertyPanel_ = null;

  private JPanel grayPanel = new JPanel();
  private BorderLayout borderLayout6 = new BorderLayout();
  private BorderLayout borderLayout7 = new BorderLayout();
  private JPanel jPanel1 = new JPanel();
  private JCheckBox expertCB = new JCheckBox();
  private GridBagLayout gridBagLayout2 = new GridBagLayout();
  private JButton openPanelButton = new JButton();
  private JButton saveAsPanelButton = new JButton();
  private Component component5;

  /**
   * PanelModelCustomizer constructor.
   */
  public PanelModelCustomizer() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
    designPanel_.addPropertyChangeListener(this);
    setPanelButtons(0);
  }

  /**
   * Set a PanelModel to be customized.
   * @param panelModel PanelModel
   * @see PanelModel
   */
  public void setObject(Object panelModel) {
    panelModel_ = (PanelModel)panelModel;
    designPanel_.setPanelModel(panelModel_);
    pmPropertyPanel_ = new PanelModelPropertyPanel(panelModel_);
    setDefaultPanel();
    if(Page.DEBUG) System.out.println("Customizer setObject()");
  }

  private void jbInit() throws Exception {
    component2 = Box.createHorizontalStrut(8);
    component3 = Box.createHorizontalStrut(8);
    component1 = Box.createHorizontalStrut(8);
    propertyBorder = new TitledBorder(BorderFactory.createLineBorder(new Color(153, 153, 153),2),"Parameter");
    component5 = Box.createHorizontalStrut(8);
    this.setLayout(borderLayout1);
    message.setText("Important information will go here.");
    messagePanel.setLayout(borderLayout2);
    messagePanel.setBorder(BorderFactory.createLoweredBevelBorder());
    mainPanel.setLayout(borderLayout3);
    layoutPanel.setLayout(borderLayout4);
    leftPanel.setLayout(borderLayout7);
    newPanelButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        newPanelButton_actionPerformed(e);
      }
    });
    toolPanel.setLayout(flowLayout1);
    toolPanel.setBorder(BorderFactory.createEtchedBorder());
    designPanel_.setLayout(null);
    alignBottomButton.setToolTipText("Align Bottom");
    alignBottomButton.setIcon(alignBottom_);
    alignBottomButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        alignBottomButton_actionPerformed(e);
      }
    });
    alignLeftButton.setToolTipText("Align Left");
    alignLeftButton.setIcon(alignLeft_);
    alignLeftButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        alignLeftButton_actionPerformed(e);
      }
    });
    alignTopButton.setToolTipText("Align Top");
    alignTopButton.setIcon(alignTop_);
    alignTopButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        alignTopButton_actionPerformed(e);
      }
    });
    alignRightButton.setToolTipText("Align Right");
    alignRightButton.setIcon(alignRight_);
    alignRightButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        alignRightButton_actionPerformed(e);
      }
    });
    newPanelButton.setToolTipText("New Panel");
    newPanelButton.setIcon(newPanel_);
    justVerticalButton.setToolTipText("Justify Vertically");
    justVerticalButton.setIcon(justifyVertical_);
    justVerticalButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        justVerticalButton_actionPerformed(e);
      }
    });
    justHorizontalButton.setToolTipText("Justify Horizontally");
    justHorizontalButton.setIcon(justifyHorizontal_);
    justHorizontalButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        justHorizontalButton_actionPerformed(e);
      }
    });
    removeButton.setToolTipText("Remove Panel");
    removeButton.setIcon(removePanel_);
    removeButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        removeButton_actionPerformed(e);
      }
    });
    this.setPreferredSize(new Dimension(800, 600));
    propertyPanel.setBorder(propertyBorder);
    propertyPanel.setMinimumSize(new Dimension(240, 10));
    propertyPanel.setPreferredSize(new Dimension(240, 10));
    propertyPanel.setLayout(borderLayout5);
    propertyBorder.setTitle("Properties");
    newDataGroupButton.setToolTipText("New Data Group");
    newDataGroupButton.setIcon(newDataGroup_);
    newDataGroupButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        newDataGroupButton_actionPerformed(e);
      }
    });
    newLabelButton.setToolTipText("New Label");
    newLabelButton.setIcon(newLabel_);
    newLabelButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        newLabelButton_actionPerformed(e);
      }
    });
    newLegendButton.setToolTipText("New Legend");
    newLegendButton.setIcon(newLegend_);
    newLegendButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        newLegendButton_actionPerformed(e);
      }
    });
    grayPanel.setBackground(Color.lightGray);
    grayPanel.setLayout(borderLayout6);
    expertCB.setText("Expert");
    expertCB.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        expertCB_actionPerformed(e);
      }
    });
    jPanel1.setLayout(gridBagLayout2);
    openPanelButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        openPanelButton_actionPerformed(e);
      }
    });
    openPanelButton.setEnabled(false);
    openPanelButton.setToolTipText("Open Panel");
    openPanelButton.setIcon(openPanel_);
    saveAsPanelButton.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        saveAsPanelButton_actionPerformed(e);
      }
    });
    saveAsPanelButton.setToolTipText("Save Panel");
    saveAsPanelButton.setIcon(saveAsPanel_);
    this.add(messagePanel, BorderLayout.SOUTH);
    messagePanel.add(message, BorderLayout.CENTER);
    this.add(mainPanel, BorderLayout.CENTER);
    mainPanel.add(layoutPanel, BorderLayout.CENTER);
    toolPanel.add(openPanelButton, null);
    toolPanel.add(saveAsPanelButton, null);
    toolPanel.add(component5, null);
    toolPanel.add(newPanelButton, null);
    toolPanel.add(newDataGroupButton, null);
    toolPanel.add(newLabelButton, null);
    toolPanel.add(newLegendButton, null);
    toolPanel.add(component3, null);
    toolPanel.add(removeButton, null);
    toolPanel.add(component1, null);
    toolPanel.add(alignBottomButton, null);
    toolPanel.add(alignTopButton, null);
    toolPanel.add(alignLeftButton, null);
    toolPanel.add(alignRightButton, null);
    toolPanel.add(component2, null);
    toolPanel.add(justVerticalButton, null);
    toolPanel.add(justHorizontalButton, null);
    layoutPanel.add(designScroller, BorderLayout.CENTER);
    designScroller.getViewport().add(grayPanel, null);
    grayPanel.add(designPanel_, BorderLayout.CENTER);
    leftPanel.add(propertyPanel, BorderLayout.CENTER);
    layoutPanel.add(leftPanel,  BorderLayout.WEST);
    propertyPanel.add(jScrollPane1,  BorderLayout.CENTER);
    leftPanel.add(jPanel1, BorderLayout.NORTH);
    jPanel1.add(expertCB,   new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
    layoutPanel.add(toolPanel, BorderLayout.NORTH);

    if(!MRJUtil.isAquaLookAndFeel()) {
      alignBottomButton.setMargin(new Insets(0, 0, 0, 0));
      alignLeftButton.setMargin(new Insets(0, 0, 0, 0));
      alignTopButton.setMargin(new Insets(0, 0, 0, 0));
      alignRightButton.setMargin(new Insets(0, 0, 0, 0));
      newPanelButton.setMargin(new Insets(0, 0, 0, 0));
      justVerticalButton.setMargin(new Insets(0, 0, 0, 0));
      justHorizontalButton.setMargin(new Insets(0, 0, 0, 0));
      removeButton.setMargin(new Insets(0, 0, 0, 0));
      newDataGroupButton.setMargin(new Insets(0, 0, 0, 0));
      newLabelButton.setMargin(new Insets(0, 0, 0, 0));
      newLegendButton.setMargin(new Insets(0, 0, 0, 0));
      openPanelButton.setMargin(new Insets(0, 0, 0, 0));
      saveAsPanelButton.setMargin(new Insets(0,0,0,0));
    }
    openPanelButton.setFocusable(false);
    saveAsPanelButton.setFocusable(false);
  }

  public Dimension getMinimumSize() {
    return new Dimension(600, 400);
  }

  public Dimension getMaximumSize() {
    return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
  }

  public Dimension getPreferredSize() {
    return new Dimension(800, 600);
  }

  void newPanelButton_actionPerformed(ActionEvent e) {
    PanelHolder ph = new PanelHolder("Panel" + panelModel_.getPanelCount(),
                                     panelModel_,
                                     new Rectangle(20, 20, 200, 300),
                                     null, null, null);
    PanelHolderDragBox pi = new PanelHolderDragBox(ph);
    panelModel_.addPanel(ph);
    designPanel_.addPanel(pi);
    designPanel_.repaint();
  }

  void newDataGroupButton_actionPerformed(ActionEvent e) {
    PanelHolder ph = designPanel_.getSelectedPanel();
    if(ph == null) return;
    DataGroup ag = new DataGroup("DataGroup" + ph.getDataGroupSize(), ph);
    designPanel_.addDataGroup(ag);
    designPanel_.repaint();
  }

  void newLabelButton_actionPerformed(ActionEvent e) {
    PanelHolder ph = designPanel_.getSelectedPanel();
    if(ph == null) return;
    Label label = new Label("Label" + ph.getLabelSize(),
                            new Point2D.Double(1.5, 1.5),
                            0.75, 0.25);
    designPanel_.addLabel(label);
    designPanel_.repaint();
  }

  void newLegendButton_actionPerformed(ActionEvent e) {
    PanelHolder ph = designPanel_.getSelectedPanel();
    if(ph == null) return;
    Legend legend = new Legend("Legend" + ph.getLegendSize(),
                               new Rectangle2D.Double(1.0, 1.0, 1.5, 0.25));
    designPanel_.addLegend(legend);
    designPanel_.repaint();

  }

  public void propertyChange(PropertyChangeEvent evt) {
    String pName = evt.getPropertyName();
    Object val = evt.getNewValue();
    if(Page.DEBUG) System.out.println("PanelModelCustomizer.propertyChange: " + pName + ", " + evt.getNewValue());
    setPanelButtons(designPanel_.getSelectedCount());
    if(designPanel_.getSelectedCount() > 1) {
      setDefaultPanel();
      return;
    }
    if(pName.equals("message")) {
      message.setText((String)evt.getNewValue());
    } else if(pName.equals("allUnselected")) {
      setDefaultPanel();
    } else if(pName.equals("panelSelected")) {
      if(val instanceof PanelHolderDragBox) {
        PanelHolderDragBox pdb = (PanelHolderDragBox)val;
        if(pdb.isSelected()) {
          setPanelPropertyPanel(pdb.getPanelHolder());
        } else {
          setDefaultPanel();
        }
      }
    } else if(pName.equals("dataGroupSelected")) {
      if(val instanceof DataGroupDragBox) {
        DataGroupDragBox ag = (DataGroupDragBox)val;
        if(ag.isSelected()) {
          setDataGroupPropertyPanel(ag.getDataGroup());
        } else {
          setDefaultPanel();
        }
      }
    } else if(pName.equals("axisSelected")) {
      if(val instanceof AxisHolderDragBox) {
        AxisHolderDragBox ah = (AxisHolderDragBox)val;
        if(ah.isSelected()) {
          setAxisHolderPropertyPanel(ah.getAxisHolder());
        } else {
          setDefaultPanel();
        }
      }
    } else if(pName.equals("labelSelected")) {
      if(val instanceof LabelDragBox) {
        LabelDragBox ldb = (LabelDragBox)val;
        if(ldb.isSelected()) {
          setLabelPropertyPanel(ldb.getLabel());
        } else {
          setDefaultPanel();
        }
      }
    } else if(pName.equals("legendSelected")) {
      if(val instanceof LegendDragBox) {
        LegendDragBox ldb = (LegendDragBox)val;
        if(ldb.isSelected()) {
          setLegendPropertyPanel(ldb.getLegend());
        } else {
          setDefaultPanel();
        }
      }
    } else if(pName.equals("ancestor")) {
/*      if(Page.DEBUG) {
        System.out.println("PanelModelCustomizer.propertyChange()");
        System.out.println("           propertyName = " + evt.getPropertyName());
        System.out.println("                 source = " + evt.getSource());
        System.out.println("               oldValue = " + evt.getOldValue());
        System.out.println("               newValue = " + evt.getNewValue());
        System.out.println("          propagationId = " + evt.getPropagationId());
      } */
//      panelModel_.getPage().setBackground(panelModel_.getPageBackgroundColor());
//      panelModel_.getPage().setSize(panelModel_.getPageSize());
      if(evt.getNewValue() == null) {
        // clean up ChangeListeners
        Iterator iter;
        if(panelModel_ == null) return;
        Iterator pIter = panelModel_.panelIterator();
        while(pIter.hasNext()) {
          PanelHolder ph = (PanelHolder)pIter.next();
          iter = ph.labelIterator();
          while(iter.hasNext()) {
            Label label = (Label)iter.next();
            label.removeDesignChangeListeners();
          }
          iter = ph.legendIterator();
          while(iter.hasNext()) {
            Legend legend = (Legend)iter.next();
            legend.removeDesignChangeListeners();
          }
          iter = ph.dataGroupIterator();
          while(iter.hasNext()) {
            DataGroup dg = (DataGroup)iter.next();
            dg.getXAxisHolder().removeDesignChangeListeners();
            dg.getYAxisHolder().removeDesignChangeListeners();
            dg.removeDesignChangeListeners();
          }
         ph.removeDesignChangeListeners();
        }
        panelModel_.removeDesignChangeListeners();
      } /* else {
        System.out.println("change focus here?");
        System.out.println("PanelModelCustomizer.isVisible() = " + isVisible());
        if(newPanelButton.requestFocusInWindow()) {
          System.out.println("focus may be granted");
        } else {
          System.out.println("focus wont be granted");
        }
        KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner();
//        KeyboardFocusManager.getCurrentKeyboardFocusManager().upFocusCycle();
//        KeyboardFocusManager.getCurrentKeyboardFocusManager().focusNextComponent();

      } */
    }
  }

  private void setDefaultPanel() {
    jScrollPane1.getViewport().removeAll();
    jScrollPane1.getViewport().add(pmPropertyPanel_, null);
    currentPropertyPanel_ = pmPropertyPanel_;
  }

  private void setPanelPropertyPanel(PanelHolder ph) {
    if(ph == null) {
      setDefaultPanel();
      return;
    }
    if(phPropertyPanel_ == null) {
      phPropertyPanel_ = new PanelHolderPropertyPanel(ph, expertCB.isSelected());
    } else {
      phPropertyPanel_.setPanelHolder(ph, expertCB.isSelected());
    }
    jScrollPane1.getViewport().removeAll();
    jScrollPane1.getViewport().add(phPropertyPanel_);
    currentPropertyPanel_ = phPropertyPanel_;
  }

  private void setDataGroupPropertyPanel(DataGroup dg) {
    if(dg == null) {
      setDefaultPanel();
      return;
    }
    if(agPropertyPanel_ == null) {
      agPropertyPanel_ = new DataGroupPropertyPanel(dg, expertCB.isSelected());
    } else {
      agPropertyPanel_.setDataGroup(dg, expertCB.isSelected());
    }
    jScrollPane1.getViewport().removeAll();
    jScrollPane1.getViewport().add(agPropertyPanel_);
    currentPropertyPanel_ = agPropertyPanel_;
  }

  private void setAxisHolderPropertyPanel(AxisHolder ah) {
    if(ah == null) {
      setDefaultPanel();
      return;
    }
    if(ahPropertyPanel_ == null) {
      ahPropertyPanel_ = new AxisHolderPropertyPanel(ah, expertCB.isSelected());
    } else {
      ahPropertyPanel_.setAxisHolder(ah, expertCB.isSelected());
    }
    jScrollPane1.getViewport().removeAll();
    jScrollPane1.getViewport().add(ahPropertyPanel_);
    currentPropertyPanel_ = ahPropertyPanel_;
  }

  private void setLabelPropertyPanel(Label lab) {
    if(lab == null) {
      setDefaultPanel();
      return;
    }
    if(labelPropertyPanel_ == null) {
      labelPropertyPanel_ = new LabelPropertyPanel(lab, expertCB.isSelected());
    } else {
      labelPropertyPanel_.setLabel(lab, expertCB.isSelected());
    }
    jScrollPane1.getViewport().removeAll();
    jScrollPane1.getViewport().add(labelPropertyPanel_);
    currentPropertyPanel_ = labelPropertyPanel_;
  }

  private void setLegendPropertyPanel(Legend legend) {
    if(legend == null) {
      setDefaultPanel();
      return;
    }
    if(legendPropertyPanel_ == null) {
      legendPropertyPanel_ = new LegendPropertyPanel(legend, expertCB.isSelected());
    } else {
      legendPropertyPanel_.setLegend(legend, expertCB.isSelected());
    }
    jScrollPane1.getViewport().removeAll();
    jScrollPane1.getViewport().add(legendPropertyPanel_);
    currentPropertyPanel_ = legendPropertyPanel_;
  }

  private void setPanelButtons(int enabledCount) {
    boolean enabled = enabledCount >= 2;

    alignBottomButton.setEnabled(enabled);
    alignTopButton.setEnabled(enabled);
    alignLeftButton.setEnabled(enabled);
    alignRightButton.setEnabled(enabled);

    enabled = enabledCount >= 1;
    justVerticalButton.setEnabled(enabled);
    justHorizontalButton.setEnabled(enabled);

    enabled = enabledCount == 1;
    removeButton.setEnabled(enabled);
    newDataGroupButton.setEnabled(enabled);
    newLabelButton.setEnabled(enabled);
    newLegendButton.setEnabled(enabled);

    enabled = designPanel_.isChildDragBoxSelected();
    if(enabled) {
      removeButton.setEnabled(!designPanel_.isAxisHolderDragBoxSelected());
    }
  }

  void alignBottomButton_actionPerformed(ActionEvent e) {
    designPanel_.alignBoxes(DesignPanel.ALIGN_BOTTOM);
  }

  void alignTopButton_actionPerformed(ActionEvent e) {
    designPanel_.alignBoxes(DesignPanel.ALIGN_TOP);
  }

  void alignLeftButton_actionPerformed(ActionEvent e) {
    designPanel_.alignBoxes(DesignPanel.ALIGN_LEFT);
  }

  void alignRightButton_actionPerformed(ActionEvent e) {
    designPanel_.alignBoxes(DesignPanel.ALIGN_RIGHT);
  }

  void justVerticalButton_actionPerformed(ActionEvent e) {
    designPanel_.alignBoxes(DesignPanel.JUSTIFY_VERTICAL);
  }

  void justHorizontalButton_actionPerformed(ActionEvent e) {
    designPanel_.alignBoxes(DesignPanel.JUSTIFY_HORIZONTAL);
  }

  void removeButton_actionPerformed(ActionEvent e) {
    designPanel_.removeSelected();
    setDefaultPanel();
    setPanelButtons(0);
  }

  void expertCB_actionPerformed(ActionEvent e) {
    currentPropertyPanel_.setExpert(expertCB.isSelected());
  }

  void openPanelButton_actionPerformed(ActionEvent e) {
    // problem with open since PanelModelCustomizer work on the original
    // object.  Right now there isn't a method for replacing the PanelModel
    // inside the customizer.  However, I can save it!
  }

  void saveAsPanelButton_actionPerformed(ActionEvent e) {
    File file;
    FileFilter filt;
    String ext;
    String outpath;
    String[] xmlFile = new String[]{".xml"};
    SimpleFileFilter xmlFilt = new SimpleFileFilter(xmlFile, "XML Serialized Bean");

    if(fileChooser_ == null) {
      fileChooser_ = new JFileChooser();
    }
    fileChooser_.setFileFilter(fileChooser_.getAcceptAllFileFilter());
    fileChooser_.resetChoosableFileFilters();
    fileChooser_.addChoosableFileFilter(xmlFilt);
    fileChooser_.setFileFilter(xmlFilt);

    int result = fileChooser_.showSaveDialog(this);
    if(result == JFileChooser.APPROVE_OPTION) {
      file = fileChooser_.getSelectedFile();
      filt = fileChooser_.getFileFilter();
      outpath = file.getPath();
      if(filt instanceof SimpleFileFilter) {
        ext = ((SimpleFileFilter)filt).getExtension();
        String name = file.getName().toLowerCase();
        if(!name.endsWith(ext)) {
          outpath += ext;
        }
      }
      try {
        panelModel_.saveToXML(new BufferedOutputStream(
                                       new FileOutputStream(outpath, false)));
      } catch (FileNotFoundException fnfe) {
        JOptionPane.showMessageDialog(this, "Error creating file, rename and try again",
                                      "File Save Error", JOptionPane.ERROR_MESSAGE);
        return;
      }
    }
  }
}

 

Ads help maintain this website.