Browse Source

Added generic attribute editing capability for tasks.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268206 13f79535-47bb-0310-9956-ffa450edef68
master
metasim 24 years ago
parent
commit
7ed150619f
9 changed files with 157 additions and 49 deletions
  1. +9
    -0
      src/antidote/ChangeLog
  2. +5
    -2
      src/antidote/org/apache/tools/ant/gui/PropertyEditor.java
  3. +1
    -1
      src/antidote/org/apache/tools/ant/gui/acs/ACSElement.java
  4. +3
    -1
      src/antidote/org/apache/tools/ant/gui/customizer/AbstractPropertyEditor.java
  5. +0
    -3
      src/antidote/org/apache/tools/ant/gui/customizer/DoublePropertyEditor.java
  6. +0
    -3
      src/antidote/org/apache/tools/ant/gui/customizer/IntegerPropertyEditor.java
  7. +121
    -27
      src/antidote/org/apache/tools/ant/gui/customizer/PropertiesPropertyEditor.java
  8. +2
    -4
      src/antidote/org/apache/tools/ant/gui/customizer/StringArrayPropertyEditor.java
  9. +16
    -8
      src/antidote/org/apache/tools/ant/gui/customizer/StringPropertyEditor.java

+ 9
- 0
src/antidote/ChangeLog View File

@@ -1,3 +1,12 @@
2000-11-18 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/customizer/PropertiesPropertyEditor.java:
Added proper editing capability. Rows are added and removed
automatically.
* org/apache/tools/ant/gui/customizer/XXXPropertyEditor.java:
Removed stray event firing upon setting value of property to edit.

2000-11-16 Simeon H.K. Fitch <simeon@fitch.net>

* org/apache/tools/ant/gui/customizer/StringPropertyEditor.java:


+ 5
- 2
src/antidote/org/apache/tools/ant/gui/PropertyEditor.java View File

@@ -63,6 +63,7 @@ import java.io.StringReader;
import java.io.IOException;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Point;

/**
* Stub for a property editor.
@@ -76,6 +77,8 @@ class PropertyEditor extends AntEditor {
private Customizer _customizer = null;
/** Container for the customizer. */
private JPanel _container = null;
/** Scroll area containing contents. */
private JScrollPane _scroller = null;

