ca.qc.cegepoutaouais.tge.pige.client.ui.dialog.InventoryExplorer.java Source code

Java tutorial

Introduction

Here is the source code for ca.qc.cegepoutaouais.tge.pige.client.ui.dialog.InventoryExplorer.java

Source

/*
 * 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) {
    }

}