From 2e27910d9bbaf6d92c83e0f3081ccc6dd50e82f8 Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 13 Aug 2008 03:32:02 +0000 Subject: [PATCH] * Merge branches/adempiere341 revision 6095 bug fixes for zkwebui --- .../src/org/adempiere/webui/Desktop.java | 3 +- .../org/adempiere/webui/acct/WAcctViewer.java | 1 + .../webui/apps/form/WCreateFrom.java | 14 +-- .../webui/apps/form/WCreateFromShipment.java | 5 +- .../adempiere/webui/component/GridPanel.java | 111 ++++++++++++++---- .../webui/component/GridTableListModel.java | 57 ++++++++- .../webui/component/WListItemRenderer.java | 25 ++-- .../adempiere/webui/component/WListbox.java | 6 +- .../adempiere/webui/component/WStatusBar.java | 2 +- .../org/adempiere/webui/editor/WEditor.java | 13 +- .../adempiere/webui/editor/WNumberEditor.java | 2 +- .../adempiere/webui/editor/WSearchEditor.java | 4 +- .../webui/editor/WTableDirEditor.java | 2 +- .../adempiere/webui/editor/WYesNoEditor.java | 2 +- .../org/adempiere/webui/panel/ADTabpanel.java | 4 + .../webui/panel/InfoBPartnerPanel.java | 15 +-- .../webui/panel/InfoGeneralPanel.java | 10 +- .../webui/panel/InfoInvoicePanel.java | 11 +- .../adempiere/webui/panel/InfoOrderPanel.java | 14 +-- .../org/adempiere/webui/panel/InfoPanel.java | 72 +++++++++++- .../webui/panel/InfoProductPanel.java | 14 +-- .../org/adempiere/webui/panel/MenuPanel.java | 21 ++-- .../webui/panel/MenuSearchPanel.java | 2 +- .../adempiere/webui/window/FindWindow.java | 91 +++++++------- 24 files changed, 340 insertions(+), 161 deletions(-) diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/Desktop.java b/zkwebui/WEB-INF/src/org/adempiere/webui/Desktop.java index c6b7983c3d..6969cee283 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/Desktop.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/Desktop.java @@ -626,7 +626,7 @@ public class Desktop extends AbstractUIPart implements MenuListener, Serializabl if(dragged instanceof Treerow) { Treerow treerow = (Treerow) dragged; - Treeitem treeitem = treerow.getTreeitem(); + Treeitem treeitem = (Treeitem) treerow.getParent(); Object value = treeitem.getValue(); if(value != null) @@ -717,7 +717,6 @@ public class Desktop extends AbstractUIPart implements MenuListener, Serializabl if(menu.getAction().equals(MMenu.ACTION_Window)) { - Integer wMenuId = Integer.valueOf(menu.getAD_Window_ID()); ADWindow adWindow = new ADWindow(Env.getCtx(), menu.getAD_Window_ID()); Tabpanel tabPanel = new Tabpanel(); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java b/zkwebui/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java index fc287dd415..b404ca6d30 100755 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/acct/WAcctViewer.java @@ -526,6 +526,7 @@ public class WAcctViewer extends Window implements EventListener paging.addEventListener("onPaging", this); paging.setAutohide(true); + paging.setDetailed(true); // Query Tab diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFrom.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFrom.java index 16b59a8ac5..cfd8c2b9aa 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFrom.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFrom.java @@ -87,12 +87,12 @@ public abstract class WCreateFrom extends Window implements EventListener, WTabl protected Button btnOk = new Button(); protected Button btnSelectAll = new Button(); - private Label bankAccountLabel = new Label(); - private Label bPartnerLabel = new Label(); - private Label shipmentLabel = new Label(); - private Label orderLabel = new Label(); - private Label invoiceLabel = new Label(); - private Label locatorLabel = new Label(); + protected Label bankAccountLabel = new Label(); + protected Label bPartnerLabel = new Label(); + protected Label shipmentLabel = new Label(); + protected Label orderLabel = new Label(); + protected Label invoiceLabel = new Label(); + protected Label locatorLabel = new Label(); protected Label lblStatus = new Label(); protected WListbox dataTable = new WListbox(); @@ -227,7 +227,7 @@ public abstract class WCreateFrom extends Window implements EventListener, WTabl // Window - this.setWidth("700px"); +// this.setWidth("700px"); this.setClosable(true); this.setBorder("normal"); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromShipment.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromShipment.java index a18aac54f3..da52c8d1ec 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromShipment.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WCreateFromShipment.java @@ -35,6 +35,7 @@ import org.adempiere.webui.editor.WLocatorEditor; import org.adempiere.webui.event.ValueChangeEvent; import org.adempiere.webui.event.ValueChangeListener; import org.adempiere.webui.event.WTableModelListener; +import org.adempiere.webui.window.FDialog; import org.compiere.model.GridTab; import org.compiere.model.MInOut; import org.compiere.model.MInOutLine; @@ -97,6 +98,8 @@ public class WCreateFromShipment extends WCreateFrom implements EventListener, V initBPartner(false); bPartnerField.addValueChangeListner(this); + locatorLabel.setMandatory(true); + return true; } @@ -343,7 +346,7 @@ public class WCreateFromShipment extends WCreateFrom implements EventListener, V if (mlocator == null || mlocator.getM_Locator_ID()/*.intValue()*/ == 0) { -/* locatorField.setBackground(AdempierePLAF.getFieldBackground_Error());*/ + FDialog.error(p_WindowNo, Msg.getMsg(Env.getCtx(), "FillMandatory", new Object[]{locatorField.getLabel().getValue()})); return false; } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridPanel.java index 7358e5217f..54c46845b4 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridPanel.java @@ -30,37 +30,39 @@ import org.compiere.model.GridTable; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; -import org.zkoss.zul.Div; -import org.zkoss.zul.Hbox; +import org.zkoss.zkex.zul.Borderlayout; +import org.zkoss.zkex.zul.Center; +import org.zkoss.zkex.zul.South; import org.zkoss.zul.ListitemRenderer; +import org.zkoss.zul.Paging; +import org.zkoss.zul.event.ZulEvents; -public class GridPanel extends Div implements EventListener +public class GridPanel extends Borderlayout implements EventListener { + private static final int MIN_COLUMN_WIDTH = 100; + + private static final int MAX_COLUMN_WIDTH = 300; + private static final long serialVersionUID = 1L; private Listbox listbox = null; - private int pageSize = 10; - private long numPages; + private int pageSize = 1000; private GridField[] gridField; private AbstractTableModel tableModel; private int numColumns = 5; - private int numRows; - - private Button[] buttons; - private Hbox boxButtons = new Hbox(); private int windowNo; private GridTab gridTab; - private int pageId = 0; - - private ListHead listHead; - private boolean init; + + private GridTableListModel listModel; + + private Paging paging; public GridPanel() { @@ -82,14 +84,13 @@ public class GridPanel extends Div implements EventListener tableModel = gridTab.getTableModel(); numColumns = tableModel.getColumnCount(); - numRows = tableModel.getRowCount(); gridField = ((GridTable)tableModel).getFields(); setupColumns(); render(); - listbox.setSelectedIndex(gridTab.getCurrentRow()); + updateListIndex(); this.init = true; } @@ -108,12 +109,34 @@ public class GridPanel extends Div implements EventListener public void refresh(GridTab gridTab) { this.gridTab = gridTab; tableModel = gridTab.getTableModel(); - numRows = tableModel.getRowCount(); gridField = ((GridTable)tableModel).getFields(); updateModel(); - listbox.setSelectedIndex(gridTab.getCurrentRow()); + updateListIndex(); + } + + /** + * Update listbox index to sync with grid current row pointer changes + */ + public void updateListIndex() { + int rowIndex = gridTab.getCurrentRow(); + if (pageSize > 0) { + if (paging.getTotalSize() != gridTab.getRowCount()) + paging.setTotalSize(gridTab.getRowCount()); + int pgIndex = rowIndex % pageSize; + int pgNo = (rowIndex - pgIndex) / pageSize; + if (listModel.getPage() != pgNo) { + listModel.setPage(pgNo); + } + if (paging.getActivePage() != pgNo) + paging.setActivePage(pgNo); + if (listbox.getSelectedIndex() != pgIndex) + listbox.setSelectedIndex(pgIndex); + } else { + if (listbox.getSelectedIndex() != rowIndex) + listbox.setSelectedIndex(rowIndex); + } } public void setPageSize(int pageSize) @@ -141,7 +164,7 @@ public class GridPanel extends Div implements EventListener ListHead header = new ListHead(); header.setSizable(true); - Map colnames = new HashMap(); + Map colnames = new HashMap(); int index = 0; for (int i = 0; i < numColumns; i++) { @@ -153,10 +176,10 @@ public class GridPanel extends Div implements EventListener colHeader.setSort("auto"); colHeader.setLabel(gridField[i].getHeader()); int l = gridField[i].getDisplayLength() * 10; - if (l > 300) - l = 300; - else if ( l < 100) - l = 100; + if (l > MAX_COLUMN_WIDTH) + l = MAX_COLUMN_WIDTH; + else if ( l < MIN_COLUMN_WIDTH) + l = MIN_COLUMN_WIDTH; colHeader.setWidth(Integer.toString(l) + "px"); header.appendChild(colHeader); } @@ -174,12 +197,26 @@ public class GridPanel extends Div implements EventListener LayoutUtils.addSclass("adtab-grid", listbox); updateModel(); - - this.appendChild(listbox); + + Center center = new Center(); + center.appendChild(listbox); + this.appendChild(center); + + if (pageSize > 0) { + paging = new Paging(); + paging.setPageSize(pageSize); + paging.setTotalSize(tableModel.getRowCount()); + paging.setDetailed(true); + South south = new South(); + south.appendChild(paging); + this.appendChild(south); + paging.addEventListener(ZulEvents.ON_PAGING, this); + } } private void updateModel() { - GridTableListModel listModel = new GridTableListModel((GridTable)tableModel, windowNo); + listModel = new GridTableListModel((GridTable)tableModel, windowNo); + listModel.setPageSize(pageSize); listbox.setItemRenderer(listModel); listbox.setModel(listModel); } @@ -196,8 +233,30 @@ public class GridPanel extends Div implements EventListener return; else if (event.getTarget() == listbox) { - gridTab.navigate(listbox.getSelectedIndex()); + updateModelIndex(); } + else if (event.getTarget() == paging) + { + int pgNo = paging.getActivePage(); + if (pgNo != listModel.getPage()) + { + listbox.clearSelection(); + listModel.setPage(pgNo); + listbox.setSelectedIndex(0); + updateModelIndex(); + } + } + } + + private void updateModelIndex() { + int rowIndex = listbox.getSelectedIndex(); + if (pageSize > 0) { + int start = listModel.getPage() * listModel.getPageSize(); + rowIndex = start + rowIndex; + } + + if (gridTab.getCurrentRow() != rowIndex) + gridTab.navigate(rowIndex); } public Listbox getListbox() { diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridTableListModel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridTableListModel.java index 76886ddab4..9310ad187c 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridTableListModel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/component/GridTableListModel.java @@ -29,6 +29,9 @@ public class GridTableListModel extends AbstractListModel implements ListitemRen private GridTable tableModel; private GridField[] gridField; private int windowNo; + + private int pageSize = -1; + private int pageNo = 0; public GridTableListModel(GridTable tableModel, int windowNo) { this.tableModel = tableModel; @@ -40,6 +43,9 @@ public class GridTableListModel extends AbstractListModel implements ListitemRen public Object getElementAt(int rowIndex) { int columnCount = tableModel.getColumnCount(); Object[] values = new Object[columnCount]; + if (pageSize > 0) { + rowIndex = (pageNo * pageSize) + rowIndex; + } if (rowIndex < tableModel.getRowCount()) { for (int i = 0; i < columnCount; i++) { values[i] = tableModel.getValueAt(rowIndex, i); @@ -48,9 +54,53 @@ public class GridTableListModel extends AbstractListModel implements ListitemRen return values; } + + /** + * set current page no ( starting from 0 ) + * @param pg + */ + public void setPage(int pg) { + if (pageNo != pg) { + if (pg > 0) { + int start = pg * pageSize; + if (start >= tableModel.getRowCount()) { + return; + } + } + pageNo = pg; + fireEvent(ListDataEvent.CONTENTS_CHANGED, -1, -1); + } + } + + /** + * @return current page no ( starting from 0 ) + */ + public int getPage() { + return pageNo; + } + + public void setPageSize(int pgSize) { + pageSize = pgSize; + } + public int getPageSize() { + return pageSize; + } + public int getSize() { - return tableModel.getRowCount(); + int total = tableModel.getRowCount(); + if (pageSize < 0) + return total; + else if ((total - ( pageNo * pageSize)) < 0) { + pageNo = 0; + return pageSize > total ? total : pageSize; + } else { + int end = (pageNo + 1) * pageSize; + if (end > total) + return total - ( pageNo * pageSize); + else + return pageSize; + } } public void render(Listitem listitem, Object data) throws Exception { @@ -135,7 +185,10 @@ public class GridTableListModel extends AbstractListModel implements ListitemRen } public Listcell newListcell(Listitem item) { - return null; + ListCell listCell = new ListCell(); + listCell.applyProperties(); + listCell.setParent(item); + return listCell; } public Listitem newListitem(Listbox listbox) { diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java b/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java index c5c9d59006..0d7abd3606 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListItemRenderer.java @@ -407,27 +407,34 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi { ListHeader header = null; + String headerText = headerValue.toString(); if (m_headers.size() <= headerIndex) { Comparator ascComparator = getColumnComparator(true, headerIndex); Comparator dscComparator = getColumnComparator(false, headerIndex); - header = new ListHeader(headerValue.toString()); + header = new ListHeader(headerText); header.setSort("auto"); header.setSortAscending(ascComparator); header.setSortDescending(dscComparator); - header.setWidth("auto"); + int width = headerText.trim().length() * 9; + if (width > 300) + width = 300; + else if (width > 0 && width < 100) + width = 100; + + header.setWidth(width + "px"); m_headers.add(header); } else { header = m_headers.get(headerIndex); - if (!header.getLabel().equals(headerValue.toString())) + if (!header.getLabel().equals(headerText)) { - header.setLabel(headerValue.toString()); + header.setLabel(headerText); } } @@ -480,7 +487,6 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi head.appendChild(header); } head.setSizable(true); - head.setWidth("auto"); return; } @@ -671,7 +677,9 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi */ public Listcell newListcell(Listitem item) { - return null; + ListCell cell = new ListCell(); + cell.applyProperties(); + return cell; } /* (non-Javadoc) @@ -679,7 +687,10 @@ public class WListItemRenderer implements ListitemRenderer, EventListener, Listi */ public Listitem newListitem(Listbox listbox) { - return new ListItem(); + ListItem item = new ListItem(); + item.applyProperties(); + + return item; } } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListbox.java b/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListbox.java index fd169fd5ce..cfec8b9ad9 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListbox.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/component/WListbox.java @@ -140,10 +140,10 @@ public class WListbox extends Listbox implements TableValueChangeListener, WTabl head = super.getListHead(); - //detach the old header + //init only once if (head != null) { - head.detach(); + return; } head = new ListHead(); @@ -160,7 +160,7 @@ public class WListbox extends Listbox implements TableValueChangeListener, WTabl + this.getItemRenderer().getClass().getSimpleName()); } - //reattach the listhead + //attach the listhead head.setParent(this); return; diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/component/WStatusBar.java b/zkwebui/WEB-INF/src/org/adempiere/webui/component/WStatusBar.java index acb340f936..6be26261ba 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/component/WStatusBar.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/component/WStatusBar.java @@ -69,7 +69,7 @@ public class WStatusBar extends Grid implements EventListener // this.setBorder("normal"); rows.appendChild(statusBar); this.appendChild(rows); - this.setWidth("98%"); + this.setWidth("99%"); } catch (Exception e) { diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WEditor.java b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WEditor.java index 545c795c1b..86635a341c 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WEditor.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WEditor.java @@ -152,6 +152,12 @@ public abstract class WEditor implements EventListener, PropertyChangeListener ((HtmlBasedComponent)component).setTooltiptext(description); label.setTooltiptext(description); + + //init listeners + for (String event : this.getEvents()) + { + component.addEventListener(event, this); + } } public GridField getGridField() @@ -225,13 +231,6 @@ public abstract class WEditor implements EventListener, PropertyChangeListener return; } - if (listeners.size() == 0) - { - for (String event : this.getEvents()) - { - component.addEventListener(event, this); - } - } listeners.add(listener); } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WNumberEditor.java b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WNumberEditor.java index 8d336baca0..7248d1cb5c 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WNumberEditor.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WNumberEditor.java @@ -37,7 +37,7 @@ import org.zkoss.zk.ui.event.Events; */ public class WNumberEditor extends WEditor { - public final String[] LISTENER_EVENTS = {Events.ON_CHANGE}; + public static final String[] LISTENER_EVENTS = {Events.ON_CHANGE}; public static final int MAX_DISPLAY_LENGTH = 20; diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java index 2cd49b062e..9014c00ed2 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java @@ -218,8 +218,8 @@ public class WSearchEditor extends WEditor implements ContextMenuListener, Value private void actionRefresh(Object value) { - boolean mandatory = isMandatory(); - AEnv.actionRefresh(lookup, value, mandatory); +// boolean mandatory = isMandatory(); +// AEnv.actionRefresh(lookup, value, mandatory); setValue(value); } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java index 5f506a9940..eebe890552 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WTableDirEditor.java @@ -49,7 +49,7 @@ import org.zkoss.zk.ui.event.Events; public class WTableDirEditor extends WEditor implements ListDataListener, ContextMenuListener, IZoomableEditor { - public final String[] LISTENER_EVENTS = {Events.ON_SELECT}; + public final static String[] LISTENER_EVENTS = {Events.ON_SELECT}; private static final CLogger logger; diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WYesNoEditor.java b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WYesNoEditor.java index 17f624ef90..550c1fca8b 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WYesNoEditor.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/editor/WYesNoEditor.java @@ -37,7 +37,7 @@ import org.zkoss.zk.ui.event.Events; */ public class WYesNoEditor extends WEditor { - public final String[] LISTENER_EVENTS = {Events.ON_CHECK}; + public static final String[] LISTENER_EVENTS = {Events.ON_CHECK}; private static final CLogger logger; static diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java index 2a67884ab8..c7316aed3e 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/ADTabpanel.java @@ -738,6 +738,10 @@ DataStatusListener, ValueChangeListener, IADTabpanel else setSelectedNode(gridTab.getRecord_ID()); } + + if (listPanel.isVisible()) { + listPanel.updateListIndex(); + } } private void deleteNode(int recordId) { diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoBPartnerPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoBPartnerPanel.java index 794bc9c7eb..8fbe91ae46 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoBPartnerPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoBPartnerPanel.java @@ -39,6 +39,7 @@ import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Hbox; import org.zkoss.zul.Intbox; +import org.zkoss.zul.Separator; import org.zkoss.zul.Vbox; /** @@ -171,8 +172,7 @@ public class InfoBPartnerPanel extends InfoPanel implements EventListener, WTabl contentPanel = new WListbox(); contentPanel.setWidth("99%"); contentPanel.setHeight("400px"); - contentPanel.setStyle("overflow:auto"); - + contentPanel.setVflex(true); } private void init() @@ -259,18 +259,15 @@ public class InfoBPartnerPanel extends InfoPanel implements EventListener, WTabl parameterPanel.appendChild(vbox3); parameterPanel.appendChild(vbox4); - Vbox mainPanel = new Vbox(); + Panel mainPanel = new Panel(); mainPanel.appendChild(parameterPanel); -/* Div div = new Div(); - div.setStyle("overflow:hidden"); - div.setWidth("1000px"); - div.appendChild(contentPanel); - mainPanel.appendChild(div);*/ - mainPanel.setWidth("100%"); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(contentPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(confirmPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(statusBar); this.appendChild(mainPanel); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoGeneralPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoGeneralPanel.java index 91941d286a..ef0027af8e 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoGeneralPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoGeneralPanel.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.logging.Level; import org.adempiere.webui.component.Label; +import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.WListbox; import org.adempiere.webui.event.WTableModelEvent; @@ -38,7 +39,7 @@ import org.compiere.util.Env; import org.compiere.util.Msg; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zul.Hbox; -import org.zkoss.zul.Vbox; +import org.zkoss.zul.Separator; public class InfoGeneralPanel extends InfoPanel implements EventListener { @@ -98,14 +99,17 @@ public class InfoGeneralPanel extends InfoPanel implements EventListener parameterPanel.appendChild(lbl4); parameterPanel.appendChild(txt4); - Vbox mainPanel = new Vbox(); + Panel mainPanel = new Panel(); mainPanel.setWidth("100%"); mainPanel.appendChild(parameterPanel); + contentPanel.setWidth("99%"); contentPanel.setHeight("400px"); - contentPanel.setStyle("overflow:auto"); + contentPanel.setVflex(true); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(contentPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(confirmPanel); this.appendChild(mainPanel); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoInvoicePanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoInvoicePanel.java index 0437b54244..d6e26fbaf2 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoInvoicePanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoInvoicePanel.java @@ -45,6 +45,7 @@ import org.compiere.util.Msg; import org.compiere.util.Util; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zul.Hbox; +import org.zkoss.zul.Separator; import org.zkoss.zul.Vbox; /** @@ -175,7 +176,7 @@ public class InfoInvoicePanel extends InfoPanel implements ValueChangeListener contentPanel = new WListbox(); contentPanel.setWidth("99%"); contentPanel.setHeight("400px"); - contentPanel.setStyle("overflow:auto"); + contentPanel.setVflex(true); } private void init() @@ -265,14 +266,14 @@ public class InfoInvoicePanel extends InfoPanel implements ValueChangeListener parameterPanel.appendChild(vbox3); parameterPanel.setWidth("100%"); - Vbox mainPanel = new Vbox(); + Panel mainPanel = new Panel(); mainPanel.setWidth("100%"); mainPanel.appendChild(parameterPanel); - contentPanel.setWidth("99%"); - contentPanel.setHeight("400px"); - contentPanel.setStyle("overflow:auto"); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(contentPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(confirmPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(statusBar); this.appendChild(mainPanel); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoOrderPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoOrderPanel.java index e583de6931..0c64a7e725 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoOrderPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoOrderPanel.java @@ -45,6 +45,7 @@ import org.compiere.util.Util; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zul.Div; import org.zkoss.zul.Hbox; +import org.zkoss.zul.Separator; import org.zkoss.zul.Vbox; /** @@ -153,7 +154,7 @@ public class InfoOrderPanel extends InfoPanel implements ValueChangeListener contentPanel = new WListbox(); contentPanel.setWidth("99%"); contentPanel.setHeight("400px"); - contentPanel.setStyle("overflow:auto"); + contentPanel.setVflex(true); } public void init() @@ -231,15 +232,14 @@ public class InfoOrderPanel extends InfoPanel implements ValueChangeListener parameterPanel.appendChild(vbox3); parameterPanel.setWidth("100%"); - Vbox mainPanel = new Vbox(); + Panel mainPanel = new Panel(); mainPanel.setWidth("100%"); mainPanel.appendChild(parameterPanel); - Div div = new Div(); - div.setStyle("overflow:auto"); - div.setWidth("100%"); - div.appendChild(contentPanel); - mainPanel.appendChild(div); + mainPanel.appendChild(new Separator()); + mainPanel.appendChild(contentPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(confirmPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(statusBar); this.appendChild(mainPanel); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java index 072b58506b..4f17a77b31 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java @@ -23,6 +23,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; +import java.util.List; import java.util.Vector; import java.util.logging.Level; @@ -46,6 +47,8 @@ import org.compiere.util.Msg; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; +import org.zkoss.zul.Paging; +import org.zkoss.zul.event.ZulEvents; /** * Search Information and return selection - Base Class. @@ -56,6 +59,8 @@ import org.zkoss.zk.ui.event.Events; public abstract class InfoPanel extends Window implements EventListener, WTableModelListener { + private final static int PAGE_SIZE = 100; + public static InfoPanel create (int WindowNo, String tableName, String keyColumn, String value, boolean multiSelection, String whereClause) @@ -292,6 +297,8 @@ public abstract class InfoPanel extends Window implements EventListener, WTableM protected CLogger log = CLogger.getCLogger(getClass()); protected WListbox contentPanel = new WListbox(); + private Paging paging; + private int pageNo; private static final String[] lISTENER_EVENTS = {}; @@ -445,16 +452,48 @@ public abstract class InfoPanel extends Window implements EventListener, WTableM protected void renderItems() { - Vector columnHeader = getColumnHeader(p_layout); + Vector columnHeader = getColumnHeader(p_layout); if (line != null) { - model = new ListModelTable(line); - model.addTableModelListener(this); - contentPanel.setData(model, columnHeader); + if (line.size() > PAGE_SIZE) + { + if (paging == null) + { + paging = new Paging(); + paging.setPageSize(PAGE_SIZE); + paging.setTotalSize(line.size()); + paging.setDetailed(true); + paging.addEventListener(ZulEvents.ON_PAGING, this); + contentPanel.getParent().insertBefore(paging, contentPanel.getNextSibling()); + } + List subList = line.subList(0, PAGE_SIZE); + model = new ListModelTable(subList); + model.addTableModelListener(this); + contentPanel.setData(model, columnHeader); + + pageNo = 0; + } + else + { + if (paging != null) + { + paging.setTotalSize(line.size()); + pageNo = 0; + } + model = new ListModelTable(line); + model.addTableModelListener(this); + contentPanel.setData(model, columnHeader); + } } - int no = contentPanel.getRowCount(); + int no = line.size(); setStatusLine(Integer.toString(no) + " " + Msg.getMsg(Env.getCtx(), "SearchRows_EnterQuery"), false); setStatusDB(Integer.toString(no)); + + //better performance +// contentPanel.setFixedLayout(true); + + //workaround for scrollbar position problem + contentPanel.renderAll(); } @@ -789,6 +828,29 @@ public abstract class InfoPanel extends Window implements EventListener, WTableM this.detach(); } } + else if (event.getTarget() == paging) + { + int pgNo = paging.getActivePage(); + if (pageNo != pgNo) + { + + contentPanel.clearSelection(); + + pageNo = pgNo; + int start = pageNo * PAGE_SIZE; + int end = start + PAGE_SIZE; + if (end > line.size()) + end = line.size(); + List subList = line.subList(start, end); + model = new ListModelTable(subList); + model.addTableModelListener(this); + contentPanel.setData(model, getColumnHeader(p_layout)); + + //workaround for scrollbar position problem + contentPanel.renderAll(); + contentPanel.setSelectedIndex(0); + } + } } } // onEvent diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java index 1862d92c53..9024665522 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java @@ -60,8 +60,8 @@ import org.compiere.util.Msg; import org.compiere.util.Util; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; -import org.zkoss.zul.Div; import org.zkoss.zul.Hbox; +import org.zkoss.zul.Separator; import org.zkoss.zul.Vbox; /** @@ -204,7 +204,7 @@ public final class InfoProductPanel extends InfoPanel implements EventListener contentPanel = new WListbox(); contentPanel.setWidth("99%"); contentPanel.setHeight("400px"); - contentPanel.setStyle("overflow:auto"); + contentPanel.setVflex(true); } // initComponents private void init() @@ -272,14 +272,12 @@ public final class InfoProductPanel extends InfoPanel implements EventListener parameterPanel.appendChild(vbox3); parameterPanel.appendChild(vbox4); - Vbox mainPanel = new Vbox(); + Panel mainPanel = new Panel(); mainPanel.setWidth("100%"); mainPanel.appendChild(parameterPanel); - Div div = new Div(); - div.setStyle("overflow:auto"); - div.setWidth("100%"); - div.appendChild(contentPanel); - mainPanel.appendChild(div); + mainPanel.appendChild(new Separator()); + mainPanel.appendChild(contentPanel); + mainPanel.appendChild(new Separator()); mainPanel.appendChild(confirmPanel); this.appendChild(mainPanel); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuPanel.java index 21490fa7af..fa9fe22fae 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuPanel.java @@ -42,6 +42,7 @@ import org.zkoss.zul.Treechildren; import org.zkoss.zul.Treecol; import org.zkoss.zul.Treecols; import org.zkoss.zul.Treeitem; +import org.zkoss.zul.Treerow; /** * @@ -85,7 +86,6 @@ public class MenuPanel extends Panel implements EventListener menuTree = new Tree(); menuTree.setMultiple(false); menuTree.setId("mnuMain"); - menuTree.addEventListener(Events.ON_SELECT, this); menuTree.setWidth("100%"); menuTree.setHeight("100%"); menuTree.setVflex(false); @@ -175,17 +175,12 @@ public class MenuPanel extends Panel implements EventListener treeitem.getTreerow().setDraggable("favourite"); // Elaine 2008/07/24 pnlSearch.addTreeItem(treeitem); + + treeitem.getTreerow().addEventListener(Events.ON_CLICK, this); } } } - public ArrayList getMenuItems() - { - ArrayList ret = new ArrayList(); - - return ret; - } - public void addMenuListener(MenuListener menuListener) { menuListeners.add(menuListener); @@ -201,16 +196,16 @@ public class MenuPanel extends Panel implements EventListener Component comp = event.getTarget(); String eventName = event.getName(); - if(eventName.equals(Events.ON_SELECT)) + if (eventName.equals(Events.ON_CLICK)) { - if(comp.equals(menuTree)) - { - Treeitem selectedItem = menuTree.getSelectedItem(); + if (comp instanceof Treerow) + { + Treeitem selectedItem = (Treeitem) comp.getParent(); if(selectedItem.getValue() != null) { fireMenuSelectedEvent(selectedItem); } - } + } } } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuSearchPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuSearchPanel.java index 47d1932e5f..c8c0ade65c 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuSearchPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/MenuSearchPanel.java @@ -121,7 +121,7 @@ public class MenuSearchPanel extends Panel implements EventListener public void onPostSelect() { Clients.showBusy(null, false); - Event event = new Event(Events.ON_SELECT, menuPanel.getMenuTree()); + Event event = new Event(Events.ON_CLICK, menuPanel.getMenuTree().getSelectedItem().getTreerow()); Events.postEvent(event); } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/zkwebui/WEB-INF/src/org/adempiere/webui/window/FindWindow.java index 1fec5c2c61..f3828e26ea 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/window/FindWindow.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/window/FindWindow.java @@ -32,8 +32,10 @@ import java.util.Vector; import java.util.logging.Level; import java.util.regex.Pattern; +import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Combobox; +import org.adempiere.webui.component.Grid; import org.adempiere.webui.component.Label; import org.adempiere.webui.component.ListCell; import org.adempiere.webui.component.ListHead; @@ -41,6 +43,8 @@ import org.adempiere.webui.component.ListHeader; import org.adempiere.webui.component.ListItem; import org.adempiere.webui.component.Listbox; import org.adempiere.webui.component.Panel; +import org.adempiere.webui.component.Row; +import org.adempiere.webui.component.Rows; import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.ToolBar; import org.adempiere.webui.component.ToolBarButton; @@ -73,6 +77,7 @@ import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zul.Comboitem; import org.zkoss.zul.Hbox; +import org.zkoss.zul.Separator; import org.zkoss.zul.Vbox; /** @@ -106,7 +111,7 @@ public class FindWindow extends Window implements EventListener,ValueChangeListe // private Listbox advancedPanel; /** container of Simple Window contents */ - private Vbox contentSimple; + private Grid contentSimple; /** Target Window No */ private int m_targetWindowNo; /** Table ID */ @@ -150,6 +155,11 @@ public class FindWindow extends Window implements EventListener,ValueChangeListe private int m_AD_Tab_ID = 1; private MUserQuery[] userQueries; + private Rows contentSimpleRows; + private Row pnlDocument; + private Row pnlDescription; + private Row pnlValue; + private Row pnlName; /** Index ColumnName = 0 */ public static final int INDEX_COLUMNNAME = 0; @@ -267,42 +277,38 @@ public class FindWindow extends Window implements EventListener,ValueChangeListe hboxButton.appendChild(pnlButtonRight); hboxButton.setWidth("100%"); - Panel pnlDocument = new Panel(); + pnlDocument = new Row(); pnlDocument.setId("pnlDocument"); - pnlDocument.appendChild(lblDocumentNo); + pnlDocument.appendChild(LayoutUtils.makeRightAlign(lblDocumentNo)); pnlDocument.appendChild(fieldDocumentNo); - pnlDocument.setWidth("70%"); - pnlDocument.setAlign("right"); - Panel pnlDescription = new Panel(); - pnlDescription.appendChild(lblDescription); + pnlDescription = new Row(); + pnlDescription.appendChild(LayoutUtils.makeRightAlign(lblDescription)); pnlDescription.appendChild(fieldDescription); - pnlDescription.setWidth("70%"); - pnlDescription.setAlign("right"); - Panel pnlValue = new Panel(); - pnlValue.appendChild(lblValue); + pnlValue = new Row(); + pnlValue.appendChild(LayoutUtils.makeRightAlign(lblValue)); pnlValue.appendChild(fieldValue); - pnlValue.setWidth("70%"); - pnlValue.setAlign("right"); - Panel pnlName = new Panel(); - pnlName.appendChild(lblName); + pnlName = new Row(); + pnlName.appendChild(LayoutUtils.makeRightAlign(lblName)); pnlName.appendChild(fieldName); - pnlName.setWidth("70%"); - pnlName.setAlign("right"); - contentSimple = new Vbox(); + contentSimple = new Grid(); contentSimple.setId("contentSimple"); contentSimple.setWidth("100%"); - contentSimple.setStyle("padding:10px; text-align:left"); + contentSimple.makeNoStrip(); + + contentSimpleRows = new Rows(); + contentSimple.appendChild(contentSimpleRows); - contentSimple.appendChild(pnlValue); - contentSimple.appendChild(pnlName); - contentSimple.appendChild(pnlDocument); - contentSimple.appendChild(pnlDescription); + contentSimpleRows.appendChild(pnlValue); + contentSimpleRows.appendChild(pnlName); + contentSimpleRows.appendChild(pnlDocument); + contentSimpleRows.appendChild(pnlDescription); winLookupRecord.appendChild(contentSimple); + winLookupRecord.appendChild(new Separator()); winLookupRecord.appendChild(hboxButton); winLookupRecord.setWidth("100%"); winLookupRecord.addEventListener(Events.ON_OK, this); @@ -452,20 +458,16 @@ public class FindWindow extends Window implements EventListener,ValueChangeListe } // for all target tab fields // Disable simple query fields - lblValue.setVisible(hasValue); - fieldValue.setVisible(hasValue); + pnlValue.setVisible(hasValue); if (hasValue) fieldValue.addEventListener(Events.ON_CHANGE,this); - lblDocumentNo.setVisible(hasDocNo); - fieldDocumentNo.setVisible(hasDocNo); + pnlDocument.setVisible(hasDocNo); if (hasDocNo) fieldDocumentNo.addEventListener(Events.ON_CHANGE,this); - lblName.setVisible(hasName); - fieldName.setVisible(hasName); + pnlName.setVisible(hasName); if (hasName) fieldName.addEventListener(Events.ON_CHANGE,this); - lblDescription.setVisible(hasDescription); - fieldDescription.setVisible(hasDescription); + pnlDescription.setVisible(hasDescription); if (hasDescription) fieldDescription.addEventListener(Events.ON_CHANGE,this); @@ -627,17 +629,9 @@ public class FindWindow extends Window implements EventListener,ValueChangeListe // Editor WEditor editor = null; - if (mField.isLookup()) - { - WTableDirEditor wd = new WTableDirEditor(mField); - editor = wd; - } - else - { - editor = WebEditorFactory.getEditor(mField, false); - editor.setMandatory(false); - editor.setReadWrite(true); - } + editor = WebEditorFactory.getEditor(mField, false); + editor.setMandatory(false); + editor.setReadWrite(true); Label label = editor.getLabel(); Component fieldLabel = editor.getComponent(); @@ -645,13 +639,12 @@ public class FindWindow extends Window implements EventListener,ValueChangeListe if (displayLength > 0) // set it back mField.setDisplayLength(displayLength); // - Panel panel = new Panel(); - panel.setWidth("70%"); - panel.setAlign("right"); - panel.appendChild(label); + + Row panel = new Row(); + panel.appendChild(LayoutUtils.makeRightAlign(label)); panel.appendChild(fieldLabel); - contentSimple.appendChild(panel); + contentSimpleRows.appendChild(panel); m_sEditors.add(editor); } // addSelectionColumn @@ -1684,8 +1677,8 @@ public class FindWindow extends Window implements EventListener,ValueChangeListe if(evt.getSource() instanceof WSearchEditor) { WSearchEditor se = (WSearchEditor) evt.getSource(); - String display = se.getGridField().getLookup().getDisplay(evt.getNewValue().toString()); - label.setValue(display); + se.setValue(evt.getNewValue()); + label.setValue(se.getDisplay()); } else {