/*
 * GWT-Ext Widget Library
 * Copyright(c) 2007-2008, GWT-Ext.
 * licensing@gwt-ext.com
 * 
 * http://www.gwt-ext.com/license
 */

package com.gwtext.sample.showcase2.client.tree;

import com.google.gwt.user.client.Timer;
import com.gwtext.client.core.Connection;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Function;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Tool;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.tree.AsyncTreeNode;
import com.gwtext.client.widgets.tree.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
import com.gwtext.client.widgets.tree.XMLTreeLoader;
import com.gwtext.sample.showcase2.client.Showcase2;
import com.gwtext.sample.showcase2.client.ShowcasePanel;

public class CheckboxTreePanel extends ShowcasePanel {

    public String getSourceUrl() {
        return "source/tree/CheckboxTreePanel.java.html";
    }

    public String getXmlDataUrl() {
        return "source/tree/CheckboxTreePanel.xml.html";
    }

    public String getCssUrl() {
        return "source/tree/CheckboxTreePanel.css.html";
    }

    public Panel getViewPanel() {
        if (panel == null) {
            panel = new Panel();
            final TreePanel treePanel = new TreePanel();
            treePanel.setTitle("Checkbox Tree");
            treePanel.setCollapsible(true);
            treePanel.setIconCls("world-icon");
            treePanel.setHeight(400);
            treePanel.setWidth(200);
            treePanel.setAnimate(true);
            treePanel.setEnableDD(true);
            treePanel.setContainerScroll(true);
            treePanel.setAutoScroll(true);
            treePanel.setRootVisible(true);
            treePanel.setFrame(true);


            XMLTreeLoader loader = new XMLTreeLoader();
            loader.setDataUrl("countries-cb.xml");
            loader.setMethod(Connection.GET);
            loader.setRootTag("countries");
            loader.setFolderIdMapping("@id");
            loader.setLeafIdMapping("@id");
            loader.setFolderTitleMapping("@title");
            loader.setFolderTag("team");
            loader.setLeafTitleMapping("@title");
            loader.setLeafTag("country");
            loader.setQtipMapping("@qtip");
            loader.setDisabledMapping("@disabled");
            loader.setCheckedMapping("@checked");
            loader.setIconMapping("@icon");
            loader.setAttributeMappings(new String[]{"@rank"});

            final AsyncTreeNode root = new AsyncTreeNode("Countries", loader);
            treePanel.setRootNode(root);

            root.expand();

            treePanel.addTool(new Tool(Tool.REFRESH, new Function() {
                public void execute() {
                    treePanel.getEl().mask("Loading", "x-mask-loading");
                    root.reload();
                    root.collapse(true, false);
                    Timer timer = new Timer() {
                        public void run() {
                            treePanel.getEl().unmask();
                            root.expand(true, true);
                        }
                    };
                    timer.schedule(1000);
                }
            }, "Refresh"));

            treePanel.expandAll();


            Button button = new Button("Show Checked", new ButtonListenerAdapter() {
                public void onClick(Button button, EventObject e) {
                    TreeNode[] checkedNodes = treePanel.getChecked();
                    String checkedNodesString = "";
                    for (int i = 0; i < checkedNodes.length; i++) {
                        TreeNode checkedNode = checkedNodes[i];
                        checkedNodesString += "<br>" + checkedNode.getText();
                    }
                    Showcase2.showMessage("Checked Nodes", checkedNodesString);
                }
            });

            Button toggle = new Button("Toggle Team A", new ButtonListenerAdapter() {
                public void onClick(Button button, EventObject e) {
                    treePanel.getNodeById("team-a").getUI().toggleCheck();
                }
            });

            treePanel.addButton(button);
            treePanel.addButton(toggle);

            panel.add(treePanel);
        }
        return panel;

    }

    public String getIntro() {
        return "This example demonstrates TreeNodes with Checkboxes.";
    }
}