[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [platform-swt-dev] ComboBoxCellEditor not working as expected
|
The case statement is missing breaks, so each case falls through to the
next and then to default.
"Mike Bennett" <mike@xxxxxxxxxxxxx>
Sent by: platform-swt-dev-bounces@xxxxxxxxxxx
07/18/2005 08:04 AM
Please respond to
"Eclipse Platform SWT component developers list."
To
<platform-swt-dev@xxxxxxxxxxx>
cc
Subject
[platform-swt-dev] ComboBoxCellEditor not working as expected
Hello
I am trying to use the ComboBoxCellEditor for a column in a table.
When the table first populates, the cells display the values as expected,
however if the combo box is used to change the value of a cell, the new
value is always that associated with index 0 in the list of possible
values.
I have an object called CellValue, this has the following getters and
setters:
public String getItemType() {
return (itemType==null?"":itemType);
}
public int getItemTypeIndex() {
if (itemType == null) return 0;
if (itemType.equals("text")) return 0;
else if (itemType.equals("integer")) return 1;
else if (itemType.equals("double")) return 2;
return 0;
}
public void setItemType(String itemType) {
System.out.println("CellValue.setItemType: itemType " + itemType);
this.itemType = itemType.trim().toLowerCase();
}
public void setItemTypeIndex(int itemType) {
System.out.println("CellValue.setItemTypeIndex: itemType " +
itemType);
switch (itemType) {
case 0: setItemType("text");
case 1: setItemType("integer");
case 2: setItemType("double");
default: setItemType("text");
}
}
The methods in my modifier are:
public Object getValue(Object rowData, String property) {
System.out.println("getValue: property " + property);
CellValue cellValue = (CellValue)rowData;
if (CellValue.NAME.equals(property)) {
return cellValue.getDataItemName();
} else if (CellValue.VALUE.equals(property)) {
return cellValue.getValue();
} else if (CellValue.TYPE.equals(property)) {
System.out.println("Type is " + cellValue.getItemTypeIndex());
return new Integer(cellValue.getItemTypeIndex());
} else if (CellValue.SHOW.equals(property)) {
return (new Boolean(cellValue.isShowOnSheet()));
}
return null;
}
public void modify(Object rowData, String property, Object value) {
System.out.println("CellValueModifier.modify: rowData " +
rowData.getClass().toString() +
" value " + value.getClass().toString());
if (rowData instanceof Item) rowData = ((Item)rowData).getData();
CellValue cellValue = (CellValue)rowData;
if (CellValue.NAME.equals(property)) {
cellValue.setDataItemName((String)value);
} else if (CellValue.VALUE.equals(property)) {
cellValue.setValue((String)value);
} else if (CellValue.TYPE.equals(property)) {
cellValue.setItemTypeIndex(((Integer)value).intValue());
} else if (CellValue.SHOW.equals(property)) {
cellValue.setShowOnSheet(((Boolean)value).booleanValue());
}
viewer.refresh();
}
As you can see I have added a number of debug lines. The results I get
are:
CellValueModifier.modify: rowData class org.eclipse.swt.widgets.TableItem
value class java.lang.Integer
CellValue.setItemTypeIndex: itemType 2
CellValue.setItemType: itemType double
CellValue.setItemType: itemType text
CellValueModifier.modify: before refresh
CellValueModifier.modify: after refresh
The problem seams to be caused by the second setItemType method call. This
is very strange as the only place I call this is in the setItemTypeIndex
method and the trace shows that this is only called once.
I am doing something daft that I can't see or is there a problem here?
Thanks
Mike_______________________________________________
platform-swt-dev mailing list
platform-swt-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-swt-dev