Project

General

Profile

Download (7.13 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.editor.key;
5

    
6
import org.eclipse.core.runtime.IProgressMonitor;
7
import org.eclipse.jface.action.GroupMarker;
8
import org.eclipse.jface.action.IToolBarManager;
9
import org.eclipse.jface.action.MenuManager;
10
import org.eclipse.jface.viewers.IBaseLabelProvider;
11
import org.eclipse.jface.viewers.IContentProvider;
12
import org.eclipse.jface.viewers.StructuredSelection;
13
import org.eclipse.swt.SWT;
14
import org.eclipse.swt.events.ControlEvent;
15
import org.eclipse.swt.events.ControlListener;
16
import org.eclipse.swt.layout.FillLayout;
17
import org.eclipse.swt.widgets.Composite;
18
import org.eclipse.swt.widgets.Control;
19
import org.eclipse.swt.widgets.Menu;
20
import org.eclipse.ui.IEditorInput;
21
import org.eclipse.ui.IEditorSite;
22
import org.eclipse.ui.IWorkbenchActionConstants;
23
import org.eclipse.ui.PartInitException;
24
import org.eclipse.ui.part.EditorPart;
25
import org.eclipse.zest.core.viewers.AbstractZoomableViewer;
26
import org.eclipse.zest.core.viewers.GraphViewer;
27
import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart;
28
import org.eclipse.zest.core.viewers.ZoomContributionViewItem;
29
import org.eclipse.zest.core.widgets.ZestStyles;
30
import org.eclipse.zest.layouts.LayoutAlgorithm;
31
import org.eclipse.zest.layouts.LayoutStyles;
32
import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm;
33

    
34
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
35
import eu.etaxonomy.cdm.model.common.CdmBase;
36
import eu.etaxonomy.cdm.model.description.IIdentificationKey;
37
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
38
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
39
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
40
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
41
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
42

    
43
/**
44
 * @author n.hoffmann
45
 *
46
 */
47
public abstract class AbstractGraphKeyEditor<T extends IIdentificationKey>
48
		extends EditorPart implements IConversationEnabled,
49
		IZoomableWorkbenchPart, IPostOperationEnabled,
50
		IDirtyMarkable {
51

    
52
	private CdmFormFactory formFactory;
53
	private Composite container;
54
	protected GraphViewer viewer;
55

    
56
	private LayoutAlgorithm layoutAlgoritm;
57
	private ZoomContributionViewItem zoomContributionViewItem;
58

    
59
	private boolean dirty = false;
60
	private IToolBarManager toolBarManager;
61

    
62
	/*
63
	 * (non-Javadoc)
64
	 *
65
	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
66
	 * IProgressMonitor)
67
	 */
68
	@Override
69
	public void doSave(IProgressMonitor monitor) {
70
		getConversationHolder().commit(true);
71
		setDirty(false);
72
		viewer.refresh();
73
	}
74

    
75
	/*
76
	 * (non-Javadoc)
77
	 *
78
	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
79
	 */
80
	@Override
81
	public void doSaveAs() {
82
		doSave(null);
83
	}
84

    
85
	/*
86
	 * (non-Javadoc)
87
	 *
88
	 * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
89
	 * org.eclipse.ui.IEditorInput)
90
	 */
91
	@Override
92
	public void init(IEditorSite site, IEditorInput input)
93
			throws PartInitException {
94
		setSite(site);
95
		setInput(input);
96
		formFactory = new CdmFormFactory(site.getShell().getDisplay());
97
	}
98

    
99
	/*
100
	 * (non-Javadoc)
101
	 *
102
	 * @see org.eclipse.ui.part.EditorPart#isDirty()
103
	 */
104
	@Override
105
	public boolean isDirty() {
106
		return dirty;
107
	}
108

    
109
	/*
110
	 * (non-Javadoc)
111
	 *
112
	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
113
	 */
114
	@Override
115
	public boolean isSaveAsAllowed() {
116
		return false;
117
	}
118

    
119
	/*
120
	 * (non-Javadoc)
121
	 *
122
	 * @see
123
	 * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
124
	 * .Composite)
125
	 */
126
	@Override
127
	public void createPartControl(Composite parent) {
128
		container = formFactory.createComposite(parent);
129

    
130
		container.setLayout(new FillLayout());
131
		viewer = new GraphViewer(container, SWT.NONE);
132
		getSite().setSelectionProvider(viewer);
133

    
134
		viewer.setContentProvider(getContentProvider());
135
		viewer.setLabelProvider(getLabelProvider());
136

    
137
		viewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
138

    
139
		viewer.setLayoutAlgorithm(getLayoutAlgoritm(), false);
140

    
141
		createMenu();
142

    
143
		createToolbar();
144

    
145
		viewer.setInput(getKey());
146

    
147
		container.addControlListener(new ControlListener() {
148

    
149
			@Override
150
			public void controlResized(ControlEvent e) {
151
				// applyLayout();
152
			}
153

    
154
			@Override
155
			public void controlMoved(ControlEvent e) {
156
				// TODO Auto-generated method stub
157

    
158
			}
159
		});
160
	}
161

    
162
	private void createToolbar() {
163
		getToolBarManager().add(getZoomContributionViewItem());
164
	}
165

    
166
	private void createMenu() {
167
		// Add context menu to tree
168
		MenuManager menuMgr = new MenuManager();
169
		menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
170

    
171
		// MenuManager zoomMenu = new MenuManager("Zoom");
172
		// zoomMenu.add(getZoomContributionViewItem());
173

    
174
		ZoomContributionViewItem zoomItem = getZoomContributionViewItem();
175
		menuMgr.add(zoomItem);
176
		getSite().registerContextMenu(menuMgr, viewer);
177

    
178
		Control control = viewer.getGraphControl();
179
		Menu menu = menuMgr.createContextMenu(control);
180

    
181
		control.setMenu(menu);
182

    
183
	}
184

    
185
	protected abstract IBaseLabelProvider getLabelProvider();
186

    
187
	protected abstract IContentProvider getContentProvider();
188

    
189
	/**
190
	 * Return the key that this editor
191
	 *
192
	 * @return
193
	 */
194
	public abstract T getKey();
195

    
196
	@Override
197
	public void setFocus() {
198
		viewer.getControl().setFocus();
199
	}
200

    
201
	public void refresh() {
202
		viewer.refresh();
203
		// graphViewer.applyLayout();
204
	}
205

    
206
	@Override
207
	public void update(CdmDataChangeMap changeEvents) {
208

    
209
	}
210

    
211
	@Override
212
	public AbstractZoomableViewer getZoomableViewer() {
213
		return viewer;
214
	}
215

    
216
	private LayoutAlgorithm getLayoutAlgoritm() {
217
		if (layoutAlgoritm == null) {
218
			// layoutAlgoritm = new CompositeLayoutAlgorithm(
219
			// LayoutStyles.NO_LAYOUT_NODE_RESIZING,
220
			// new LayoutAlgorithm[] {
221
			// new TreeLayoutAlgorithm(
222
			// LayoutStyles.NO_LAYOUT_NODE_RESIZING),
223
			// new HorizontalShift(
224
			// LayoutStyles.NO_LAYOUT_NODE_RESIZING) });
225

    
226
			layoutAlgoritm = new TreeLayoutAlgorithm(
227
					LayoutStyles.NO_LAYOUT_NODE_RESIZING);
228
			layoutAlgoritm.setEntityAspectRatio(0.5);
229
		}
230
		return layoutAlgoritm;
231
	}
232

    
233
	private ZoomContributionViewItem getZoomContributionViewItem() {
234
		if (zoomContributionViewItem == null) {
235
			zoomContributionViewItem = new ZoomContributionViewItem(this);
236
		}
237
		return new ZoomContributionViewItem(this);
238
	}
239

    
240
	@Override
241
	public boolean postOperation(CdmBase objectAffectedByOperation) {
242
		setDirty(true);
243
		refresh();
244

    
245
		if (objectAffectedByOperation instanceof PolytomousKeyNode) {
246
			viewer.setSelection(new StructuredSelection(
247
					objectAffectedByOperation), true);
248
		}
249

    
250
		return true;
251
	}
252

    
253
	private IToolBarManager getToolBarManager() {
254
		if (toolBarManager == null) {
255
			toolBarManager = getEditorSite().getActionBars()
256
					.getToolBarManager();
257
		}
258
		return toolBarManager;
259
	}
260

    
261
	public void applyLayout() {
262
		viewer.applyLayout();
263
	}
264

    
265
	@Override
266
	public boolean onComplete() {
267
		return true;
268
	}
269

    
270
	public void setDirty(boolean dirty) {
271
		this.dirty = dirty;
272
		firePropertyChange(PROP_DIRTY);
273
	}
274

    
275
	/*
276
	 * (non-Javadoc)
277
	 *
278
	 * @see
279
	 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
280
	 * java.lang.Object)
281
	 */
282
	@Override
283
	public void changed(Object element) {
284
		setDirty(true);
285
		viewer.update(element, null);
286
	}
287

    
288
	/* (non-Javadoc)
289
	 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
290
	 */
291
	@Override
292
	public void forceDirty() {
293
	    changed(null);
294
	}
295

    
296
}
(1-1/4)