package au.com.langdale.ui.builder;
import java.util.ArrayList;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
public class ArrayComposite extends ScrolledComposite {
private Assembly assembly;
private Template template;
private ArrayList elements = new ArrayList();
private ArrayList models = new ArrayList();
public ArrayComposite(Composite parent, int style, Assembly assembly, Template template) {
super(parent, style);
this.assembly = assembly;
this.template = template;
setExpandHorizontal(true);
setExpandVertical(true);
Composite content = assembly.getToolkit().createComposite(this);
GridLayoutFactory.swtDefaults().numColumns(1).applyTo(content);
setContent(content);
}
public void setSize(int size) {
if( size != elements.size()) {
Composite content = (Composite) getContent();
elements.ensureCapacity(size);
models.ensureCapacity(size);
while( size < elements.size()) {
Assembly sub = (Assembly) elements.remove(size);
sub.dispose();
models.remove(size);
}
while( size > elements.size()) {
Assembly sub = assembly.createSubAssembly(content, template);
elements.add(sub);
Control root = sub.getRoot();
LayoutGenerator.defaultsFor(root).span(1, 1).applyTo(root);
models.add(null);
}
}
}
public Assembly getAssembly(int ix) {
return (Assembly) elements.get(ix);
}
public Object get(int ix) {
return models.get(ix);
}
public Object set(int ix, Object model) {
return models.set(ix, model);
}
public int size() {
return elements.size();
}
}