Project

General

Profile

« Previous | Next » 

Revision 3f09ac44

Added by Patrick Plitzner over 6 years ago

ref #6908 Migrate polytomous key list and graph editor

View differences:

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