org.bonitasoft.web.toolkit.client.ui.component.menu.MenuFolder.java Source code

Java tutorial

Introduction

Here is the source code for org.bonitasoft.web.toolkit.client.ui.component.menu.MenuFolder.java

Source

/**
 * Copyright (C) 2011 BonitaSoft S.A.
 * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble
 * This program 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 2.0 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 General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.bonitasoft.web.toolkit.client.ui.component.menu;

import static com.google.gwt.query.client.GQuery.$;

import org.bonitasoft.web.toolkit.client.ui.JsId;
import org.bonitasoft.web.toolkit.client.ui.component.Image;
import org.bonitasoft.web.toolkit.client.ui.component.containers.ContainerStyled;
import org.bonitasoft.web.toolkit.client.ui.component.core.Component;

import com.google.gwt.query.client.GQuery;
import com.google.gwt.user.client.Element;

/**
 * @author Sverin Moussel
 */
public class MenuFolder extends Component implements MenuItem {

    private String label = null;

    private Image image = null;

    protected final ContainerStyled<MenuItem> items = new ContainerStyled<MenuItem>();

    public MenuFolder(final String label) {
        this(null, label, null, (MenuItem[]) null);
    }

    public MenuFolder(final String label, final Image image) {
        this(null, label, image, (MenuItem[]) null);
    }

    public MenuFolder(final JsId jsid, final String label) {
        this(jsid, label, null, (MenuItem[]) null);
    }

    public MenuFolder(final JsId jsid, final String label, final Image image) {
        this(jsid, label, image, (MenuItem[]) null);
    }

    public MenuFolder(final String label, final MenuItem... menuItems) {
        this(null, label, null, menuItems);
    }

    public MenuFolder(final JsId jsid, final String label, final MenuItem... menuItems) {
        this(jsid, label, null, menuItems);
    }

    public MenuFolder(final String label, final Image image, final MenuItem... menuItems) {
        this(null, label, image, menuItems);
    }

    public MenuFolder(final JsId jsid, final String label, final Image image, final MenuItem... menuItems) {
        super(jsid);
        this.label = label;
        this.image = image;

        if (menuItems != null) {
            addMenuItem(menuItems);
        }
    }

    public MenuFolder addMenuItem(final MenuItem... menuItems) {
        this.items.append(menuItems);

        return this;
    }

    public MenuFolder addFolder(final MenuFolder... folers) {
        return addMenuItem(folers);
    }

    public MenuFolder addLink(final MenuLink... links) {
        return addMenuItem(links);
    }

    @Override
    protected Element makeElement() {
        this.items.setRootTagName("ul");
        this.items.setWrapTag(null, null);

        final GQuery root = $("<li>");
        root.addClass("menuitem");
        if (getJsId() != null) {
            root.addClass(getJsId().toString("menuitem"));
        }

        GQuery link = null;
        ;
        if (this.image != null || this.label != null && this.label.length() > 0) {
            link = $("<a href=\"#\">" + this.label + "</a>");
            root.append(link);

            if (this.label != null && this.label.length() > 0) {
                link.text(this.label);
            }

            if (this.image != null) {
                link.prepend(this.image.getElement());
            }

        }

        appendComponentToHtml((Element) root.get(0), this.items);

        return (Element) root.get(0);
    }

    public void clear() {
        this.items.empty();
    }

    // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // SETTERS
    // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    public void setLabel(final String label) {
        this.label = label;

        if (isGenerated()) {
            final GQuery link = $(this.element).children("a");
            final GQuery image = link.find("img");

            link.text(label);
            if (image.length() > 0) {
                link.prepend(image);
            }
        }
    }

    public void setImage(final Image image) {
        this.image = image;

        if (isGenerated()) {

            final GQuery link = $(this.element).children("a");
            final GQuery img = link.find("img");

            if (image == null) {
                img.remove();
            } else if (img.length() > 0) {
                img.replaceWith(image.getElement());
            } else {
                link.prepend(image.getElement());
            }
        }
    }

}