/*
* The University of Wales, Cardiff Triana Project Software License (Based
* on the Apache Software License Version 1.1)
*
* Copyright (c) 2007 University of Wales, Cardiff. All rights reserved.
*
* Redistribution and use of the software in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any,
* must include the following acknowledgment: "This product includes
* software developed by the University of Wales, Cardiff for the Triana
* Project (http://www.trianacode.org)." Alternately, this
* acknowledgment may appear in the software itself, if and wherever
* such third-party acknowledgments normally appear.
*
* 4. The names "Triana" and "University of Wales, Cardiff" must not be
* used to endorse or promote products derived from this software
* without prior written permission. For written permission, please
* contact triana@trianacode.org.
*
* 5. Products derived from this software may not be called "Triana," nor
* may Triana appear in their name, without prior written permission of
* the University of Wales, Cardiff.
*
* 6. This software may not be sold, used or incorporated into any product
* for sale to third parties.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL UNIVERSITY OF WALES, CARDIFF OR ITS CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* ------------------------------------------------------------------------
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Triana Project. For more information on the
* Triana Project, please see. http://www.trianacode.org.
*
* This license is based on the BSD license as adopted by the Apache
* Foundation and is governed by the laws of England and Wales.
*
*/
package org.trianacode.gui.panels;
import org.trianacode.TrianaInstance;
import org.trianacode.config.TrianaProperties;
import org.trianacode.enactment.logging.LoggingUtils;
import org.trianacode.gui.SpringUtilities;
import org.trianacode.gui.hci.GUIEnv;
import org.trianacode.gui.hci.color.ColorManager;
import org.trianacode.gui.hci.color.ColorModel;
import org.trianacode.gui.hci.color.ColorTable;
import org.trianacode.gui.util.Env;
import org.trianacode.gui.windows.ParameterWindow;
import org.trianacode.gui.windows.WindowButtonConstants;
import org.trianacode.taskgraph.tool.ToolTable;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.io.IOException;
import java.util.Hashtable;
/**
* The main options panel for Triana user settings
*
* @author Matthew Shields
* @version $Revsion$
*/
public class OptionsPanel extends ParameterPanel implements ActionListener, WindowListener {
private static String VALIDATE_TOOLS = "validate_external_tool_locations";
private String invalidToolName;
private ParameterWindow paramwin;
private ToolTable tools;
private JCheckBox autoconnectChk;
private JCheckBox restoreChk;
private JCheckBox enableTipsChk;
private JCheckBox enableExtendedTipsChk;
private JCheckBox showNodeEditIconsChk;
private JCheckBox convertToDoubleChk;
private JCheckBox smoothCables;
private JCheckBox logInputValues;
private JTextField htmlViewerTextField;
private JTextField htmlEditorTextField;
private JTextField codeEditorTextField;
private JTextField javacTextField;
private JCheckBox validateToolsChk;
private JCheckBox logToRabbitMQ;
private JButton classpathButton;
private ColorModel[] registeredColorModels;
private Hashtable colorModelPanels = new Hashtable();
private Dimension swatchSize = new Dimension(50, 20);
private JPanel generalPanel;
private JPanel colorPanel;
private JPanel loggingPanel;
private JPanel externalPanel;
private JTextField modulesTextField;
private JTextField moduleTextField;
private JTextField loggingLocationField;
private TrianaInstance engine;
public void okClicked() {
updateProperties();
GUIEnv.getApplicationFrame().repaintWorkspace();
super.okClicked();
}
private void updateProperties() {
boolean changeMade = false;
String enteredText = loggingLocationField.getText().trim();
if (!enteredText.equals(engine.getProperties().getProperty(TrianaProperties.LOG_LOCATION))) {
File file = new File(enteredText);
if (!file.exists()) {
file.mkdirs();
}
engine.getProperties().setProperty(TrianaProperties.LOG_LOCATION, loggingLocationField.getText().trim());
changeMade = true;
}
if (changeMade) {
try {
engine.getProperties().saveProperties();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
public OptionsPanel(ToolTable tools) {
this.tools = tools;
}
/**
* This method returns true by default. It should be overridden if the panel does not want the user to be able to
* change the auto commit state
*/
public boolean isAutoCommitVisible() {
return false;
}
/**
* This method is called when the task is set for this panel. It is overridden to create the panel layout.
*/
public void init() {
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("General", getGeneralPanel());
//tabs.addTab("External Tools", getExternalTools());
tabs.addTab("Colours", getColourChooser());
tabs.addTab("Logging", getLoggingPanel());
this.setLayout(new BorderLayout());
add(tabs, BorderLayout.CENTER);
}
/**
* Instantiates the general options panel
*/
private JPanel getGeneralPanel() {
if (generalPanel == null) {
JPanel panel = new JPanel(new GridLayout(9, 1));
autoconnectChk = addCheckBox(panel, Env.getString("autoConnect"), GUIEnv.isAutoConnect());
restoreChk = addCheckBox(panel, Env.getString("restoreLast"), GUIEnv.restoreLast());
enableTipsChk = addCheckBox(panel, Env.getString("showToolTips"), GUIEnv.showPopUpDescriptions());
enableExtendedTipsChk = addCheckBox(panel, Env.getString("showExtendedTips"),
GUIEnv.showExtendedDescriptions());
showNodeEditIconsChk = addCheckBox(panel, Env.getString("showNodeEditIcons"), GUIEnv.showNodeEditIcons());
convertToDoubleChk = addCheckBox(panel, Env.getString("convertToDouble"), Env.getConvertToDouble());
smoothCables = addCheckBox(panel, "Smooth Cables", GUIEnv.isSmoothCables());
this.engine = GUIEnv.getApplicationFrame().getEngine();
String modulesRoot = engine.getProperties().getProperty(TrianaProperties.MODULE_SEARCH_PATH_PROPERTY);
if (modulesRoot == null) {
modulesRoot = "";
}
modulesTextField = new JTextField(20);
modulesTextField.setText(modulesRoot);
JPanel intern = new JPanel(new BorderLayout());
intern.setBorder(new EmptyBorder(0, 3, 0, 3));
intern.add(new JLabel("Modules Root: "), BorderLayout.WEST);
intern.add(modulesTextField, BorderLayout.CENTER);
JButton browseButton = new JButton(GUIEnv.getIcon("dots.png"));
browseButton.setActionCommand("modulesRoot");
browseButton.addActionListener(this);
browseButton.setMargin(new Insets(6, 4, 2, 4));
intern.add(browseButton, BorderLayout.EAST);
panel.add(intern);
moduleTextField = new JTextField(20);
JPanel intern1 = new JPanel(new BorderLayout());
intern1.setBorder(new EmptyBorder(0, 3, 0, 3));
intern1.add(new JLabel("New Module: "), BorderLayout.WEST);
intern1.add(moduleTextField, BorderLayout.CENTER);
JButton browseButton1 = new JButton(GUIEnv.getIcon("dots.png"));
browseButton1.setActionCommand("module");
browseButton1.addActionListener(this);
browseButton1.setMargin(new Insets(6, 4, 2, 4));
intern1.add(browseButton1, BorderLayout.EAST);
panel.add(intern1);
generalPanel = new JPanel(new BorderLayout());
generalPanel.add(panel, BorderLayout.NORTH);
}
return generalPanel;
}
private JPanel getColourChooser() {
if (colorPanel == null) {
colorPanel = new JPanel(new BorderLayout());
final JPanel centre = new JPanel();
colorPanel.add(centre, BorderLayout.CENTER);
registeredColorModels = ColorManager.getRegisteredColorModels();
String[] modelNames = new String[registeredColorModels.length];
for (int i = 0; i < registeredColorModels.length; i++) {
ColorModel registeredColorModel = registeredColorModels[i];
modelNames[i] = registeredColorModel.getModelName();
}
final JList modelList = new JList(modelNames);
modelList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
modelList.setVisibleRowCount(-1);
modelList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
centre.removeAll();
centre.add(getColorModelView(registeredColorModels[modelList.getSelectedIndex()]));
repaint();
}
});
JScrollPane scroller = new JScrollPane(modelList);
colorPanel.add(scroller, BorderLayout.WEST);
modelList.setSelectedIndex(0);
JButton resetBtn = new JButton(Env.getString("Reset"));
resetBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ColorTable.instance().reset();
centre.removeAll();
colorModelPanels.clear();
centre.add(getColorModelView(registeredColorModels[modelList.getSelectedIndex()]));
repaint();
}
});
JPanel small = new JPanel();
small.add(resetBtn);
colorPanel.add(small, BorderLayout.EAST);
}
return colorPanel;
}
public JPanel getLoggingPanel() {
if (loggingPanel == null) {
loggingPanel = new JPanel();
loggingPanel.setLayout(new GridLayout(9, 1));
logInputValues = addCheckBox(loggingPanel, "Save input values", LoggingUtils.loggingInputs(engine.getProperties()));
JPanel rootFolderPanel = new JPanel(new BorderLayout());
JLabel loggingLocationLabel = new JLabel("Root log folder");
loggingLocationField = new JTextField();
loggingLocationField.setText(engine.getProperties().getProperty(TrianaProperties.LOG_LOCATION));
JButton rootButton = new JButton(GUIEnv.getIcon("dots.png"));
rootButton.setActionCommand("loggingFolder");
rootButton.addActionListener(this);
rootFolderPanel.add(loggingLocationLabel, BorderLayout.WEST);
rootFolderPanel.add(loggingLocationField, BorderLayout.CENTER);
rootFolderPanel.add(rootButton, BorderLayout.EAST);
loggingPanel.add(rootFolderPanel);
logToRabbitMQ = addCheckBox(loggingPanel, "Log to RabbitMQ", LoggingUtils.loggingToRabbitMQ(engine.getProperties()));
}
return loggingPanel;
}
private JPanel getColorModelView(ColorModel registeredColorModel) {
JPanel panel = (JPanel) colorModelPanels.get(registeredColorModel.getModelName());
if (panel == null) {
String[] colorNames = registeredColorModel.getColorNames();
panel = new JPanel(new SpringLayout());
for (int i = 0; i < colorNames.length; i++) {
String colorName = colorNames[i];
panel.add(new JLabel(colorName));
JPanel swatch = new JPanel();
swatch.setBackground(ColorTable.instance().getColor(registeredColorModel, colorName));
swatch.setBorder(BorderFactory.createEtchedBorder());
panel.add(swatch);
JButton chooserBtn = new JButton(GUIEnv.getIcon("dots.png"));
panel.add(chooserBtn);
chooserBtn.addActionListener(new ColorChangeListener(registeredColorModel, colorName, swatch));
swatch.setPreferredSize(swatchSize);
}
SpringUtilities.makeCompactGrid(panel, colorNames.length, 3, 2, 2, 2, 2);
colorModelPanels.put(registeredColorModel.getModelName(), panel);
}
return panel;
}
/**
* Simple option validation, checks to see if external tools exist or if the fields have been left with their
* default values. It is up to the user to check that the external tool is capable of interacting with triana.
*
* @return true if the simple validation is succesful, false otherwise.
*/
public boolean validateChanges() {
boolean valid = true;
//Env.setUserProperty(VALIDATE_TOOLS, String.valueOf(validateToolsChk.isSelected()));
GUIEnv.setAutoConnect(autoconnectChk.isSelected());
GUIEnv.setRestoreLast(restoreChk.isSelected());
GUIEnv.setPopUpDescriptions(enableTipsChk.isSelected());
GUIEnv.setExtendedDescriptions(enableExtendedTipsChk.isSelected());
GUIEnv.setNodeEditIcons(showNodeEditIconsChk.isSelected());
GUIEnv.setSmoothCables(smoothCables.isSelected());
Env.setConvertToDouble(convertToDoubleChk.isSelected());
LoggingUtils.setLogInputValues(engine.getProperties(), logInputValues.isSelected());
LoggingUtils.setLogToRabbitMQ(engine.getProperties(), logToRabbitMQ.isSelected());
// if (validateToolsChk.isSelected() && !testValidTool(htmlViewerTextField)) {
// invalidToolName = htmlViewerTextField.getText();
// htmlViewerTextField.setText(Env.getString("defaultViewer"));
// htmlViewerTextField.setCaretPosition(0);
// valid = false;
// } else {
// if(htmlViewerTextField.getText().trim().length() == 0) {
// htmlViewerTextField.setText(Env.getString("defaultViewer"));
// } else {
// GUIEnv.setHTMLViewerCommand(htmlViewerTextField.getText());
// }
// }
//
// if (validateToolsChk.isSelected() && !testValidTool(htmlEditorTextField)) {
// if (valid) {
// valid = false;
// invalidToolName = htmlEditorTextField.getText();
// htmlEditorTextField.setText(Env.getString("defaultEditor"));
// htmlEditorTextField.setCaretPosition(0);
// }
// } else {
// if (htmlEditorTextField.getText().trim().length() == 0) {
// htmlEditorTextField.setText(Env.getString("defaultEditor"));
// } else {
// GUIEnv.setHTMLEditorCommand(htmlEditorTextField.getText());
// }
// }
//
// if (validateToolsChk.isSelected() && !testValidTool(codeEditorTextField)) {
// if (valid) {
// valid = false;
// invalidToolName = codeEditorTextField.getText();
// codeEditorTextField.setText(Env.getString("defaultEditor"));
// codeEditorTextField.setCaretPosition(0);
// }
// } else {
// if (codeEditorTextField.getText().trim().length() == 0) {
// codeEditorTextField.setText(Env.getString("defaultEditor"));
// } else {
// GUIEnv.setJavaEditorCommand(codeEditorTextField.getText());
// }
// }
//
// if (validateToolsChk.isSelected() && !testValidTool(javacTextField)) {
// if (valid) {
// valid = false;
// invalidToolName = javacTextField.getText();
// javacTextField.setText(Env.getCompilerCommand());
// javacTextField.setCaretPosition(0);
// }
// } else {
// if (javacTextField.getText().trim().length() == 0) {
// javacTextField.setText(Env.getCompilerCommand());
// } else {
// Env.setCompilerCommand(javacTextField.getText());
// }
// }
return true;
}
/**
* @return the name of the last tool to fail validation
*/
public String getInvalidToolName() {
return invalidToolName;
}
/**
* @see #validateChanges tester for the individual fields
*/
private boolean testValidTool(JTextField tool) {
if (tool.getText().trim().length() == 0) {
return true;
}
if (tool.getText().equals(Env.getString("defaultEditor"))
|| tool.getText().equals(Env.getString("defaultViewer"))) {
return true;
} else if ((new File(tool.getText())).exists()) {
return true;
}
return false;
}
/**
* Utility method to add a JCheckbox to a panel
*/
private JCheckBox addCheckBox(JPanel parent, String text, boolean selected) {
JCheckBox chk = new JCheckBox(text, selected);
parent.add(chk);
return chk;
}
/**
* initialises and returns the panel that contains the external tools
*/
private JPanel getExternalTools() {
if (externalPanel == null) {
JPanel formpanel = new JPanel(new FormLayout(3, 3));
// Help Viewer
formpanel.add(new JLabel(Env.getString("helpViewer"), JLabel.LEFT));
JPanel intern = new JPanel(new BorderLayout());
htmlViewerTextField = new JTextField(GUIEnv.getHTMLViewerCommand());
intern.add(htmlViewerTextField, BorderLayout.CENTER);
JButton browseButton = new JButton(GUIEnv.getIcon("dots.png"));
browseButton.setActionCommand(Env.getString("helpViewer"));
browseButton.addActionListener(this);
browseButton.setMargin(new Insets(6, 4, 2, 4));
intern.add(browseButton, BorderLayout.EAST);
formpanel.add(intern);
// HTML Editor
formpanel.add(new JLabel(Env.getString("htmlEditor"), JLabel.LEFT));
intern = new JPanel(new BorderLayout());
htmlEditorTextField = new JTextField(GUIEnv.getHTMLEditorCommand());
intern.add(htmlEditorTextField, BorderLayout.CENTER);
browseButton = new JButton(GUIEnv.getIcon("dots.png"));
browseButton.setActionCommand(Env.getString("htmlEditor"));
browseButton.addActionListener(this);
browseButton.setMargin(new Insets(6, 4, 2, 4));
intern.add(browseButton, BorderLayout.EAST);
formpanel.add(intern);
// Code editor
formpanel.add(new JLabel(Env.getString("codeEditor"), JLabel.LEFT));
intern = new JPanel(new BorderLayout());
codeEditorTextField = new JTextField(GUIEnv.getJavaEditorCommand());
intern.add(codeEditorTextField, BorderLayout.CENTER);
browseButton = new JButton(GUIEnv.getIcon("dots.png"));
browseButton.setActionCommand(Env.getString("codeEditor"));
browseButton.addActionListener(this);
browseButton.setMargin(new Insets(6, 4, 2, 4));
intern.add(browseButton, BorderLayout.EAST);
formpanel.add(intern);
// Java Compiler
formpanel.add(new JLabel(Env.getString("javaCompiler"), JLabel.LEFT));
intern = new JPanel(new BorderLayout());
javacTextField = new JTextField(Env.getCompilerCommand());
intern.add(javacTextField, BorderLayout.CENTER);
browseButton = new JButton(GUIEnv.getIcon("dots.png"));
browseButton.setActionCommand(Env.getString("javaCompiler"));
browseButton.addActionListener(this);
browseButton.setMargin(new Insets(6, 4, 2, 4));
intern.add(browseButton, BorderLayout.EAST);
formpanel.add(intern);
formpanel.setBorder(new EmptyBorder(0, 0, 7, 0));
// Classpath Button
formpanel.add(new JLabel(""));
classpathButton = new JButton(Env.getString("compilerClasspath"));
intern = new JPanel(new BorderLayout());
intern.add(classpathButton, BorderLayout.EAST);
classpathButton.addActionListener(this);
formpanel.add(intern);
// Validate Tools & Reset
validateToolsChk = new JCheckBox("Validate External Tool Locations",
Env.getBooleanUserProperty(VALIDATE_TOOLS, true));
intern = new JPanel(new BorderLayout());
intern.add(validateToolsChk, BorderLayout.WEST);
browseButton = new JButton(Env.getString("restoreDefaults"));
browseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetToDefaults();
}
});
intern.add(browseButton, BorderLayout.EAST);
JPanel finalPanel = new JPanel(new BorderLayout());
finalPanel.add(formpanel, BorderLayout.CENTER);
finalPanel.add(intern, BorderLayout.SOUTH);
finalPanel.setBorder(new EmptyBorder(3, 3, 3, 3));
externalPanel = finalPanel;
}
return externalPanel;
}
private void resetToDefaults() {
htmlViewerTextField.setText(Env.getString("defaultViewer"));
htmlViewerTextField.setCaretPosition(0);
htmlEditorTextField.setText(Env.getString("defaultEditor"));
htmlEditorTextField.setCaretPosition(0);
codeEditorTextField.setText(Env.getString("defaultEditor"));
codeEditorTextField.setCaretPosition(0);
javacTextField.setText(Env.getDefaultCompilerCommand());
javacTextField.setCaretPosition(0);
}
/**
* This method is called when the panel is reset or cancelled. It should reset all the panels components to the
* values specified by the associated task, e.g. a component representing a parameter called "noise" should be set
* to the value returned by a getTool().getParameter("noise") call.
*/
public void reset() {
}
/**
* This method is called when the panel is finished with. It should dispose of any components (e.g. windows) used by
* the panel.
*/
public void dispose() {
}
/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e) {
TFileChooser chooser = new TFileChooser();
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setDialogTitle("Select " + e.getActionCommand());
chooser.setApproveButtonText(Env.getString("OK"));
if (e.getActionCommand().equals("modulesRoot")) {
File f = new File(modulesTextField.getText().trim());
if (f.exists()) {
chooser.setCurrentDirectory(f);
}
}
if (e.getActionCommand().equals("loggingFolder")) {
File f = new File(loggingLocationField.getText().trim());
if (f.exists()) {
chooser.setCurrentDirectory(f);
}
}
int result = chooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
if (e.getActionCommand().equals("modulesRoot")) {
if (engine != null) {
modulesTextField.setText(chooser.getSelectedFile().getAbsolutePath());
modulesTextField.setCaretPosition(0);
engine.getProperties().setProperty(TrianaProperties.MODULE_SEARCH_PATH_PROPERTY, modulesTextField.getText().trim());
try {
engine.getProperties().saveProperties();
} catch (IOException e1) {
e1.printStackTrace();
}
}
} else if (e.getActionCommand().equals("module")) {
if (engine != null) {
moduleTextField.setText(chooser.getSelectedFile().getAbsolutePath());
moduleTextField.setCaretPosition(0);
engine.loadModule(moduleTextField.getText().trim());
}
} else if (e.getActionCommand().equals("loggingFolder")) {
loggingLocationField.setText(chooser.getSelectedFile().getAbsolutePath());
engine.getProperties().setProperty(TrianaProperties.LOG_LOCATION, loggingLocationField.getText().trim());
try {
engine.getProperties().saveProperties();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
// if (e.getSource() == classpathButton) {
// handleClasspath();
// } else {
// TFileChooser chooser = new TFileChooser();
// chooser.setMultiSelectionEnabled(false);
// chooser.setDialogTitle("Select " + e.getActionCommand());
// chooser.setApproveButtonText(Env.getString("OK"));
// int result = chooser.showOpenDialog(this);
//
// if (result == JFileChooser.APPROVE_OPTION) {
// if (e.getActionCommand().equals(Env.getString("helpViewer"))) {
// htmlViewerTextField.setText(chooser.getSelectedFile().getAbsolutePath());
// htmlViewerTextField.setCaretPosition(0);
//
// } else if (e.getActionCommand().equals(Env.getString("htmlEditor"))) {
// htmlEditorTextField.setText(chooser.getSelectedFile().getAbsolutePath());
// htmlEditorTextField.setCaretPosition(0);
//
// } else if (e.getActionCommand().equals(Env.getString("codeEditor"))) {
// codeEditorTextField.setText(chooser.getSelectedFile().getAbsolutePath());
// codeEditorTextField.setCaretPosition(0);
//
// } else if (e.getActionCommand().equals(Env.getString("javaCompiler"))) {
// javacTextField.setText(chooser.getSelectedFile().getAbsolutePath());
// javacTextField.setCaretPosition(0);
//
// }
// }
// }
}
private void handleClasspath() {
ClassPathPanel panel = new ClassPathPanel(tools);
panel.init();
paramwin = new ParameterWindow(this, WindowButtonConstants.OK_CANCEL_BUTTONS, true);
paramwin.setParameterPanel(panel);
paramwin.addWindowListener(this);
paramwin.setTitle(Env.getString("selectPath"));
panel.setClasspath(Env.getClasspath());
paramwin.setLocation((paramwin.getToolkit().getScreenSize().width / 2) - (paramwin.getSize().width / 2),
(paramwin.getToolkit().getScreenSize().height / 2) - (paramwin.getSize().height / 2));
paramwin.setVisible(true);
}
public void windowOpened(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
}
public void windowClosed(WindowEvent e) {
}
public void windowIconified(WindowEvent e) {
}
public void windowDeiconified(WindowEvent e) {
}
public void windowActivated(WindowEvent e) {
}
public void windowDeactivated(WindowEvent e) {
// if (paramwin.isAccepted()) {
// ClassPathPanel classPathPanel = ((ClassPathPanel) paramwin.getParameterPanel());
// if (classPathPanel.isRetainCPCheck()) {
// Env.setClasspath(classPathPanel.getClasspath());
// }
// }
}
private class ColorChangeListener implements ActionListener {
private ColorModel model;
private String colorName;
private JPanel swatch;
public ColorChangeListener(ColorModel model, String colorName, JPanel swatch) {
this.model = model;
this.colorName = colorName;
this.swatch = swatch;
}
/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e) {
Color color = JColorChooser.showDialog(swatch, colorName, swatch.getBackground());
if (color != null) {
swatch.setBackground(color);
ColorTable.instance().setColor(model, colorName, color);
swatch.repaint();
}
}
}
}