Heng Sin Low 2009-05-19 06:37:59 +00:00
parent 18f7930c24
commit 0feb9b4f2d
2 changed files with 56 additions and 35 deletions

View File

@ -69,7 +69,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
private Listbox listBox; private Listbox listBox;
private EventListener cellListener; private EventListener cellListener;
/** /**
* Default constructor. * Default constructor.
* *
@ -152,7 +152,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
throw new IllegalArgumentException("A model element was not a list"); throw new IllegalArgumentException("A model element was not a list");
} }
if (listBox == null || listBox != item.getListbox()) if (listBox == null || listBox != item.getListbox())
{ {
listBox = item.getListbox(); listBox = item.getListbox();
} }
@ -160,7 +160,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
{ {
cellListener = new CellListener(); cellListener = new CellListener();
} }
for (Object field : (List<?>)data) for (Object field : (List<?>)data)
{ {
listcell = getCellComponent(table, field, rowIndex, colIndex); listcell = getCellComponent(table, field, rowIndex, colIndex);
@ -259,7 +259,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
ListCell listcell = new ListCell(); ListCell listcell = new ListCell();
boolean isCellEditable = table != null ? table.isCellEditable(rowIndex, columnIndex) : false; boolean isCellEditable = table != null ? table.isCellEditable(rowIndex, columnIndex) : false;
// TODO put this in factory method for generating cell renderers, which // TODO put this in factory method for generating cell renderers, which
// are assigned to Table Columns // are assigned to Table Columns
if (field != null) if (field != null)
{ {
@ -290,7 +290,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
DecimalFormat format = field instanceof BigDecimal DecimalFormat format = field instanceof BigDecimal
? DisplayType.getNumberFormat(DisplayType.Amount) ? DisplayType.getNumberFormat(DisplayType.Amount)
: DisplayType.getNumberFormat(DisplayType.Integer); : DisplayType.getNumberFormat(DisplayType.Integer);
// set cell value to allow sorting // set cell value to allow sorting
listcell.setValue(field.toString()); listcell.setValue(field.toString());
@ -436,7 +436,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
* *
* @param headerValue The object to use for generating the header text. * @param headerValue The object to use for generating the header text.
* @param headerIndex The column index of the header * @param headerIndex The column index of the header
* @param classType * @param classType
* @return The generated ListHeader * @return The generated ListHeader
* @see #renderListHead(ListHead) * @see #renderListHead(ListHead)
*/ */
@ -445,7 +445,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
ListHeader header = null; ListHeader header = null;
String headerText = headerValue.toString(); String headerText = headerValue.toString();
if (m_headers.size() <= headerIndex) if (m_headers.size() <= headerIndex || m_headers.get(headerIndex) == null)
{ {
Comparator<Object> ascComparator = getColumnComparator(true, headerIndex); Comparator<Object> ascComparator = getColumnComparator(true, headerIndex);
Comparator<Object> dscComparator = getColumnComparator(false, headerIndex); Comparator<Object> dscComparator = getColumnComparator(false, headerIndex);
@ -461,7 +461,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
width = 300; width = 300;
else if (classType != null) else if (classType != null)
{ {
if (classType.equals(String.class)) if (classType.equals(String.class))
{ {
if (width > 0 && width < 180) if (width > 0 && width < 180)
width = 180; width = 180;
@ -477,7 +477,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
} }
else if (width > 0 && width < 100) else if (width > 0 && width < 100)
width = 100; width = 100;
header.setWidth(width + "px"); header.setWidth(width + "px");
m_headers.add(header); m_headers.add(header);
} }
@ -494,6 +494,26 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
return header; return header;
} }
/**
* set custom list header
* @param index
* @param header
*/
public void setListHeader(int index, ListHeader header) {
int size = m_headers.size();
if (size <= index) {
while (size <= index) {
if (size == index)
m_headers.add(header);
else
m_headers.add(null);
size++;
}
} else
m_headers.set(index, header);
}
/** /**
* Obtain the comparator for a given column. * Obtain the comparator for a given column.
* *
@ -590,7 +610,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
fireTableValueChange(vcEvent); fireTableValueChange(vcEvent);
} }
} }
else if (event.getTarget() instanceof WListbox && Events.ON_SELECT.equals(event.getName())) else if (event.getTarget() instanceof WListbox && Events.ON_SELECT.equals(event.getName()))
{ {
WListbox table = (WListbox) event.getTarget(); WListbox table = (WListbox) event.getTarget();
@ -598,22 +618,22 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
int cnt = table.getRowCount(); int cnt = table.getRowCount();
if (cnt == 0 || !(table.getValueAt(0, 0) instanceof IDColumn)) if (cnt == 0 || !(table.getValueAt(0, 0) instanceof IDColumn))
return; return;
//update IDColumn //update IDColumn
tableColumn = m_tableColumns.get(0); tableColumn = m_tableColumns.get(0);
for (int i = 0; i < cnt; i++) { for (int i = 0; i < cnt; i++) {
IDColumn idcolumn = (IDColumn) table.getValueAt(i, 0); IDColumn idcolumn = (IDColumn) table.getValueAt(i, 0);
Listitem item = table.getItemAtIndex(i); Listitem item = table.getItemAtIndex(i);
value = item.isSelected(); value = item.isSelected();
Boolean old = idcolumn.isSelected(); Boolean old = idcolumn.isSelected();
if (!old.equals(value)) { if (!old.equals(value)) {
vcEvent = new TableValueChangeEvent(source, vcEvent = new TableValueChangeEvent(source,
tableColumn.getHeaderValue().toString(), tableColumn.getHeaderValue().toString(),
i, 0, i, 0,
old, value); old, value);
fireTableValueChange(vcEvent); fireTableValueChange(vcEvent);
} }
} }
@ -758,7 +778,7 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
{ {
ListItem item = new ListItem(); ListItem item = new ListItem();
item.applyProperties(); item.applyProperties();
return item; return item;
} }
@ -766,34 +786,34 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi
* @param index * @param index
* @param header * @param header
*/ */
public void setColumnHeader(int index, String header) public void setColumnHeader(int index, String header)
{ {
if (index >= 0 && index < m_tableColumns.size()) if (index >= 0 && index < m_tableColumns.size())
{ {
m_tableColumns.get(index).setHeaderValue(Util.cleanAmp(header)); m_tableColumns.get(index).setHeaderValue(Util.cleanAmp(header));
} }
} }
public void setColumnClass(int index, Class<?> classType) { public void setColumnClass(int index, Class<?> classType) {
if (index >= 0 && index < m_tableColumns.size()) if (index >= 0 && index < m_tableColumns.size())
{ {
m_tableColumns.get(index).setColumnClass(classType); m_tableColumns.get(index).setColumnClass(classType);
} }
} }
class CellListener implements EventListener { class CellListener implements EventListener {
public CellListener() { public CellListener() {
} }
public void onEvent(Event event) throws Exception { public void onEvent(Event event) throws Exception {
if (listBox != null && Events.ON_DOUBLE_CLICK.equals(event.getName())) { if (listBox != null && Events.ON_DOUBLE_CLICK.equals(event.getName())) {
Event evt = new Event(Events.ON_DOUBLE_CLICK, listBox); Event evt = new Event(Events.ON_DOUBLE_CLICK, listBox);
Events.sendEvent(listBox, evt); Events.sendEvent(listBox, evt);
} }
} }
} }
} }

