// $Id$
/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
package eu.etaxonomy.taxeditor.view;
-import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Composite;
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
-import eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection;
-import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
-import eu.etaxonomy.taxeditor.ui.forms.RootElement;
+import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
+import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
+import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
+import eu.etaxonomy.taxeditor.ui.element.RootElement;
import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
/**
* @created Feb 9, 2010
* @version 1.0
*/
-public abstract class AbstractCdmDataViewer extends Viewer implements ISelectionProvider, IConversationEnabled{
-
+public abstract class AbstractCdmDataViewer extends Viewer implements IConversationEnabled{
+
protected ManagedForm managedForm;
protected CdmFormFactory formFactory;
protected ScrolledForm scrolledForm;
-
- private Composite body;
-
+
+ private final Composite body;
+
protected RootElement rootElement;
+ //TODO: create a super class for this?
private Object input;
- private AbstractCdmViewPart viewPart;
+ private final AbstractCdmViewPart viewPart;
+
-
/**
* <p>Constructor for AbstractCdmDataViewer.</p>
*
*/
public AbstractCdmDataViewer(Composite parent, AbstractCdmViewPart viewPart) {
this.viewPart = viewPart;
-
+
managedForm = new ManagedForm(parent){
-
+
/* (non-Javadoc)
* @see org.eclipse.ui.forms.ManagedForm#dirtyStateChanged()
*/
markViewPartDirty();
}
};
-
+
createFormFactory();
-
+
scrolledForm = managedForm.getForm();
-
+
body = scrolledForm.getBody();
-
- body.setLayout(CdmFormFactory.LAYOUT());
-
+
+ body.setLayout(LayoutConstants.LAYOUT());
+
rootElement = new RootElement(formFactory, body);
}
-
+
/**
* <p>createFormFactory</p>
*/
protected void markViewPartDirty(){
viewPart.changed(input);
}
-
-
+
+
/**
* @return
*/
/** {@inheritDoc} */
@Override
public Control getControl() {
+ if(body.isDisposed()){
+ return null;
+ }
for(Control child : body.getChildren()){
return child;
}
-
+
return body;
}
/** {@inheritDoc} */
@Override
public void setInput(Object input) {
- this.input = input;
+ this.input = input;
// reset selection
setSelection(new StructuredSelection(input));
refresh();
}
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.Viewer#getInput()
*/
public Object getInput() {
return input;
}
-
+
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.Viewer#refresh()
*/
@Override
public void refresh() {
showParts();
-
+
managedForm.setInput(input);
-
+
managedForm.refresh();
-
+
managedForm.reflow(true);
}
-
+
/**
* <p>layout</p>
*/
public void layout(){
body.layout();
}
-
+
/**
* <p>showParts</p>
*/
protected abstract void showParts();
-
-
+
+
/**
* <p>destroySections</p>
*/
- protected void destroySections() {
+ protected void destroySections() {
for (IFormPart formPart : managedForm.getParts()){
removePart((CdmSectionPart) formPart);
- }
-
+ }
+
managedForm.setInput(null);
-
+
formFactory.destroyElement(rootElement);
-
+
createFormFactory();
-
+
rootElement = new RootElement(formFactory, body);
-
+
for(Control control : body.getChildren()){
control.dispose();
control = null;
}
}
-
-
+
+
/**
* <p>setFocus</p>
*/
break;
}
}
-
+
/**
* <p>reflow</p>
*/
public void reflow(){
managedForm.reflow(true);
}
-
+
/**
* <p>removePart</p>
*
managedForm.removePart(sectionPart);
formFactory.removePropertyChangeListener(sectionPart);
}
-
+
/**
* <p>addPart</p>
*
- * @param section a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection} object.
+ * @param section a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection} object.
*/
protected void addPart(AbstractFormSection section){
CdmSectionPart sectionPart = new CdmSectionPart(section);
managedForm.addPart(sectionPart);
formFactory.addPropertyChangeListener(sectionPart);
}
-
+
/**
* <p>getConversationHolder</p>
*
* @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
*/
- public ConversationHolder getConversationHolder() {
+ @Override
+ public ConversationHolder getConversationHolder() {
return viewPart.getConversationHolder();
}
-
+
/** {@inheritDoc} */
- public void update(CdmDataChangeMap changeEvents) {}
+ @Override
+ public void update(CdmDataChangeMap changeEvents) {}
}