cc.kune.bootstrap.client.ui.ComplexDropDownMenu.java Source code

Java tutorial

Introduction

Here is the source code for cc.kune.bootstrap.client.ui.ComplexDropDownMenu.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.bootstrap.client.ui;

import org.gwtbootstrap3.client.shared.event.HiddenEvent;
import org.gwtbootstrap3.client.shared.event.HideEvent;
import org.gwtbootstrap3.client.shared.event.HideHandler;
import org.gwtbootstrap3.client.shared.event.ShowEvent;
import org.gwtbootstrap3.client.shared.event.ShowHandler;
import org.gwtbootstrap3.client.shared.event.ShownEvent;
import org.gwtbootstrap3.client.shared.event.ShownHandler;
import org.gwtbootstrap3.client.ui.DropDownMenu;
import org.gwtbootstrap3.client.ui.base.ComplexWidget;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.gwtbootstrap3.client.ui.constants.Toggle;

import cc.kune.common.shared.res.KuneIcon;

import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.logical.shared.AttachEvent.Handler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;

public class ComplexDropDownMenu<T extends ComplexWidget> {

    private static final String OPEN = "open";
    private final ComplexAnchorButton anchor;
    private final DropDownMenu menu;
    private final T widget;

    public ComplexDropDownMenu(final T widget) {
        this.widget = widget;
        menu = new DropDownMenu();
        anchor = new ComplexAnchorButton();
        anchor.setDataToggle(Toggle.DROPDOWN);
        final String dataTarget = HTMLPanel.createUniqueId();
        anchor.setDataTarget(dataTarget);
        // Attributes.DATA_TARGET
        anchor.getElement().setAttribute("aria-expanded", "true");
        menu.getElement().setAttribute("aria-labelledby", dataTarget);
        widget.add(anchor);
        widget.add(menu);
        widget.addAttachHandler(new Handler() {
            @Override
            public void onAttachOrDetach(final AttachEvent event) {
                if (event.isAttached()) {
                    bindJavaScriptEvents(widget.getElement());
                } else {
                    unbindJavaScriptEvents(widget.getElement());
                }
            }
        });
    }

    public void add(final IsWidget child) {
        menu.add(child);
    }

    public void add(final Widget child) {
        menu.add(child);
    }

    public void addClickHandler(final ClickHandler clickHandler) {
        anchor.addClickHandler(clickHandler);
    }

    public HandlerRegistration addHideHandler(final HideHandler hideHandler) {
        return widget.addHandler(hideHandler, HideEvent.getType());
    }

    public HandlerRegistration addShowHandler(final ShowHandler showHandler) {
        return widget.addHandler(showHandler, ShowEvent.getType());
    }

    public HandlerRegistration addShownHandler(final ShownHandler shownHandler) {
        return widget.addHandler(shownHandler, ShownEvent.getType());
    }

    public void addStyleName(final String style) {
        widget.addStyleName(style);
    }

    private native void bindJavaScriptEvents(final com.google.gwt.dom.client.Element e) /*-{
                                                                                        var target = this;
                                                                                        var $dropdown = $wnd.jQuery(e);
                                                                                            
                                                                                        $dropdown
                                                                                        .on(
                                                                                        'show.bs.dropdown',
                                                                                        function(evt) {
                                                                                        target.@cc.kune.bootstrap.client.ui.ComplexDropDownMenu::onShow(Lcom/google/gwt/user/client/Event;)(evt);
                                                                                        });
                                                                                            
                                                                                        $dropdown
                                                                                        .on(
                                                                                        'shown.bs.dropdown',
                                                                                        function(evt) {
                                                                                        target.@cc.kune.bootstrap.client.ui.ComplexDropDownMenu::onShown(Lcom/google/gwt/user/client/Event;)(evt);
                                                                                        });
                                                                                            
                                                                                        $dropdown
                                                                                        .on(
                                                                                        'hide.bs.dropdown',
                                                                                        function(evt) {
                                                                                        target.@cc.kune.bootstrap.client.ui.ComplexDropDownMenu::onHide(Lcom/google/gwt/user/client/Event;)(evt);
                                                                                        });
                                                                                            
                                                                                        $dropdown
                                                                                        .on(
                                                                                        'hidden.bs.dropdown',
                                                                                        function(evt) {
                                                                                        target.@cc.kune.bootstrap.client.ui.ComplexDropDownMenu::onHidden(Lcom/google/gwt/user/client/Event;)(evt);
                                                                                        });
                                                                                        }-*/;

