Java tutorial
/* * Copyright 2010, 2011 Renaud Brub * * This file is part of PIGE. * * PIGE is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * PIGE 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 PIGE. If not, see <http://www.gnu.org/licenses/>. */ package ca.qc.cegepoutaouais.tge.pige.client.ui.dialog; import ca.qc.cegepoutaouais.tge.pige.client.PIGE; import ca.qc.cegepoutaouais.tge.pige.client.PigeMessages; import ca.qc.cegepoutaouais.tge.pige.client.PigeUtil; import ca.qc.cegepoutaouais.tge.pige.client.ui.widget.CategoryBrowser; import ca.qc.cegepoutaouais.tge.pige.client.ui.widget.EditorMode; import ca.qc.cegepoutaouais.tge.pige.client.ui.widget.InventorySearchBox; import ca.qc.cegepoutaouais.tge.pige.client.ui.widget.ItemEditor; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.Category; import ca.qc.cegepoutaouais.tge.pige.dao.pojos.Item; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.data.BaseStringFilterConfig; import com.extjs.gxt.ui.client.data.BeanModel; import com.extjs.gxt.ui.client.data.FilterConfig; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.MenuEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.layout.BorderLayout; import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid; import com.google.gwt.i18n.client.NumberFormat; import java.util.ArrayList; import java.util.List; /** * * @author Renaud Brub */ public class InventoryExplorer extends Dialog { static final PigeMessages messages = PIGE.messages; private ItemEditor itemEditor = null; public InventoryExplorer() { setupUI(); } protected void setupUI() { // Configurations de la bote de dialogue. setLayout(new BorderLayout()); setModal(true); setDraggable(true); setCollapsible(false); setClosable(true); setAutoHide(false); setResizable(true); setBodyStyle("padding: 3px"); setWidth(900); setHeight(600); setButtons(""); setHeadingText(messages.browseInventory()); setHideOnButtonClick(Boolean.TRUE); Button closeBtn = new Button(messages.close()); closeBtn.addSelectionListener(new SelectionListener() { @Override public void componentSelected(ComponentEvent ce) { hide(); } }); getButtonBar().add(closeBtn); final EditorMode mode = EditorMode.ReadOnly; CategoryBrowser categoryBrowser = new CategoryBrowser(mode) { @Override public void onSelectionChanged(BeanModel selection) { itemEditor.resetSearchConfigs(); FilterConfig fc = new BaseStringFilterConfig(); fc.setValue((Category) selection.getBean()); itemEditor.getLoadConfig().set("category", fc); itemEditor.load(); } }; TreeGrid treeGrid = categoryBrowser.getTreeGrid(); treeGrid.setHeight(443); treeGrid.setHideHeaders(Boolean.TRUE); treeGrid.setBorders(Boolean.TRUE); treeGrid.setAutoExpandColumn(Category.NAME_REF); itemEditor = new ItemEditor(mode) { @Override protected ColumnModel createColumnModel() { List<ColumnConfig> configs = new ArrayList<ColumnConfig>(); ColumnConfig quantityCC = new ColumnConfig(Item.QUANTITY_REF, messages.quantity(), 25); NumberFormat nf = NumberFormat.getFormat(PIGE.QUANTITY_FORMAT); quantityCC.setNumberFormat(nf); ColumnConfig nameCC = new ColumnConfig(Item.NAME_REF, messages.name(), 80); ColumnConfig modelCC = new ColumnConfig(Item.MODEL_REF, messages.model(), 50); ColumnConfig descriptionCC = new ColumnConfig(Item.DESCRIPTION_REF, messages.description(), 150); configs.add(quantityCC); configs.add(nameCC); configs.add(modelCC); configs.add(descriptionCC); return new ColumnModel(configs); } @Override protected void onGridDoubleClick() { insertItem(); InventoryExplorer.this.hide(); } @Override public Menu createContextMenu() { Menu contextMenu = super.createContextMenu(); MenuItem selectItemMenu = new MenuItem(messages.select()); selectItemMenu.addSelectionListener(new SelectionListener<MenuEvent>() { @Override public void componentSelected(MenuEvent event) { insertItem(); } }); contextMenu.insert(selectItemMenu, 1); // Juste aprs l'entte. return contextMenu; } @Override protected ToolBar createToolBar() { ToolBar tb = super.createToolBar(); Button selectItemBtn = new Button(messages.select()); selectItemBtn.addSelectionListener(new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent event) { insertItem(); } }); tb.insert(selectItemBtn, 2); tb.insert(PigeUtil.createVerticalSeparator(), 3); return tb; } private void insertItem() { List<BeanModel> models = getSelectedItems(); if (models != null && models.size() > 0) { InventoryExplorer.this.insertItem((Item) models.get(0).getBean()); InventoryExplorer.this.hide(); } else { MessageBox.info(messages.information(), messages.noItemSelected(), null); } } }; InventorySearchBox searchBox = new InventorySearchBox(); searchBox.bind(itemEditor); ToolBar actionTB = new ToolBar(); actionTB.add(searchBox); BorderLayoutData westLD = new BorderLayoutData(LayoutRegion.WEST, 200); westLD.setMargins(new Margins(0, 3, 0, 3)); westLD.setSplit(Boolean.TRUE); BorderLayoutData centerLD = new BorderLayoutData(LayoutRegion.CENTER); setTopComponent(actionTB); add(categoryBrowser, westLD); add(itemEditor, centerLD); layout(); } protected void insertItem(Item item) { } }