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
.apache
.log4j
.Logger
;
14 import org
.eclipse
.jface
.util
.IPropertyChangeListener
;
15 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
16 import org
.eclipse
.jface
.viewers
.ISelectionProvider
;
17 import org
.eclipse
.jface
.viewers
.StructuredSelection
;
18 import org
.eclipse
.jface
.viewers
.Viewer
;
19 import org
.eclipse
.swt
.widgets
.Composite
;
20 import org
.eclipse
.swt
.widgets
.Control
;
21 import org
.eclipse
.swt
.widgets
.Display
;
22 import org
.eclipse
.ui
.forms
.IFormPart
;
23 import org
.eclipse
.ui
.forms
.ManagedForm
;
24 import org
.eclipse
.ui
.forms
.events
.IExpansionListener
;
25 import org
.eclipse
.ui
.forms
.widgets
.ScrolledForm
;
27 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
28 import eu
.etaxonomy
.cdm
.api
.conversation
.IConversationEnabled
;
29 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.CdmDataChangeMap
;
30 import eu
.etaxonomy
.taxeditor
.forms
.AbstractFormSection
;
31 import eu
.etaxonomy
.taxeditor
.forms
.CdmFormFactory
;
32 import eu
.etaxonomy
.taxeditor
.forms
.RootElement
;
36 * @created Feb 9, 2010
39 public abstract class AbstractCdmDataViewer
extends Viewer
implements IPropertyChangeListener
, ISelectionProvider
, IConversationEnabled
{
40 private static final Logger logger
= Logger
41 .getLogger(AbstractCdmDataViewer
.class);
43 protected ManagedForm managedForm
;
45 protected CdmFormFactory formFactory
;
47 protected ScrolledForm scrolledForm
;
49 private Composite body
;
51 protected RootElement rootElement
;
55 private AbstractCdmViewPart viewPart
;
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() {
78 formFactory
.addPropertyChangeListener(this);
80 scrolledForm
= managedForm
.getForm();
82 body
= scrolledForm
.getBody();
84 body
.setLayout(CdmFormFactory
.LAYOUT());
86 rootElement
= new RootElement(formFactory
, body
);
89 protected void createFormFactory() {
90 if(formFactory
!= null){
91 formFactory
.dispose();
94 formFactory
= new CdmFormFactory(Display
.getCurrent(), this);
97 private void markViewPartDirty(){
98 viewPart
.dirtyStateChanged();
103 * @see org.eclipse.jface.viewers.Viewer#getControl()
106 public Control
getControl() {
107 for(Control child
: body
.getChildren()){
115 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
118 public void setInput(Object input
) {
121 setSelection(new StructuredSelection(input
));
126 * @see org.eclipse.jface.viewers.Viewer#getInput()
129 public Object
getInput() {
134 * @see org.eclipse.jface.viewers.Viewer#refresh()
137 public void refresh() {
140 managedForm
.setInput(input
);
142 managedForm
.refresh();
144 managedForm
.reflow(true);
147 public void layout(){
151 protected abstract void showParts();
154 protected void destroySections() {
155 for (IFormPart formPart
: managedForm
.getParts()){
156 removePart((CdmSectionPart
) formPart
);
159 managedForm
.setInput(null);
161 formFactory
.destroyElement(rootElement
);
165 rootElement
= new RootElement(formFactory
, body
);
167 for(Control control
: body
.getChildren()){
174 public void setFocus(){
175 // we have to set focus to a control of this viewer
176 // otherwise, after opening a dialog from the details, the focus will not be
177 // given back to the details view but to the editor
178 for(Control child
: body
.getChildren()){
184 public void reflow(){
185 managedForm
.reflow(true);
189 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
191 public void propertyChange(PropertyChangeEvent event
) {
192 logger
.warn("Property changed: " + event
);
196 protected void removePart(CdmSectionPart sectionPart
){
197 managedForm
.removePart(sectionPart
);
198 formFactory
.removePropertyChangeListener(sectionPart
);
201 protected void addPart(AbstractFormSection section
){
202 CdmSectionPart sectionPart
= new CdmSectionPart(section
);
203 managedForm
.addPart(sectionPart
);
204 formFactory
.addPropertyChangeListener(sectionPart
);
207 public ConversationHolder
getConversationHolder() {
208 return viewPart
.getConversationHolder();
211 public void update(CdmDataChangeMap changeEvents
) {}