[Top][All Lists]
[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;
}