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.

Reply via email to