/* 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 org.activiti.explorer.ui.custom; import org.activiti.explorer.ui.mainlayout.ExplorerLayout; import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Component; import com.vaadin.ui.ComponentContainer; import com.vaadin.ui.CssLayout; import com.vaadin.ui.Panel; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.Reindeer; /** * Panel that should be used for main-content. Use {@link #setDetailContainer(ComponentContainer)} * and {@link #setFixedButtons(Component)} to add main components. By default, the detailContent will * be a verticallayout which has 100% width and undefined height and margins enabled. Add components * to detail container using {@link #addDetailComponent(Component)} etc. * * @author Frederik Heremans */ public class DetailPanel extends VerticalLayout { private static final long serialVersionUID = 1L; protected Panel mainPanel; public DetailPanel() { setSizeFull(); addStyleName(ExplorerLayout.STYLE_DETAIL_PANEL); setMargin(true); CssLayout cssLayout = new CssLayout(); // Needed for rounded corners cssLayout.addStyleName(ExplorerLayout.STYLE_DETAIL_PANEL); cssLayout.setSizeFull(); super.addComponent(cssLayout); mainPanel = new Panel(); mainPanel.addStyleName(Reindeer.PANEL_LIGHT); mainPanel.setSizeFull(); cssLayout.addComponent(mainPanel); // Use default layout VerticalLayout verticalLayout = new VerticalLayout(); verticalLayout.setWidth(100, UNITS_PERCENTAGE); verticalLayout.setMargin(true); mainPanel.setContent(verticalLayout); } /** * Set the actual content of the panel. */ public void setDetailContainer(ComponentContainer component) { mainPanel.setContent(component); } /** * Set the component that is rendered in a fixed position * below the content. When content is scrolled, this component * stays visible all the time. */ public void setFixedButtons(Component component) { if(getComponentCount() == 2) { removeComponent(getComponent(1)); } addComponent(component); } @Override public void addComponent(Component c) { mainPanel.addComponent(c); } /** * Add component to detail-container. */ public void addDetailComponent(Component c) { mainPanel.addComponent(c); } @Override public void addComponent(Component c, int index) { throw new UnsupportedOperationException("Cannot add components directly. Use addDetailComponent or setDetailContainer"); } /** * Add component to detail-container. */ public void addDetailComponent(Component c, int index) { if(mainPanel.getContent() instanceof AbstractOrderedLayout) { ((AbstractOrderedLayout) mainPanel.getContent()).addComponent(c, index); } else { throw new UnsupportedOperationException("Cannot add components indexed component, detail content is not AbstractOrderedLayout"); } } /** * Set expand-ratio of detail-component */ public void setDetailExpandRatio(Component component, float ratio) { if(mainPanel.getContent() instanceof AbstractOrderedLayout) { ((AbstractOrderedLayout) mainPanel.getContent()).setExpandRatio(component, ratio); } else { throw new UnsupportedOperationException("Cannot set ExpandRatio, detail content is not AbstractOrderedLayout"); } } @Override public void addComponentAsFirst(Component c) { addComponent(c, 0); } }