*/
package eu.etaxonomy.taxeditor.editor.key.e4;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.action.GroupMarker;
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.di.Persist;
+import org.eclipse.e4.ui.model.application.ui.MDirtyable;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.events.ControlListener;
-import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.part.EditorPart;
import org.eclipse.zest.core.viewers.AbstractZoomableViewer;
import org.eclipse.zest.core.viewers.GraphViewer;
import org.eclipse.zest.core.viewers.IZoomableWorkbenchPart;
import org.eclipse.zest.core.viewers.ZoomContributionViewItem;
-import org.eclipse.zest.core.widgets.ZestStyles;
import org.eclipse.zest.layouts.LayoutAlgorithm;
import org.eclipse.zest.layouts.LayoutStyles;
import org.eclipse.zest.layouts.algorithms.TreeLayoutAlgorithm;
import eu.etaxonomy.cdm.model.description.IIdentificationKey;
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
/**
- * @author n.hoffmann
*
+ * @author pplitzner
+ * @since Sep 28, 2017
+ *
+ * @param <T>
*/
public abstract class AbstractGraphKeyEditorE4<T extends IIdentificationKey>
- extends EditorPart implements IConversationEnabled,
+implements IConversationEnabled,
IZoomableWorkbenchPart, IPostOperationEnabled,
IDirtyMarkable {
- private CdmFormFactory formFactory;
- private Composite container;
+ protected CdmFormFactory formFactory;
+ protected Composite container;
protected GraphViewer viewer;
private LayoutAlgorithm layoutAlgoritm;
private ZoomContributionViewItem zoomContributionViewItem;
- private boolean dirty = false;
private IToolBarManager toolBarManager;
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
- * IProgressMonitor)
- */
- @Override
- public void doSave(IProgressMonitor monitor) {
- getConversationHolder().commit(true);
- setDirty(false);
- viewer.refresh();
- }
+ private PolytomousKeyEditorInput input;
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.part.EditorPart#doSaveAs()
- */
- @Override
- public void doSaveAs() {
- doSave(null);
- }
+ @Inject
+ protected ESelectionService selService;
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
- * org.eclipse.ui.IEditorInput)
- */
- @Override
- public void init(IEditorSite site, IEditorInput input)
- throws PartInitException {
- setSite(site);
- setInput(input);
- formFactory = new CdmFormFactory(site.getShell().getDisplay());
- }
+ @Inject
+ private MDirtyable dirty;
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.part.EditorPart#isDirty()
- */
- @Override
- public boolean isDirty() {
- return dirty;
- }
+ protected ISelectionChangedListener selectionChangedListener;
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
- */
- @Override
- public boolean isSaveAsAllowed() {
- return false;
- }
+ @Inject
+ private MPart thisPart;
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets
- * .Composite)
- */
- @Override
- public void createPartControl(Composite parent) {
- container = formFactory.createComposite(parent);
-
- container.setLayout(new FillLayout());
- viewer = new GraphViewer(container, SWT.NONE);
- getSite().setSelectionProvider(viewer);
-
- viewer.setContentProvider(getContentProvider());
- viewer.setLabelProvider(getLabelProvider());
-
- viewer.setConnectionStyle(ZestStyles.CONNECTIONS_DIRECTED);
-
- viewer.setLayoutAlgorithm(getLayoutAlgoritm(), false);
-
- createMenu();
-
- createToolbar();
-
- viewer.setInput(getKey());
-
- container.addControlListener(new ControlListener() {
-
- @Override
- public void controlResized(ControlEvent e) {
- // applyLayout();
- }
-
- @Override
- public void controlMoved(ControlEvent e) {
- // TODO Auto-generated method stub
-
- }
- });
+ @Persist
+ public void doSave() {
+ getConversationHolder().commit(true);
+ setDirty(false);
+ viewer.refresh();
}
- private void createToolbar() {
- getToolBarManager().add(getZoomContributionViewItem());
+ public void init(PolytomousKeyEditorInput input) {
+ this.input = input;
}
- private void createMenu() {
- // Add context menu to tree
- MenuManager menuMgr = new MenuManager();
- menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
-
- // MenuManager zoomMenu = new MenuManager("Zoom");
- // zoomMenu.add(getZoomContributionViewItem());
-
- ZoomContributionViewItem zoomItem = getZoomContributionViewItem();
- menuMgr.add(zoomItem);
- getSite().registerContextMenu(menuMgr, viewer);
-
- Control control = viewer.getGraphControl();
- Menu menu = menuMgr.createContextMenu(control);
+ public boolean isDirty() {
+ return dirty.isDirty();
+ }
- control.setMenu(menu);
+ public PolytomousKeyEditorInput getEditorInput() {
+ return input;
+ }
- }
+ //FIXME E4 migrate
+// private void createToolbar() {
+// getToolBarManager().add(getZoomContributionViewItem());
+// }
protected abstract IBaseLabelProvider getLabelProvider();
*/
public abstract T getKey();
- @Override
+ @Focus
public void setFocus() {
- viewer.getControl().setFocus();
+ if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()) {
+ viewer.getControl().setFocus();
+ }
}
public void refresh() {
viewer.refresh();
- // graphViewer.applyLayout();
}
@Override
return viewer;
}
- private LayoutAlgorithm getLayoutAlgoritm() {
+ protected LayoutAlgorithm getLayoutAlgoritm() {
if (layoutAlgoritm == null) {
// layoutAlgoritm = new CompositeLayoutAlgorithm(
// LayoutStyles.NO_LAYOUT_NODE_RESIZING,
return true;
}
- private IToolBarManager getToolBarManager() {
- if (toolBarManager == null) {
- toolBarManager = getEditorSite().getActionBars()
- .getToolBarManager();
- }
- return toolBarManager;
- }
+ //FIXME E4 migrate
+// private IToolBarManager getToolBarManager() {
+// if (toolBarManager == null) {
+// toolBarManager = getEditorSite().getActionBars()
+// .getToolBarManager();
+// }
+// return toolBarManager;
+// }
public void applyLayout() {
viewer.applyLayout();
}
public void setDirty(boolean dirty) {
- this.dirty = dirty;
- firePropertyChange(PROP_DIRTY);
+ this.dirty.setDirty(dirty);
}
- /*
- * (non-Javadoc)
- *
- * @see
- * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
- * java.lang.Object)
- */
@Override
public void changed(Object element) {
setDirty(true);
viewer.update(element, null);
}
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
- */
@Override
public void forceDirty() {
changed(null);