/****************************************************************************** * Copyright (C) 2009 Low Heng Sin * * Copyright (C) 2009 Idalica Corporation * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * *****************************************************************************/ package org.adempiere.webui.apps.form; import org.adempiere.webui.component.Button; import org.adempiere.webui.component.ConfirmPanel; import org.adempiere.webui.component.ListModelTable; import org.adempiere.webui.component.ListboxFactory; import org.adempiere.webui.component.Panel; import org.adempiere.webui.component.WAppsAction; import org.adempiere.webui.component.WListbox; import org.adempiere.webui.component.Window; import org.adempiere.webui.event.WTableModelEvent; import org.adempiere.webui.event.WTableModelListener; import org.adempiere.webui.panel.StatusBarPanel; import org.adempiere.webui.window.FDialog; import org.compiere.grid.CreateFrom; import org.compiere.util.Trx; import org.compiere.util.TrxRunnable; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zkex.zul.Borderlayout; import org.zkoss.zkex.zul.Center; import org.zkoss.zkex.zul.North; import org.zkoss.zkex.zul.South; import org.zkoss.zul.Separator; public class WCreateFromWindow extends Window implements EventListener, WTableModelListener { private static final long serialVersionUID = 1L; private CreateFrom createFrom; private int windowNo; private Panel parameterPanel = new Panel(); private ConfirmPanel confirmPanel = new ConfirmPanel(true); private StatusBarPanel statusBar = new StatusBarPanel(); private WListbox dataTable = ListboxFactory.newDataTable(); public static final String SELECT_ALL = "SelectAll"; public WCreateFromWindow(CreateFrom createFrom, int windowNo) { super(); setAttribute("mode", "modal"); this.createFrom = createFrom; this.windowNo = windowNo; try { zkInit(); confirmPanel.addActionListener(this); statusBar.setStatusDB(""); tableChanged(null); createFrom.setInitOK(true); } catch(Exception e) { createFrom.setInitOK(false); } } protected void zkInit() throws Exception { Borderlayout contentPane = new Borderlayout(); appendChild(contentPane); North north = new North(); contentPane.appendChild(north); north.appendChild(parameterPanel); Center center = new Center(); contentPane.appendChild(center); center.appendChild(dataTable); WAppsAction selectAllAction = new WAppsAction (SELECT_ALL, null, null); Button selectAllButton = selectAllAction.getButton(); confirmPanel.addComponentsLeft(selectAllButton); selectAllButton.addActionListener(this); South south = new South(); contentPane.appendChild(south); Panel southPanel = new Panel(); south.appendChild(southPanel); southPanel.appendChild(new Separator()); southPanel.appendChild(confirmPanel); southPanel.appendChild(new Separator()); southPanel.appendChild(statusBar); setWidth("750px"); setHeight("550px"); setSizable(true); setBorder("normal"); contentPane.setWidth("100%"); contentPane.setHeight("100%"); } public void onEvent(Event e) throws Exception { // OK - Save if (e.getTarget().getId().equals(ConfirmPanel.A_OK)) { try { Trx.run(new TrxRunnable() { public void run(String trxName) { if (save(trxName)) { dispose(); } } }); } catch (Exception ex) { FDialog.error(windowNo, this, "Error", ex.getLocalizedMessage()); } } // Cancel else if (e.getTarget().getId().equals(ConfirmPanel.A_CANCEL)) { dispose(); } // Select All // Trifon else if (e.getTarget().getId().equals(SELECT_ALL)) { ListModelTable model = dataTable.getModel(); int rows = model.getSize(); for (int i = 0; i < rows; i++) { model.setValueAt(new Boolean(true), i, 0); } //refresh dataTable.setModel(model); info(); } } public void tableChanged (WTableModelEvent e) { int type = -1; if (e != null) { type = e.getType(); if (type != WTableModelEvent.CONTENTS_CHANGED) return; } info(); } public boolean save(String trxName) { ListModelTable model = dataTable.getModel(); int rows = model.getSize(); if (rows == 0) return false; return createFrom.save(dataTable, trxName); } public void info() { ListModelTable model = dataTable.getModel(); int rows = model.getRowCount(); int count = 0; for (int i = 0; i < rows; i++) { if (((Boolean) model.getValueAt(i, 0)).booleanValue()) count++; } setStatusLine(count, null); createFrom.info(); } public void setStatusLine(int selectedRowCount, String text) { StringBuffer sb = new StringBuffer(String.valueOf(selectedRowCount)); if (text != null && text.trim().length() > 0) { sb.append(" - ").append(text); } statusBar.setStatusLine(sb.toString()); // confirmPanel.getOKButton().setEnabled(selectedRowCount > 0); } public WListbox getWListbox() { return dataTable; } public Panel getParameterPanel() { return parameterPanel; } public ConfirmPanel getConfirmPanel() { return confirmPanel; } }