Project

General

Profile

Download (5.51 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
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.
9
*/
10

    
11
package eu.etaxonomy.taxeditor.view;
12

    
13
import org.eclipse.jface.viewers.StructuredSelection;
14
import org.eclipse.jface.viewers.Viewer;
15
import org.eclipse.swt.widgets.Composite;
16
import org.eclipse.swt.widgets.Control;
17
import org.eclipse.swt.widgets.Display;
18
import org.eclipse.ui.forms.IFormPart;
19
import org.eclipse.ui.forms.ManagedForm;
20
import org.eclipse.ui.forms.widgets.ScrolledForm;
21

    
22
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
23
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
24
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
25
import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
26
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
27
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
28
import eu.etaxonomy.taxeditor.ui.element.RootElement;
29
import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
30

    
31
/**
32
 * <p>Abstract AbstractCdmDataViewer class.</p>
33
 *
34
 * @author n.hoffmann
35
 * @created Feb 9, 2010
36
 * @version 1.0
37
 */
38
public abstract class AbstractCdmDataViewer extends Viewer implements IConversationEnabled{
39

    
40
	protected ManagedForm managedForm;
41

    
42
	protected CdmFormFactory formFactory;
43

    
44
	protected ScrolledForm scrolledForm;
45

    
46
	private final Composite body;
47

    
48
	protected RootElement rootElement;
49

    
50
	//TODO: create a super class for this?
51
	private Object input;
52

    
53
	private final AbstractCdmViewPart viewPart;
54

    
55

    
56
	/**
57
	 * <p>Constructor for AbstractCdmDataViewer.</p>
58
	 *
59
	 * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
60
	 * @param viewPart a {@link eu.etaxonomy.taxeditor.view.AbstractCdmViewPart} object.
61
	 */
62
	public AbstractCdmDataViewer(Composite parent, AbstractCdmViewPart viewPart) {
63
		this.viewPart = viewPart;
64

    
65
		managedForm = new ManagedForm(parent){
66

    
67
			/* (non-Javadoc)
68
			 * @see org.eclipse.ui.forms.ManagedForm#dirtyStateChanged()
69
			 */
70
			@Override
71
			public void dirtyStateChanged() {
72
				markViewPartDirty();
73
			}
74
		};
75

    
76
		createFormFactory();
77

    
78
		scrolledForm = managedForm.getForm();
79

    
80
		body = scrolledForm.getBody();
81

    
82
		body.setLayout(LayoutConstants.LAYOUT());
83

    
84
		rootElement = new RootElement(formFactory, body);
85
	}
86

    
87
	/**
88
	 * <p>createFormFactory</p>
89
	 */
90
	protected void createFormFactory() {
91
		if(formFactory != null){
92
			formFactory.dispose();
93
			formFactory = null;
94
		}
95
		formFactory = new CdmFormFactory(Display.getCurrent(), this);
96
	}
97

    
98
	protected void markViewPartDirty(){
99
		viewPart.changed(input);
100
	}
101

    
102

    
103
	/**
104
	 * @return
105
	 */
106
	protected AbstractCdmViewPart getViewPart() {
107
		return viewPart;
108
	}
109

    
110
	/* (non-Javadoc)
111
	 * @see org.eclipse.jface.viewers.Viewer#getControl()
112
	 */
113
	/** {@inheritDoc} */
114
	@Override
115
	public Control getControl() {
116
		if(body.isDisposed()){
117
			return null;
118
		}
119
		for(Control child : body.getChildren()){
120
			return child;
121
		}
122

    
123
		return body;
124
	}
125
	
126
	/* (non-Javadoc)
127
	 * @see org.eclipse.jface.viewers.Viewer#setInput(java.lang.Object)
128
	 */
129
	/** {@inheritDoc} */
130
	@Override
131
	public void setInput(Object input) {
132
		this.input = input;
133
		// reset selection
134
		setSelection(new StructuredSelection(input));
135
		refresh();
136
	}
137

    
138
	/* (non-Javadoc)
139
	 * @see org.eclipse.jface.viewers.Viewer#getInput()
140
	 */
141
	/** {@inheritDoc} */
142
	@Override
143
	public Object getInput() {
144
		return input;
145
	}
146

    
147
	/* (non-Javadoc)
148
	 * @see org.eclipse.jface.viewers.Viewer#refresh()
149
	 */
150
	/** {@inheritDoc} */
151
	@Override
152
	public void refresh() {
153
		showParts();
154

    
155
		managedForm.setInput(input);
156

    
157
		managedForm.refresh();
158

    
159
		managedForm.reflow(true);
160
	}
161

    
162

    
163
	/**
164
	 * <p>layout</p>
165
	 */
166
	public void layout(){
167
		body.layout();
168
	}
169

    
170
	/**
171
	 * <p>showParts</p>
172
	 */
173
	protected abstract void showParts();
174

    
175

    
176
	/**
177
	 * <p>destroySections</p>
178
	 */
179
	protected void destroySections() {
180
		for (IFormPart formPart : managedForm.getParts()){
181
			removePart((CdmSectionPart) formPart);
182
		}
183

    
184
		managedForm.setInput(null);
185

    
186
		formFactory.destroyElement(rootElement);
187

    
188
		createFormFactory();
189

    
190
		rootElement = new RootElement(formFactory, body);
191

    
192
		for(Control control : body.getChildren()){
193
			control.dispose();
194
			control = null;
195
		}
196
	}
197

    
198

    
199
	/**
200
	 * <p>setFocus</p>
201
	 */
202
	public void setFocus(){
203
		// we have to set focus to a control of this viewer
204
		// otherwise, after opening a dialog from the details, the focus will not be
205
		// given back to the details view but to the editor
206
		for(Control child : body.getChildren()){
207
			child.setFocus();
208
			break;
209
		}
210
	}
211

    
212
	/**
213
	 * <p>reflow</p>
214
	 */
215
	public void reflow(){
216
		managedForm.reflow(true);
217
	}
218

    
219
	/**
220
	 * <p>removePart</p>
221
	 *
222
	 * @param sectionPart a {@link eu.etaxonomy.taxeditor.view.detail.CdmSectionPart} object.
223
	 */
224
	protected void removePart(CdmSectionPart sectionPart){
225
		managedForm.removePart(sectionPart);
226
		formFactory.removePropertyChangeListener(sectionPart);
227
	}
228

    
229
	/**
230
	 * <p>addPart</p>
231
	 *
232
	 * @param section a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection} object.
233
	 */
234
	protected void addPart(AbstractFormSection section){
235
		CdmSectionPart sectionPart = new CdmSectionPart(section);
236
		managedForm.addPart(sectionPart);
237
		formFactory.addPropertyChangeListener(sectionPart);
238
	}
239

    
240
	/**
241
	 * <p>getConversationHolder</p>
242
	 *
243
	 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
244
	 */
245
	@Override
246
    public ConversationHolder getConversationHolder() {
247
		return viewPart.getConversationHolder();
248
	}
249

    
250
	/** {@inheritDoc} */
251
	@Override
252
    public void update(CdmDataChangeMap changeEvents) {}
253

    
254
}
(2-2/7)