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
.editor
.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
.editor
.view
.detail
.CdmSectionPart
;
27 import eu
.etaxonomy
.taxeditor
.forms
.AbstractFormSection
;
28 import eu
.etaxonomy
.taxeditor
.forms
.CdmFormFactory
;
29 import eu
.etaxonomy
.taxeditor
.forms
.RootElement
;
30 import eu
.etaxonomy
.taxeditor
.model
.AbstractCdmViewPart
;
33 * <p>Abstract AbstractCdmDataViewer class.</p>
36 * @created Feb 9, 2010
39 public abstract class AbstractCdmDataViewer
extends Viewer
implements ISelectionProvider
, IConversationEnabled
{
41 protected ManagedForm managedForm
;
43 protected CdmFormFactory formFactory
;
45 protected ScrolledForm scrolledForm
;
47 private Composite body
;
49 protected RootElement rootElement
;
53 private AbstractCdmViewPart viewPart
;
57 * <p>Constructor for AbstractCdmDataViewer.</p>
59 * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
60 * @param viewPart a {@link eu.etaxonomy.taxeditor.model.AbstractCdmViewPart} object.
62 public AbstractCdmDataViewer(Composite parent
, AbstractCdmViewPart viewPart
) {
63 this.viewPart
= viewPart
;
65 managedForm
= new ManagedForm(parent
){
68 * @see org.eclipse.ui.forms.ManagedForm#dirtyStateChanged()
71 public void dirtyStateChanged() {
78 scrolledForm
= managedForm
.getForm();
80 body
= scrolledForm
.getBody();
82 body
.setLayout(CdmFormFactory
.LAYOUT());
84 rootElement
= new RootElement(formFactory
, body
);
88 * <p>createFormFactory</p>
90 protected void createFormFactory() {
91 if(formFactory
!= null){
92 formFactory
.dispose();
95 formFactory
= new CdmFormFactory(Display
.getCurrent(), this);
98 private void markViewPartDirty(){
99 viewPart
.changed(input
);
104 * @see org.eclipse.jface.viewers.Viewer#getControl()
108 public Control
getControl() {
109 for(Control child
: body
.getChildren()){
117 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
121 public void setInput(Object input
) {
124 setSelection(new StructuredSelection(input
));
129 * @see org.eclipse.jface.viewers.Viewer#getInput()
133 public Object
getInput() {
138 * @see org.eclipse.jface.viewers.Viewer#refresh()
142 public void refresh() {
145 managedForm
.setInput(input
);
147 managedForm
.refresh();
149 managedForm
.reflow(true);
156 public void layout(){
163 protected abstract void showParts();
167 * <p>destroySections</p>
169 protected void destroySections() {
170 for (IFormPart formPart
: managedForm
.getParts()){
171 removePart((CdmSectionPart
) formPart
);
174 managedForm
.setInput(null);
176 formFactory
.destroyElement(rootElement
);
180 rootElement
= new RootElement(formFactory
, body
);
182 for(Control control
: body
.getChildren()){
192 public void setFocus(){
193 // we have to set focus to a control of this viewer
194 // otherwise, after opening a dialog from the details, the focus will not be
195 // given back to the details view but to the editor
196 for(Control child
: body
.getChildren()){
205 public void reflow(){
206 managedForm
.reflow(true);
212 * @param sectionPart a {@link eu.etaxonomy.taxeditor.editor.view.detail.CdmSectionPart} object.
214 protected void removePart(CdmSectionPart sectionPart
){
215 managedForm
.removePart(sectionPart
);
216 formFactory
.removePropertyChangeListener(sectionPart
);
222 * @param section a {@link eu.etaxonomy.taxeditor.forms.AbstractFormSection} object.
224 protected void addPart(AbstractFormSection section
){
225 CdmSectionPart sectionPart
= new CdmSectionPart(section
);
226 managedForm
.addPart(sectionPart
);
227 formFactory
.addPropertyChangeListener(sectionPart
);
231 * <p>getConversationHolder</p>
233 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
235 public ConversationHolder
getConversationHolder() {
236 return viewPart
.getConversationHolder();
240 public void update(CdmDataChangeMap changeEvents
) {}