/* * CCVisu is a tool for visual graph clustering * and general force-directed graph layout. * This file is part of CCVisu. * * Copyright (C) 2005-2012 Dirk Beyer * * CCVisu 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. * * CCVisu 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 CCVisu; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Please find the GNU Lesser General Public License in file * license_lgpl.txt or http://www.gnu.org/licenses/lgpl.txt * * Dirk Beyer (firstname.lastname@uni-passau.de) * University of Passau, Bavaria, Germany */ package org.sosy_lab.ccvisu.ui.controlpanel; import java.awt.BorderLayout; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.EventObject; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JSpinner.NumberEditor; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.sosy_lab.ccvisu.Options; import org.sosy_lab.ccvisu.Options.OptionsEnum; import org.sosy_lab.ccvisu.graph.GraphEdge; import org.sosy_lab.ccvisu.ui.helper.ColorCellRenderer; import org.sosy_lab.ccvisu.writers.WriterDataLayoutDISP; import org.sosy_lab.util.Colors; public class OptionsPanelVisualization extends ControlPanel { private static final long serialVersionUID = -3397665367586164045L; // generic since Java 7; we require Java 6; see svn r825 for comparison @SuppressWarnings("rawtypes") private JComboBox backgroundComboBox = new JComboBox(); private JSpinner fontSizeSpinner = new JSpinner(); private JFormattedTextField minVertexSizeTextField = new JFormattedTextField(); private boolean blockApply = false; private final Options options; private WriterDataLayoutDISP writer; public OptionsPanelVisualization(Options options, WriterDataLayoutDISP writer) { this.options = options; this.writer = writer; initComponents(); loadOptions(); } private void initComponents() { JPanel paramsPanel = new JPanel(); minVertexSizeTextField.setText("2.0"); fontSizeSpinner.setEditor(new NumberEditor(fontSizeSpinner, "")); fillBackgroundColorComboBox(); paramsPanel.setLayout(new GridBagLayout()); addOptionControls(paramsPanel, "Minimum vertex size:", minVertexSizeTextField); addOptionControls(paramsPanel, "Font size:", fontSizeSpinner); addOptionControls(paramsPanel, "Background color:", backgroundComboBox); setLayout(new BorderLayout()); add(paramsPanel, BorderLayout.CENTER); ActionListener applyOnAction = new ActionListener() { @Override public void actionPerformed(ActionEvent pE) { applyOptions(); } }; ChangeListener applyOnChange = new ChangeListener() { @Override public void stateChanged(ChangeEvent pE) { applyOptions(); } }; DocumentListener applyOnDocChange = new DocumentListener() { @Override public void removeUpdate(DocumentEvent pE) { applyOptions(); } @Override public void insertUpdate(DocumentEvent pE) { applyOptions(); } @Override public void changedUpdate(DocumentEvent pE) { applyOptions(); } }; minVertexSizeTextField.getDocument().addDocumentListener(applyOnDocChange); fontSizeSpinner.addChangeListener(applyOnChange); backgroundComboBox.addActionListener(applyOnAction); } //JComboBox is generic since Java 7; we require Java 6 // This method was extracted to suppress the warnings only for these lines of // code. See svn r825 for comparison. @SuppressWarnings("unchecked") private void fillBackgroundColorComboBox() { backgroundComboBox.setRenderer(new ColorCellRenderer()); backgroundComboBox.addItem(Colors.BLACK); backgroundComboBox.addItem(Colors.GRAY); backgroundComboBox.addItem(Colors.LIGHTGRAY); backgroundComboBox.addItem(Colors.WHITE); } @Override public void applyOptions() { if (blockApply) { return; } options.getOption(OptionsEnum.minVert).set((Float) minVertexSizeTextField.getValue()); options.getOption(OptionsEnum.fontSize).set(Integer.parseInt(fontSizeSpinner.getValue().toString())); options.backColor = (Colors) backgroundComboBox.getSelectedItem(); for (GraphEdge edge : options.graph.getEdges()) { if (edge.getSource().isShowVertex() && edge.getTarget().isShowVertex()) { edge.setShowEdge(options.getOption(OptionsEnum.showEdges).getBool()); } } writer.adjustFrontColor(); options.graph.notifyAboutLayoutChange(new EventObject(this)); } @Override public void loadOptions() { blockApply = true; try { minVertexSizeTextField.setValue(options.getOption(OptionsEnum.minVert).getFloat()); fontSizeSpinner.setValue(options.getOption(OptionsEnum.fontSize).getInt()); backgroundComboBox.setSelectedItem(options.backColor); } finally { blockApply = false; } } }