Author: pwang
Date: 2011-09-14 16:48:54 -0700 (Wed, 14 Sep 2011)
New Revision: 26805
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
Log:
handle the case -- user edit a cell and click on open space on canvas
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
2011-09-14 23:36:49 UTC (rev 26804)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
2011-09-14 23:48:54 UTC (rev 26805)
@@ -30,6 +30,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
@@ -53,6 +54,7 @@
import org.cytoscape.equations.EquationCompiler;
import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.util.swing.OpenBrowser;
+import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.CyColumn;
import org.slf4j.Logger;
@@ -71,7 +73,7 @@
private static final TableCellRenderer cellRenderer = new
BrowserTableCellRenderer();
private static final String MAC_OS_ID = "mac";
private Clipboard systemClipboard;
- private PropertyChangeListener editorRemover = null;
+ private CellEditorRemover editorRemover = null;
private Map<String, Map<String, String>> linkoutProps;
private final HashMap<String, Integer> columnWidthMap = new
HashMap<String, Integer>();
@@ -85,7 +87,6 @@
private final EquationCompiler compiler;
private final PopupMenuHelper popupMenuHelper;
private boolean updateColumnComparators;
- private CellFocusListener myCellFocusListener = new CellFocusListener();
private static final Logger logger =
LoggerFactory.getLogger(BrowserTable.class);
@@ -251,7 +252,12 @@
}
TableCellEditor editor = getCellEditor(row, column);
-
+
+ // remember the table row, because tableModel will disappear if
+ // user click on open space on canvas, so we have to remember
it before it is gone
+ BrowserTableModel model = (BrowserTableModel) this.getModel();
+ editorRemover.setCellData(model.getCellData(row, column));
+
if ((editor != null) && editor.isCellEditable(e)) {
// Do this first so that the bounds of the JTextArea
editor
// will be correct.
@@ -278,29 +284,14 @@
Math.max(cellRect.width,
prefSize.width),
Math.max(cellRect.height,
prefSize.height));
((JComponent)
editorComp).putClientProperty(MultiLineTableCellEditor.UPDATE_BOUNDS,
-
Boolean.FALSE);
+
Boolean.FALSE);
} else
editorComp.setBounds(cellRect);
add(editorComp);
editorComp.validate();
-
- //
- FocusListener[] ls = editorComp.getFocusListeners();
- boolean addMyFocusListener = true;
- for (FocusListener l: ls){
- if(l == this.myCellFocusListener){
- addMyFocusListener = false;
- break;
- }
- }
-
- if (addMyFocusListener){
-
editorComp.addFocusListener(this.myCellFocusListener);
- }
-
return true;
}
@@ -308,29 +299,6 @@
}
- public class CellFocusListener implements FocusListener {
-
- public void focusGained(FocusEvent e){
- }
-
- public void focusLost(FocusEvent e){
-
- TableCellEditor editor =
BrowserTable.this.getCellEditor();
- if ((editor != null) && editor.isCellEditable(e)) {
- try {
- getCellEditor().cancelCellEditing();
- //getCellEditor().stopCellEditing();
- }
- catch (Exception ex){
- // If user click on open space, not on
node/edge, the cell is no longer there.
- // In this case, we can not run
stopCellEditing(), otherwise we get ArrayOutOfBoundException
- logger.info(ex.getMessage());
- }
- }
- }
- }
-
-
/**
* Display elements in the list objects.
*/
@@ -638,13 +606,16 @@
private class CellEditorRemover implements PropertyChangeListener {
private final KeyboardFocusManager focusManager;
+ private BrowserTableModel model;
+ private int row =-1, column = -1;
+ private Vector cellVect = null;
public CellEditorRemover(final KeyboardFocusManager fm) {
this.focusManager = fm;
}
public void propertyChange(PropertyChangeEvent ev) {
- if (!isEditing() ||
(getClientProperty("terminateEditOnFocusLost") != Boolean.TRUE)) {
+ if (!isEditing()) {
return;
}
@@ -656,8 +627,14 @@
return;
} else if (c instanceof Window) {
if (c ==
SwingUtilities.getRoot(BrowserTable.this)) {
- if
(!getCellEditor().stopCellEditing()) {
+
+ try {
+
getCellEditor().stopCellEditing();
+ }
+ catch (Exception e){
getCellEditor().cancelCellEditing();
+ //Update the cell data
based on the remembered value
+
updateAttributeAfterCellLostFocus();
}
}
@@ -667,8 +644,23 @@
c = c.getParent();
}
}
+
+ // Cell data passed from previous TableModel, because
tableModel will disappear if
+ // user click on open space on canvas, so we have to remember
it before it is gone
+ public void setCellData(Vector cellVect){
+ this.cellVect = cellVect;
+ }
+
+ private void updateAttributeAfterCellLostFocus(){
+
+ CyRow rowObj = (CyRow) cellVect.get(0);
+ String columnName = (String)cellVect.get(1);
+
+ rowObj.set(columnName,
MultiLineTableCellEditor.lastValueUserEntered);
+ }
}
-
+
+
public void addColumn(final TableColumn aColumn) {
super.addColumn(aColumn);
@@ -684,5 +676,8 @@
rowSorter.setComparator(aColumn.getModelIndex(),
new
ValidatedObjectAndEditStringComparator(rowDataType));
}
+
+
+
}
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
2011-09-14 23:36:49 UTC (rev 26804)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
2011-09-14 23:48:54 UTC (rev 26805)
@@ -31,6 +31,7 @@
import org.cytoscape.model.events.RowsCreatedListener;
import org.cytoscape.model.events.RowsSetEvent;
import org.cytoscape.model.events.RowsSetListener;
+import java.util.Vector;
public final class BrowserTableModel extends AbstractTableModel implements
ColumnCreatedListener,
@@ -406,6 +407,16 @@
throw new IllegalStateException("We should *never* get here!
(index="+index+", i="+i);
}
+ // Because tableModel will disappear if user click on open space on
canvas,
+ // we have to remember it before it is gone
+ public Vector getCellData(final int rowIndex, final int columnIndex){
+ Vector cellVect = new Vector();
+ cellVect.add(mapRowIndexToRow(rowIndex));
+ cellVect.add( mapColumnIndexToColumnName(columnIndex));
+
+ return cellVect;
+ }
+
@Override
public void setValueAt(final Object value, final int rowIndex, final
int columnIndex) {
final String text = (String)value;
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
2011-09-14 23:36:49 UTC (rev 26804)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/MultiLineTableCellEditor.java
2011-09-14 23:48:54 UTC (rev 26805)
@@ -148,7 +148,9 @@
public void keyTyped(KeyEvent e) {}
- public void keyReleased(KeyEvent e) {}
+ public void keyReleased(KeyEvent e) {
+ lastValueUserEntered = getCellEditorValue();
+ }
public void keyPressed(final KeyEvent event) {
if (event.getKeyCode() != KeyEvent.VK_ENTER)
@@ -180,4 +182,6 @@
}
}
}
+
+ public static Object lastValueUserEntered = null;
}
--
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.