/**
* Standard ctor.
@@ -87,7 +90,7 @@ class PropertyEditor extends AntEditor {
context.getEventBus().addMember(EventBus.MONITORING, new Handler());
setLayout(new BorderLayout());
_container = new JPanel(new BorderLayout());
add(new JScrollPane(_container));
add(_scroller = new JScrollPane(_container));
}

/**
@@ -115,7 +118,7 @@ class PropertyEditor extends AntEditor {
}
}

validate();
_container.revalidate();
}




+ 1
- 1
src/antidote/org/apache/tools/ant/gui/acs/ACSElement.java View File

@@ -103,7 +103,7 @@ public abstract class ACSElement extends ElementNode {
* @param value Value of the attribute.
*/
public void setAttribute(String name, String value) {
if(value == null || value.length() == 0) {
if(value == null && getAttribute(name).length() != 0) {
removeAttribute(name);
}
else {


+ 3
- 1
src/antidote/org/apache/tools/ant/gui/customizer/AbstractPropertyEditor.java View File

@@ -57,6 +57,7 @@ import java.beans.*;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.Dimension;
import javax.swing.JComponent;
import java.awt.event.FocusEvent;
import java.awt.event.FocusAdapter;
@@ -71,8 +72,9 @@ public abstract class AbstractPropertyEditor implements PropertyEditor {

/** Bean property change property name. */
public static final String BEAN_PROP = "BeanEditorProperty";
/** Event listener support. */
private PropertyChangeSupport _listeners = new PropertyChangeSupport(this);

/**
* Default constructor.
*


+ 0
- 3
src/antidote/org/apache/tools/ant/gui/customizer/DoublePropertyEditor.java View File

@@ -117,8 +117,6 @@ public class DoublePropertyEditor extends AbstractPropertyEditor {
}

_widget.setText(value.toString());
firePropertyChange(old, value);
}

/**
@@ -155,7 +153,6 @@ public class DoublePropertyEditor extends AbstractPropertyEditor {
}
text = val.toString();
_widget.setText(text);
firePropertyChange(old, text);
}

/**


+ 0
- 3
src/antidote/org/apache/tools/ant/gui/customizer/IntegerPropertyEditor.java View File

@@ -117,8 +117,6 @@ public class IntegerPropertyEditor extends AbstractPropertyEditor {
}

_widget.setText(value.toString());
firePropertyChange(old, value);
}

/**
@@ -155,7 +153,6 @@ public class IntegerPropertyEditor extends AbstractPropertyEditor {
}
text = val.toString();
_widget.setText(text);
firePropertyChange(old, text);
}

/**


+ 121
- 27
src/antidote/org/apache/tools/ant/gui/customizer/PropertiesPropertyEditor.java View File

@@ -67,8 +67,15 @@ import java.util.*;
* @author Simeon Fitch
*/
public class PropertiesPropertyEditor extends AbstractPropertyEditor {
/** Recommended size for widgets inside a JScrollPane, as communicated
* through the setPreferredScrollableViewportSize() method. */
protected static final Dimension VIEWPORT_SIZE = new Dimension(200, 50);

/** Container. */
private JPanel _widget = null;
private Properties _value = null;
/* The current properties being edited. */
private Properties _properties = null;
/** The table editor for the properties. */
private JTable _table = null;

/**
@@ -80,7 +87,7 @@ public class PropertiesPropertyEditor extends AbstractPropertyEditor {
_widget.addFocusListener(new FocusHandler(this));

_table = new JTable();
_table.setPreferredScrollableViewportSize(new Dimension(300, 100));
_table.setPreferredScrollableViewportSize(VIEWPORT_SIZE);
JScrollPane scroller = new JScrollPane(_table);
_widget.add(BorderLayout.CENTER, scroller);
}
@@ -126,20 +133,21 @@ public class PropertiesPropertyEditor extends AbstractPropertyEditor {
value.getClass().getName() + " is not of type Properties.");
}

Object old = _value;
_value = (Properties) value;

_table.setModel(new PropertiesTableModel(_value));
Object old = _properties;
_properties = (Properties) ((Properties) value).clone();

firePropertyChange(old, value);
PropertiesTableModel model = new PropertiesTableModel();
_table.setModel(model);
_table.clearSelection();
}

/**
* @return The value of the property. Builtin types such as "int" will
* be wrapped as the corresponding object type such as "java.lang.Integer".
* @return The value of the property. Builtin types
* such as "int" will be wrapped as the corresponding
* object type such as "java.lang.Integer".
*/
public Object getValue() {
return _value;
return _properties;
}

/**
@@ -165,46 +173,132 @@ public class PropertiesPropertyEditor extends AbstractPropertyEditor {
}

/** Table model view of the Properties object. */
private static class PropertiesTableModel extends AbstractTableModel {
private class PropertiesTableModel extends AbstractTableModel {
private static final int NAME = 0;
private static final int VALUE = 1;

private Properties _properties = null;
private String[] _keys = null;

public PropertiesTableModel(Properties props) {
_properties = props;
private List _keys = null;

Enumeration enum = _properties.keys();
_keys = new String[_properties.size()];
for(int i = 0; enum.hasMoreElements(); i++) {
String key = (String) enum.nextElement();
_keys[i] = key;
}
public PropertiesTableModel() {
// We need to store the property keys in an array
// so that the ordering is preserved.
_keys = new ArrayList(_properties.keySet());
Collections.sort(_keys);
}

/**
* Get the number of rows.
*
* @return Number of rows.
*/
public int getRowCount() {
return _keys.length;
return _properties.size() + 1;
}

/**
* Get the number of columns.
*
* @return 2
*/
public int getColumnCount() {
return 2;
}

/**
* Get the editing and display class of the given column.
*
* @return String.class
*/
public Class getColumnClass(int column) {
return String.class;
}

/**
* Get the header name of the column.
*
* @param column Column index.
* @return Name of the column.
*/
public String getColumnName(int column) {
// XXX fix me.
return column == NAME ? "Name" : "Value";
}

/**
* Determine if the given cell is editable.
*
* @param row Cell row.
* @param column Cell column.
* @return true
*/
public boolean isCellEditable(int row, int column) {
return true;
}

/**
* Get the object at the given table coordinates.
*
* @param row Table row.
* @param column Table column.
* @return Object at location, or null if none.
*/
public Object getValueAt(int row, int column) {
switch(column) {
case NAME: return _keys[row];
case VALUE: return _properties.getProperty(_keys[row]);
if(row < _properties.size()) {
switch(column) {
case NAME:
return _keys.get(row);
case VALUE:
return _properties.getProperty((String)_keys.get(row));
}
}
return null;
}
}
/**
* Set the table value at the given location.
*
* @param value Value to set.
* @param row Row.
* @param column Column.
*/
public void setValueAt(Object value, int row, int column) {
String k = null;
String v = null;

String currKey = (String) getValueAt(row, NAME);
switch(column) {
case NAME:
k = String.valueOf(value);
if(row < _keys.size()) {
_keys.set(row, k);
}
else {
_keys.add(k);
}
String currValue = null;
if(currKey != null) {
currValue = _properties.getProperty(currKey);
_properties.remove(currKey);
}
v = currValue == null ? "" : currValue;
break;
case VALUE:
v = String.valueOf(value);
k = currKey;
if(k == null || k.length() == 0) {
k = "key-for-" + v;
}
break;
}

if(k.length() > 0) {
_properties.setProperty(k, v);
}

fireTableRowsUpdated(row, row);
// Fire change in outer class.
firePropertyChange(null, _properties);
}
}
}



+ 2
- 4
src/antidote/org/apache/tools/ant/gui/customizer/StringArrayPropertyEditor.java View File

@@ -65,14 +65,14 @@ import java.util.StringTokenizer;
* @author Simeon Fitch
*/
public class StringArrayPropertyEditor extends AbstractPropertyEditor {
private JTextPane _widget = null;
private JTextField _widget = null;

/**
* Default ctor.
*
*/
public StringArrayPropertyEditor() {
_widget = new JTextPane();
_widget = new JTextField() ;
_widget.setBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED));
_widget.addFocusListener(new FocusHandler(this));
@@ -130,7 +130,6 @@ public class StringArrayPropertyEditor extends AbstractPropertyEditor {
}
}
_widget.setText(buf.toString());
firePropertyChange(old, buf.toString());
}

/**
@@ -158,7 +157,6 @@ public class StringArrayPropertyEditor extends AbstractPropertyEditor {
public void setAsText(String text) throws IllegalArgumentException {
Object old = _widget.getText();
_widget.setText(text);
firePropertyChange(old, text);
}

/**


+ 16
- 8
src/antidote/org/apache/tools/ant/gui/customizer/StringPropertyEditor.java View File

@@ -64,14 +64,20 @@ import javax.swing.border.BevelBorder;
* @author Simeon Fitch
*/
public class StringPropertyEditor extends AbstractPropertyEditor {
private JTextPane _widget = null;
private JTextArea _widget = null;

/**
* Default ctor.
*
*/
public StringPropertyEditor() {
_widget = new JTextPane();
_widget = new JTextArea() {
public boolean isManagingFocus() {
return false;
}
};

_widget.setLineWrap(true);
_widget.addFocusListener(new FocusHandler(this));
_widget.setBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED));
@@ -115,15 +121,18 @@ public class StringPropertyEditor extends AbstractPropertyEditor {
public void setValue(Object value) {
Object old = _widget.getText();
_widget.setText(String.valueOf(value));
firePropertyChange(old, value);
}

/**
* @return The value of the property. Builtin types such as "int" will
* be wrapped as the corresponding object type such as "java.lang.Integer".
*/
* @return The value of the property. Builtin types
* such as "int" will be wrapped as the corresponding
* object type such as "java.lang.Integer". */
public Object getValue() {
return _widget.getText();
String retval = _widget.getText();
if(retval != null && retval.length() == 0) {
retval = null;
}
return retval;
}

/**
@@ -136,7 +145,6 @@ public class StringPropertyEditor extends AbstractPropertyEditor {
public void setAsText(String text) throws IllegalArgumentException {
Object old = _widget.getText();
_widget.setText(text);
firePropertyChange(old, text);
}

/**


Loading…
Cancel
Save