Author: jm
Date: 2012-08-15 12:26:22 -0700 (Wed, 15 Aug 2012)
New Revision: 30200
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
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/CustomHeaderRenderer.java
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/SortHeaderRenderer.java
Log:
Fixes #1368: Fixed way TableRowSorter and TableColumnModel is being used so we
don't allocate new instances each time the model changes.
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
2012-08-15 18:14:42 UTC (rev 30199)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
2012-08-15 19:26:22 UTC (rev 30200)
@@ -19,7 +19,6 @@
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
-import javax.swing.table.TableRowSorter;
import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.swing.CytoPanelComponent;
@@ -190,14 +189,8 @@
serviceRegistrar.registerAllServices(browserTableModel, new Properties());
browserTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
browserTable.getTableHeader().setBackground(Color.LIGHT_GRAY);
- browserTable.setUpdateComparators(false);
browserTable.setModel(browserTableModel);
- final TableRowSorter<BrowserTableModel>
rowSorter = new TableRowSorter<BrowserTableModel>(browserTableModel);
- browserTable.setRowSorter(rowSorter);
- updateColumnComparators(rowSorter,
browserTableModel);
- browserTable.setUpdateComparators(true);
-
//move and hide SUID and selected by default
final List<String> attrList =
browserTableModel.getAllAttributeNames();
@@ -226,9 +219,6 @@
if (table == null && currentTable != null) {
table = new BrowserTable(compiler, popupMenuHelper,
applicationManager, eventHelper,
tableManager);
- BrowserTableColumnModel columnModel = new
BrowserTableColumnModel();
- table.setColumnModel(columnModel);
-
BrowserTableModel model = new
BrowserTableModel(currentTable, compiler, tableManager);
table.setModel(model);
browserTables.put(currentTable, table);
@@ -241,14 +231,6 @@
return browserTables;
}
- void updateColumnComparators(final TableRowSorter<BrowserTableModel>
rowSorter,
- final BrowserTableModel browserTableModel) {
- for (int column = 0; column <
browserTableModel.getColumnCount(); ++column)
- rowSorter.setComparator(
- column,
- new ValidatedObjectAndEditStringComparator(
-
browserTableModel.getColumn(column).getType()));
- }
@Override
public String toString() {
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
2012-08-15 18:14:42 UTC (rev 30199)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
2012-08-15 19:26:22 UTC (rev 30200)
@@ -2,7 +2,6 @@
import java.awt.Color;
import java.awt.Component;
-import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
@@ -27,6 +26,7 @@
import java.util.EventObject;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -100,7 +100,6 @@
private final EquationCompiler compiler;
private final PopupMenuHelper popupMenuHelper;
- private boolean updateColumnComparators;
private final CyApplicationManager applicationManager;
private final CyEventHelper eventHelper;
@@ -108,22 +107,18 @@
private JPopupMenu cellMenu;
- private int sortedColumnIndex;
- private boolean sortedColumnAscending;
-
public BrowserTable(final EquationCompiler compiler, final
PopupMenuHelper popupMenuHelper,
final CyApplicationManager applicationManager, final
CyEventHelper eventHelper,
final CyTableManager tableManager) {
this.compiler = compiler;
this.popupMenuHelper = popupMenuHelper;
- this.updateColumnComparators = false;
this.applicationManager = applicationManager;
this.eventHelper = eventHelper;
this.tableManager = tableManager;
- this.sortedColumnAscending = true;
- this.sortedColumnIndex = -1;
initHeader();
+ setAutoCreateColumnsFromModel(false);
+ setAutoCreateRowSorter(false);
setCellSelectionEnabled(true);
setDefaultEditor(Object.class, new MultiLineTableCellEditor());
getPopupMenu();
@@ -132,8 +127,30 @@
setTransferHandler(new BrowserTableTransferHandler());
}
- public void setUpdateComparators(final boolean updateColumnComparators)
{
- this.updateColumnComparators = updateColumnComparators;
+ @Override
+ public void setModel(TableModel dataModel) {
+ super.setModel(dataModel);
+
+ BrowserTableColumnModel columnModel = new
BrowserTableColumnModel();
+ setColumnModel(columnModel);
+
+ TableRowSorter<TableModel> sorter = new
TableRowSorter<TableModel>(dataModel);
+ setRowSorter(sorter);
+
+ if (!(dataModel instanceof BrowserTableModel)) {
+ return;
+ }
+
+ BrowserTableModel model = (BrowserTableModel) dataModel;
+ for (int i = 0; i < model.getColumnCount(); i++) {
+ TableColumn tableColumn = new TableColumn(i);
+ tableColumn.setHeaderValue(model.getColumnName(i));
+ columnModel.addColumn(tableColumn);
+
+ CyColumn column = model.getColumnByModelIndex(i);
+ sorter.setComparator(i, new
ValidatedObjectAndEditStringComparator(column.getType()));
+ }
+
}
/**
@@ -464,24 +481,7 @@
@Override
public void mouseClicked(final MouseEvent event) {
-
- //*******************Sort header code **********************
-
- final int cursorType = getTableHeader().getCursor().getType();
- if ((event.getButton() == MouseEvent.BUTTON1) && (cursorType !=
Cursor.E_RESIZE_CURSOR)
- && (cursorType != Cursor.W_RESIZE_CURSOR)) {
- final int index =
getColumnModel().getColumnIndexAtX(event.getX());
-
- if (index >= 0) {
- final int modelIndex =
getColumnModel().getColumn(index).getModelIndex();
- if (sortedColumnIndex == index) {
- sortedColumnAscending =
!sortedColumnAscending;
- }
-
- sortedColumnIndex = index;
- }
- }//end of sorting
- else if (event.getButton() == MouseEvent.BUTTON3) {
+ if (event.getButton() == MouseEvent.BUTTON3) {
final int column =
getColumnModel().getColumnIndexAtX(event.getX());
final BrowserTableModel tableModel =
(BrowserTableModel) getModel();
@@ -641,21 +641,6 @@
}
}
- public void addColumn(final TableColumn aColumn) {
- super.addColumn(aColumn);
-
- if (!updateColumnComparators)
- return;
-
- final TableRowSorter rowSorter = (TableRowSorter)
getRowSorter();
- if (rowSorter == null)
- return;
-
- final BrowserTableModel tableModel =
(BrowserTableModel)getModel();
- final Class<?> rowDataType =
tableModel.getColumnByModelIndex(aColumn.getModelIndex()).getType();
- rowSorter.setComparator(aColumn.getModelIndex(), new
ValidatedObjectAndEditStringComparator(rowDataType));
- }
-
@Override
public void paint(Graphics graphics) {
synchronized (getModel()) {
@@ -715,16 +700,6 @@
}
- //*******************Sort header code **********************
- public int getSortedColumnIndex() {
- return sortedColumnIndex;
- }
-
-
- public boolean isSortedColumnAscending() {
- return sortedColumnAscending;
- }
-
public void setVisibleAttributeNames(Collection<String>
visibleAttributes) {
BrowserTableModel model = (BrowserTableModel) getModel();
@@ -766,6 +741,12 @@
if (e.getSource() != dataTable)
return;
+
+ TableRowSorter<BrowserTableModel> sorter =
(TableRowSorter<BrowserTableModel>) getRowSorter();
+ List<? extends SortKey> sortKeys = sorter.getSortKeys();
+
+ model.fireTableStructureChanged();
+
BrowserTableColumnModel columnModel = (BrowserTableColumnModel)
getColumnModel();
model.addColumn(e.getColumnName());
@@ -773,25 +754,15 @@
int colIndex = columnModel.getColumnCount(false);
TableColumn newCol = new TableColumn(colIndex);
newCol.setHeaderValue(e.getColumnName());
- setUpdateComparators(false);
addColumn(newCol);
- List<? extends SortKey> sortKeys = getRowSorter().getSortKeys();
- final TableRowSorter<BrowserTableModel> rowSorter = new
TableRowSorter<BrowserTableModel>(model);
- setRowSorter(rowSorter);
- updateColumnComparators(rowSorter, model);
- setUpdateComparators(true);
- rowSorter.setSortKeys(sortKeys);
- }
- void updateColumnComparators(final TableRowSorter<BrowserTableModel>
rowSorter,
- final BrowserTableModel browserTableModel) {
- for (int column = 0; column <
browserTableModel.getColumnCount(); ++column)
- rowSorter.setComparator(
- column,
- new
ValidatedObjectAndEditStringComparator(
-
browserTableModel.getColumnByModelIndex(column).getType()));
+ CyColumn column = model.getColumnByModelIndex(colIndex);
+ sorter.setComparator(colIndex, new
ValidatedObjectAndEditStringComparator(column.getType()));
+ sorter.setSortKeys(sortKeys);
+
}
+
@Override
public void handleEvent(final ColumnDeletedEvent e) {
BrowserTableModel model = (BrowserTableModel) getModel();
@@ -799,6 +770,12 @@
if (e.getSource() != dataTable)
return;
+
+ TableRowSorter<BrowserTableModel> sorter =
(TableRowSorter<BrowserTableModel>) getRowSorter();
+ List<? extends SortKey> sortKeys = new
ArrayList<SortKey>(sorter.getSortKeys());
+
+ model.fireTableStructureChanged();
+
BrowserTableColumnModel columnModel = (BrowserTableColumnModel)
getColumnModel();
final String columnName = e.getColumnName();
@@ -823,6 +800,15 @@
model.removeColumn(removedColIndex);
}
+ // Ensure we don't re-add a sort key for the deleted column
+ Iterator<? extends SortKey> keys = sortKeys.iterator();
+ while (keys.hasNext()) {
+ SortKey key = keys.next();
+ if (key.getColumn() == removedColIndex) {
+ keys.remove();
+ }
+ }
+ sorter.setSortKeys(sortKeys);
}
@Override
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/CustomHeaderRenderer.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/CustomHeaderRenderer.java
2012-08-15 18:14:42 UTC (rev 30199)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/CustomHeaderRenderer.java
2012-08-15 19:26:22 UTC (rev 30200)
@@ -36,12 +36,16 @@
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
+import javax.swing.RowSorter;
+import javax.swing.SortOrder;
import javax.swing.SwingConstants;
+import javax.swing.RowSorter.SortKey;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.MatteBorder;
import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableModel;
import org.cytoscape.browser.internal.util.SortArrowIcon;
import org.cytoscape.model.CyColumn;
@@ -161,10 +165,15 @@
int index = -1;
boolean ascending = true;
- if (table instanceof BrowserTable) {
- BrowserTable sortTable = (BrowserTable) table;
- index = sortTable.getSortedColumnIndex();
- ascending = sortTable.isSortedColumnAscending();
+ RowSorter<? extends TableModel> rowSorter =
table.getRowSorter();
+ int modelColumn = table.convertColumnIndexToModel(vColIndex);
+ List<? extends SortKey> sortKeys = rowSorter.getSortKeys();
+ if (sortKeys.size() > 0) {
+ SortKey key = sortKeys.get(0);
+ if (key.getColumn() == modelColumn) {
+ index = vColIndex;
+ ascending = key.getSortOrder() ==
SortOrder.ASCENDING;
+ }
}
Icon icon = ascending ? ASCENDING : DECENDING;
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/SortHeaderRenderer.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/SortHeaderRenderer.java
2012-08-15 18:14:42 UTC (rev 30199)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/SortHeaderRenderer.java
2012-08-15 19:26:22 UTC (rev 30200)
@@ -24,12 +24,17 @@
package org.cytoscape.browser.internal;
import java.awt.Component;
+import java.util.List;
import javax.swing.Icon;
import javax.swing.JTable;
+import javax.swing.RowSorter;
+import javax.swing.RowSorter.SortKey;
+import javax.swing.SortOrder;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
+import javax.swing.table.TableModel;
import org.cytoscape.browser.internal.util.SortArrowIcon;
@@ -79,13 +84,17 @@
int index = -1;
boolean ascending = true;
- if (table instanceof BrowserTable) {
- BrowserTable sortTable = (BrowserTable) table;
- index = sortTable.getSortedColumnIndex();
- ascending = sortTable.isSortedColumnAscending();
- }
-
if (table != null) {
+ RowSorter<? extends TableModel> rowSorter =
table.getRowSorter();
+ int modelColumn = table.convertColumnIndexToModel(col);
+ List<? extends SortKey> sortKeys =
rowSorter.getSortKeys();
+ if (sortKeys.size() > 0) {
+ SortKey key = sortKeys.get(0);
+ if (key.getColumn() == modelColumn) {
+ index = col;
+ ascending = key.getSortOrder() ==
SortOrder.ASCENDING;
+ }
+ }
JTableHeader header = table.getTableHeader();
if (header != 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.