Author: ruschein
Date: 2011-01-03 06:57:46 -0800 (Mon, 03 Jan 2011)
New Revision: 23286

Modified:
   
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
Log:
Work in progress.

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-31 06:26:19 UTC (rev 23285)
+++ 
core3/table-browser-impl/trunk/src/main/java/org/cytoscape/browser/internal/BrowserTableModel.java
  2011-01-03 14:57:46 UTC (rev 23286)
@@ -31,12 +31,14 @@
        implements ColumnCreatedListener, ColumnDeletedListener, 
RowCreatedMicroListener
 {
        private static final int EOF = -1;
+       private static final int MAX_INITIALLY_VSIBLE_ATTRS = 10;
        private final JTable table;
        private final CyEventHelper eventHelper;
        private final CyTable attrs;
        private final EqnCompiler compiler;
        private boolean tableHasBooleanSelected;
        private Map<CyRow, RowSetMicroListenerProxy> rowToListenerProxyMap;
+       private List<AttrNameAndVisibility> attrNamesAndVisibilities;
 
        public BrowserTableModel(final JTable table, final CyEventHelper 
eventHelper,
                                 final CyTable attrs, final EqnCompiler 
compiler)
@@ -53,8 +55,26 @@
                final List<CyRow> rows = attrs.getAllRows();
                for (final CyRow row : rows)
                        rowToListenerProxyMap.put(row, new 
RowSetMicroListenerProxy(this, eventHelper, row));
+
+               initAttrNamesAndVisibilities();
        }
 
+       private void initAttrNamesAndVisibilities() {
+               attrNamesAndVisibilities = new 
ArrayList<AttrNameAndVisibility>(attrs.getColumnTypeMap().size());
+               final String primaryKey = attrs.getPrimaryKey();
+               attrNamesAndVisibilities.add(new 
AttrNameAndVisibility(primaryKey, true));
+               int visibleColumnCount = 1;
+               boolean isVisible = true;
+               for (final String columnName : 
attrs.getColumnTypeMap().keySet()) {
+                       if (columnName.equals(primaryKey))
+                               continue;
+
+                       attrNamesAndVisibilities.add(new 
AttrNameAndVisibility(columnName, isVisible));
+                       if (++visibleColumnCount == MAX_INITIALLY_VSIBLE_ATTRS)
+                               isVisible = false;
+               }
+       }
+
        @Override
        public int getRowCount() {
                final Map<String, Class<?>> columnNameToTypeMap = 
attrs.getColumnTypeMap();
@@ -165,11 +185,13 @@
 
        @Override
        public void handleEvent(final ColumnCreatedEvent e) {
+               attrNamesAndVisibilities.add(new 
AttrNameAndVisibility(e.getColumnName(), true));
                fireTableStructureChanged();
        }
 
        @Override
        public void handleEvent(final ColumnDeletedEvent e) {
+//             XXX
                fireTableStructureChanged();
        }
 
@@ -191,13 +213,15 @@
                        return 0;
 
                final Map<String, Class<?>> columnNameToTypeMap = 
attrs.getColumnTypeMap();
-               int index = 1;
-               for (final String name : columnNameToTypeMap.keySet()) {
-                       if (name.equals(columnName))
+               int index = attrNamesAndVisibilities.get(0).isVisible() ? 1 : 0;
+               for (final AttrNameAndVisibility nameAndVisibility : 
attrNamesAndVisibilities) {
+                       if (!nameAndVisibility.isVisible() || 
nameAndVisibility.getName().equals(primaryKey))
+                               continue;
+
+                       if (nameAndVisibility.getName().equals(columnName))
                                return index;
 
-                       if (!name.equals(primaryKey))
-                               ++index;
+                       ++index;
                }
 
                throw new IllegalStateException("We should *never* get here!");
@@ -205,18 +229,18 @@
 
        private String mapColumnIndexToColumnName(final int index) {
                final String primaryKey = attrs.getPrimaryKey();
-               if (index == 0)
+               final boolean primaryKeyIsVisible = 
attrNamesAndVisibilities.get(0).isVisible();
+               if (index == 0 && primaryKeyIsVisible)
                        return primaryKey;
 
-
                final Map<String, Class<?>> columnNameToTypeMap = 
attrs.getColumnTypeMap();
-               int i = 1;
-               for (final String name : columnNameToTypeMap.keySet()) {
-                       if (name.equals(primaryKey))
+               int i = primaryKeyIsVisible ? 1 : 0;
+               for (final AttrNameAndVisibility nameAndVisibility : 
attrNamesAndVisibilities) {
+                       if (!nameAndVisibility.isVisible() || 
nameAndVisibility.getName().equals(primaryKey))
                                continue;
 
                        if (index == i)
-                               return name;
+                               return nameAndVisibility.getName();
 
                        ++i;
                }
@@ -692,3 +716,26 @@
                eventHelper.removeMicroListener(this, 
RowSetMicroListener.class, row);
        }
 }
+
+
+class AttrNameAndVisibility {
+       private final String attrName;
+       private boolean isVisible;
+
+       AttrNameAndVisibility(final String attrName, final boolean isVisible) {
+               this.attrName = attrName;
+               this.isVisible = isVisible;
+       }
+
+       String getName() {
+               return attrName;
+       }
+
+       void setVisibility(final boolean isVisible) {
+               this.isVisible = isVisible;
+       }
+
+       boolean isVisible() {
+               return isVisible;
+       }
+}
\ No newline at end of file

-- 
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