/* * NodeBarController.java * * Copyright (C) 2006-2014 Andrew Rambaut * * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package figtree.treeviewer.painters; import figtree.treeviewer.TreeViewer; import jam.controlpalettes.AbstractController; import jam.panels.OptionsPanel; import javax.swing.*; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import java.awt.*; import java.util.*; import java.util.prefs.Preferences; import figtree.treeviewer.ControllerOptionsPanel; import jebl.util.Attributable; /** * @author Andrew Rambaut * @version $Id$ * * $HeadURL$ * * $LastChangedBy$ * $LastChangedDate$ * $LastChangedRevision$ */ public class NodeBarController extends AbstractController { private static Preferences PREFS = Preferences.userNodeForPackage(TreeViewer.class); private static final String NODE_BARS_KEY = "nodeBars"; public static final String DISPLAY_ATTRIBUTE_KEY = "displayAttribute"; private static final String BAR_WIDTH_KEY = "barWidth"; private static float DEFAULT_BAR_WIDTH = 4.0f; public NodeBarController(String title, final NodeBarPainter nodeBarPainter, final TreeViewer treeViewer) { this.title = title; this.nodeBarPainter = nodeBarPainter; final float defaultBarWidth = PREFS.getFloat(BAR_WIDTH_KEY, DEFAULT_BAR_WIDTH); optionsPanel = new ControllerOptionsPanel(2, 2); titleCheckBox = new JCheckBox(getTitle()); titleCheckBox.setSelected(this.nodeBarPainter.isVisible()); displayAttributeCombo = new JComboBox(); new AttributeComboHelper(displayAttributeCombo, treeViewer, LabelPainter.PainterIntent.RANGE).addListener(new AttributeComboHelperListener() { @Override public void attributeComboChanged() { String attribute = (String) displayAttributeCombo.getSelectedItem(); nodeBarPainter.setDisplayAttribute(attribute); } }); barWidthSpinner = new JSpinner(new SpinnerNumberModel(defaultBarWidth, 0.01, 48.0, 1.0)); barWidthSpinner.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent changeEvent) { float lineWidth = ((Double) barWidthSpinner.getValue()).floatValue(); nodeBarPainter.setStroke(new BasicStroke(lineWidth, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); } }); nodeBarPainter.setStroke(new BasicStroke(defaultBarWidth, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)); final JLabel label1 = optionsPanel.addComponentWithLabel("Display:", displayAttributeCombo); final JLabel label2 = optionsPanel.addComponentWithLabel("Bar Width:", barWidthSpinner); addComponent(label1); addComponent(displayAttributeCombo); addComponent(label2); addComponent(barWidthSpinner); enableComponents(titleCheckBox.isSelected()); titleCheckBox.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent changeEvent) { enableComponents(titleCheckBox.isSelected()); nodeBarPainter.setVisible(titleCheckBox.isSelected()); } }); } public JComponent getTitleComponent() { return titleCheckBox; } public JPanel getPanel() { return optionsPanel; } public boolean isInitiallyVisible() { return false; } public void initialize() { // nothing to do } public void setSettings(Map<String,Object> settings) { titleCheckBox.setSelected((Boolean) settings.get(NODE_BARS_KEY + "." + IS_SHOWN)); displayAttributeCombo.setSelectedItem((String) settings.get(NODE_BARS_KEY + "." + DISPLAY_ATTRIBUTE_KEY)); barWidthSpinner.setValue((Double)settings.get(NODE_BARS_KEY + "." + BAR_WIDTH_KEY)); } public void getSettings(Map<String, Object> settings) { settings.put(NODE_BARS_KEY + "." + IS_SHOWN, titleCheckBox.isSelected()); settings.put(NODE_BARS_KEY + "." + DISPLAY_ATTRIBUTE_KEY, displayAttributeCombo.getSelectedItem()); settings.put(NODE_BARS_KEY + "." + BAR_WIDTH_KEY, barWidthSpinner.getValue()); } private final JCheckBox titleCheckBox; private final OptionsPanel optionsPanel; private JComboBox displayAttributeCombo; public String getTitle() { return title; } private final String title; private final NodeBarPainter nodeBarPainter; private final JSpinner barWidthSpinner; }