classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [cp-patches] Patch for AbstractTableModel/DefaultTableModel - OK?


From: David Gilbert
Subject: Re: [cp-patches] Patch for AbstractTableModel/DefaultTableModel - OK?
Date: Fri, 24 Jun 2005 22:11:39 +0000
User-agent: Mozilla Thunderbird 1.0.2 (X11/20050426)

Roman Kennke wrote:

> David Gilbert wrote:
>
>> This patch fixes bug report 13422 and all (six) failing Mauve checks
>> (see before.txt and after.txt) for AbstractTableModel and
>> DefaultTableModel:
>>
>> 2005-06-23  Dave Gilbert  <address@hidden>
>>
>>     * javax/swing/table/AbstractTableModel.java:
>>     (getColumnName): eliminated temp index to fix very minor bug;
>>     (findColumn): throw NullPointerException for null argument;
>>     (fireTableDataChanged): set correct row indices.
>>     * javax/swing/table/DefaultTableModel.java:
>>        (setDataVector): replace null argument with empty vector then
>> call
>>     setColumnIdentifiers() to set up column names;
>>     (getColumnName): for a column index beyond the number of columns in
>>     the model, pass control to the superclass.
>>
>> OK to commit?
>>  
>>
>
> Looks ok. Please synchronize with my fixlet in DefaultTableModel and
> commit.
>
> /Roman
>
Thanks.  I added more Mauve checks for the events generated by the
methods in DefaultTableModel, and committed this revised patch:

2005-06-24  David Gilbert  <address@hidden>

    * javax/swing/table/AbstractTableModel.java:
    (getColumnName): eliminated temp index to fix very minor bug,
    (findColumn): throw NullPointerException for null argument,
    (fireTableDataChanged): set correct row indices.
    * javax/swing/table/DefaultTableModel.java:
    (setDataVector): replace null argument with empty vector then call
    setColumnIdentifiers() to set up column names,
    (setColumnCount): call fireTableStructureChanged() rather than
    fireTableDataChanged(),
    (addColumn(Object, Object[])): call fireTableStructureChanged() rather
    than fireTableDataChanged(),
    (addRow(Vector)): fixed row indices in TableModelEvent,
    (moveRow): fixed row indices in TableModelEvent,
    (getColumnName): for a column index beyond the number of columns in
    the model, pass control to the superclass.

Regards,

Dave


Index: javax/swing/table/AbstractTableModel.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/javax/swing/table/AbstractTableModel.java,v
retrieving revision 1.11
diff -u -r1.11 AbstractTableModel.java
--- javax/swing/table/AbstractTableModel.java   22 Oct 2004 12:44:01 -0000      
1.11
+++ javax/swing/table/AbstractTableModel.java   24 Jun 2005 20:57:34 -0000
@@ -78,16 +78,12 @@
    */
   public String getColumnName (int columnIndex)
   {
-    int index = columnIndex + 1;
     StringBuffer buffer = new StringBuffer();
-
-    while (index > 0)
+    while (columnIndex >= 0)
       {
-       buffer.insert (0, (char) ('A' + ((index - 1) % 26)));
-       index = (index - 1) / 26;
+       buffer.insert (0, (char) ('A' + columnIndex % 26));
+       columnIndex = columnIndex / 26 - 1;
       }
-    
-    // Return column name.
     return buffer.toString();
   }
 
@@ -106,7 +102,7 @@
       {
         String name = getColumnName (index);
         
-        if (name.equals (columnName))
+        if (columnName.equals(name))
           return index;
     }
 
@@ -189,7 +185,7 @@
    */
   public void fireTableDataChanged()
   {
-    fireTableChanged (new TableModelEvent (this));
+    fireTableChanged(new TableModelEvent(this, 0, Integer.MAX_VALUE));
   }
 
   /**
Index: javax/swing/table/DefaultTableModel.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/javax/swing/table/DefaultTableModel.java,v
retrieving revision 1.10
diff -u -r1.10 DefaultTableModel.java
--- javax/swing/table/DefaultTableModel.java    24 Jun 2005 12:40:24 -0000      
1.10
+++ javax/swing/table/DefaultTableModel.java    24 Jun 2005 20:57:35 -0000
@@ -181,12 +181,11 @@
    */
   public void setDataVector(Vector data, Vector columnNames) 
   {
-    dataVector = data;
-    columnIdentifiers = columnNames;
-    for (int r = 0; r < data.size(); r++) {
-      ((Vector) dataVector.get(r)).setSize(columnNames.size());
-    }          
-    fireTableStructureChanged();
+    if (data == null)
+      dataVector = new Vector();
+    else
+      dataVector = data;
+    setColumnIdentifiers(columnNames);
   }
 
   /**
@@ -320,7 +319,7 @@
       }
     if (columnIdentifiers != null)  
       columnIdentifiers.setSize(columnCount);
-    fireTableDataChanged();
+    fireTableStructureChanged();
   }
 
   /**
@@ -386,7 +385,7 @@
         ((Vector) dataVector.get(i)).add(columnData == null ? null : 
columnData[i]);
       }
     columnIdentifiers.add(columnName);
-    fireTableDataChanged();
+    fireTableStructureChanged();
   }
 
   /**
@@ -396,9 +395,10 @@
    * @param rowData the row data (<code>null</code> permitted).
    */
   public void addRow(Vector rowData) {
+    int rowIndex = dataVector.size();
     dataVector.add(rowData);
     newRowsAdded(new TableModelEvent(
-      this, dataVector.size(), dataVector.size(), -1, TableModelEvent.INSERT)
+      this, rowIndex, rowIndex, -1, TableModelEvent.INSERT)
     );
   }
 
@@ -451,7 +451,9 @@
     {
       dataVector.insertElementAt(removed.get(i), toIndex);  
     }
-    fireTableDataChanged();
+    int firstRow = Math.min(startIndex, toIndex);
+    int lastRow = Math.max(endIndex, toIndex + (endIndex - startIndex));
+    fireTableRowsUpdated(firstRow, lastRow);
   }
 
   /**
@@ -503,6 +505,8 @@
         else
           result = super.getColumnName(column);
       }
+      else
+        result = super.getColumnName(column);
     }
     return result;
   }

reply via email to

[Prev in Thread] Current Thread [Next in Thread]