// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.plugins.algorithmanimator;
import graphtea.graph.ui.GHTMLPageComponent;
import graphtea.platform.core.BlackBoard;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
/**
* @author Azin Azadi
*/
public class AnimatorGUI {
public JPanel animatorFrame;
public JButton pauseButton;
public JButton playButton;
public JButton playOneStepButton;
public JSlider speedSlider;
public GHTMLPageComponent algorithmOutputTextArea;
private BlackBoard blackboard;
public AnimatorGUI(ActionListener listener, BlackBoard blackboard) {
this.blackboard = blackboard;
pauseButton.addActionListener(listener);
playButton.addActionListener(listener);
playOneStepButton.addActionListener(listener);
}
{
// GUI initializer generated by IntelliJ IDEA GUI Designer
// >>> IMPORTANT!! <<<
// DO NOT EDIT OR ADD ANY CODE HERE!
$$$setupUI$$$();
}
/**
* Method generated by IntelliJ IDEA GUI Designer
* >>> IMPORTANT!! <<<
* DO NOT edit this method OR call it in your code!
*
* @noinspection ALL
*/
private void $$$setupUI$$$() {
createUIComponents();
animatorFrame = new JPanel();
animatorFrame.setLayout(new GridBagLayout());
animatorFrame.setOpaque(true);
animatorFrame.setPreferredSize(new Dimension(275, 500));
pauseButton = new JButton();
pauseButton.setText("Pause");
pauseButton.setVerticalAlignment(1);
GridBagConstraints gbc;
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
animatorFrame.add(pauseButton, gbc);
final JPanel spacer1 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
animatorFrame.add(spacer1, gbc);
final JPanel spacer2 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.VERTICAL;
animatorFrame.add(spacer2, gbc);
playButton = new JButton();
playButton.setText("Play");
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
animatorFrame.add(playButton, gbc);
playOneStepButton = new JButton();
playOneStepButton.setText("Play One Step");
playOneStepButton.setToolTipText("Play just one step of algorithm");
gbc = new GridBagConstraints();
gbc.gridx = 3;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
animatorFrame.add(playOneStepButton, gbc);
speedSlider = new JSlider();
speedSlider.setMajorTickSpacing(25);
speedSlider.setMaximum(100);
speedSlider.setMinimum(0);
speedSlider.setMinorTickSpacing(5);
speedSlider.setPaintLabels(true);
speedSlider.setPaintTicks(false);
speedSlider.setPaintTrack(true);
speedSlider.setSnapToTicks(true);
speedSlider.setToolTipText("The delay between steps of algorithm");
speedSlider.setValue(50);
speedSlider.setValueIsAdjusting(false);
speedSlider.putClientProperty("Slider.paintThumbArrowShape", Boolean.TRUE);
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 3;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.HORIZONTAL;
animatorFrame.add(speedSlider, gbc);
final JLabel label1 = new JLabel();
label1.setText("Speed:");
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 3;
gbc.anchor = GridBagConstraints.EAST;
animatorFrame.add(label1, gbc);
final JPanel spacer3 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 4;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.VERTICAL;
animatorFrame.add(spacer3, gbc);
final JScrollPane scrollPane1 = new JScrollPane();
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 4;
gbc.gridwidth = 3;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.fill = GridBagConstraints.BOTH;
animatorFrame.add(algorithmOutputTextArea, gbc);
// scrollPane1.setViewportView(algorithmOutputTextArea);
final JPanel spacer4 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 4;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.HORIZONTAL;
animatorFrame.add(spacer4, gbc);
final JPanel spacer5 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 5;
gbc.fill = GridBagConstraints.VERTICAL;
animatorFrame.add(spacer5, gbc);
final JPanel spacer6 = new JPanel();
gbc = new GridBagConstraints();
gbc.gridx = 3;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.VERTICAL;
animatorFrame.add(spacer6, gbc);
}
/**
* @noinspection ALL
*/
public JComponent $$$getRootComponent$$$() {
return animatorFrame;
}
private void createUIComponents() {
String html = "<html>" +
"<head>" +
"<style type='text/css'>" +
"body{ font-family: monospace; }" +
"</style>" +
"</head>" +
"<body>" +
"<h2>Algorithm Output:</h2>" +
"</body>" +
"</html>";
algorithmOutputTextArea = new GHTMLPageComponent(blackboard);
algorithmOutputTextArea.setAutoscrolls(true);
// algorithmOutputTextArea.getEditorPane().setLineWrap(true);
algorithmOutputTextArea.getEditorPane().setText(html);
algorithmOutputTextArea.setToolTipText("Messages sent by algorithm");
algorithmOutputTextArea.autoScroll();
}
}