3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.view
;
13 import org
.eclipse
.jface
.viewers
.ISelectionProvider
;
14 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
15 import org
.eclipse
.jface
.viewers
.Viewer
;
16 import org
.eclipse
.swt
.widgets
.Composite
;
17 import org
.eclipse
.swt
.widgets
.Control
;
18 import org
.eclipse
.swt
.widgets
.Display
;
19 import org
.eclipse
.ui
.forms
.IFormPart
;
20 import org
.eclipse
.ui
.forms
.ManagedForm
;
21 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
23 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
24 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
25 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
26 import eu
.etaxonomy
.taxeditor
.ui
.forms
.AbstractFormSection
;
27 import eu
.etaxonomy
.taxeditor
.ui
.forms
.CdmFormFactory
;
28 import eu
.etaxonomy
.taxeditor
.ui
.forms
.RootElement
;
29 import eu
.etaxonomy
.taxeditor
.view
.detail
.CdmSectionPart
;
32 * <p>Abstract AbstractCdmDataViewer class.</p>
35 * @created Feb 9, 2010
38 public abstract class AbstractCdmDataViewer
extends Viewer
implements ISelectionProvider
, IConversationEnabled
{
40 protected ManagedForm managedForm
;
42 protected CdmFormFactory formFactory
;
44 protected ScrolledForm scrolledForm
;
46 private Composite body
;
48 protected RootElement rootElement
;
52 private AbstractCdmViewPart viewPart
;
56 * <p>Constructor for AbstractCdmDataViewer.</p>
58 * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
59 * @param viewPart a {@link eu.etaxonomy.taxeditor.view.AbstractCdmViewPart} object.
61 public AbstractCdmDataViewer(Composite parent
, AbstractCdmViewPart viewPart
) {
62 this.viewPart
= viewPart
;
64 managedForm
= new ManagedForm(parent
){
67 * @see org.eclipse.ui.forms.ManagedForm#dirtyStateChanged()
70 public void dirtyStateChanged() {
77 scrolledForm
= managedForm
.getForm();
79 body
= scrolledForm
.getBody();
81 body
.setLayout(CdmFormFactory
.LAYOUT());
83 rootElement
= new RootElement(formFactory
, body
);
87 * <p>createFormFactory</p>
89 protected void createFormFactory() {
90 if(formFactory
!= null){
91 formFactory
.dispose();
94 formFactory
= new CdmFormFactory(Display
.getCurrent(), this);
97 protected void markViewPartDirty(){
98 viewPart
.changed(input
);
105 protected AbstractCdmViewPart
getViewPart() {
110 * @see org.eclipse.jface.viewers.Viewer#getControl()
114 public Control
getControl() {
115 for(Control child
: body
.getChildren()){
123 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
127 public void setInput(Object input
) {
130 setSelection(new StructuredSelection(input
));
135 * @see org.eclipse.jface.viewers.Viewer#getInput()
139 public Object
getInput() {
144 * @see org.eclipse.jface.viewers.Viewer#refresh()
148 public void refresh() {
151 managedForm
.setInput(input
);
153 managedForm
.refresh();
155 managedForm
.reflow(true);
162 public void layout(){
169 protected abstract void showParts();
173 * <p>destroySections</p>
175 protected void destroySections() {
176 for (IFormPart formPart
: managedForm
.getParts()){
177 removePart((CdmSectionPart
) formPart
);
180 managedForm
.setInput(null);
182 formFactory
.destroyElement(rootElement
);
186 rootElement
= new RootElement(formFactory
, body
);
188 for(Control control
: body
.getChildren()){
198 public void setFocus(){
199 // we have to set focus to a control of this viewer
200 // otherwise, after opening a dialog from the details, the focus will not be
201 // given back to the details view but to the editor
202 for(Control child
: body
.getChildren()){
211 public void reflow(){
212 managedForm
.reflow(true);
218 * @param sectionPart a {@link eu.etaxonomy.taxeditor.view.detail.CdmSectionPart} object.
220 protected void removePart(CdmSectionPart sectionPart
){
221 managedForm
.removePart(sectionPart
);
222 formFactory
.removePropertyChangeListener(sectionPart
);
228 * @param section a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection} object.
230 protected void addPart(AbstractFormSection section
){
231 CdmSectionPart sectionPart
= new CdmSectionPart(section
);
232 managedForm
.addPart(sectionPart
);
233 formFactory
.addPropertyChangeListener(sectionPart
);
237 * <p>getConversationHolder</p>
239 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
241 public ConversationHolder
getConversationHolder() {
242 return viewPart
.getConversationHolder();
246 public void update(CdmDataChangeMap changeEvents
) {}