Author: rozagh
Date: 2012-08-03 15:33:26 -0700 (Fri, 03 Aug 2012)
New Revision: 30094
Added:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableColumnModel.java
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/AttributeBrowserToolBar.java
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AttributeListModel.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/BrowserTableModel.java
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/DeletionDialog.java
Log:
fixes #1316 added a column model to keep track of columns in the table browser
view and keep the order of the columns after any structural change.
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-03 22:28:09 UTC (rev 30093)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AbstractTableBrowser.java
2012-08-03 22:33:26 UTC (rev 30094)
@@ -184,6 +184,13 @@
updateColumnComparators(rowSorter,
browserTableModel);
browserTable.setUpdateComparators(true);
+ //hide SUID and selected by default
+
+ final List<String> attrList =
browserTableModel.getAllAttributeNames();
+ attrList.remove(CyNetwork.SUID);
+ attrList.remove( CyNetwork.SELECTED);
+
browserTableModel.setVisibleAttributeNames(attrList);
+
scrollPane = new JScrollPane(browserTable);
scrollPanes.put(browserTableModel, scrollPane);
}
@@ -198,13 +205,10 @@
if (btm == null && currentTable != null) {
final BrowserTable browserTable = new
BrowserTable(compiler, popupMenuHelper,
applicationManager, eventHelper,
tableManager);
+ BrowserTableColumnModel columnModel = new
BrowserTableColumnModel();
+ browserTable.setColumnModel(columnModel);
btm = new BrowserTableModel(browserTable, currentTable,
compiler, tableManager);
- final List<String> attrList =
btm.getVisibleAttributeNames();
- //hide SUID and selected by default
- attrList.remove(CyNetwork.SUID);
- attrList.remove( CyNetwork.SELECTED);
- btm.setVisibleAttributeNames(attrList);
browserTableModels.put(currentTable, btm);
}
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AttributeBrowserToolBar.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AttributeBrowserToolBar.java
2012-08-03 22:28:09 UTC (rev 30093)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AttributeBrowserToolBar.java
2012-08-03 22:33:26 UTC (rev 30094)
@@ -737,7 +737,7 @@
final String[] attrArray = getAttributeArray();
final JFrame frame = (JFrame)SwingUtilities.getRoot(this);
- final DeletionDialog dDialog = new DeletionDialog(frame,
browserTableModel.getAttributes());
+ final DeletionDialog dDialog = new DeletionDialog(frame,
browserTableModel.getAttributes(), browserTableModel);
dDialog.pack();
dDialog.setLocationRelativeTo(toolBar);
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AttributeListModel.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AttributeListModel.java
2012-08-03 22:28:09 UTC (rev 30093)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/AttributeListModel.java
2012-08-03 22:33:26 UTC (rev 30094)
@@ -49,11 +49,13 @@
import org.cytoscape.model.events.ColumnCreatedListener;
import org.cytoscape.model.events.ColumnDeletedEvent;
import org.cytoscape.model.events.ColumnDeletedListener;
+import org.cytoscape.model.events.ColumnNameChangedEvent;
+import org.cytoscape.model.events.ColumnNameChangedListener;
import org.cytoscape.service.util.CyServiceRegistrar;
public class AttributeListModel
- implements ListModel, ComboBoxModel, ColumnCreatedListener,
ColumnDeletedListener
+ implements ListModel, ComboBoxModel, ColumnCreatedListener,
ColumnDeletedListener, ColumnNameChangedListener
{
private Vector listeners = new Vector();
private BrowserTableModel browserTableModel;
@@ -179,4 +181,20 @@
}
}
}
+
+ @Override
+ public void handleEvent(ColumnNameChangedEvent e) {
+
+ if (browserTableModel == null)
+ return;
+
+ if (e.getSource() != browserTableModel.getAttributes())
+ return;
+
+ if (attributeNames.contains(e.getOldColumnName())){
+ int attrIndex =
attributeNames.indexOf(e.getOldColumnName());
+ attributeNames.set(attrIndex, e.getNewColumnName());
+ }
+
+ }
}
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-03 22:28:09 UTC (rev 30093)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTable.java
2012-08-03 22:33:26 UTC (rev 30094)
@@ -617,8 +617,8 @@
if (rowSorter == null)
return;
- final BrowserTableModel tableModel = (BrowserTableModel)
getModel();
- final Class<?> rowDataType =
tableModel.getColumn(aColumn.getModelIndex()).getType();
+ final BrowserTableModel tableModel =
(BrowserTableModel)getModel();
+ final Class<?> rowDataType =
tableModel.getColumnByModelIndex(aColumn.getModelIndex()).getType();
rowSorter.setComparator(aColumn.getModelIndex(), new
ValidatedObjectAndEditStringComparator(rowDataType));
}
Added:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableColumnModel.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableColumnModel.java
(rev 0)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableColumnModel.java
2012-08-03 22:33:26 UTC (rev 30094)
@@ -0,0 +1,255 @@
+package org.cytoscape.browser.internal;
+
+import javax.swing.table.*;
+import java.util.Vector;
+import java.util.Enumeration;
+
+/**
+ * <code>BrowserTableColumnModel</code> extends the DefaultTableColumnModel .
+ * It provides a comfortable way to hide/show columns.
+ * Columns keep their positions when hidden and shown again.
+ *
+ * In order to work with JTable it cannot add any events to
<code>TableColumnModelListener</code>.
+ * Therefore hiding a column will result in <code>columnRemoved</code> event
and showing it
+ * again will notify listeners of a <code>columnAdded</code>, and possibly a
<code>columnMoved</code> event.
+ * For the same reason the following methods still deal with visible columns
only:
+ * getColumnCount(), getColumns(), getColumnIndex(), getColumn()
+ * There are overloaded versions of these methods that take a parameter
<code>onlyVisible</code> which let's
+ * you specify wether you want invisible columns taken into account.
+ *
+ * @version 0.9 04/03/01
+ * @author Stephen Kelvin, [email protected]
+ * @see DefaultTableColumnModel
+ */
+
+public class BrowserTableColumnModel extends DefaultTableColumnModel {
+ /** Array of TableColumn objects in this model.
+ * Holds all column objects, regardless of their visibility
+ */
+ protected Vector allTableColumns = new Vector();
+
+
+ /**
+ * Creates an extended table column model.
+ */
+ BrowserTableColumnModel() {
+ }
+
+ /**
+ * Sets the visibility of the specified TableColumn.
+ * The call is ignored if the TableColumn is not found in this column
model
+ * or its visibility status did not change.
+ * <p>
+ *
+ * @param aColumn the column to show/hide
+ * @param visible its new visibility status
+ */
+ // listeners will receive columnAdded()/columnRemoved() event
+ public void setColumnVisible(TableColumn column, boolean visible) {
+ if(!visible) {
+ super.removeColumn(column);
+ }
+ else {
+ // find the visible index of the column:
+ // iterate through both collections of visible and all
columns, counting
+ // visible columns up to the one that's about to be
shown again
+ int noVisibleColumns = tableColumns.size();
+ int noInvisibleColumns = allTableColumns.size();
+ int visibleIndex = 0;
+
+ for(int invisibleIndex = 0; invisibleIndex <
noInvisibleColumns; ++invisibleIndex) {
+ TableColumn visibleColumn = (visibleIndex <
noVisibleColumns ? (TableColumn)tableColumns.get(visibleIndex) : null);
+ TableColumn testColumn =
(TableColumn)allTableColumns.get(invisibleIndex);
+
+ if(testColumn == column) {
+ if(visibleColumn != column) {
+ super.addColumn(column);
+
super.moveColumn(tableColumns.size() - 1, visibleIndex);
+ }
+ return; // ####################
+ }
+ if(testColumn == visibleColumn) {
+ ++visibleIndex;
+ }
+ }
+ }
+ }
+
+ /**
+ * Makes all columns in this model visible
+ */
+ public void setAllColumnsVisible() {
+ int noColumns = allTableColumns.size();
+
+ for(int columnIndex = 0; columnIndex < noColumns;
++columnIndex) {
+ TableColumn visibleColumn = (columnIndex <
tableColumns.size() ? (TableColumn)tableColumns.get(columnIndex) : null);
+ TableColumn invisibleColumn =
(TableColumn)allTableColumns.get(columnIndex);
+
+ if(visibleColumn != invisibleColumn) {
+ super.addColumn(invisibleColumn);
+ super.moveColumn(tableColumns.size() - 1,
columnIndex);
+ }
+ }
+ }
+
+ /**
+ * Maps the index of the column in the table model at
+ * <code>modelColumnIndex</code> to the TableColumn object.
+ * There may me multiple TableColumn objects showing the same model
column, though this is uncommon.
+ * This method will always return the first visible or else the first
invisible column with the specified index.
+ * @param modelColumnIndex index of column in table model
+ * @return table column object or null if no such column in this column
model
+ */
+ public TableColumn getColumnByModelIndex(int modelColumnIndex) {
+ for (int columnIndex = 0; columnIndex < allTableColumns.size();
++columnIndex) {
+ TableColumn column =
(TableColumn)allTableColumns.elementAt(columnIndex);
+ if(column.getModelIndex() == modelColumnIndex) {
+ return column;
+ }
+ }
+ return null;
+ }
+
+ /** Checks wether the specified column is currently visible.
+ * @param aColumn column to check
+ * @return visibility of specified column (false if there is no such
column at all. [It's not visible, right?])
+ */
+ public boolean isColumnVisible(TableColumn aColumn) {
+ return (tableColumns.indexOf(aColumn) >= 0);
+ }
+
+ /** Append <code>column</code> to the right of exisiting columns.
+ * Posts <code>columnAdded</code> event.
+ * @param column The column to be added
+ * @see #removeColumn
+ * @exception IllegalArgumentException if <code>column</code> is
<code>null</code>
+ */
+ public void addColumn(TableColumn column) {
+ allTableColumns.addElement(column);
+ super.addColumn(column);
+ }
+
+ /** Removes <code>column</code> from this column model.
+ * Posts <code>columnRemoved</code> event.
+ * Will do nothing if the column is not in this model.
+ * @param column the column to be added
+ * @see #addColumn
+ */
+ public void removeColumn(TableColumn column) {
+ int allColumnsIndex = allTableColumns.indexOf(column);
+ if(allColumnsIndex != -1) {
+ allTableColumns.removeElementAt(allColumnsIndex);
+ }
+ super.removeColumn(column);
+ for (int columnIndex = 0; columnIndex < allTableColumns.size();
++columnIndex) {
+ TableColumn column2 =
(TableColumn)allTableColumns.elementAt(columnIndex);
+
+ }
+
+ }
+
+ /** Moves the column from <code>oldIndex</code> to
<code>newIndex</code>.
+ * Posts <code>columnMoved</code> event.
+ * Will not move any columns if <code>oldIndex</code> equals
<code>newIndex</code>.
+ *
+ * @param oldIndex index of column to be
moved
+ * @param newIndex new index of the column
+ * @exception IllegalArgumentException if either <code>oldIndex</code>
or
+ * <code>newIndex</code>
+ * are not in [0,
getColumnCount() - 1]
+ */
+ public void moveColumn(int oldIndex, int newIndex) {
+ if ((oldIndex < 0) || (oldIndex >= getColumnCount()) ||
+ (newIndex < 0) || (newIndex >=
getColumnCount()))
+ throw new IllegalArgumentException("moveColumn() -
Index out of range");
+
+ TableColumn fromColumn = (TableColumn)
tableColumns.get(oldIndex);
+ TableColumn toColumn = (TableColumn)
tableColumns.get(newIndex);
+
+ int allColumnsOldIndex = allTableColumns.indexOf(fromColumn);
+ int allColumnsNewIndex = allTableColumns.indexOf(toColumn);
+
+ if(oldIndex != newIndex) {
+ allTableColumns.removeElementAt(allColumnsOldIndex);
+ allTableColumns.insertElementAt(fromColumn,
allColumnsNewIndex);
+ }
+
+ super.moveColumn(oldIndex, newIndex);
+ }
+
+ /**
+ * Returns the total number of columns in this model.
+ *
+ * @param onlyVisible if set only visible columns will be counted
+ * @return the number of columns in the <code>tableColumns</code>
array
+ * @see #getColumns
+ */
+ public int getColumnCount(boolean onlyVisible) {
+ Vector columns = (onlyVisible ? tableColumns : allTableColumns);
+ return columns.size();
+ }
+
+ /**
+ * Returns an <code>Enumeration</code> of all the columns in the model.
+ *
+ * @param onlyVisible if set all invisible columns will be missing
from the enumeration.
+ * @return an <code>Enumeration</code> of the columns in the model
+ */
+ public Enumeration getColumns(boolean onlyVisible) {
+ Vector columns = (onlyVisible ? tableColumns : allTableColumns);
+
+ return columns.elements();
+ }
+
+ /**
+ * Returns the position of the first column whose identifier equals
<code>identifier</code>.
+ * Position is the the index in all visible columns if
<code>onlyVisible</code> is true or
+ * else the index in all columns.
+ *
+ * @param identifier the identifier object to search for
+ * @param onlyVisible if set searches only visible columns
+ *
+ * @return the index of the first column whose identifier
+ * equals <code>identifier</code>
+ *
+ * @exception IllegalArgumentException if <code>identifier</code>
+ * is <code>null</code>, or if no
+ * <code>TableColumn</code> has this
+ * <code>identifier</code>
+ * @see #getColumn
+ */
+ public int getColumnIndex(Object identifier, boolean onlyVisible) {
+ if (identifier == null) {
+ throw new IllegalArgumentException("Identifier is
null");
+ }
+
+ Vector columns = (onlyVisible ? tableColumns :
allTableColumns);
+ int noColumns = columns.size();
+ TableColumn column;
+
+ for(int columnIndex = 0; columnIndex < noColumns;
++columnIndex) {
+ column = (TableColumn)columns.get(columnIndex);
+
+ if(identifier.equals(column.getIdentifier()))
+ return columnIndex;
+ }
+
+ throw new IllegalArgumentException("Identifier not found");
+ }
+
+ /**
+ * Returns the <code>TableColumn</code> object for the column
+ * at <code>columnIndex</code>.
+ *
+ * @param columnIndex the index of the column desired
+ * @param onlyVisible if set columnIndex is meant to be
relative to all visible columns only
+ * else it is the index in all columns
+ *
+ * @return the <code>TableColumn</code> object for the column
+ * at <code>columnIndex</code>
+ */
+ public TableColumn getColumn(int columnIndex, boolean onlyVisible) {
+ return (TableColumn)tableColumns.elementAt(columnIndex);
+ }
+}
+
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
2012-08-03 22:28:09 UTC (rev 30093)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
2012-08-03 22:33:26 UTC (rev 30094)
@@ -5,6 +5,7 @@
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
@@ -14,6 +15,7 @@
import javax.swing.event.TableModelEvent;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;
+import javax.swing.table.TableRowSorter;
import org.cytoscape.browser.internal.util.TableBrowserUtil;
import org.cytoscape.equations.Equation;
@@ -51,8 +53,8 @@
// If this is FALSE then we show all rows
private boolean regularViewMode;
- private List<AttrNameAndVisibility> attrNamesAndVisibilities;
-
+ private List<String> attrNames;
+
private Collection<CyRow> selectedRows = null;
private Object[] rowIndexToPrimaryKey;
@@ -69,8 +71,8 @@
initAttrNamesAndVisibilities();
-
-
+
+
// add each row to an array to allow fast lookup from an index
final Collection<CyRow> rows = dataTable.getAllRows();
this.rowIndexToPrimaryKey = new Object[rows.size()];
@@ -85,12 +87,13 @@
}
private void initAttrNamesAndVisibilities() {
- attrNamesAndVisibilities = new
ArrayList<AttrNameAndVisibility>();
+ attrNames = new ArrayList<String>();
int i = 0;
for (final CyColumn column : dataTable.getColumns()) {
- attrNamesAndVisibilities.add(new
AttrNameAndVisibility(column.getName(), true));
+ attrNames.add(column.getName());
i++;
}
+
}
public JTable getTable() { return table; }
@@ -103,26 +106,49 @@
public Class<?> getColumnClass(final int columnIndex) {
return ValidatedObjectAndEditString.class;
}
+
+ List<String> getAllAttributeNames() {
+ final List<String> AttrNames = new ArrayList<String>();
+
+ for (final String name : attrNames) {
+ AttrNames.add(name);
+ }
- // Note: return value excludes the primary key of the associated
CyTable!
+ return AttrNames;
+ //Never rerturn the list of attrNames itself, because it will
be returned by reference and anychanges to this list will affect the model
+ //return attrNames;
+ }
+
List<String> getVisibleAttributeNames() {
- final List<String> visibleAttrNames = new ArrayList<String>();
- for (final AttrNameAndVisibility nameAndVisibility :
attrNamesAndVisibilities) {
- if (nameAndVisibility.isVisible())// &&
!nameAndVisibility.getName().equals(primaryKey))
-
visibleAttrNames.add(nameAndVisibility.getName());
+ final List<String> visibleAttrNames = new ArrayList<String>();
+ for (final String name : attrNames) {
+ if (isColumnVisible(name))
+ visibleAttrNames.add(name);
}
-
+
return visibleAttrNames;
}
+
+ public Boolean isColumnVisible(String colName){
+ BrowserTableColumnModel columnModel = (BrowserTableColumnModel)
table.getColumnModel();
+ TableColumn column =
columnModel.getColumnByModelIndex(mapColumnNameToColumnIndex(colName));
+ return columnModel.isColumnVisible(column);
+ }
public void setVisibleAttributeNames(final Collection<String>
visibleAttributes) {
-
- for (final AttrNameAndVisibility nameAndVisibility :
attrNamesAndVisibilities)
-
nameAndVisibility.setVisibility(visibleAttributes.contains(nameAndVisibility.getName()));
-
- fireTableStructureChanged();
+
+ BrowserTableColumnModel columnModel = (BrowserTableColumnModel)
table.getColumnModel();
+ for (final String name : attrNames) {
+ int col = mapColumnNameToColumnIndex(name);
+ int convCol = table.convertColumnIndexToView(col);
+ TableColumn column =
columnModel.getColumnByModelIndex(col);
+ columnModel.setColumnVisible(column,
visibleAttributes.contains(name));
+ }
+
+ //don't fire this, it will reset all the columns based on model
+ //fireTableStructureChanged();
}
@Override
@@ -139,37 +165,38 @@
}
+ // this should return the number of columns in model
@Override
public int getColumnCount() {
- int count = 0;
- for (final AttrNameAndVisibility nameAndVisibility :
attrNamesAndVisibilities) {
- if (nameAndVisibility.isVisible())
- ++count;
- }
-
- return count;
+ return attrNames.size();
}
-
+
public Object getValueAt(final int rowIndex, final String columnName) {
final CyRow row =
mapRowIndexToRow(table.convertRowIndexToModel(rowIndex));
return getValidatedObjectAndEditString(row, columnName);
}
@Override
- public Object getValueAt(final int rowIndex, final int columnIndex) {
+ public Object getValueAt(final int rowIndex, final int columnIndex) {
final String columnName = getColumnName(columnIndex);
final CyRow row = mapRowIndexToRow(rowIndex);
-
+
return getValidatedObjectAndEditString(row, columnName);
}
CyColumn getColumn(final int columnIndex) {
final String columnName = getColumnName(
table.convertColumnIndexToModel(columnIndex));
-
+
return dataTable.getColumn(columnName);
}
+ CyColumn getColumnByModelIndex(final int modelIndex) {
+ final String columnName = getColumnName( modelIndex);
+
+ return dataTable.getColumn(columnName);
+ }
+
private CyRow mapRowIndexToRow(final int rowIndex) {
if (regularViewMode) {
if (selectedRows == null)
@@ -230,30 +257,62 @@
return row.get(columnName, column.getType());
}
+ @SuppressWarnings("unchecked")
@Override
public void handleEvent(final ColumnCreatedEvent e) {
if (e.getSource() != dataTable)
return;
- attrNamesAndVisibilities.add(new
AttrNameAndVisibility(e.getColumnName(), true));
- fireTableStructureChanged();
+ BrowserTableColumnModel columnModel = (BrowserTableColumnModel)
table.getColumnModel();
+
+ attrNames.add(e.getColumnName());
+
+ int colIndex = columnModel.getColumnCount(false);
+ TableColumn newCol = new TableColumn(colIndex);
+ newCol.setHeaderValue(e.getColumnName());
+ table.setUpdateComparators(false);
+ table.addColumn(newCol);
+ final TableRowSorter<BrowserTableModel> rowSorter = new
TableRowSorter<BrowserTableModel>(this);
+ table.setRowSorter(rowSorter);
+ updateColumnComparators(rowSorter, this);
+ table.setUpdateComparators(true);
+
}
+ 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()));
+ }
-
@Override
public void handleEvent(final ColumnDeletedEvent e) {
if (e.getSource() != dataTable)
return;
+ BrowserTableColumnModel columnModel = (BrowserTableColumnModel)
table.getColumnModel();
final String columnName = e.getColumnName();
- for (int i = 0; i < attrNamesAndVisibilities.size(); ++i) {
- if
(attrNamesAndVisibilities.get(i).getName().equals(columnName)) {
- attrNamesAndVisibilities.remove(i);
- break;
+ boolean columnFound = false;
+ int removedColIndex = -1;
+
+ for (int i = 0; i < attrNames.size(); ++i) {
+ if (attrNames.get(i).equals(columnName)) {
+ removedColIndex = i;
+ columnModel.removeColumn
(columnModel.getColumn(table.convertColumnIndexToView( i)));
+ columnFound = true;
}
+ else if (columnFound){ //need to push back the model
indexes for all of the columns after this
+ TableColumn nextCol =
columnModel.getColumn(table.convertColumnIndexToView( i));
+ nextCol.setModelIndex(i- 1);
+ }
}
+
+ if (removedColIndex != -1){//remove the item after the loop is
done
+ attrNames.remove(removedColIndex);
+ }
- fireTableStructureChanged();
}
@Override
@@ -262,10 +321,15 @@
return;
final String newColumnName = e.getNewColumnName();
+ final int column =
mapColumnNameToColumnIndex(e.getOldColumnName());
+ if (isColumnVisible(e.getOldColumnName())){
+ int colIndex = table.convertColumnIndexToView(column);
+ if (colIndex != -1)
+
table.getColumnModel().getColumn(colIndex).setHeaderValue(newColumnName);
+ }
+
renameColumnName(e.getOldColumnName(), newColumnName);
- final int column = mapColumnNameToColumnIndex(newColumnName);
- if (column != -1)
-
table.getColumnModel().getColumn(column).setHeaderValue(newColumnName);
+
}
@Override
@@ -401,63 +465,52 @@
}
}
-
+
public String getCyColumnName( final int column){
return (String) dataTable.getColumns().toArray()[column];
}
-
+
@Override
public String getColumnName(final int column) {
return mapColumnIndexToColumnName(column);
}
+
+
private void renameColumnName(final String oldName, final String
newName) {
- for (final AttrNameAndVisibility nameAndVisibility :
attrNamesAndVisibilities) {
- if (nameAndVisibility.getName().equals(oldName)) {
- nameAndVisibility.setName(newName);
- return;
- }
+
+ BrowserTableColumnModel columnModel = (BrowserTableColumnModel)
table.getColumnModel();
+
+ if (attrNames.contains(oldName)){
+ int index = attrNames.indexOf(oldName);
+ attrNames.set(index, newName);
+ columnModel.getColumn(table.convertColumnIndexToView(
index)).setHeaderValue(newName);
+ return;
}
-
- throw new IllegalStateException("We should *never* get here.");
+
+ throw new IllegalStateException("The specified column " +
oldName +" does not exist in the model.");
}
-
+
public boolean isPrimaryKey (int col){
return
dataTable.getPrimaryKey().getName().equals(getColumnName(table.convertColumnIndexToModel(col)));
}
-
+
int mapColumnNameToColumnIndex(final String columnName) {
- int index = 0;
- for (final AttrNameAndVisibility nameAndVisibility :
attrNamesAndVisibilities) {
-
- if(!nameAndVisibility.isVisible())
- continue;
-
- if (nameAndVisibility.getName().equals(columnName))
- return index;
- index++;
- }
+ if(attrNames.contains(columnName))
+ return attrNames.indexOf(columnName);
return -1;
}
- private String mapColumnIndexToColumnName(final int index) {
-
- int i = 0;
- for (final AttrNameAndVisibility nameAndVisibility :
attrNamesAndVisibilities) {
- if (!nameAndVisibility.isVisible())
- continue;
+ private String mapColumnIndexToColumnName(final int index) {
+ if (index <= attrNames.size())
+ return attrNames.get(index);
- if (index == i)
- return nameAndVisibility.getName();
+ throw new ArrayIndexOutOfBoundsException();
- ++i;
- }
- throw new IllegalStateException("We should *never* get here.
(index="+index+", visible attibutes are="+ attrNamesAndVisibilities.size()+")");
-
}
// Because tableModel will disappear if user click on open space on
canvas,
@@ -473,9 +526,9 @@
CyRow getRow(final Object suid) {
return dataTable.getRow(suid);
}
-
-
+
+
@Override
public void setValueAt(final Object value, final int rowIndex, final
int columnIndex) {
final String text = (String)value;
@@ -514,7 +567,6 @@
} else { // Not an equation!
ArrayList parsedData =
TableBrowserUtil.parseCellInput(dataTable, columnName, value);
-
if (parsedData.get(0) != null)
row.set(columnName, parsedData.get(0));
else {
@@ -530,7 +582,7 @@
// Pop-up window for error message
private static void showErrorWindow(final String errMessage) {
- JOptionPane.showMessageDialog(null, errMessage, "Invalid
Value.",
+ JOptionPane.showMessageDialog(null, errMessage, "Invalid Value",
JOptionPane.ERROR_MESSAGE);
}
@@ -585,36 +637,3 @@
}
}
-
-
-final class AttrNameAndVisibility {
-
- private String attrName;
- private boolean isVisible;
-
- AttrNameAndVisibility(final String attrName, final boolean isVisible) {
- this.attrName = attrName;
- this.isVisible = isVisible;;
- }
-
- String getName() {
- return attrName;
- }
-
- void setName(final String newAttrName) {
- attrName = newAttrName;
- }
-
- void setVisibility(final boolean isVisible) {
- this.isVisible = isVisible;
- }
-
- boolean isVisible() {
- return isVisible;
- }
-
- @Override
- public String toString(){
- return "Attr name " + attrName + " visiblity " + isVisible;
- }
-}
Modified:
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/DeletionDialog.java
===================================================================
---
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/DeletionDialog.java
2012-08-03 22:28:09 UTC (rev 30093)
+++
core3/impl/trunk/table-browser-impl/src/main/java/org/cytoscape/browser/internal/DeletionDialog.java
2012-08-03 22:33:26 UTC (rev 30094)
@@ -35,12 +35,15 @@
}
private CyTable attributes;
+ private BrowserTableModel tableModel;
/** Creates new form DeletionDialog */
- protected DeletionDialog(final Frame parent, final CyTable attributes) {
+ protected DeletionDialog(final Frame parent, final CyTable attributes,
final BrowserTableModel tableModel) {
super(parent, "Delete Attributes", /* modal = */ true);
this.attributes = attributes;
+ this.tableModel = tableModel;
+
initComponents();
}
@@ -60,80 +63,83 @@
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
attributeList.setModel(new AbstractListModel() {
- public int getSize() {
- int mutableCount = 0;
- for (final CyColumn column :
attributes.getColumns()) {
- if (!column.isImmutable())
+ public int getSize() {
+ int mutableCount = 0;
+ for (final CyColumn column :
attributes.getColumns()) {
+ if (!column.isImmutable())
+ if
(tableModel.isColumnVisible(column.getName()))
++mutableCount;
- }
-
- return mutableCount;
}
- public Object getElementAt(final int i) {
- final String[] columnNames = new
String[getSize()];
+ return mutableCount;
+ }
- int k = 0;
- for (final CyColumn column :
attributes.getColumns()) {
- if (!column.isImmutable())
+ public Object getElementAt(final int i) {
+ final String[] columnNames = new
String[getSize()];
+
+ int k = 0;
+ for (final CyColumn column :
attributes.getColumns()) {
+ if (!column.isImmutable()){
+ if
(tableModel.isColumnVisible(column.getName()))
columnNames[k++] =
column.getName();
}
+ }
- Arrays.sort(columnNames, new
CaseInsensitiveCompare());
- return columnNames[i];
- }
- });
+ Arrays.sort(columnNames, new
CaseInsensitiveCompare());
+ return columnNames[i];
+ }
+ });
deletionPane.setViewportView(attributeList);
deleteButton.setText("Delete");
deleteButton.addActionListener(new ActionListener() {
- public void
actionPerformed(java.awt.event.ActionEvent evt) {
- deleteButtonActionPerformed(evt);
- }
- });
+ public void actionPerformed(java.awt.event.ActionEvent
evt) {
+ deleteButtonActionPerformed(evt);
+ }
+ });
cancelButton.setText("Cancel");
cancelButton.addActionListener(new ActionListener() {
- public void
actionPerformed(java.awt.event.ActionEvent evt) {
- cancelButtonActionPerformed(evt);
- ;
- }
- });
+ public void actionPerformed(java.awt.event.ActionEvent
evt) {
+ cancelButtonActionPerformed(evt);
+ ;
+ }
+ });
descriptionLabel.setText("Please select attributes to be
deleted:");
final GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING)
-
.addGroup(layout.createSequentialGroup().addContainerGap()
-
.addGroup(layout.createParallelGroup(Alignment.LEADING)
-
.addGroup(Alignment.TRAILING,
-
layout.createSequentialGroup()
-
.addComponent(deleteButton)
-
.addPreferredGap(ComponentPlacement.RELATED)
-
.addComponent(cancelButton)
-
.addContainerGap())
-
.addGroup(Alignment.TRAILING,
-
layout.createSequentialGroup()
-
.addComponent(deletionPane,
-
GroupLayout.DEFAULT_SIZE,
-
229, Short.MAX_VALUE)
-
.addGap(12, 12, 12))
-
.addGroup(layout.createSequentialGroup()
-
.addComponent(descriptionLabel)
-
.addContainerGap(26,
-
Short.MAX_VALUE)))));
+
.addGroup(layout.createSequentialGroup().addContainerGap()
+
.addGroup(layout.createParallelGroup(Alignment.LEADING)
+
.addGroup(Alignment.TRAILING,
+
layout.createSequentialGroup()
+
.addComponent(deleteButton)
+
.addPreferredGap(ComponentPlacement.RELATED)
+
.addComponent(cancelButton)
+
.addContainerGap())
+
.addGroup(Alignment.TRAILING,
+
layout.createSequentialGroup()
+
.addComponent(deletionPane,
+
GroupLayout.DEFAULT_SIZE,
+
229, Short.MAX_VALUE)
+
.addGap(12, 12, 12))
+
.addGroup(layout.createSequentialGroup()
+
.addComponent(descriptionLabel)
+
.addContainerGap(26,
+
Short.MAX_VALUE)))));
layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING)
- .addGroup(Alignment.TRAILING,
-
layout.createSequentialGroup().addContainerGap()
-
.addComponent(descriptionLabel).addGap(12, 12, 12)
-
.addComponent(deletionPane,
-
GroupLayout.DEFAULT_SIZE,
- 200,
Short.MAX_VALUE)
-
.addPreferredGap(ComponentPlacement.RELATED)
-
.addGroup(layout.createParallelGroup(Alignment.BASELINE)
-
.addComponent(deleteButton).addComponent(cancelButton))
- .addContainerGap()));
+ .addGroup(Alignment.TRAILING,
+
layout.createSequentialGroup().addContainerGap()
+
.addComponent(descriptionLabel).addGap(12, 12, 12)
+ .addComponent(deletionPane,
+
GroupLayout.DEFAULT_SIZE,
+ 200,
Short.MAX_VALUE)
+
.addPreferredGap(ComponentPlacement.RELATED)
+
.addGroup(layout.createParallelGroup(Alignment.BASELINE)
+
.addComponent(deleteButton).addComponent(cancelButton))
+
.addContainerGap()));
pack();
} // </editor-fold>
--
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.