com.hybridbpm.ui.component.dashboard.tab.GridLayoutContainer.java Source code

Java tutorial

Introduction

Here is the source code for com.hybridbpm.ui.component.dashboard.tab.GridLayoutContainer.java

Source

/*
 * Copyright (c) 2011-2015 Marat Gubaidullin. 
 *
 * This file is part of HYBRIDBPM.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 *
 */
package com.hybridbpm.ui.component.dashboard.tab;

import com.hybridbpm.core.data.dashboard.PanelDefinition;
import com.hybridbpm.core.data.dashboard.TabDefinition;
import com.hybridbpm.ui.util.HybridbpmStyle;
import com.hybridbpm.ui.HybridbpmUI;
import com.hybridbpm.ui.component.dashboard.panel.AddColumnButton;
import com.hybridbpm.ui.component.dashboard.panel.DashboardPanel;
import com.hybridbpm.ui.component.dashboard.panel.AddRowButton;
import com.vaadin.annotations.DesignRoot;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout;
import java.util.Iterator;
import java.util.Objects;

@DesignRoot
@SuppressWarnings("serial")
public final class GridLayoutContainer extends GridLayout implements Button.ClickListener {

    private TabDefinition tabDefinition;
    private final DashboardTab dashboardTab;

    public GridLayoutContainer(DashboardTab dashboardTab, TabDefinition tabDefinition) {
        this.tabDefinition = tabDefinition;
        this.dashboardTab = dashboardTab;
        addStyleName(HybridbpmStyle.OVERFLOW_HIDDEN);
        setSpacing(true);
        refreshUI();
    }

    private void addRowButton(int col, int row) {
        if (HybridbpmUI.getDeveloperMode()) {
            AddRowButton addRowButton = new AddRowButton(this);
            addComponent(addRowButton, col, row, col, row);
            setComponentAlignment(addRowButton, Alignment.MIDDLE_CENTER);
        }
    }

    private void addColumnButton(int col, int row) {
        if (HybridbpmUI.getDeveloperMode()) {
            AddColumnButton addColumnButton = new AddColumnButton(this);
            addComponent(addColumnButton, col, row, col, row);
            setComponentAlignment(addColumnButton, Alignment.MIDDLE_CENTER);
        }
    }

    public void refreshUI() {
        removeAllComponents();
        setRows(tabDefinition.getRows() * 2 + 1);
        setColumns(tabDefinition.getColumns() * 2 + 1);
        for (int i = 0; i < tabDefinition.getRows(); i++) {
            addRowButton(0, i * 2 + 1);
        }
        for (int i = 0; i < tabDefinition.getColumns(); i++) {
            addColumnButton(i * 2 + 1, 0);
        }

        for (PanelDefinition panelDefinition : HybridbpmUI.getDashboardAPI()
                .getPanelDefinitionsByTab(tabDefinition.getId())) {
            addDashboardPanel(panelDefinition, panelDefinition.getColumn() * 2 + 1,
                    panelDefinition.getRow() * 2 + 1);
        }
    }

    public void maximize(DashboardPanel dashboardPanel) {
        setSpacing(false);
        for (Component comp : this) {
            if (!Objects.equals(comp, dashboardPanel)) {
                comp.setVisible(false);
            }
            setColumnExpandRatio(this.getComponentArea(comp).getColumn1(), 0f);
            setRowExpandRatio(this.getComponentArea(comp).getRow1(), 0f);
        }
        setColumnExpandRatio(this.getComponentArea(dashboardPanel).getColumn1(), 1f);
        setRowExpandRatio(this.getComponentArea(dashboardPanel).getRow1(), 1f);
    }

    public void minimize() {
        setSpacing(true);
        for (Component comp : this) {
            comp.setVisible(true);
            if (comp instanceof DashboardPanel) {
                setColumnExpandRatio(this.getComponentArea(comp).getColumn1(), 1f);
                setRowExpandRatio(this.getComponentArea(comp).getRow1(), 1f);
            }
        }

    }

    public void addDashboardPanel(PanelDefinition panelDefinition, int col, int row) {
        DashboardPanel dashboardPanel = new DashboardPanel(dashboardTab, panelDefinition);
        addComponent(dashboardPanel, col, row, col, row);
        setColumnExpandRatio(col, 1f);
        setRowExpandRatio(row, 1f);
        addRowButton(col, row + 1);
        addColumnButton(col + 1, row);
    }

    @Override
    public void buttonClick(Button.ClickEvent event) {
        if (event.getButton() instanceof AddRowButton) {
            Area area = getComponentArea(event.getButton());
            tabDefinition = HybridbpmUI.getDashboardAPI().addRowToGridTabDefinition(tabDefinition,
                    area.getRow1() / 2);
        } else if (event.getButton() instanceof AddColumnButton) {
            Area area = getComponentArea(event.getButton());
            tabDefinition = HybridbpmUI.getDashboardAPI().addColumnToGridTabDefinition(tabDefinition,
                    area.getColumn1() / 2);
        }
        refreshUI();
    }

}