package de.danielsenff.imageflow.gui;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ActionMap;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.text.JTextComponent;
import de.danielsenff.imageflow.ImageFlow;
import de.danielsenff.imageflow.ImageFlowView;
import de.danielsenff.imageflow.models.parameter.Parameter;
import de.danielsenff.imageflow.models.unit.UnitElement;
public class UnitPropertiesDialog extends PropertiesDialog {
public UnitPropertiesDialog(final UnitElement unit, Point point) {
super(unit.getLabel() + " - Parameters", ImageFlow.getApplication().getMainFrame());
if(unit.getHelpString() != null) {
addMessage(unit.getHelpString());
}
// label field
JTextField fldName = new JTextField(unit.getLabel());
fldName.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent event) {}
public void keyReleased(KeyEvent event) {
String newLabel = ((JTextComponent) event.getSource()).getText();
unit.setLabel(newLabel);
}
public void keyPressed(KeyEvent event) {}
});
addForm("Name", fldName);
addDisplayCheckbox(unit);
//addDisplaySilentCheckbox(gd);
addSeparator();
unit.addCustomWidgets(this);
// add Parameter Widgets
if (!unit.getParameters().isEmpty()) {
addParameterWidgets(unit);
addSeparator();
}
addComponent(new UnitElementInfoPanel(unit));
// show properties window
if (point == null)
showDialog();
else
showDialog(point);
}
protected void addParameterWidgets(final UnitElement unit) {
for (final Parameter parameter : unit.getParameters()) {
add(parameter);
}
}
private void addDisplayCheckbox(final UnitElement unit) {
JPanel panel = new JPanel();
JCheckBox chkDisplay = new JCheckBox("Display result");
chkDisplay.setToolTipText("After the workflow has been executed, nodes that are set to 'display' are displayed as a result.");
chkDisplay.setSelected(unit.isDisplay());
chkDisplay.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent event) {
boolean newValue = ((JCheckBox)event.getSource()).isSelected();
unit.setDisplay(newValue);
}
});
panel.add(chkDisplay);
ActionMap actionMap = ImageFlow.getApplication().getContext().getActionMap(
ImageFlowView.class, ImageFlow.getApplication().getMainView());
JToggleButton addToDashboard = new JToggleButton(actionMap.get("togglePropertiesOnDashboard"));
addToDashboard.setPreferredSize(new Dimension(110, 20));
addToDashboard.setSelected(unit.hasWidget());
panel.add(addToDashboard);
JToggleButton addPreviewToDashboard = new JToggleButton(actionMap.get("togglePreviewOnDashboard"));
addPreviewToDashboard.setSelected(unit.hasPreviewWidget());
addPreviewToDashboard.setPreferredSize(new Dimension(110, 20));
panel.add(addPreviewToDashboard);
addForm("", panel);
}
private void addDisplaySilentCheckbox(final UnitElement unit) {
JCheckBox chkDisplay = new JCheckBox("Display result silently");
chkDisplay.setToolTipText("After the workflow has been executed, nodes that are set to 'display' are displayed as a result.");
chkDisplay.setSelected(unit.isDisplaySilent());
chkDisplay.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent event) {
boolean newValue = ((JCheckBox)event.getSource()).isSelected();
unit.setDisplaySilent(newValue);
}
});
addForm("", chkDisplay);
}
class DashboardButtonsPanel extends JPanel {
}
}