All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.vaadin.viritin.components.DisclosurePanel Maven / Gradle / Ivy

package org.vaadin.viritin.components;

import org.vaadin.viritin.button.MButton;
import org.vaadin.viritin.layouts.MVerticalLayout;

import com.vaadin.server.FontAwesome;
import com.vaadin.server.FontIcon;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;

/**
 */
public class DisclosurePanel extends MVerticalLayout {

    private static final long serialVersionUID = 6509419456771505782L;

    private FontIcon closedIcon = FontAwesome.PLUS_CIRCLE;
    private FontIcon openIcon = FontAwesome.MINUS_CIRCLE;

    private final MButton toggle = new MButton(closedIcon);
    private final MVerticalLayout contentWrapper = new MVerticalLayout();

    public DisclosurePanel() {
        toggle.setStyleName(ValoTheme.BUTTON_BORDERLESS);
        contentWrapper.setVisible(false);
        addComponents(toggle, contentWrapper);
        toggle.addClickListener(new Button.ClickListener() {

            private static final long serialVersionUID = -3471451934465654395L;

            @Override
            public void buttonClick(Button.ClickEvent event) {
                setOpen(!isOpen());
            }
        });
    }

    public DisclosurePanel(String caption, Component... content) {
        this();
        setCaption(caption);
        contentWrapper.add(content);
    }

    public boolean isOpen() {
        return contentWrapper.isVisible();
    }

    public DisclosurePanel setOpen(boolean open) {
        contentWrapper.setVisible(open);
        toggle.setIcon(open ? getOpenIcon() : getClosedIcon());
        return this;
    }

    public DisclosurePanel setContent(Component... content) {
        this.contentWrapper.removeAllComponents();
        this.contentWrapper.add(content);
        return this;
    }

    @Override
    public void setCaption(String caption) {
        toggle.setCaption(caption);
    }

    public MVerticalLayout getContentWrapper() {
        return contentWrapper;
    }

    public FontIcon getClosedIcon() {
        return closedIcon;
    }

    public DisclosurePanel setClosedIcon(FontIcon closedIcon) {
        this.closedIcon = closedIcon;
        return setOpen(isOpen());
    }

    public FontIcon getOpenIcon() {
        return openIcon;
    }

    public DisclosurePanel setOpenIcon(FontIcon openIcon) {
        this.openIcon = openIcon;
        return setOpen(isOpen());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy