/*
* 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.chart.configuration;
import com.hybridbpm.ui.component.chart.AbstractChart;
import com.hybridbpm.ui.component.chart.util.DiagrammeChartType;
import com.hybridbpm.core.data.chart.DiagrammePreference;
import com.hybridbpm.core.data.chart.DiagrammePreferenceValue;
import static com.hybridbpm.ui.component.chart.util.DiagrammeUtil.getPreferenceValue;
import com.vaadin.data.fieldgroup.BeanFieldGroup;
import com.vaadin.server.FontAwesome;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.VerticalLayout;
import com.hybridbpm.ui.util.Translate;
/**
* @author mgubaidullin
*/
@SuppressWarnings("serial")
public class LookAndFeelLayout extends PreferencesLayoutTemplate {
private AbstractChart chart;
private PreferencesLayoutTemplate colorLayout;
private final Button btnPreview = new Button(Translate.getMessage("preview"));
private final HorizontalSplitPanel splitLayout = new HorizontalSplitPanel();
private final VerticalLayout chartSplit = new VerticalLayout();
private final VerticalLayout chartContainer = new VerticalLayout();
private final VerticalLayout colourContainer = new VerticalLayout();
public LookAndFeelLayout(BeanFieldGroup<DiagrammePreference> preferences) {
super(preferences);
addComponent(splitLayout);
chartSplit.addComponent(chartContainer);
chartSplit.addComponent(btnPreview);
btnPreview.setIcon(FontAwesome.PLAY);
chartSplit.setComponentAlignment(chartContainer, Alignment.MIDDLE_CENTER);
chartSplit.setExpandRatio(chartContainer, 1f);
chartSplit.setSizeFull();
colourContainer.setSizeFull();
splitLayout.setSizeFull();
splitLayout.addComponent(chartSplit);
splitLayout.setSplitPosition(70f);
splitLayout.addComponent(colourContainer);
bindHandlers();
}
/**
* Attaches listeners to ui elements
*/
private void bindHandlers() {
btnPreview.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent event) {
rebuildChart();
}
});
}
@Override
public void bindConfigurationValues() {
super.bindConfigurationValues();
if (colorLayout != null) {
colorLayout.bindConfigurationValues();
}
}
@Override
public void unbindConfigurationValues() {
super.unbindConfigurationValues();
if (colorLayout != null) {
colorLayout.unbindConfigurationValues();
}
}
/**
* Rebuilds the whole chart.
*/
public void rebuildChart() {
chartContainer.removeAllComponents();
final BeanFieldGroup<DiagrammePreference> preference = preferences;
DiagrammeChartType chartType = getPreferenceValue(DiagrammePreference.CHART_TYPE, preference);
DiagrammePreferenceValue secondFieldValue = getPreferenceValue(DiagrammePreference.SECOND_COLUMN_FIELD, preference);
boolean groupingOn = secondFieldValue != null;
if (chartType != null) {
// Container container = chartLayout.getContainerData().getContainer();
// chart = chartType.createChart(container, groupingOn);
//
// // bind the new one
// chart.bind(preference);
//
// chart.render();
// chartContainer.addComponent(chart.drawChart());
}
}
@Override
public void commit() {
}
@Override
public void updateComboboxes() {
if (colorLayout != null) {
colorLayout.updateComboboxes();
}
}
public void showColorLayout(DiagrammeChartType chartType) {
colourContainer.removeAllComponents();
if (colorLayout != null) {
colorLayout.unbindConfigurationValues();
}
colorLayout = chartType.getColorLayout(preferences);
colorLayout.bindConfigurationValues();
colourContainer.addComponent(colorLayout);
}
public void renderChart() {
if (chart != null) {
// rebind the chart to update bands
chart.bind(preferences);
chart.render();
chart.drawChart();
}
}
}