package org.aperteworkflow.util.vaadin.ui; import com.vaadin.ui.Alignment; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import java.util.Iterator; /** * @author amichalak@bluesoft.net.pl */ public class AligningHorizontalLayout extends HorizontalLayout { private Alignment alignment; private boolean alwaysCalculateExpandRatios = false; public AligningHorizontalLayout(Alignment alignment, boolean alwaysCalculateExpandRatios) { this.alignment = alignment; this.alwaysCalculateExpandRatios = alwaysCalculateExpandRatios; setSpacing(true); } public AligningHorizontalLayout(Alignment alignment, Component... components) { this.alignment = alignment; setSpacing(true); addComponents(components); } public void addComponents(Component[] components) { if (components != null && components.length > 0) { boolean current = alwaysCalculateExpandRatios; alwaysCalculateExpandRatios = false; for (Component c : components) { addComponent(c); } alwaysCalculateExpandRatios = current; } recalculateExpandRatios(); } @Override public void addComponent(Component c) { super.addComponent(c); setComponentAlignment(c, alignment); if (alwaysCalculateExpandRatios) { recalculateExpandRatios(); } } @Override public void addComponentAsFirst(Component c) { super.addComponentAsFirst(c); setComponentAlignment(c, alignment); if (alwaysCalculateExpandRatios) { recalculateExpandRatios(); } } public void recalculateExpandRatios() { for (Iterator<Component> it = getComponentIterator(); it.hasNext(); ) { setExpandRatio(it.next(), 0.0f); } if (getComponentCount() > 0) { if (alignment.isLeft()) { setExpandRatio(getComponent(getComponentCount() - 1), 1.0f); } else if (alignment.isRight()) { setExpandRatio(getComponent(0), 1.0f); } } } }