You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

136 lines
3.8 KiB

//==============================================================================
//
// Copyright (c) 2002-
// Authors:
// * Andrew Hinton <ug60axh@cs.bham.ac.uk> (University of Birmingham)
// * Dave Parker <david.parker@comlab.ox.ac.uk> (University of Oxford, formerly University of Birmingham)
//
//------------------------------------------------------------------------------
//
// This file is part of PRISM.
//
// PRISM is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// PRISM 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with PRISM; if not, write to the Free Software Foundation,
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//==============================================================================
package userinterface.util;
import java.awt.Color;
import java.awt.Component;
import java.awt.Insets;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import prism.Prism;
import prism.PrismLangException;
/**
* This does not store an expression, it actually maintains a string which is
* tested for its validity with the PRISM parser
*/
public class ExpressionProperty extends SingleProperty
{
protected Prism pr;
private boolean valid;
/** Creates a new instance of ExpressionProperty */
public ExpressionProperty(PropertyOwner owner, String name, String value, Prism pr)
{
this(owner, name, value, "", pr);
}
public ExpressionProperty(PropertyOwner owner, String name, String value, String comment, Prism pr)
{
super(owner, name, "", "", true, comment);
this.pr = pr;
valid = true;
area = new JTextArea();
area.setLineWrap(false);
area.setOpaque(true);
try {
setProperty(value);
} catch (Exception e) {
}
}
public String getExpression()
{
return (String) getProperty();
}
public void setProperty(Object property) throws PropertyException
{
String expression = property.toString();
try {
if (pr == null)
throw new PrismLangException("");
if (!expression.equals("")) {
Prism.parseSingleExpressionString(expression);
}
valid = true;
} catch (PrismLangException e) {
valid = false;
}
super.setProperty(property);
}
public void setEnabled(boolean enabled)
{
super.setEnabled(enabled);
if (area != null)
area.setEnabled(enabled);
}
JTextArea area;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
////System.out.println("rendering "+value.toString());
if (isSelected) {
area.setForeground(table.getSelectionForeground());
area.setBackground(table.getSelectionBackground());
} else {
area.setForeground(table.getForeground());
area.setBackground(table.getBackground());
}
area.setFont(table.getFont());
if (hasFocus) {
area.setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
if (table.isCellEditable(row, column)) {
area.setForeground(UIManager.getColor("Table.focusCellForeground"));
area.setBackground(UIManager.getColor("Table.focusCellBackground"));
}
} else {
area.setBorder(new EmptyBorder(0, 2, 2, 1));
}
//area.setBackground( Color.yellow);
area.setMargin(new Insets(0, 2, 4, 2));
area.setText((value == null) ? "" : toString());
if (!valid) {
area.setForeground(Color.red);
}
return area;
}
}