/******************************************************************************* * 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); } } } }