/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.ui.forms;
import java.util.Iterator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IMemento;
import org.jboss.tools.common.model.ui.widgets.IWidgetSettings;
public class DefaultFormContainer extends AbstractFormContainer {
private Composite composite;
private IWidgetSettings settings;
public DefaultFormContainer() {
super();
}
public DefaultFormContainer(IForm form) {
super();
addForm(form);
}
public Control createControl(Composite parent, IWidgetSettings settings) {
this.settings = settings;
composite = new Composite(parent, SWT.NONE);
settings.setupControl(composite);
composite.setLayout(getLayout());
composite.setLayoutData(getLayoutData());
// create client area
for (int i=0;i<this.size();++i) {
get(i).createControl(composite, settings);
}
//reflow();
return composite;
}
public Control getControl() {
return composite;
}
// -------------------------------------
public boolean addForm(IForm form) {
if (composite != null) {
Control control = form.getControl();
if (control == null) {
control = form.createControl(this.composite, this.settings);
} else {
control.setParent(this.composite);
}
GridData gd;
gd = new GridData(GridData.FILL_BOTH);
control.setLayoutData(gd);
reflow();
}
form.setParent(this);
form.setEnabled(isEnabled());
return forms.add(form);
}
protected void reflow() {
this.composite.setRedraw(false);
this.composite.getParent().setRedraw(false);
//control.getParent().getParent().setRedraw(false);
this.composite.layout(true);
this.composite.getParent().layout(true);
//control.getParent().getParent().layout(true);
this.composite.setRedraw(true);
this.composite.getParent().setRedraw(true);
//control.getParent().getParent().setRedraw(true);
}
public void addForm(int index, IForm form) {
//form.setParent(this);
//forms.add(index, form);
}
public boolean removeForm(IForm form) {
Control control = form.getControl();
control.setParent(null);
reflow();
return forms.remove(form);
}
public IForm removeForm(int index) {
return null;
//return (IForm)forms.remove(index);
}
public void clear() {
Iterator i = forms.iterator();
IForm form;
while (i.hasNext()) {
form = (IForm)i.next();
form.dispose();
form = null;
}
forms.clear();
}
// ----------------------
public void setFocus() {
// TODO wait for IFormSelectionListener
// get focused form
}
public void dispose() {
for (int i=0;i<size();++i) get(i).dispose();
if (composite!=null && !composite.isDisposed()) composite.dispose();
composite = null;
}
public void initialize(Object model) {
for (int i=0;i<size();++i) get(i).initialize(model);
}
public void commitChanges(boolean onSave) {
for (int i=0;i<size();++i) get(i).commitChanges(onSave);
}
public boolean doGlobalAction(String actionId) {
// TODO wait for IFormSelectionListener
// get focused form
// TODO as temp notify all forms
boolean result = Boolean.FALSE.booleanValue();
Iterator i = iterator();
IForm form;
while (i.hasNext()) {
form = (IForm)i.next();
result &= form.doGlobalAction(actionId);
}
return result;
}
public void expandTo(Object object) {
for (int i=0;i<size();++i) get(i).expandTo(object);
}
public void update() {
for (int i=0;i<size();++i) get(i).update();
// if(getParent()!=null) {
// getParent().update();
// }
}
/* (non-Javadoc)
* @see org.jboss.tools.common.model.ui.forms.IForm#store(org.eclipse.ui.IMemento)
*/
public void store(IMemento memento) {
if (forms!=null && forms.size()>0) {
Iterator i = forms.iterator();
while (i.hasNext()) {
IForm form = (IForm)i.next();
IMemento formMemento = memento.getChild(form.getHeadingText());
if (formMemento==null) formMemento = memento.createChild(form.getHeadingText());
form.store(formMemento);
}
}
}
/* (non-Javadoc)
* @see org.jboss.tools.common.model.ui.forms.IForm#load(org.eclipse.ui.IMemento)
*/
public void load(IMemento memento) {
if (forms!=null && forms.size()>0) {
Iterator i = forms.iterator();
while (i.hasNext()) {
IForm form = (IForm)i.next();
IMemento formMemento = memento.getChild(form.getHeadingText());
if (formMemento==null) formMemento = memento.createChild(form.getHeadingText());
form.load(formMemento);
}
}
}
}