/*
* Copyright 2008-2011 the original author or authors.
*
* 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.jdal.vaadin.ui.form;
import java.util.Stack;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
/**
* A FormBuilder that create form using Vertical and Horizontal layouts.
* Add components using a implicit cursor.
*
* @author Jose Luis Martin - (jlm@joseluismartin.info)
*/
public class BoxFormBuilder {
static public int SIZE_FULL = SimpleBoxFormBuilder.SIZE_FULL;
static public int SIZE_UNDEFINED = SimpleBoxFormBuilder.SIZE_UNDEFINED;
/** hold form builders */
private Stack<SimpleBoxFormBuilder> stack = new Stack<SimpleBoxFormBuilder>();
/** current form builder */
private SimpleBoxFormBuilder builder;
/** use margins */
private boolean margin = true;
private int defaultWidth;
public boolean isMargin() {
return margin;
}
public void setMargin(boolean margin) {
this.margin = margin;
}
/**
* Default Ctor
*/
public BoxFormBuilder() {
this.builder = new SimpleBoxFormBuilder();
}
public BoxFormBuilder(int rowHeight) {
this.builder = new SimpleBoxFormBuilder(rowHeight);
}
public void startBox() {
SimpleBoxFormBuilder old = builder;
stack.push(builder);
builder = new SimpleBoxFormBuilder();
builder.setDefaultWidth(this.defaultWidth);
builder.setDebug(old.isDebug());
builder.setDefaultRowHeight(old.getDefaultRowHeight());
builder.setSpacing(builder.isSpacing());
if (old.isUseTabIndex()) {
builder.setUseTabIndex(old.isUseTabIndex());
builder.setTabIndex(old.getTabIndex());
}
}
/**
* Ends a Box and add to current cursor position.
* @return the box component.
*/
public Component endBox() {
Component c = builder.getForm();
int height = builder.getFormHeight();
SimpleBoxFormBuilder old = builder;
builder = stack.pop();
builder.add(c);
builder.setHeight(height);
if (old.isUseTabIndex()) {
builder.setTabIndex(old.getTabIndex());
}
return c;
}
/**
* @param c component to add
*/
public void add(Component c) {
builder.add(c);
}
public void add(Component c, int maxWidth) {
builder.add(c, maxWidth);
}
/**
* @param name
* @param c
*/
public void add(String name, Component c) {
builder.add(name, c);
}
public void add(Component c, Alignment aligment) {
builder.add(c, aligment);
}
/**
* @param c
* @param width
* @param alignment
*/
public void add(Component c, int width, Alignment alignment) {
builder.add(c, width, alignment);
}
public void add(Component c, String label) {
builder.add(c, label);
}
public void add(Component c, String label, int width) {
builder.add(c, label, width);
}
public void add(Component c, String label, Alignment alignment) {
builder.add(c, label, alignment);
}
public void add(Component c, String label, int width, Alignment alignment) {
builder.add(c, label, width, alignment);
}
/**
* @param i
*/
public void setWidth(int i) {
builder.setWidth(i);
}
/**
*/
public void row() {
builder.row();
}
/**
* @return the form
*/
public Component getForm() {
HorizontalLayout form = (HorizontalLayout) builder.getForm();
form.setMargin(margin);
return form;
}
public void reset() {
builder.reset();
}
public void next() {
builder.next();
}
public int getHeight() {
return builder.getHeight();
}
public void setHeight(int height) {
builder.setHeight(height);
}
public void setElastic() {
setHeight(Short.MAX_VALUE);
}
/**
* @param rowHeight
*/
public void row(int rowHeight) {
builder.row(rowHeight);
}
/**
* @return default row height
*/
public int getDefaultRowHeight() {
return builder.getDefaultRowHeight();
}
/**
* @param defaultRowHeight
*/
public void setDefaultRowHeight(int defaultRowHeight) {
builder.setDefaultRowHeight(defaultRowHeight);
}
/**
* @return default space
*/
public int getDefaultSpace() {
return builder.getDefaultSpace();
}
/**
* @param defaultSpace
*/
public void setDefaultSpace(int defaultSpace) {
builder.setDefaultSpace(defaultSpace);
}
public void row(boolean rowCellSpand) {
builder.row(rowCellSpand);
}
public void row(int rowHeight, boolean rowCellSpand) {
builder.row(rowHeight, rowCellSpand);
}
public boolean isSpacing() {
return builder.isSpacing();
}
public void setSpacing(boolean spacing) {
builder.setSpacing(spacing);
}
public boolean isRowCellSpand() {
return builder.isRowCellSpand();
}
public void setRowCellSpand(boolean rowCellSpand) {
builder.setRowCellSpand(rowCellSpand);
}
public int getDefaultWidth() {
return this.defaultWidth;
}
public void setDefaultWidth(int defaultWidth) {
this.defaultWidth = defaultWidth;
builder.setDefaultWidth(defaultWidth);
}
public void addGlue() {
builder.addGlue();
}
public void addVerticalGlue() {
builder.addVerticalGlue();
}
public void addHorizontalGlue() {
builder.addHorizontalGlue();
}
public void setFixedHeight() {
builder.setFixedHeight(true);
}
public boolean isDebug() {
return builder.isDebug();
}
public void setDebug(boolean debug) {
builder.setDebug(debug);
}
public void setTabIndex(int tabIndex) {
builder.setTabIndex(tabIndex);
}
public int getTabIndex() {
return builder.getTabIndex();
}
public boolean isUseTabIndex() {
return builder.isUseTabIndex();
}
public void setUseTabIndex(boolean useTabIndex) {
builder.setUseTabIndex(useTabIndex);
}
}