package org.vaadin.viritin.layouts; import java.util.Collection; import org.vaadin.viritin.fluency.ui.FluentVerticalLayout; import com.vaadin.ui.Alignment; import com.vaadin.ui.Component; import com.vaadin.ui.VerticalLayout; public class MVerticalLayout extends VerticalLayout implements FluentVerticalLayout<MVerticalLayout> { private static final long serialVersionUID = -1806208156595232451L; public MVerticalLayout() { } public MVerticalLayout(Component... components) { this(); addComponents(components); } public MVerticalLayout with(Component... components) { addComponents(components); return this; } public MVerticalLayout alignAll(Alignment alignment) { for (Component component : this) { setComponentAlignment(component, alignment); } return this; } /** * Expands selected components. Also adds to layout and sets the only sane * height for expanded components (100%) if needed. * * @param componentsToExpand components that should be expanded * @return the object itself for further configuration */ public MVerticalLayout expand(Component... componentsToExpand) { if (getHeight() < 0) { // Make full height if no other size is set withFullHeight(); } for (Component component : componentsToExpand) { if (component.getParent() != this) { addComponent(component); } setExpandRatio(component, 1); component.setHeight(100, Unit.PERCENTAGE); } return this; } public MVerticalLayout add(Component... component) { return with(component); } public MVerticalLayout add(Collection<Component> component) { return with(component.toArray(new Component[component.size()])); } public MVerticalLayout add(Component component, Alignment alignment) { return add(component).withAlign(component, alignment); } public MVerticalLayout add(Component component, float ratio) { return add(component).withExpand(component, ratio); } public MVerticalLayout add(Component component, Alignment alignment, float ratio) { return add(component).withAlign(component, alignment).withExpand(component, ratio); } public MVerticalLayout withAlign(Component component, Alignment alignment) { setComponentAlignment(component, alignment); return this; } public MVerticalLayout withExpand(Component component, float ratio) { setExpandRatio(component, ratio); return this; } public MVerticalLayout withSizeUndefined() { setSizeUndefined(); return this; } public MVerticalLayout withWidthUndefined() { setWidthUndefined(); return this; } public MVerticalLayout withHeightUndefined() { setHeightUndefined(); return this; } }