Revision 3f09ac44
Added by Patrick Plitzner over 6 years ago
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/e4/AbstractGraphKeyEditorE4.java | ||
---|---|---|
3 | 3 |
*/ |
4 | 4 |
package eu.etaxonomy.taxeditor.editor.key.e4; |
5 | 5 |
|
6 |
import org.eclipse.core.runtime.IProgressMonitor; |
|
7 |
import org.eclipse.jface.action.GroupMarker; |
|
6 |
import javax.inject.Inject; |
|
7 |
|
|
8 |
import org.eclipse.e4.ui.di.Focus; |
|
9 |
import org.eclipse.e4.ui.di.Persist; |
|
10 |
import org.eclipse.e4.ui.model.application.ui.MDirtyable; |
|
11 |
import org.eclipse.e4.ui.model.application.ui.basic.MPart; |
|
12 |
import org.eclipse.e4.ui.workbench.modeling.ESelectionService; |
|
8 | 13 |
import org.eclipse.jface.action.IToolBarManager; |
9 |
import org.eclipse.jface.action.MenuManager; |
|
10 | 14 |
import org.eclipse.jface.viewers.IBaseLabelProvider; |
11 | 15 |
import org.eclipse.jface.viewers.IContentProvider; |
16 |
import org.eclipse.jface.viewers.ISelectionChangedListener; |
|
12 | 17 |
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 | 18 |
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 | 19 |
import org.eclipse.zest.core.viewers.AbstractZoomableViewer; |
26 | 20 |
import org.eclipse.zest.core.viewers.GraphViewer; |
27 | 21 |
import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart; |
28 | 22 |
import org.eclipse.zest.core.viewers.ZoomContributionViewItem; |
29 |
import org.eclipse.zest.core.widgets.ZestStyles; |
|
30 | 23 |
import org.eclipse.zest.layouts.LayoutAlgorithm; |
31 | 24 |
import org.eclipse.zest.layouts.LayoutStyles; |
32 | 25 |
import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm; |
... | ... | |
36 | 29 |
import eu.etaxonomy.cdm.model.description.IIdentificationKey; |
37 | 30 |
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; |
38 | 31 |
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; |
32 |
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput; |
|
39 | 33 |
import eu.etaxonomy.taxeditor.model.IDirtyMarkable; |
40 | 34 |
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; |
41 | 35 |
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; |
42 | 36 |
|
43 | 37 |
/** |
44 |
* @author n.hoffmann |
|
45 | 38 |
* |
39 |
* @author pplitzner |
|
40 |
* @since Sep 28, 2017 |
|
41 |
* |
|
42 |
* @param <T> |
|
46 | 43 |
*/ |
47 | 44 |
public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey> |
48 |
extends EditorPart implements IConversationEnabled,
|
|
45 |
implements IConversationEnabled, |
|
49 | 46 |
IZoomableWorkbenchPart, IPostOperationEnabled, |
50 | 47 |
IDirtyMarkable { |
51 | 48 |
|
52 |
private CdmFormFactory formFactory;
|
|
53 |
private Composite container;
|
|
49 |
protected CdmFormFactory formFactory;
|
|
50 |
protected Composite container;
|
|
54 | 51 |
protected GraphViewer viewer; |
55 | 52 |
|
56 | 53 |
private LayoutAlgorithm layoutAlgoritm; |
57 | 54 |
private ZoomContributionViewItem zoomContributionViewItem; |
58 | 55 |
|
59 |
private boolean dirty = false; |
|
60 | 56 |
private IToolBarManager toolBarManager; |
61 | 57 |
|
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 |
} |
|
58 |
private PolytomousKeyEditorInput input; |
|
74 | 59 |
|
75 |
/* |
|
76 |
* (non-Javadoc) |
|
77 |
* |
|
78 |
* @see org.eclipse.ui.part.EditorPart#doSaveAs() |
|
79 |
*/ |
|
80 |
@Override |
|
81 |
public void doSaveAs() { |
|
82 |
doSave(null); |
|
83 |
} |
|
60 |
@Inject |
|
61 |
protected ESelectionService selService; |
|
84 | 62 |
|
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 |
} |
|
63 |
@Inject |
|
64 |
private MDirtyable dirty; |
|
98 | 65 |
|
99 |
/* |
|
100 |
* (non-Javadoc) |
|
101 |
* |
|
102 |
* @see org.eclipse.ui.part.EditorPart#isDirty() |
|
103 |
*/ |
|
104 |
@Override |
|
105 |
public boolean isDirty() { |
|
106 |
return dirty; |
|
107 |
} |
|
66 |
protected ISelectionChangedListener selectionChangedListener; |
|
108 | 67 |
|
109 |
/* |
|
110 |
* (non-Javadoc) |
|
111 |
* |
|
112 |
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed() |
|
113 |
*/ |
|
114 |
@Override |
|
115 |
public boolean isSaveAsAllowed() { |
|
116 |
return false; |
|
117 |
} |
|
68 |
@Inject |
|
69 |
private MPart thisPart; |
|
118 | 70 |
|
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 |
}); |
|
71 |
@Persist |
|
72 |
public void doSave() { |
|
73 |
getConversationHolder().commit(true); |
|
74 |
setDirty(false); |
|
75 |
viewer.refresh(); |
|
160 | 76 |
} |
161 | 77 |
|
162 |
private void createToolbar() {
|
|
163 |
getToolBarManager().add(getZoomContributionViewItem());
|
|
78 |
public void init(PolytomousKeyEditorInput input) {
|
|
79 |
this.input = input;
|
|
164 | 80 |
} |
165 | 81 |
|
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); |
|
82 |
public boolean isDirty() { |
|
83 |
return dirty.isDirty(); |
|
84 |
} |
|
180 | 85 |
|
181 |
control.setMenu(menu); |
|
86 |
public PolytomousKeyEditorInput getEditorInput() { |
|
87 |
return input; |
|
88 |
} |
|
182 | 89 |
|
183 |
} |
|
90 |
//FIXME E4 migrate |
|
91 |
// private void createToolbar() { |
|
92 |
// getToolBarManager().add(getZoomContributionViewItem()); |
|
93 |
// } |
|
184 | 94 |
|
185 | 95 |
protected abstract IBaseLabelProvider getLabelProvider(); |
186 | 96 |
|
... | ... | |
193 | 103 |
*/ |
194 | 104 |
public abstract T getKey(); |
195 | 105 |
|
196 |
@Override
|
|
106 |
@Focus
|
|
197 | 107 |
public void setFocus() { |
198 |
viewer.getControl().setFocus(); |
|
108 |
if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()) { |
|
109 |
viewer.getControl().setFocus(); |
|
110 |
} |
|
199 | 111 |
} |
200 | 112 |
|
201 | 113 |
public void refresh() { |
202 | 114 |
viewer.refresh(); |
203 |
// graphViewer.applyLayout(); |
|
204 | 115 |
} |
205 | 116 |
|
206 | 117 |
@Override |
... | ... | |
213 | 124 |
return viewer; |
214 | 125 |
} |
215 | 126 |
|
216 |
private LayoutAlgorithm getLayoutAlgoritm() {
|
|
127 |
protected LayoutAlgorithm getLayoutAlgoritm() {
|
|
217 | 128 |
if (layoutAlgoritm == null) { |
218 | 129 |
// layoutAlgoritm = new CompositeLayoutAlgorithm( |
219 | 130 |
// LayoutStyles.NO_LAYOUT_NODE_RESIZING, |
... | ... | |
250 | 161 |
return true; |
251 | 162 |
} |
252 | 163 |
|
253 |
private IToolBarManager getToolBarManager() { |
|
254 |
if (toolBarManager == null) { |
|
255 |
toolBarManager = getEditorSite().getActionBars() |
|
256 |
.getToolBarManager(); |
|
257 |
} |
|
258 |
return toolBarManager; |
|
259 |
} |
|
164 |
//FIXME E4 migrate |
|
165 |
// private IToolBarManager getToolBarManager() { |
|
166 |
// if (toolBarManager == null) { |
|
167 |
// toolBarManager = getEditorSite().getActionBars() |
|
168 |
// .getToolBarManager(); |
|
169 |
// } |
|
170 |
// return toolBarManager; |
|
171 |
// } |
|
260 | 172 |
|
261 | 173 |
public void applyLayout() { |
262 | 174 |
viewer.applyLayout(); |
... | ... | |
268 | 180 |
} |
269 | 181 |
|
270 | 182 |
public void setDirty(boolean dirty) { |
271 |
this.dirty = dirty; |
|
272 |
firePropertyChange(PROP_DIRTY); |
|
183 |
this.dirty.setDirty(dirty); |
|
273 | 184 |
} |
274 | 185 |
|
275 |
/* |
|
276 |
* (non-Javadoc) |
|
277 |
* |
|
278 |
* @see |
|
279 |
* eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed( |
|
280 |
* java.lang.Object) |
|
281 |
*/ |
|
282 | 186 |
@Override |
283 | 187 |
public void changed(Object element) { |
284 | 188 |
setDirty(true); |
285 | 189 |
viewer.update(element, null); |
286 | 190 |
} |
287 | 191 |
|
288 |
/* (non-Javadoc) |
|
289 |
* @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty() |
|
290 |
*/ |
|
291 | 192 |
@Override |
292 | 193 |
public void forceDirty() { |
293 | 194 |
changed(null); |
Also available in: Unified diff
ref #6908 Migrate polytomous key list and graph editor