/* * 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 javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.sosy_lab.ccvisu.Options; import org.sosy_lab.ccvisu.Options.OptionsEnum; import org.sosy_lab.ccvisu.measuring.calldep.DependencyCalculator; import org.sosy_lab.ccvisu.measuring.calldep.DistanceVertexContainer; import org.sosy_lab.ccvisu.measuring.calldep.OutdegreeVertexContainer; import org.sosy_lab.ccvisu.measuring.calldep.colors.ColorProvider; import org.sosy_lab.util.interfaces.WorkerManager; public class ToolPanelMeasurer extends ControlPanel { private static final long serialVersionUID = -7114139321544094720L; private Options options; private WorkerManager workerManager; private JButton startAnalysisButton = new JButton("Run dependency analyzer"); // generic since Java 7; we require Java 6; see svn r825 for comparison private JComboBox<String> algorithmComboBox = new JComboBox<>(); private JComboBox<String> coloringComboBox = new JComboBox<>(); private SpinnerNumberModel labelSpinnerModel; public ToolPanelMeasurer(Options options, WorkerManager worker) { this.options = options; this.workerManager = worker; initComponents(); } @Override public void loadOptions() { // nothing to load right now } @Override public void applyOptions() { options.getOption(OptionsEnum.dependencyAlgorithm).set((String) algorithmComboBox.getSelectedItem()); options.getOption(OptionsEnum.dependencyColoring).set((String) coloringComboBox.getSelectedItem()); options.getOption(OptionsEnum.dependencyShowLabels).set(labelSpinnerModel.getNumber().intValue()); } private void initComponents() { JPanel optionsPanel = new JPanel(); String[] algorithms = { DistanceVertexContainer.ALGORITHM_NAME, OutdegreeVertexContainer.ALGORITHM_NAME }; algorithmComboBox.setModel(new DefaultComboBoxModel<String>(algorithms)); algorithmComboBox.setSelectedItem(OptionsEnum.dependencyAlgorithm.getDefault()); coloringComboBox.setModel(new DefaultComboBoxModel<String>(ColorProvider.getInstance().getColorOptions())); coloringComboBox.setSelectedItem(ColorProvider.getInstance().getDefaultColorOption()); int labelValue = options.getOption(OptionsEnum.dependencyShowLabels).getInt(); labelSpinnerModel = new SpinnerNumberModel(labelValue, 0, 999, 1); JSpinner autoShowLabelBox = new JSpinner(labelSpinnerModel); optionsPanel.setLayout(new GridBagLayout()); addOptionControls(optionsPanel, "Measure:", algorithmComboBox); algorithmComboBox.setToolTipText(String.format("<html>Set the measure to use for coloring:<ul><li>%s</li><li>%s</li></ul></html>", DistanceVertexContainer.DESCRIPTION, OutdegreeVertexContainer.DESCRIPTION)); addOptionControls(optionsPanel, "Coloring scheme:", coloringComboBox); coloringComboBox.setToolTipText("<html>Set the coloring scheme. Red indicates a higher measurement result.</html>"); addOptionControls(optionsPanel, "Automatically shown number of labels:", autoShowLabelBox); autoShowLabelBox.setToolTipText("The number of nodes for which labels that are to be shown," + " starting with the node with the highest measurement result."); JPanel controlPanel = new JPanel(); controlPanel.add(startAnalysisButton); startAnalysisButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { workerManager.addAndRunTask(new DependencyCalculator(options.graph, options), "Dependency Analysis"); } }); setLayout(new BorderLayout()); add(optionsPanel, BorderLayout.NORTH); add(controlPanel, BorderLayout.SOUTH); ChangeListener applyOnChange = new ChangeListener() { @Override public void stateChanged(ChangeEvent event) { applyOptions(); } }; ActionListener applyOnAction = new ActionListener() { @Override public void actionPerformed(ActionEvent event) { applyOptions(); } }; algorithmComboBox.addActionListener(applyOnAction); coloringComboBox.addActionListener(applyOnAction); autoShowLabelBox.addChangeListener(applyOnChange); setMnemonics(); } private void setMnemonics() { startAnalysisButton.setMnemonic('R'); } }