View File

@ -22,6 +22,7 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Vector; import java.util.Vector;
import java.util.logging.Level; import java.util.logging.Level;
@ -44,7 +45,7 @@ import org.zkoss.zul.ListModel;
/** /**
* Replacement for the Swing client minigrid component * Replacement for the Swing client minigrid component
* *
* ZK Listbox extension for Adempiere Web UI. * ZK Listbox extension for Adempiere Web UI.
* The listbox contains a model and a renderer. * The listbox contains a model and a renderer.
* The model holds the underlying data objects, while the * The model holds the underlying data objects, while the
@ -59,7 +60,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
{ {
/** /**
* *
*/ */
private static final long serialVersionUID = 5893174209599272896L; private static final long serialVersionUID = 5893174209599272896L;
@ -93,7 +94,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
rowRenderer.addTableValueChangeListener(this); rowRenderer.addTableValueChangeListener(this);
setItemRenderer(rowRenderer); setItemRenderer(rowRenderer);
setModel(new ListModelTable()); setModel(new ListModelTable());
} }
/** /**
@ -102,7 +103,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
* @param model The data model to assign to the table * @param model The data model to assign to the table
* @param columnNames The names of the table columns * @param columnNames The names of the table columns
*/ */
public void setData(ListModelTable model, Vector< ? extends String> columnNames) public void setData(ListModelTable model, List< ? extends String> columnNames)
{ {
// instantiate our custom row renderer // instantiate our custom row renderer
WListItemRenderer rowRenderer = new WListItemRenderer(columnNames); WListItemRenderer rowRenderer = new WListItemRenderer(columnNames);
@ -442,9 +443,9 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
WListItemRenderer renderer = (WListItemRenderer)getItemRenderer(); WListItemRenderer renderer = (WListItemRenderer)getItemRenderer();
setColumnReadOnly(index, readOnly); setColumnReadOnly(index, readOnly);
renderer.setColumnHeader(index, header); renderer.setColumnHeader(index, header);
renderer.setColumnClass(index, classType); renderer.setColumnClass(index, classType);
if (index < m_modelHeaderClass.size()) if (index < m_modelHeaderClass.size())
@ -472,9 +473,9 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
setColumnReadOnly(index, readOnly); setColumnReadOnly(index, readOnly);
WListItemRenderer renderer = (WListItemRenderer)getItemRenderer(); WListItemRenderer renderer = (WListItemRenderer)getItemRenderer();
renderer.setColumnClass(index, classType); renderer.setColumnClass(index, classType);
m_modelHeaderClass.add(classType); m_modelHeaderClass.add(classType);
return; return;
@ -497,7 +498,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
setColumnReadOnly(m_modelHeaderClass.size() - 1, readOnly); setColumnReadOnly(m_modelHeaderClass.size() - 1, readOnly);
addColumn(header); addColumn(header);
WListItemRenderer renderer = (WListItemRenderer)getItemRenderer(); WListItemRenderer renderer = (WListItemRenderer)getItemRenderer();
renderer.setColumnClass((renderer.getNoColumns() - 1), classType); renderer.setColumnClass((renderer.getNoColumns() - 1), classType);
@ -935,7 +936,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
// if the event was caused by an ID Column and the value is a boolean // if the event was caused by an ID Column and the value is a boolean
// then set the IDColumn's select field // then set the IDColumn's select field
if (col >= 0 && row >=0) if (col >= 0 && row >=0)
{ {
if (this.getValueAt(row, col) instanceof IDColumn if (this.getValueAt(row, col) instanceof IDColumn
&& event.getNewValue() instanceof Boolean) && event.getNewValue() instanceof Boolean)
@ -966,7 +967,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
// this causes re-rendering of the Listbox // this causes re-rendering of the Listbox
this.setModel(this.getModel()); this.setModel(this.getModel());
return; return;
} }
@ -1020,7 +1021,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
model.updateComponent(event.getFirstRow(), event.getLastRow()); model.updateComponent(event.getFirstRow(), event.getLastRow());
else else
model.updateComponent(event.getFirstRow()); model.updateComponent(event.getFirstRow());
if (indices != null && indices.length > 0) if (indices != null && indices.length > 0)
{ {
this.setSelectedIndices(indices); this.setSelectedIndices(indices);
} }
@ -1028,7 +1029,7 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
return; return;
} }
/** /**
* no op, to ease porting of swing form * no op, to ease porting of swing form
*/ */