All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jadex.tools.comanalyzer.chart.ChartPanel Maven / Gradle / Ivy

Go to download

The Jadex tools comanalyzer package contains the ComAnalyzer JCC plugin for observing the communication between Jadex components.

The newest version!
package jadex.tools.comanalyzer.chart;

import jadex.commons.SUtil;
import jadex.commons.gui.SGUI;
import jadex.tools.comanalyzer.ComanalyzerPlugin;
import jadex.tools.comanalyzer.PaintMaps;
import jadex.tools.comanalyzer.ToolCanvas;
import jadex.tools.comanalyzer.ToolTab;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;


/**
 * The tooltab for displaying messages in a chart. 
 */
public class ChartPanel extends ToolTab implements ActionListener
{

	// -------- attributes --------

	/** The container for the chart */
	protected ChartCanvas panelcan;

	// the option controls
	private JScrollPane options;

	private JSplitPane main;

	private JRadioButton g_mgraph;

	private JRadioButton g_dgraph;

	private JCheckBox l_labels;

	private JCheckBox l_legend;

	private JRadioButton d_message;

	private JRadioButton d_convid;

	private JRadioButton d_perform;

	private JRadioButton d_protocol;

	private JCheckBox l_label_force;

	// -------- constructors --------

	/**
	 * Creates a new phart panel
	 */
	public ChartPanel(ComanalyzerPlugin plugin)
	{
		super(plugin, "Chart", null);

		// Show Graphical User Interface
		panelcan = new ChartCanvas(this);

		// Show options
		options = new JScrollPane();
		addBottomControls(options);

		this.main = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelcan, new JScrollPane(options));
		main.setOneTouchExpandable(true);
		main.setResizeWeight(1.0);
		//		main.setDividerLocation(65535);	// Proportional (1.0) doesn't work.

		// Initialize tool bar.
		this.setLayout(new BorderLayout());
		this.add(BorderLayout.NORTH, SGUI.createToolBar("BDI Viewer Options", getActions()));
		this.add(BorderLayout.CENTER, main);

