cc.kune.sandbox.client.KuneSandboxEntryPoint.java Source code

Java tutorial

Introduction

Here is the source code for cc.kune.sandbox.client.KuneSandboxEntryPoint.java

Source

/*
 *
 * Copyright (C) 2007-2015 Licensed to the Comunes Association (CA) under
 * one or more contributor license agreements (see COPYRIGHT for details).
 * The CA licenses this file to you under the GNU Affero General Public
 * License version 3, (the "License"); you may not use this file except in
 * compliance with the License. This file is part of kune.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * 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 Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package cc.kune.sandbox.client;

import java.util.Date;

import org.gwtbootstrap3.client.ui.Anchor;
import org.gwtbootstrap3.client.ui.AnchorListItem;
import org.gwtbootstrap3.client.ui.Badge;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.ButtonGroup;
import org.gwtbootstrap3.client.ui.DropDown;
import org.gwtbootstrap3.client.ui.DropDownMenu;
import org.gwtbootstrap3.client.ui.Label;
import org.gwtbootstrap3.client.ui.ListDropDown;
import org.gwtbootstrap3.client.ui.Navbar;
import org.gwtbootstrap3.client.ui.NavbarCollapse;
import org.gwtbootstrap3.client.ui.NavbarCollapseButton;
import org.gwtbootstrap3.client.ui.NavbarHeader;
import org.gwtbootstrap3.client.ui.NavbarNav;
import org.gwtbootstrap3.client.ui.base.button.CustomButton;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.gwtbootstrap3.client.ui.constants.NavbarPosition;
import org.gwtbootstrap3.client.ui.constants.Toggle;
import org.gwtbootstrap3.client.ui.html.Text;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.WhiteSpace;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.HasDirection.Direction;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

import br.com.rpa.client._paperelements.PaperFab;
import br.com.rpa.client.api.widgets.paper.PaperButton;
import cc.kune.bootstrap.client.ui.CheckListItem;
import cc.kune.bootstrap.client.ui.ComplexAnchorListItem;
import cc.kune.bootstrap.client.ui.ComplexDropDownMenu;
import cc.kune.bootstrap.client.ui.DropDownSubmenu;
import cc.kune.bootstrap.client.ui.RadioListItem;
import cc.kune.common.client.actions.AbstractAction;
import cc.kune.common.client.actions.AbstractExtendedAction;
import cc.kune.common.client.actions.Action;
import cc.kune.common.client.actions.ActionEvent;
import cc.kune.common.client.actions.ActionStyles;
import cc.kune.common.client.actions.BaseAction;
import cc.kune.common.client.actions.KeyStroke;
import cc.kune.common.client.actions.Shortcut;
import cc.kune.common.client.actions.ui.ActionFlowPanel;
import cc.kune.common.client.actions.ui.FlowActionExtensible;
import cc.kune.common.client.actions.ui.descrip.ButtonDescriptor;
import cc.kune.common.client.actions.ui.descrip.GuiActionDescCollection;
import cc.kune.common.client.actions.ui.descrip.IconLabelDescriptor;
import cc.kune.common.client.actions.ui.descrip.LabelDescriptor;
import cc.kune.common.client.actions.ui.descrip.MenuCheckItemDescriptor;
import cc.kune.common.client.actions.ui.descrip.MenuDescriptor;
import cc.kune.common.client.actions.ui.descrip.MenuItemDescriptor;
import cc.kune.common.client.actions.ui.descrip.MenuRadioItemDescriptor;
import cc.kune.common.client.actions.ui.descrip.MenuSeparatorDescriptor;
import cc.kune.common.client.actions.ui.descrip.MenuTitleItemDescriptor;
import cc.kune.common.client.actions.ui.descrip.PushButtonDescriptor;
import cc.kune.common.client.actions.ui.descrip.SubMenuDescriptor;
import cc.kune.common.client.actions.ui.descrip.ToolbarDescriptor;
import cc.kune.common.client.actions.ui.descrip.ToolbarItemDescriptor;
import cc.kune.common.client.actions.ui.descrip.ToolbarMenuDescriptor;
import cc.kune.common.client.actions.ui.descrip.ToolbarSeparatorDescriptor;
import cc.kune.common.client.actions.ui.descrip.ToolbarSeparatorDescriptor.Type;
import cc.kune.common.client.actions.ui.descrip.WidgetMenuDescriptor;
import cc.kune.common.client.notify.NotifyLevelImages;
import cc.kune.common.client.notify.NotifyUser;
import cc.kune.common.client.notify.SimpleUserMessage;
import cc.kune.common.client.resources.CommonResources;
import cc.kune.common.client.shortcuts.GlobalShortcutRegister;
import cc.kune.common.client.tooltip.Tooltip;
import cc.kune.common.client.ui.BasicThumb;
import cc.kune.common.client.ui.BlinkAnimation;
import cc.kune.common.client.ui.DottedTab;
import cc.kune.common.client.ui.IconLabel;
import cc.kune.common.client.ui.PopupTopPanel;
import cc.kune.common.client.ui.WrappedFlowPanel;
import cc.kune.common.client.ui.dialogs.BSBasicDialog;
import cc.kune.common.client.ui.dialogs.BasicDialog;
import cc.kune.common.client.ui.dialogs.BasicTopDialog;
import cc.kune.common.client.ui.dialogs.MessagePanel;
import cc.kune.common.client.utils.WindowUtils;
import cc.kune.common.shared.i18n.I18n;
import cc.kune.common.shared.res.KuneIcon;
import cc.kune.common.shared.utils.LoremUtils;
import cc.kune.common.shared.utils.SimpleResponseCallback;
import cc.kune.common.shared.utils.TextUtils;
import cc.kune.core.client.ui.UploaderPanel;
import cc.kune.core.client.ui.dialogs.PromptTopDialog;
import cc.kune.core.client.ui.dialogs.PromptTopDialog.Builder;
import cc.kune.core.client.ui.dialogs.PromptTopDialog.OnEnter;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 *
 * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
 */
public class KuneSandboxEntryPoint implements EntryPoint {
    /**
     * The Class TestAction.
     *
     * @author vjrj@ourproject.org (Vicente J. Ruiz Jurado)
     */
    public class TestAction extends AbstractExtendedAction {

        /**
         * Instantiates a new test action.
         *
         * @param text
         *          the text
         */
        public TestAction(final String text) {
            super(text);
        }

        /**
         * Instantiates a new test action.
         *
         * @param text
         *          the text
         * @param tooltip
         *          the tooltip
         * @param icon
         *          the icon
         */
        public TestAction(final String text, final String tooltip, final String icon) {
            super(text, tooltip, icon);
        }

        /*
         * (non-Javadoc)
         *
         * @see cc.kune.common.client.actions.ActionListener#actionPerformed(cc.kune
         * .common.client.actions.ActionEvent)
         */
        @Override
        public void actionPerformed(final ActionEvent event) {
            // We test two types of dialogs
            if (((new Date().getTime()) & 1) == 0) {
                testDialog();
            } else {
                testPromptDialog();
            }
        }

    }

    /** The absolute panel. */
    private AbsolutePanel absolutePanel;

    final AbstractExtendedAction action1 = new AbstractExtendedAction() {
        @Override
        public void actionPerformed(final ActionEvent event) {
            // final SimpleUserMessage simpleMes = new SimpleUserMessage();
            // simpleMes.show("Hellow world!");
            NotifyUser.showProgress("Savingggg");
            NotifyUser.askConfirmation("Some title", "Some message", "Yeah!", "Nein", new SimpleResponseCallback() {
                @Override
                public void onCancel() {
                    NotifyUser.error("Cancel");
                }

                @Override
                public void onSuccess() {
                    NotifyUser.info("Success");
                }
            });
        }
    };

    final AbstractExtendedAction action2 = new AbstractExtendedAction() {
        @Override
        public void actionPerformed(final ActionEvent event) {
            final String title = "Some title";
            final String message = "Lorem <a href='/'>ipsum</a> dolor sit amet, consectetuer adipiscing elit. Lorem ipsum dolor sit amet, consectetuer adipiscing elit";
            NotifyUser.showProgress("Saving......" + new Date().getTime());
            NotifyUser.avatar("http://lorempixel.com/200/200", message, new ClickHandler() {
                @Override
                public void onClick(final ClickEvent event) {
                    NotifyUser.info("On click");
                }
            });
            NotifyUser.error(title, message, true);
            NotifyUser.important(message);
            NotifyUser.info(message);
            NotifyUser.success(title, message);
        }
    };

    /** The ginjector. */
    private KuneSampleGinjector ginjector;

    private MainContainer mainContainer;

    /** The res. */
    private CommonResources res;
    /** The shortcut register. */
    private GlobalShortcutRegister shortcutRegister;

    /** The user msg. */
    SimpleUserMessage userMsg = new SimpleUserMessage();

