Author: ruschein
Date: 2010-12-22 16:52:34 -0800 (Wed, 22 Dec 2010)
New Revision: 23263
Added:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MyTableCellEditor.java
Modified:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableCellRenderer.java
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
Log:
Added limited cell editing capabilities.
Modified:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
===================================================================
---
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
2010-12-22 04:34:28 UTC (rev 23262)
+++
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
2010-12-23 00:52:34 UTC (rev 23263)
@@ -12,7 +12,7 @@
public BrowserTable() {
setCellSelectionEnabled(true);
- setDefaultEditor(Object.class, new MultiLineTableCellEditor());
+ setDefaultEditor(Object.class, new MyTableCellEditor());
}
@Override
Modified:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableCellRenderer.java
===================================================================
---
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableCellRenderer.java
2010-12-22 04:34:28 UTC (rev 23262)
+++
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableCellRenderer.java
2010-12-23 00:52:34 UTC (rev 23263)
@@ -70,9 +70,7 @@
setFont(labelFont);
setBackground(NON_EDITABLE_COLOR);
}
-
+
return this;
}
}
-
-
Modified:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
===================================================================
---
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
2010-12-22 04:34:28 UTC (rev 23262)
+++
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
2010-12-23 00:52:34 UTC (rev 23263)
@@ -227,14 +227,38 @@
@Override
public void setValueAt(final Object value, final int rowIndex, final
int columnIndex) {
final String text = (String)value;
-System.err.println("************************ Attempted to set a cell
value("+rowIndex+", "+columnIndex+")="+text);
final CyRow row = mapRowIndexToRow(rowIndex);
final String columnName =
mapColumnIndexToColumnName(columnIndex);
+ final Class<?> columnType = attrs.getType(columnName);
+
if (text.startsWith("=")) {
- } else {
- final Class<?> columnType = attrs.getType(columnName);
+ final Map<String, Class> variableNameToTypeMap = new
HashMap<String, Class>();
+ initVariableNameToTypeMap(variableNameToTypeMap);
+ if (compiler.compile(text, variableNameToTypeMap)) {
+ final Equation eqn = compiler.getEquation();
+ final Class<?> eqnType = eqn.getType();
+
+ // Is the equation type compatible with the
column type?
+ if (eqnType == columnType
+ || eqnType == Long.class && columnType ==
Integer.class) // Yes!
+ row.set(columnName, eqn);
+ else { // The equation type is incompatible w/
the column type!
+ final Class<?> expectedType =
columnType == Integer.class ? Long.class : columnType;
+ final String errorMsg = "Equation
result type is "
+ + getUnqualifiedName(eqnType) +
", column type is "
+ +
getUnqualifiedName(columnType) + "!";
+ final Equation errorEqn =
compiler.getErrorEquation(text, expectedType, errorMsg);
+ row.set(columnName, errorEqn);
+ }
+ } else {
+ final Class<?> eqnType = columnType ==
Integer.class ? Long.class : columnType;
+ final String errorMsg =
compiler.getLastErrorMsg();
+ final Equation errorEqn =
compiler.getErrorEquation(text, eqnType, errorMsg);
+ row.set(columnName, errorEqn);
+ }
+ } else { // Not an equation!
Object parsedValue;
- StringBuilder errorMessage = new StringBuilder();
+ final StringBuilder errorMessage = new StringBuilder();
if (columnType == String.class)
parsedValue = text;
else if (columnType == Long.class)
@@ -254,17 +278,39 @@
if (parsedValue != null)
row.set(columnName, parsedValue);
else {
- final int viewColumnIndex =
table.convertColumnIndexToView(columnIndex);
- if (viewColumnIndex == -1) // Column is
currently not visible!
- return;
-
- final ValidatedObjectAndEditString newCellValue
=
- new ValidatedObjectAndEditString(null,
text, errorMessage.toString());
- table.setValueAt(newCellValue, rowIndex,
viewColumnIndex);
+ final Class<?> eqnType = columnType ==
Integer.class ? Long.class : columnType;
+ final Equation errorEqn =
compiler.getErrorEquation(text, eqnType, errorMessage.toString());
+ row.set(columnName, errorEqn);
}
}
}
+ private String getUnqualifiedName(final Class<?> type) {
+ final String typeName = type.getName();
+ final int lastDotPos = typeName.lastIndexOf('.');
+ return lastDotPos == -1 ? typeName :
typeName.substring(lastDotPos + 1);
+ }
+
+ private void initVariableNameToTypeMap(final Map<String, Class>
variableNameToTypeMap) {
+ final Map<String, Class<?>> columnNameToTypeMap =
attrs.getColumnTypeMap();
+ for (final String columnName : columnNameToTypeMap.keySet()) {
+ final Class<?> columnType =
columnNameToTypeMap.get(columnName);
+ if (columnType == String.class)
+ variableNameToTypeMap.put(columnName,
String.class);
+ else if (columnType == Integer.class)
+ variableNameToTypeMap.put(columnName,
Long.class);
+ else if (columnType == Long.class)
+ variableNameToTypeMap.put(columnName,
Long.class);
+ else if (columnType == Boolean.class)
+ variableNameToTypeMap.put(columnName,
Boolean.class);
+ else if (columnType == List.class)
+ variableNameToTypeMap.put(columnName,
List.class);
+ else
+ throw new IllegalStateException("unknown type
\""
+ +
columnType.getName() + "\"!");
+ }
+ }
+
private Object parseLong(final String text, final StringBuilder
errorMessage) {
try {
return Long.valueOf(text);
Modified:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
===================================================================
---
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
2010-12-22 04:34:28 UTC (rev 23262)
+++
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
2010-12-23 00:52:34 UTC (rev 23263)
@@ -31,7 +31,6 @@
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableColumn;
import java.util.EventObject;
@@ -139,7 +138,7 @@
}
System.err.println("******************** in updateBounds(),
table.isEditing()="+table.isEditing());
- if (table.isEditing()) {
+// if (table.isEditing()) {
System.err.println("******************** in updateBounds(),
table.getEditingRow()="+table.getEditingRow()+",
table.getEditingColumn()="+table.getEditingColumn());
Rectangle cellRect =
table.getCellRect(table.getEditingRow(),
table.getEditingColumn(), false);
@@ -151,7 +150,7 @@
Math.max(cellRect.height +
prefSize.height, prefSize.height));
putClientProperty(UPDATE_BOUNDS, Boolean.FALSE);
validate();
- }
+// }
}
//
Added:
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MyTableCellEditor.java
===================================================================
---
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MyTableCellEditor.java
(rev 0)
+++
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/MyTableCellEditor.java
2010-12-23 00:52:34 UTC (rev 23263)
@@ -0,0 +1,39 @@
+package org.cytoscape.browser.internal;
+
+
+import java.awt.Component;
+import javax.swing.AbstractCellEditor;
+import javax.swing.JComponent;
+import javax.swing.JTextField;
+import javax.swing.JTable;
+import javax.swing.table.TableCellEditor;
+
+
+public class MyTableCellEditor extends AbstractCellEditor implements
TableCellEditor {
+ // This is the component that will handle the editing of the cell value
+ JComponent component = new JTextField();
+
+ // This method is called when a cell value is edited by the user.
+ public Component getTableCellEditorComponent(final JTable table, final
Object value,
+ final boolean isSelected,
final int rowIndex,
+ final int vColIndex)
+ {
+ // 'value' is value contained in the cell located at (rowIndex,
vColIndex)
+ if (isSelected) {
+ // cell (and perhaps other cells) are selected
+ }
+
+ // Configure the component with the specified value
+ final String text = (value != null) ?
((ValidatedObjectAndEditString)value).getEditString() : "";
+ ((JTextField)component).setText(text);
+
+ // Return the configured component
+ return component;
+ }
+
+ // This method is called when editing is completed.
+ // It must return the new value to be stored in the cell.
+ public Object getCellEditorValue() {
+ return ((JTextField)component).getText();
+ }
+}
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.