    public void clear() {
        menu.clear();
    }

    public void ensureDebugId(final String id) {
        anchor.ensureDebugId(id);
    }

    public ComplexAnchorButton getAnchor() {
        return anchor;
    }

    public DropDownMenu getList() {
        return menu;
    }

    public DropDownMenu getMenu() {
        return menu;
    }

    public String getText() {
        return anchor.getText();
    }

    public Widget getWidget() {
        return widget;
    }

    public int getWidgetCount() {
        return menu.getWidgetCount();
    }

    public void hide() {
        widget.removeStyleName(OPEN);
    }

    public void insert(final Widget uiObject, final int position) {
        menu.insert(uiObject, position);
    }

    public boolean isMenuVisible() {
        return menu.isVisible();
    }

    public boolean isVisible() {
        return menu.isVisible();
    }

    protected void onHidden(final Event evt) {
        widget.fireEvent(new HiddenEvent(evt));
    }

    protected void onHide(final Event evt) {
        widget.fireEvent(new HideEvent(evt));
    }

    protected void onShow(final Event evt) {
        widget.fireEvent(new ShowEvent(evt));
    }

    protected void onShown(final Event evt) {
        widget.fireEvent(new ShownEvent(evt));
    }

    public boolean remove(final int index) {
        return menu.remove(index);
    }

    public boolean remove(final Widget w) {
        return menu.remove(w);
    }

    public void setActive(final boolean active) {
        anchor.setActive(active);
    }

    public void setEnabled(final boolean enabled) {
        anchor.setEnabled(enabled);
    }

    public void setIcon(final IconType icon) {
        anchor.setIcon(icon);
    }

    public void setIcon(final KuneIcon icon) {
        anchor.setIcon(icon);
    }

    public void setIconBackColor(final String backgroundColor) {
        anchor.setIconBackColor(backgroundColor);
    }

    public void setIconResource(final ImageResource resource) {
        anchor.setIconResource(resource);
    }

    public void setIconRightResource(final ImageResource rightIcon) {
        anchor.setIconRightResource(rightIcon);
    }

    public void setIconStyle(final String style) {
        anchor.setIconStyle(style);
    }

    public void setIconUrl(final String url) {
        anchor.setIconUrl(url);

    }

    public void setInline(final Boolean inline) {
        menu.setInline(inline);
    }

    public void setMenuText(final String text) {
        anchor.setText(text);
    }

    private native void setPosition(final com.google.gwt.dom.client.Element e, int x, int y) /*-{
                                                                                             $wnd.jQuery(e).offset({
                                                                                             top : y,
                                                                                             left : x
                                                                                             })
                                                                                             }-*/;

    public void setText(final String text) {
        anchor.setText(text);
    }

    public void setVisible(final boolean visible) {
        widget.setVisible(visible);
    }

    public void show() {
        widget.addStyleName(OPEN);
    }

    public void show(final int x, final int y) {
        show();
        setPosition(menu.getElement(), x, y);
    }

    private native void unbindJavaScriptEvents(final com.google.gwt.dom.client.Element e) /*-{
                                                                                          $wnd.jQuery(e).off('show.bs.dropdown');
                                                                                          $wnd.jQuery(e).off('shown.bs.dropdown');
                                                                                          $wnd.jQuery(e).off('hide.bs.dropdown');
                                                                                          $wnd.jQuery(e).off('hidden.bs.dropdown');
                                                                                          }-*/;

}