    public void addNotifyUserTests(final FlowPanel flow) {

        flow.add(new CustomButton("Show progress", IconType.PLAY_CIRCLE, new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                NotifyUser.showProgressLoading();
            }
        }));

        flow.add(new CustomButton("Hide progress", IconType.STOP, new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                NotifyUser.hideProgress();
            }
        }));

        flow.add(new CustomButton("Show date", IconType.CLOCK_O, new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                NotifyUser.showProgress("Date : " + new Date().getTime());
            }
        }));

        flow.add(new CustomButton("Important message", IconType.WARNING, new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                NotifyUser.important("Alert!");
            }
        }));

        flow.add(new CustomButton("Error message", IconType.QUESTION_CIRCLE, new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                NotifyUser.error("Title", "Error!", false);
            }
        }));
    }

    private void addSimpleActions(final FlowPanel flow) {
        final ButtonDescriptor button1 = new ButtonDescriptor("button desc 1", action1);
        final ButtonDescriptor button2 = new ButtonDescriptor("button desc 2 but bigger bigger", action2);
        final ButtonDescriptor button3 = new ButtonDescriptor(action1);

        button1.withIcon(res.info()).withToolTip("Some tooltip");
        button2.withIcon(res.info()).withToolTip("Some tooltip");
        button3.withIcon(IconType.TWITTER).withToolTip("Some tooltip"); // .withStyles("k-button,gwt-Button,k-btn-min");
        final IconLabelDescriptor iconLabel = new IconLabelDescriptor("This does not work?");
        iconLabel.setAction(action1);
        iconLabel.withText("Icon Label 1");
        iconLabel.withIcon(KuneIcon.FOLDER);
        final FlowActionExtensible flowactions = new FlowActionExtensible();
        flowactions.add(iconLabel, button1, button2, button3);
        flow.add(flowactions);
    }

    public void basicTests() {

        // final Growl growl = UserNotifierGrowl.showProgress("Loading...");

        NotifyUser.showProgress("Starting...");

        testTooltips();

        // absolutePanel.add(testActionToolbar(), 200, 200);

        final String defLocale = "en";

        final String locale = WindowUtils.getParameter("locale");
        final String[] ids = new String[] { "summary", "ini", "footer", "kuneloading-msg" };

        for (final String id : ids) {
            final RootPanel someId = RootPanel.get("k-home-" + id + "-" + locale);
            final RootPanel defId = RootPanel.get("k-home-" + id + "-" + defLocale);
            if (someId != null) {
                someId.setVisible(true);
            } else if (defId != null) {
                defId.setVisible(true);
            }
        }

        // testToolpanel();
        // toolSelector.addWidget(new Label("Test"));
        // testPromptDialog();

        testSubWidget();

        final ActionFlowPanel view = makeFlowToolbar();

        final BasicThumb thumb = testThumbs();

        absolutePanel.add(thumb, 200, 10);
        absolutePanel.add(view, 5, 150);

        final DottedTab tab = new DottedTab();
        absolutePanel.add(tab, 400, 400);
        absolutePanel.add(tab, 400, 400);
        absolutePanel.add(makeFileUpload(), 520, 0);
        // absolutePanel.add(new InboxTutorial(), 0, 300);

        new BlinkAnimation(tab, 350).animate(5);

        RootPanel.get().add(absolutePanel);

    }

    public void completeTests() {
        NotifyUser.info("Started");

        final Navbar simpleNavbar = new Navbar();
        final NavbarHeader header = new NavbarHeader();
        final NavbarCollapseButton navbarCollapseButton = new NavbarCollapseButton();
        navbarCollapseButton.setDataTarget("#test");
        header.add(navbarCollapseButton);
        simpleNavbar.add(header);
        final NavbarCollapse navbarCollapse = new NavbarCollapse();
        navbarCollapse.setId("test");
        simpleNavbar.add(navbarCollapse);

        final NavbarNav navbarNav = new NavbarNav();
        final ComplexDropDownMenu<ListDropDown> listDropDown = new ComplexDropDownMenu<ListDropDown>(
                new ListDropDown());
        listDropDown.setMenuText("Plain menu");
        listDropDown.setIcon(IconType.GEAR);
        navbarCollapse.add(navbarNav);
        navbarNav.add(listDropDown.getWidget());

        final AnchorListItem simpleAnchor = new AnchorListItem("Anchor 1");
        simpleAnchor.setIcon(IconType.TWITTER_SQUARE);
        navbarNav.add(simpleAnchor);

        navbarNav.add(new AnchorListItem("Anchor 2"));
        navbarNav.add(new AnchorListItem("Anchor 3"));
        final AnchorListItem menuitem1 = new AnchorListItem("Anchor menuitem 1");
        menuitem1.setIcon(IconType.RANDOM);

        listDropDown.add(menuitem1);

        final CheckListItem checkitem = new CheckListItem("Check item");
        checkitem.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                checkitem.setChecked(!checkitem.isChecked());
            }
        });
        listDropDown.add(checkitem);

        final RadioListItem radioitem = new RadioListItem("Check item");
        radioitem.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                radioitem.setChecked(!radioitem.isChecked());
            }
        });
        listDropDown.add(radioitem);

        final CheckListItem checkitem2 = new CheckListItem("Check anchor");
        checkitem2.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                checkitem2.setChecked(!checkitem2.isChecked());
            }
        });

        navbarNav.add(checkitem2);
        listDropDown.add(new AnchorListItem("Anchor menuitem 2"));
        final ComplexAnchorListItem menuitem3 = new ComplexAnchorListItem("Anchor menuitem 3");
        menuitem3.setIconUrl("http://lorempixel.com/100/100");
        listDropDown.add(menuitem3);
        final AnchorListItem item1 = new AnchorListItem("Testingggg");
        item1.setIcon(IconType.HEART);
        listDropDown.add(item1);

        for (int i = 1; i < 50; i++) {
            listDropDown.add(new AnchorListItem("Anchor " + i));
        }

        final ComplexAnchorListItem itemSubmenu = new ComplexAnchorListItem("Testing submenu");
        itemSubmenu.setIcon(KuneIcon.FOLDER);
        final DropDownSubmenu submenu = new DropDownSubmenu();
        submenu.add(new AnchorListItem("sub item 1"));
        submenu.add(new AnchorListItem("sub item 2"));
        submenu.add(new AnchorListItem("sub item 3"));
        itemSubmenu.add(submenu);
        listDropDown.add(itemSubmenu);

        final DropDown dropDown = new DropDown();

        final Anchor dropDownAnchor = new Anchor();
        // FIXME This fails:
        // final BasicThumb thumb = testThumbs();
        final Image thumb = new Image("http://lorempixel.com/30/30");
        dropDownAnchor.add(thumb);
        dropDownAnchor.setDataToggle(Toggle.DROPDOWN);
        dropDown.add(dropDownAnchor);

        final DropDownMenu dropDownMenu = new DropDownMenu();
        dropDown.add(dropDownMenu);
        final ComplexAnchorListItem dditem1 = new ComplexAnchorListItem("Test 1");
        final ComplexAnchorListItem dditem2 = new ComplexAnchorListItem("Test 2");
        dditem1.setIcon(KuneIcon.BARTER);
        dditem2.setIconUrl("http://lorempixel.com/101/101");
        dropDownMenu.add(dditem1);
        dropDownMenu.add(dditem2);

        // The same with descriptors

        final Image thumb2 = new Image("http://lorempixel.com/30/30");
        final WidgetMenuDescriptor widgetMenu = new WidgetMenuDescriptor(thumb2);
        new MenuItemDescriptor(widgetMenu, new BaseAction("Menuitem desc in widget 1", "Some tooltip"));
        new MenuItemDescriptor(widgetMenu, new BaseAction("Menuitem desc in widget 2", "Some tooltip"));

        // Now with a button

        final MenuDescriptor classicMenu = new MenuDescriptor("Button classic menu");
        classicMenu.withIcon("http://lorempixel.com/30/30");
        new MenuItemDescriptor(classicMenu, new BaseAction("Menuitem desc in widget 1", "Some tooltip"));
        new MenuItemDescriptor(classicMenu, new BaseAction("Menuitem desc in widget 2", "Some tooltip"));

        final MenuDescriptor classicMenu2 = new MenuDescriptor("Button classic2 menu");
        classicMenu2.withIcon("http://lorempixel.com/30/30");
        new MenuItemDescriptor(classicMenu2, new BaseAction("Menuitem desc in widget 3", "Some tooltip"));
        new MenuItemDescriptor(classicMenu2, new BaseAction("Menuitem desc in widget 4", "Some tooltip"));

        final CustomButton btn = new CustomButton("Text custom button");
        Tooltip.to(btn, "Show the dropdown at 100,100 position (or hide it)");
        btn.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                if (listDropDown.isMenuVisible()) {
                    listDropDown.hide();
                } else {
                    listDropDown.show(100, 100);
                }
            }
        });
        btn.setIcon(KuneIcon.FOLDER);

        // final cc.kune.bootstrap.client.ui.IconLabel iconLabel = new
        // cc.kune.bootstrap.client.ui.IconLabel(
        // "Text");
        // iconLabel.setIcon(new KuneIcon('g'));

        final FlowPanel flow = mainContainer.getFlow();
        flow.insert(btn, 0);
        flow.insert(new HTML("<br>"), 1);
        flow.insert(dropDown, 2);
        flow.insert(new HTML("<br>"), 3);

        final ToolbarDescriptor bottomToolbar = new ToolbarDescriptor();
        bottomToolbar.setPosition(NavbarPosition.FIXED_BOTTOM);

        final ButtonDescriptor btnDesc = new ButtonDescriptor(new TestAction("Button desc"));
        btnDesc.withIcon(KuneIcon.SETTINGS).withToolTip("Show me a tooltip");
        btnDesc.setParent(bottomToolbar);

        final IconLabelDescriptor labelDesc = new IconLabelDescriptor(new TestAction("IconLabel desc"));
        labelDesc.withIcon(KuneIcon.TASKS).withToolTip("Show me a tooltip");
        labelDesc.setParent(bottomToolbar);

        final MenuDescriptor menu = new MenuDescriptor("Menu btn");
        menu.setParent(bottomToolbar);
        final MenuItemDescriptor menuItemDescriptor = new MenuItemDescriptor(menu, new TestAction("Menu item"));
        menuItemDescriptor.withIcon(IconType.MAGIC);

        final SubMenuDescriptor submenuDesc = new SubMenuDescriptor(menu, "Some submenu");
        submenuDesc.withIcon(KuneIcon.BARTER);
        new MenuItemDescriptor(submenuDesc, new TestAction("Submenu item 1")).withIcon(IconType.FACEBOOK);
        new MenuItemDescriptor(submenuDesc, new TestAction("Submenu item 2")).withIcon(IconType.FAST_BACKWARD);

        // TODO Add more tests here

        final FlowActionExtensible sitebar = new FlowActionExtensible();
        sitebar.add(createSitebarActions());

        final FlowActionExtensible bottombar = new FlowActionExtensible();
        bottombar.add(bottomToolbar);

        // RootPanel.get().add(testActionToolbar());

        final FlowActionExtensible mainFlow = new FlowActionExtensible();
        mainFlow.add(widgetMenu, classicMenu, classicMenu2);

        final PaperFab paperFab = new PaperFab();
        paperFab.setIcon("polymer");

        mainContainer.getSitebar().add(sitebar);
        mainContainer.getFooter().add(bottombar);
        mainContainer.getFooter().add(paperFab);
        final PaperButton paperBtn = new PaperButton();
        mainContainer.getFooter().add(paperBtn);
        flow.add(mainFlow);
        flow.insert(simpleNavbar, 0);

        testBarButtons(flow);
        addNotifyUserTests(flow);
        addSimpleActions(flow);
        flow.add(new Text(LoremUtils.LOREM_MULTI + LoremUtils.LOREM_MULTI));

        RootLayoutPanel.get().add(mainContainer);
    }

    /**
     * Test action toolbar.
     *
     * @return
     */
    @SuppressWarnings("unused")
    public ToolbarDescriptor createSitebarActions() {

        final ToolbarDescriptor sitebarDesc = new ToolbarDescriptor();

        final ToolbarItemDescriptor anchorItem = new ToolbarItemDescriptor();
        anchorItem.setAction(new AbstractExtendedAction("Item descr") {
            @Override
            public void actionPerformed(final ActionEvent event) {
                mainContainer.next();
            }
        });
        anchorItem.withStyles(ActionStyles.CURRENT_TOOLBAR_ITEM);
        sitebarDesc.setPosition(NavbarPosition.FIXED_TOP);
        anchorItem.withIcon(KuneIcon.KUNE);
        anchorItem.setParent(sitebarDesc);

        final KeyStroke shortcut1 = Shortcut.getShortcut(false, true, false, false, Character.valueOf('C'));
        shortcutRegister.put(shortcut1, action1);
        final KeyStroke shortcut2 = Shortcut.getShortcut(false, true, false, false, Character.valueOf('D'));
        shortcutRegister.put(shortcut2, action2);

        final ToolbarMenuDescriptor menuDesc = new ToolbarMenuDescriptor("Menu descr");
        final ToolbarMenuDescriptor menuDesc2 = new ToolbarMenuDescriptor("Menu descr 2");
        menuDesc.setParent(sitebarDesc);
        menuDesc.withIcon(KuneIcon.GROUP);

        final ToolbarSeparatorDescriptor separator = new ToolbarSeparatorDescriptor(Type.separator, sitebarDesc);
        menuDesc2.setParent(sitebarDesc);
        menuDesc2.withIcon(KuneIcon.CHAT);

        new ToolbarSeparatorDescriptor(Type.fill, sitebarDesc);

        final ToolbarMenuDescriptor moreItem = new ToolbarMenuDescriptor("More");
        moreItem.withParent(sitebarDesc).withIcon(IconType.NAVICON);

        final MenuItemDescriptor kunemenuitem = new MenuItemDescriptor(moreItem, action1);
        kunemenuitem.withIcon(KuneIcon.KUNE).withText("About kune");

        menuDesc.withToolTip("Some menu tooltip").withShortcut(shortcut1, shortcutRegister);
        final MenuItemDescriptor menuItem1 = new MenuItemDescriptor(menuDesc, new AbstractAction() {
            @Override
            public void actionPerformed(final ActionEvent event) {
                NotifyUser.success("Setting separator visibility to false");
                separator.setVisible(false);
            }
        });

        menuItem1.withIcon(res.locationBlack()).withText("Some menu item 1");
        final MenuItemDescriptor menuItem2 = new MenuItemDescriptor(menuDesc, action1);
        menuItem2.withIcon(res.info()).withText("Some menu item 2").withShortcut(shortcut2, shortcutRegister);

        final MenuItemDescriptor menuItem3 = new MenuItemDescriptor(menuDesc2, action1);
        menuItem3.withIcon(res.locationBlack()).withText("Some other menu item 1");
        final MenuItemDescriptor menuItem4 = new MenuItemDescriptor(menuDesc2, action1);
        menuItem4.withIcon(res.info()).withText("Some other menu item 2").withShortcut(shortcut2, shortcutRegister);

        final MenuCheckItemDescriptor menuCheckItem1 = new MenuCheckItemDescriptor(menuDesc, action1);
        menuCheckItem1.withText("Check item");

        final SubMenuDescriptor submenuDesc = new SubMenuDescriptor("Some Submenu", "tip", "oc-testico");
        submenuDesc.setParent(menuDesc);

        final TestAction action3 = new TestAction("Some menu item 3", "Some tooltip", "oc-testico");
        final TestAction action4 = new TestAction("Action 4");

        final MenuSeparatorDescriptor menuSep = new MenuSeparatorDescriptor(menuDesc);
        final MenuItemDescriptor menuHeaderItem = new MenuTitleItemDescriptor(menuDesc, "Header");
        final MenuItemDescriptor menuItemDesc1 = new MenuItemDescriptor(menuDesc, action3);
        final MenuItemDescriptor menuItemDesc2 = new MenuItemDescriptor(menuDesc, action4);
        final MenuRadioItemDescriptor menuItemDesc3 = new MenuRadioItemDescriptor(submenuDesc, action1,
                "somegroup");
        menuItemDesc3.withText("This text is setted").withShortcut(shortcut1, shortcutRegister);
        final MenuRadioItemDescriptor menuItemDesc4 = new MenuRadioItemDescriptor(submenuDesc, action2,
                "somegroup");
        menuItemDesc4.withText("This text is setted").withShortcut(shortcut2, shortcutRegister);

        return sitebarDesc;
    }

    private void initializeInjector() {
        GWT.setUncaughtExceptionHandler(new SuperDevModeUncaughtExceptionHandler());

        ginjector = GWT.create(KuneSampleGinjector.class);
        res = CommonResources.INSTANCE;
        res.commonStyle().ensureInjected();
        ginjector.getUserNotifierGrowl();
        absolutePanel = new AbsolutePanel();
        shortcutRegister = ginjector.getGlobalShortcutRegister();
        shortcutRegister.enable();
        mainContainer = new MainContainer();
    }

    private Widget makeFileUpload() {
        final UploaderPanel uploadPanel = new UploaderPanel(I18n.t("choose an image to upload"),
                "image/png,image/gif,image/jpeg");
        uploadPanel.setSize("250px", "150px");
        return uploadPanel;
    }

    /**
     * Make flow toolbar.
     *
     * @return the action flow panel
     */
    private ActionFlowPanel makeFlowToolbar() {
        final GuiActionDescCollection actions = new GuiActionDescCollection();

        final TestAction action = new TestAction("Action 1");
        action.withToolTip("Some tooltip").withIcon(res.chainClosedGrey());

        final TestAction action2 = new TestAction("Some action 2");
        action2.withIcon("mail");

        final KeyStroke shortcut = Shortcut.getShortcut(false, true, false, false, Character.valueOf('C'));
        shortcutRegister.put(shortcut, action);
        final KeyStroke shortcut2 = Shortcut.getShortcut(false, true, false, false, Character.valueOf('D'));
        shortcutRegister.put(shortcut2, action2);

        final ButtonDescriptor simpleBtn = new ButtonDescriptor(action);

        // Same action but different text
        simpleBtn.putValue(Action.NAME, "Action 1 diff name");

        final ButtonDescriptor iconBtn = new ButtonDescriptor(new AbstractExtendedAction() {

            @Override
            public void actionPerformed(final ActionEvent event) {
                NotifyUser.info("Click!");
            }
        });
        iconBtn.withIcon("polymer");

        // Same action but different text
        simpleBtn.putValue(Action.NAME, "Action 1 diff name");

        final PushButtonDescriptor pushBtn = new PushButtonDescriptor(action2);
        pushBtn.setPushed(true);
        pushBtn.withText("Push btn");

        final ToolbarDescriptor toolbar = new ToolbarDescriptor();
        final ToolbarSeparatorDescriptor tsepFill = new ToolbarSeparatorDescriptor(Type.fill, toolbar);
        final ToolbarSeparatorDescriptor toolbarSpace = new ToolbarSeparatorDescriptor(Type.spacer, toolbar);

        simpleBtn.setParent(toolbar);
        pushBtn.setParent(toolbar);

        final MenuDescriptor menu = new MenuDescriptor(action);
        menu.withText("Menu 1").withIcon("http://lorempixel.com/100/100");

        final MenuDescriptor menu2 = new MenuDescriptor(action);
        menu2.withText("Menu 2").withIcon(IconType.TREE);

        menu.setParent(toolbar);
        final SubMenuDescriptor submenu = new SubMenuDescriptor("Some Submenu", "tip", "oc-testico");
        submenu.setParent(menu);
        final MenuSeparatorDescriptor menuSep = new MenuSeparatorDescriptor(menu);

        final TestAction action3 = new TestAction("Action 3", "Some tooltip", "oc-testico");
        final TestAction action4 = new TestAction("Action 4");

        final MenuItemDescriptor menuItem = new MenuItemDescriptor(menu, action3);
        final MenuItemDescriptor menuItem2 = new MenuItemDescriptor(menu, action4);
        final MenuItemDescriptor menuItem3 = new MenuItemDescriptor(submenu, action);

        final MenuItemDescriptor menuItem4 = new MenuItemDescriptor(submenu, action2);
        menuItem4.withText("Submenu item 2");
        final IconLabelDescriptor iconLabelDescr = new IconLabelDescriptor(action);
        final IconLabelDescriptor iconLabelNoAct = new IconLabelDescriptor(action4);
        final MenuItemDescriptor menuItem5 = new MenuItemDescriptor(menu2, action);

        action.setShortcut(shortcut);
        action2.setShortcut(shortcut2);

        final LabelDescriptor label = new LabelDescriptor("Some label");

        actions.add(toolbar, simpleBtn, tsepFill, pushBtn, iconBtn, toolbarSpace, menu, tsepFill, menuItem,
                menuItem2, menuSep, menuItem2, menuItem, iconLabelDescr, submenu, menuItem3, menuItem4, menu2,
                iconLabelNoAct, menuItem5, label);

        final ActionFlowPanel view = new ActionFlowPanel(ginjector.getGuiProvider(), ginjector.getHasRTL());
        view.addAll(actions);

        final IconLabel simpleIconLabel = new IconLabel("IconLabel (no action)");
        simpleIconLabel.setRightIcon("oc-testico");
        simpleIconLabel.setTitle("tooltip");

        final VerticalPanel panel = new VerticalPanel();
        panel.setWidth("100%");
        panel.add(view);
        panel.add(simpleIconLabel);
        return view;
    }

    @Override
    public void onModuleLoad() {
        initializeInjector();
        basicTests();
        // completeTests();
    }

    public void onModuleLoadPolymer() {
        initializeInjector();
        NotifyUser.info("Started");
        final WrappedFlowPanel docContent = WrappedFlowPanel.wrap("doc_content");

        final CustomButton btn = new CustomButton("Sign in");
        btn.setIcon(KuneIcon.KUNE);
        btn.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                NotifyUser.info("Tested");

            }
        });
        docContent.insert(btn, 0);

        final PaperFab fab = PaperFab.wrap(DOM.getElementById("edit_fab"));

        fab.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                NotifyUser.success("New message");
            }
        });
        final Badge inboxBadge = new Badge();
        final Badge chatsBadge = new Badge();
        inboxBadge.setText("99");
        chatsBadge.setText("9");
        // PolymerUtils.wrap(PolymerId.CHAT_SITEBAR_ICON_GROUP).add(inboxBadge);
        // PolymerUtils.wrapDiv("sitebar_chat_icon_group").add(chatsBadge);
        inboxBadge.addStyleName("btn_green");
        chatsBadge.addStyleName("btn_green");
        inboxBadge.addStyleName("sitebar_inbox_badge");
        chatsBadge.addStyleName("sitebar_chats_badge");
        NotifyUser.hideProgress();
    }

    /**
     * Test bar buttons.
     */
    private void testBarButtons(final FlowPanel flow) {
        final Button btn1 = new Button("Btn 1");
        final Button btn2 = new Button("Btn 2");
        final Button btn3 = new Button("Btn 3");
        final ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(btn1);
        buttonGroup.add(btn2);
        buttonGroup.add(btn3);

        flow.add(buttonGroup);
    }

    /**
     * Test dialogs.
     */

    private void testDialog() {

        final cc.kune.common.client.ui.dialogs.BasicTopDialog.Builder builder = new BasicTopDialog.Builder(
                "dialogId", true, true, Direction.DEFAULT);
        final BSBasicDialog dialog = builder.build();
        dialog.getTitleText().setText("Title");
        dialog.setFirstBtnText("Accept");
        dialog.setSecondBtnText("Cancel");
        dialog.getMainPanel().add(new Image("http://lorempixel.com/600/400"));
        dialog.getBottomPanel().add(new Image("http://lorempixel.com/40/40"));
        dialog.show();
    }

    @SuppressWarnings("unused")
    private void testOldDialog() {
        final PopupTopPanel pop2 = new PopupTopPanel(false, true);
        pop2.setGlassEnabled(true);
        final BasicDialog dialog = new BasicDialog();
        pop2.add(dialog);

        dialog.getTitleText().setText("Title");
        dialog.setFirstBtnText("Accept");
        dialog.setSecondBtnText("Cancel");
        dialog.setFirstBtnTabIndex(2);
        dialog.setSecondBtnTabIndex(3);
        final ClickHandler clickHandler = new ClickHandler() {
            @Override
            public void onClick(final ClickEvent event) {
                pop2.hide();
            }
        };
        dialog.getFirstBtn().addClickHandler(clickHandler);
        dialog.getSecondBtn().addClickHandler(clickHandler);
        final VerticalPanel sPanel = new VerticalPanel();
        sPanel.add(new Label("Someother thing"));
        final Button btn = new Button("Something");
        btn.setTabIndex(1);
        btn.setFocus(true);
        sPanel.add(btn);
        sPanel.setSize("300px", "150px");
        dialog.getInnerPanel().add((IsWidget) sPanel);
        final Label label = new Label("Test label");
        final NotifyLevelImages levelImg = new NotifyLevelImages(CommonResources.INSTANCE);
        // GWT.create(NotifyLevelImages.class);
        dialog.getBottomPanel().add(new MessagePanel(levelImg, "some message"));

        // final MaskWidget mask = new MaskWidget();

        absolutePanel.add(label, 130, 130);

        pop2.showNear(label);

        // DOM.setStyleAttribute(pop.getElement(), "zIndex", "10000");
        // mask.mask(pop2, "JAarrrrr!");
    }

    private void testPromptDialog() {
        final Builder builder = new PromptTopDialog.Builder("kkj-kk", "Some ask text?", false, true, Direction.LTR,
                new OnEnter() {

                    @Override
                    public void onEnter() {
                        NotifyUser.info("On Enter");

                    }
                });
        builder.width("200px").height("200px").firstButtonTitle("Create").sndButtonTitle("Cancel");
        builder.regex(TextUtils.UNIX_NAME).regexText("The name must contain only characters, numbers and dashes");
        final PromptTopDialog diag = builder.build();
        diag.showCentered();
        diag.focusOnTextBox();
        diag.getFirstBtn().addClickHandler(new ClickHandler() {

            @Override
            public void onClick(final ClickEvent event) {
                Window.alert("ok");
            }
        });
    }

    //
    // private void testToolpanel() {
    // ToolSelectorPanel toolSelector = new ToolSelectorPanel(new
    // GSpaceArmorImpl(null), null);
    // ToolSelectorItemPanel toolItem1 = new ToolSelectorItemPanel();
    // toolItem1.getLabel().setText("documents");
    // ToolSelectorItemPanel toolItem2 = new ToolSelectorItemPanel();
    // toolItem2.getLabel().setText("something very longgggggg");
    // ToolSelectorItemPanel toolItem3 = new ToolSelectorItemPanel();
    // toolItem3.getLabel().setText("media");
    // toolSelector.addItem(toolItem1);
    // toolSelector.addItem(toolItem2);
    // toolSelector.addItem(toolItem3);
    // toolItem1.setSelected(true);
    // toolItem2.setSelected(false);
    // toolItem3.setSelected(false);
    // toolSelector.asWidget().setWidth("200px");
    // RootPanel.get().add(toolSelector.asWidget());
    // }
    //

    /**
     * Test sub widget.
     */
    private void testSubWidget() {
        // String title = new String("Some big title !");
        // String bTitle = Base64Utils.toBase64(title.getBytes());
        // String descr = new String("Some big description ");
        // String bDescr = Base64Utils.toBase64(descr.getBytes());
        //
        // final SubtitlesWidget sub = new SubtitlesWidget();
        //
        // sub.setTitleText(new String(Base64Utils.fromBase64(bTitle)));
        // sub.setDescription(new String(Base64Utils.fromBase64(bDescr)));
        // sub.setSize(Window.getClientWidth() + "px", Window.getClientHeight()
        // +
        // "px");
        // Button btn = new Button("Click me");
        // btn.addClickHandler(new ClickHandler() {
        // @Override
        // public void onClick(ClickEvent event) {
        //
        // sub.show();
        // }
        // });
        // RootPanel.get().add(btn);
        // RootPanel.get().add(sub);
    }

    /**
     * Test thumbs.
     *
     * @return the basic thumb
     */
    private BasicThumb testThumbs() {
        final BasicThumb thumb = new BasicThumb("http://kune.cc/ws/images/unknown.jpg", 60, "fooo", 5, false,
                new ClickHandler() {

                    @Override
                    public void onClick(final ClickEvent event) {
                        userMsg.show("Testing");
                    }
                });
        thumb.setTooltip("Some thumb tooltip");
        thumb.setOnOverLabel(true);
        return thumb;
    }

    //
    /**
     * Test tooltips.
     */
    private void testTooltips() {

        final Button button = new Button("Btn 1 biiggggggg");
        final Button button2 = new Button("Btn 2 also biggggg");
        button2.getElement().getStyle().setWhiteSpace(WhiteSpace.NORMAL);

        final IconLabel button3 = new IconLabel(res.info(), "Btn 3");
        final Button button4 = new Button("Btn 4");

        final int clientWidth = Window.getClientWidth();
        final int clientHeight = Window.getClientHeight();
        absolutePanel.setSize(String.valueOf(clientWidth - 10) + "px", String.valueOf(clientHeight - 10) + "px");
        absolutePanel.add(button, 5, 5);
        absolutePanel.add(button2, clientWidth - 90, 5);
        absolutePanel.add(button3, 5, clientHeight - 50);
        absolutePanel.add(button4, clientWidth - 90, clientHeight - 60);
        Tooltip.to(button,
                "Some tooltip, Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec vitae eros. ");
        Tooltip.to(button2,
                "Some tooltip, Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec vitae eros. ");
        Tooltip.to(button3,
                "Some tooltip, Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec vitae eros. ");
        Tooltip.to(button4,
                "Some tooltip, Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec vitae eros. ");

    }
}