		// set divider location after components are created
		// to make options entirely visible 
		SwingUtilities.invokeLater(new Runnable()
		{
			public void run()
			{
				double mainWidth = main.getSize().getWidth();
				double optionsWidth = options.getPreferredSize().getWidth();
				// consider scrollbar width if visible
				double scrollWidth = options.getVerticalScrollBar().isVisible() ? options.getVerticalScrollBar().getWidth() : 0;
				double	loc	= (mainWidth - optionsWidth - scrollWidth) / mainWidth;
				if(loc>=0 && loc<=1)	// Might be NaN, if plugin is switched before panel is shown.
					main.setDividerLocation(loc);

			}
		});

	}

	// -------- ToolTab methods --------

	/** 
	 * Returns the ChartCanvas.
	 */
	public ToolCanvas getCanvas()
	{
		return panelcan;
	}

	/** 
	 * Adds the panel actions to the common tooltab actions
	 * @return The array of actions.
	 */
	public Action[] getActions()
	{

		if(actions == null)
		{
			List actionlist = SUtil.arrayToList(super.getActions());
			actions = (Action[])actionlist.toArray((new Action[actionlist.size()]));
		}

		return this.actions;
	}

	// -------- ChartPanel methods --------


	/**
	 * Creates the option panel by adding the controls to the given scroll pane.
	 * @param options The scroll pane to which the controls will be added
	 */
	protected void addBottomControls(JScrollPane options)
	{

		JPanel control_panel = new JPanel(new GridBagLayout());

		GridBagConstraints gbc = new GridBagConstraints();
		gbc.anchor = GridBagConstraints.NORTH;
		gbc.fill = GridBagConstraints.HORIZONTAL;
		gbc.gridx = 0;
		gbc.gridy = GridBagConstraints.RELATIVE;

		// graph controls
		Box graph_panel = Box.createVerticalBox();
		graph_panel.setBorder(BorderFactory.createTitledBorder("Chart"));
		ButtonGroup bg_graph = new ButtonGroup();
		g_mgraph = new JRadioButton("Pie Chart");
		g_mgraph.setSelected(panelcan.chartType == ChartCanvas.CHARTTYPE_PIECHART);
		g_mgraph.addActionListener(this);
		g_dgraph = new JRadioButton("Bar Chart");
		g_dgraph.setSelected(panelcan.chartType == ChartCanvas.CHARTTYPE_BARCHART);
		g_dgraph.addActionListener(this);
		bg_graph.add(g_mgraph);
		bg_graph.add(g_dgraph);
		graph_panel.add(g_mgraph);
		graph_panel.add(g_dgraph);
		control_panel.add(graph_panel, gbc);

		Box layout_panel = Box.createVerticalBox();
		layout_panel.setBorder(BorderFactory.createTitledBorder("Layout"));
		JPanel v_label_panel = new JPanel(new GridLayout(2, 0));
		l_labels = new JCheckBox("Show Labels");
		l_labels.setSelected(panelcan.showLabels);
		l_labels.addActionListener(this);
		l_label_force = new JCheckBox("Force Labels");
		l_label_force.setEnabled(l_labels.isSelected() && panelcan.chartType != ChartCanvas.CHARTTYPE_PIECHART);
		l_label_force.setSelected(panelcan.forceLabels);
		l_label_force.addActionListener(this);
		v_label_panel.add(l_labels);
		v_label_panel.add(l_label_force);

		JPanel v_legend_panel = new JPanel(new GridLayout(1, 0));
		l_legend = new JCheckBox("Show Legend");
		l_legend.setSelected(panelcan.showLegend);
		l_legend.addActionListener(this);
		v_legend_panel.add(l_legend);

		layout_panel.add(v_label_panel);
		layout_panel.add(v_legend_panel);
		control_panel.add(layout_panel, gbc);

		JPanel color_panel = new JPanel(new GridLayout(4, 0));
		color_panel.setBorder(BorderFactory.createTitledBorder("Distribution Of"));
		ButtonGroup bg_colors = new ButtonGroup();
		d_message = new JRadioButton("Messages");
		d_message.setSelected(panelcan.getPaintMode() == PaintMaps.COLOR_COMPONENT);
		d_message.addActionListener(this);
		d_convid = new JRadioButton("Converstation");
		d_convid.setSelected(panelcan.getPaintMode() == PaintMaps.PAINTMODE_CONVERSATION);
		d_convid.addActionListener(this);
		d_perform = new JRadioButton("Performative");
		d_perform.setSelected(panelcan.getPaintMode() == PaintMaps.PAINTMODE_PERFORMATIV);
		d_perform.addActionListener(this);
		d_protocol = new JRadioButton("Protocol");
		d_protocol.setSelected(panelcan.getPaintMode() == PaintMaps.PAINTMODE_PROTOCOL);
		d_protocol.addActionListener(this);
		bg_colors.add(d_message);
		bg_colors.add(d_convid);
		bg_colors.add(d_perform);
		bg_colors.add(d_protocol);
		color_panel.add(d_message);
		color_panel.add(d_convid);
		color_panel.add(d_perform);
		color_panel.add(d_protocol);
		control_panel.add(color_panel, gbc);

		JPanel jp = new JPanel(new BorderLayout());
		jp.add(control_panel, BorderLayout.NORTH);
		options.setViewportView(jp);
	}

	/** 
	 * The action listener for the controls.
	 */
	public void actionPerformed(ActionEvent e)
	{
		AbstractButton source = (AbstractButton)e.getSource();
		if(source == g_mgraph)
		{
			panelcan.setChartType(ChartCanvas.CHARTTYPE_PIECHART);
			l_label_force.setEnabled(l_labels.isSelected() && panelcan.chartType != ChartCanvas.CHARTTYPE_PIECHART);
		}
		else if(source == g_dgraph)
		{
			panelcan.setChartType(ChartCanvas.CHARTTYPE_BARCHART);
			l_label_force.setEnabled(l_labels.isSelected() && panelcan.chartType != ChartCanvas.CHARTTYPE_PIECHART);
		}
		else if(source == l_labels)
		{
			panelcan.setShowLabels(source.isSelected());
			l_label_force.setEnabled(source.isSelected() && panelcan.chartType != ChartCanvas.CHARTTYPE_PIECHART);
			panelcan.chartPanel.repaint();
		}
		else if(source == l_label_force)
		{
			panelcan.setForceLabels(source.isSelected());
		}
		else if(source == l_legend)
		{
			panelcan.setShowLegend(source.isSelected());
		}
		else if(source == d_message)
		{
			panelcan.setPaintMode(PaintMaps.COLOR_COMPONENT);
		}
		else if(source == d_convid)
		{
			panelcan.setPaintMode(PaintMaps.PAINTMODE_CONVERSATION);
		}
		else if(source == d_perform)
		{
			panelcan.setPaintMode(PaintMaps.PAINTMODE_PERFORMATIV);
		}
		else if(source == d_protocol)
		{
			panelcan.setPaintMode(PaintMaps.PAINTMODE_PROTOCOL);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy