Add Picto multiview and editor pinning support
diff --git a/plugins/org.eclipse.epsilon.picto/icons/newPictoView.png b/plugins/org.eclipse.epsilon.picto/icons/newPictoView.png
new file mode 100644
index 0000000..4eff4c9
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.picto/icons/newPictoView.png
Binary files differ
diff --git a/plugins/org.eclipse.epsilon.picto/icons/pin.png b/plugins/org.eclipse.epsilon.picto/icons/pin.png
new file mode 100644
index 0000000..fd0ad18
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.picto/icons/pin.png
Binary files differ
diff --git a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/PictoView.java b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/PictoView.java
index 32176e0..214a7ca 100644
--- a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/PictoView.java
+++ b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/PictoView.java
@@ -65,6 +65,7 @@
protected int[] sashFormWeights = null;
protected IEditorPart renderedEditor = null;
protected boolean locked = false;
+ protected boolean pinned = false;
protected ToggleTreeViewerAction hideTreeAction;
protected HashMap<IEditorPart, ViewTree> activeViewHistory = new HashMap<>();
protected ViewTree activeView = null;
@@ -175,7 +176,7 @@
@Override
public void partActivated(IWorkbenchPartReference partRef) {
- if (locked) return;
+ if (locked || pinned) return;
Display.getCurrent().asyncExec(() -> {
IWorkbenchPart part = partRef.getPart(false);
@@ -203,7 +204,7 @@
IEditorPart editorPart = (IEditorPart) workbenchPart;
activeViewHistory.remove(editorPart);
- if (locked) {
+ if (locked || pinned) {
if (editor == editorPart) editor = null;
return;
}
@@ -229,11 +230,14 @@
toolbar.add(new RefreshAction(this));
toolbar.add(new LockAction(this));
toolbar.add(new Separator());
+ toolbar.add(new PinAction(this));
+ toolbar.add(new NewPictoViewAction());
+ toolbar.add(new Separator());
toolbar.add(hideTreeAction);
toolbar.add(new MoveTreeAction());
toolbar.add(new Separator());
toolbar.add(new ViewContentsMenuAction(this));
-
+
IMenuManager dropDownMenu = getViewSite().getActionBars().getMenuManager();
dropDownMenu.add(new ClearViewTreeLabelProviderIconCacheAction());
dropDownMenu.add(new ToggleVerbatimSourcesAction());
@@ -603,4 +607,12 @@
return viewTreeSelectionHistory;
}
+ public boolean isPinned() {
+ return pinned;
+ }
+
+ public void setPinned(boolean pinned) {
+ this.pinned = pinned;
+ }
+
}
diff --git a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/actions/NewPictoViewAction.java b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/actions/NewPictoViewAction.java
new file mode 100644
index 0000000..156bf9d
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/actions/NewPictoViewAction.java
@@ -0,0 +1,30 @@
+package org.eclipse.epsilon.picto.actions;
+
+import org.eclipse.epsilon.picto.PictoPlugin;
+import org.eclipse.epsilon.picto.PictoView;
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+
+public class NewPictoViewAction extends Action {
+
+ protected boolean running = false;
+
+ public NewPictoViewAction() {
+ this.setText("New Picto View");
+ this.setImageDescriptor(PictoPlugin.getDefault().getImageDescriptor("icons/newPictoView.png"));
+ }
+
+ @Override
+ public void run() {
+
+ IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ try {
+ activePage.showView(PictoView.ID, Math.random() * 1000 + "", IWorkbenchPage.VIEW_ACTIVATE);
+ }
+ catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/actions/PinAction.java b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/actions/PinAction.java
new file mode 100644
index 0000000..eb97dde
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/actions/PinAction.java
@@ -0,0 +1,30 @@
+/*********************************************************************
+* Copyright (c) 2008 The University of York.
+*
+* This program and the accompanying materials are made
+* available under the terms of the Eclipse Public License 2.0
+* which is available at https://www.eclipse.org/legal/epl-2.0/
+*
+* SPDX-License-Identifier: EPL-2.0
+**********************************************************************/
+package org.eclipse.epsilon.picto.actions;
+
+import org.eclipse.epsilon.picto.PictoPlugin;
+import org.eclipse.epsilon.picto.PictoView;
+import org.eclipse.jface.action.Action;
+
+public class PinAction extends Action {
+
+ protected PictoView pictoView;
+
+ public PinAction(PictoView pictoView) {
+ super("Pin to current editor", AS_CHECK_BOX);
+ setImageDescriptor(PictoPlugin.getDefault().getImageDescriptor("icons/pin.png"));
+ this.pictoView = pictoView;
+ }
+
+ @Override
+ public void run() {
+ pictoView.setPinned(!pictoView.isPinned());
+ }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
index 7bb830a..8f860d7 100644
--- a/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
+++ b/plugins/org.eclipse.epsilon.picto/src/org/eclipse/epsilon/picto/source/EglPictoSource.java
@@ -90,8 +90,11 @@
//}
//else {
if (resource != null) {
- model = new InMemoryEmfModel("M", resource);
- ((InMemoryEmfModel) model).setExpand(true);
+ // synchronization prevents races when using multiple Picto views
+ synchronized (resource) {
+ model = new InMemoryEmfModel("M", resource);
+ ((InMemoryEmfModel) model).setExpand(true);
+ }
}
//}