/*
 * ErrorBarPainterEditPanel.java of project jchart2d, a panel for configuration of a single ErrorBarConfigurable. Copyright (c) 2007 - 2011
 * Achim Westermann, created on 09:50:20.
 * 
 * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
 * 
 * This library 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 Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 * 
 * If you modify or optimize the code in a useful way please let me know. Achim.Westermann@gmx.de
 */
package info.monitorenter.gui.chart.controls.errorbarwizard;

import info.monitorenter.gui.chart.IErrorBarPainter;
import info.monitorenter.gui.chart.IPointPainterConfigurableUI;
import info.monitorenter.gui.chart.events.ErrorBarPainterActionSetSegmentColor;
import info.monitorenter.gui.chart.events.ErrorBarPainterActionSetSegmentPainter;
import info.monitorenter.gui.chart.pointpainters.PointPainterDisc;
import info.monitorenter.gui.chart.pointpainters.PointPainterLine;
import info.monitorenter.gui.util.ColorIcon;
import info.monitorenter.util.FileUtil;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

/**
 * A panel for selection of {@link info.monitorenter.gui.chart.IErrorBarPainter#setStartPointPainter(IPointPainterConfigurableUI)}
 * {@link info.monitorenter.gui.chart.IErrorBarPainter#setEndPointPainter(info.monitorenter.gui.chart.IPointPainterConfigurableUI)} and
 * {@link info.monitorenter.gui.chart.IErrorBarPainter#setConnectionPainter(info.monitorenter.gui.chart.IPointPainterConfigurableUI)} .
 * 

* * @author Achim Westermann * @version $Revision: 1.16 $ */ public class ErrorBarPainterEditPanel extends JPanel { /** * Base implementation that allows selection of an {@link info.monitorenter.gui.chart.IPointPainter} and it's * {@link java.awt.Color} and holds the parental {@link IErrorBarPainter} to assign the painter to (as a * segment: start, end or connetion). *

* * Implementations have to add the action listeners that defines to which segment of the {@link IErrorBarPainter}. the * configured painter will set to. *

* * @author Achim Westermann * * * @version $Revision: 1.16 $ */ private class SegmentChooserPanel extends JPanel { /** * An adaptor that registers itself as a {@link PropertyChangeListener} on an * {@link IErrorBarPainter.ISegment} and sets the color to the constructor given {@link ColorIcon}. *

* * @author Achim Westermann * * * @version $Revision: 1.16 $ */ final class ColorIconUpdater implements PropertyChangeListener { /** The color icon to adapt to the color of the segment. */ private ColorIcon m_adaptee; /** * Constructor with the adaptee which will stick to the color of the given segment. *

* * @param adaptee * the color icon to adapt the color property of the segment to. */ protected ColorIconUpdater(final ColorIcon adaptee) { this.m_adaptee = adaptee; } /** * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(final PropertyChangeEvent evt) { String property = evt.getPropertyName(); if (ErrorBarPainterEditPanel.SegmentChooserPanel.this.m_segment.getPropertySegmentColor().equals(property)) { this.m_adaptee.setColor((Color) evt.getNewValue()); } } } /** Generated serialVersionUID. */ private static final long serialVersionUID = 6645527616687209066L; /** The error bar painter segment to configure. */ protected IErrorBarPainter.ISegment m_segment; /** * Creates a panel that offers configuration of the given error bar painter. *

* * @param errorBarPainterSegement * the error bar painter segment to configure. */ public SegmentChooserPanel(final IErrorBarPainter.ISegment errorBarPainterSegement) { super(); this.m_segment = errorBarPainterSegement; this.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLACK), errorBarPainterSegement.getName(), TitledBorder.LEFT, TitledBorder.DEFAULT_POSITION)); // complex layout needed for ensuring that // both labes are displayed vertically stacked but // with the same distance to their text fields regardless // of their label width: this.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.NORTHWEST; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridx = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.gridy = 0; gbc.insets = new Insets(2, 2, 2, 2); gbc.gridx = 0; // Obtaining model values and required data: // Color selector: final AbstractAction colorAction = new ErrorBarPainterActionSetSegmentColor(errorBarPainterSegement, this, "color"); // The select box for segment painters: // TODO: maybe check not to allow point painters that connect start and // end (e.g. line) to use in start and end segment. JComboBox painterSelector = new JComboBox(); IPointPainterConfigurableUI pointPainter; IPointPainterConfigurableUI usedPainter = errorBarPainterSegement.getPointPainter(); Action action; pointPainter = null; boolean painterSelected = false; action = new ErrorBarPainterActionSetSegmentPainter(errorBarPainterSegement, pointPainter, "Empty"); painterSelector.addItem(action); if (usedPainter == null) { painterSelector.setSelectedItem(action); } pointPainter = new PointPainterLine(); action = new ErrorBarPainterActionSetSegmentPainter(errorBarPainterSegement, pointPainter, FileUtil.cutExtension( pointPainter.getClass().getName()).getValue()); painterSelector.addItem(action); if (usedPainter != null && pointPainter.getClass().equals(usedPainter.getClass())) { painterSelector.setSelectedItem(action); painterSelected = true; } pointPainter = new PointPainterDisc(); action = new ErrorBarPainterActionSetSegmentPainter(errorBarPainterSegement, pointPainter, FileUtil.cutExtension( pointPainter.getClass().getName()).getValue()); painterSelector.addItem(action); if (usedPainter != null && pointPainter.getClass().equals(usedPainter.getClass())) { painterSelector.setSelectedItem(action); painterSelected = true; } // handling events of the combo box: painterSelector.addActionListener(new ActionListener() { /** * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(final ActionEvent e) { JComboBox source = (JComboBox) e.getSource(); Action currentAction = (Action) source.getSelectedItem(); currentAction.actionPerformed(e); if(currentAction.getValue(Action.NAME).equals("Empty")) { colorAction.setEnabled(false); } else { colorAction.setEnabled(true); } } }); this.add(painterSelector, gbc); // Color selector config: ColorIcon colorIcon = new ColorIcon(errorBarPainterSegement.getColor()); colorAction.putValue(Action.SMALL_ICON, colorIcon); colorAction.setEnabled(painterSelected); JButton colorChooserButton = new JButton(colorAction); gbc.gridy = 1; // allow the color icon to update itself when the segment color changes: errorBarPainterSegement.addPropertyChangeListener(errorBarPainterSegement.getPropertySegmentColor(), new ColorIconUpdater( colorIcon)); this.add(colorChooserButton, gbc); } } /** Generated serialVersionUID. */ private static final long serialVersionUID = -6564631494967160532L; /** The error bar painter to configure with segments. */ private IErrorBarPainter m_errorBarPainter; /** * Creates a panel that offers configuration of the given error bar painter. *

* * @param errorBarPainter * the error bar painter to configure. */ public ErrorBarPainterEditPanel(final IErrorBarPainter errorBarPainter) { super(); this.m_errorBarPainter = errorBarPainter; // complex layout needed for ensuring that // both labels are displayed vertically stacked but // with the same distance to their text fields regardless // of their label width: this.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.NORTHWEST; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridx = 0; gbc.gridwidth = 1; gbc.gridheight = 1; gbc.gridy = 0; gbc.insets = new Insets(2, 2, 2, 2); // start segment: this.add(new SegmentChooserPanel(this.m_errorBarPainter.getSegmentStart()), gbc); // connection segment: gbc.gridy = 1; this.add(new SegmentChooserPanel(this.m_errorBarPainter.getSegmentConnection()), gbc); // end segment: gbc.gridy = 2; this.add(new SegmentChooserPanel(this.m_errorBarPainter.getSegmentEnd()), gbc); } }

Ads help maintain this website.