package org.vaadin.viritin.layouts;
import java.util.Collection;
import org.vaadin.viritin.fluency.ui.FluentHorizontalLayout;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
public class MHorizontalLayout extends HorizontalLayout
implements FluentHorizontalLayout<MHorizontalLayout> {
private static final long serialVersionUID = 524957578263653250L;
public MHorizontalLayout() {
}
public MHorizontalLayout(Component... components) {
this();
addComponents(components);
}
public MHorizontalLayout with(Component... components) {
addComponents(components);
return this;
}
public MHorizontalLayout alignAll(Alignment alignment) {
for (Component component : this) {
setComponentAlignment(component, alignment);
}
return this;
}
/**
* Expands selected components. Also sets the only sane width for expanded
* components (100%).
*
* @param componentsToExpand the components that should be expanded
* @return the object itself for further configuration
*/
public MHorizontalLayout expand(Component... componentsToExpand) {
if (getWidth() < 0) {
// Make full height if no other size is set
withFullWidth();
}
for (Component component : componentsToExpand) {
if (component.getParent() != this) {
addComponent(component);
}
setExpandRatio(component, 1);
component.setWidth(100, Unit.PERCENTAGE);
}
return this;
}
public MHorizontalLayout add(Component... component) {
return with(component);
}
public MHorizontalLayout add(Collection<Component> component) {
return with(component.toArray(new Component[component.size()]));
}
public MHorizontalLayout add(Component component, Alignment alignment) {
return add(component).withAlign(component, alignment);
}
public MHorizontalLayout add(Component component, float ratio) {
return add(component).withExpand(component, ratio);
}
public MHorizontalLayout add(Component component, Alignment alignment, float ratio) {
return add(component).withAlign(component, alignment).withExpand(component, ratio);
}
public MHorizontalLayout withAlign(Component component, Alignment alignment) {
setComponentAlignment(component, alignment);
return this;
}
public MHorizontalLayout withExpand(Component component, float ratio) {
setExpandRatio(component, ratio);
return this;
}
/**
* Adds "spacer" to layout that expands to consume remaining space. If
* multiple spacers are added they share equally sized slot. Also tries to
* configure layout for proper settings needed for this kind of usage.
*
* @return the layout with space added
*/
public MHorizontalLayout space() {
return expand(new Label());
}
public MHorizontalLayout withSizeUndefined() {
setSizeUndefined();
return this;
}
public MHorizontalLayout withWidthUndefined() {
setWidthUndefined();
return this;
}
public MHorizontalLayout withHeightUndefined() {
setHeightUndefined();
return this;
}
}