472281: All saveable views should set the viewer as a selection provider
Change-Id: I2b0ecd358d7bd8b51fc501b968707441c9f0cd96
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=472281
diff --git a/examples/org.eclipse.emf.parsley.examples.mail.unifiedfoldersview/src/org/eclipse/emf/parsley/examples/mail/unifiedfoldersview/UnifiedFoldersView.java b/examples/org.eclipse.emf.parsley.examples.mail.unifiedfoldersview/src/org/eclipse/emf/parsley/examples/mail/unifiedfoldersview/UnifiedFoldersView.java
index 019d9e8..5b64c11 100644
--- a/examples/org.eclipse.emf.parsley.examples.mail.unifiedfoldersview/src/org/eclipse/emf/parsley/examples/mail/unifiedfoldersview/UnifiedFoldersView.java
+++ b/examples/org.eclipse.emf.parsley.examples.mail.unifiedfoldersview/src/org/eclipse/emf/parsley/examples/mail/unifiedfoldersview/UnifiedFoldersView.java
@@ -21,7 +21,7 @@
protected void mostRecentCommandAffectsResource(Command mostRecentCommand) {
super.mostRecentCommandAffectsResource(mostRecentCommand);
// if a child changes the parent is not refreshed by default
- getTreeViewer().refresh();
- getTreeViewer().expandAll();
+ getViewer().refresh();
+ getViewer().expandAll();
}
}
diff --git a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/StructuredViewerAwareComposite.java b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/StructuredViewerAwareComposite.java
deleted file mode 100644
index 699e3ff..0000000
--- a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/StructuredViewerAwareComposite.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Lorenzo Bettini - initial API and implementation
- *******************************************************************************/
-package org.eclipse.emf.parsley.composite;
-
-import org.eclipse.jface.viewers.StructuredViewer;
-import org.eclipse.swt.widgets.Composite;
-
-public class StructuredViewerAwareComposite extends Composite implements IStructuredViewerAware {
-
- private StructuredViewer viewer;
-
- public StructuredViewerAwareComposite(Composite parent, int style) {
- super(parent, style);
- }
-
- @Override
- public void setViewer(StructuredViewer viewer) {
- this.viewer = viewer;
- }
-
- @Override
- public StructuredViewer getViewer() {
- return viewer;
- }
-
-}
diff --git a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/menus/ViewerContextMenuHelper.java b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/menus/ViewerContextMenuHelper.java
index 8214297..0b08462 100644
--- a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/menus/ViewerContextMenuHelper.java
+++ b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/menus/ViewerContextMenuHelper.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) and others.
+ * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IWorkbenchPart;
@@ -27,6 +28,8 @@
import com.google.inject.Provider;
/**
+ * Provides utility methods for adding context menu to a viewer.
+ *
* @author Lorenzo Bettini - Initial contribution and API
* @author Francesco Guidieri - refactoring for
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=455727
@@ -50,7 +53,7 @@
}
/**
- * Adds a context menu to the passed {@link StructuredViewer}.
+ * Adds a context menu to the passed {@link Viewer}.
*
* The passed {@link IMenuListener} should implement a method like
*
@@ -69,7 +72,7 @@
* @param actionBarContributor
* should be created by injection
*/
- public void addViewerContextMenu(StructuredViewer viewer,
+ public void addViewerContextMenu(Viewer viewer,
AdapterFactoryEditingDomain editingDomain,
IWorkbenchPart activePart,
IMenuListener menuListener,
@@ -123,20 +126,20 @@
* @param editingDomain
* should be created by injection
*/
- public void addViewerContextMenu(StructuredViewer viewer, AdapterFactoryEditingDomain editingDomain) {
+ public void addViewerContextMenu(Viewer viewer, AdapterFactoryEditingDomain editingDomain) {
createContextMenu(viewer, editingDomain, treeActionBarContributor);
viewer.addSelectionChangedListener(treeActionBarContributor);
treeActionBarContributor.initialize(editingDomain);
}
- private MenuManager createContextMenu(StructuredViewer viewer, AdapterFactoryEditingDomain editingDomain) {
+ private MenuManager createContextMenu(Viewer viewer, AdapterFactoryEditingDomain editingDomain) {
MenuManager menuManager = createMenuManager();
Menu menu = menuManager.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
return menuManager;
}
- private MenuManager createContextMenu(StructuredViewer viewer, AdapterFactoryEditingDomain editingDomain, final IMenuListener menuListener) {
+ private MenuManager createContextMenu(Viewer viewer, AdapterFactoryEditingDomain editingDomain, final IMenuListener menuListener) {
MenuManager menuManager = createContextMenu(viewer, editingDomain);
menuManager.addMenuListener(new IMenuListener() {
@Override
@@ -147,7 +150,7 @@
return menuManager;
}
- private void bridgeSelectionProviderAndActionBarContributor(StructuredViewer viewer,
+ private void bridgeSelectionProviderAndActionBarContributor(Viewer viewer,
WorkbenchActionBarContributor actionBarContributor) {
ViewerSelectionProvider viewerSelectionProvider = new ViewerSelectionProvider(viewer);
actionBarContributor.setExplicitSelectionProvider(viewerSelectionProvider);
diff --git a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/IStructuredViewerAware.java b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/viewers/IStructuredViewerProvider.java
similarity index 62%
rename from plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/IStructuredViewerAware.java
rename to plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/viewers/IStructuredViewerProvider.java
index 847ae5b..c8d5c2e 100644
--- a/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/composite/IStructuredViewerAware.java
+++ b/plugins/org.eclipse.emf.parsley.common/src/org/eclipse/emf/parsley/viewers/IStructuredViewerProvider.java
@@ -8,14 +8,20 @@
* Contributors:
* Lorenzo Bettini - initial API and implementation
*******************************************************************************/
-package org.eclipse.emf.parsley.composite;
+package org.eclipse.emf.parsley.viewers;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
import org.eclipse.jface.viewers.StructuredViewer;
-public interface IStructuredViewerAware {
+/**
+ * Common interfaces for objects that provide a {@link StructuredViewer}
+ *
+ * @author Lorenzo Bettini - Initial contribution and API
+ *
+ */
+public interface IStructuredViewerProvider extends IViewerProvider {
- void setViewer(StructuredViewer viewer);
-
- StructuredViewer getViewer();
+ @Override
+ StructuredViewer getViewer();
}
diff --git a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableFormView.java b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableFormView.java
index f751f0e..2f21e85 100644
--- a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableFormView.java
+++ b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableFormView.java
@@ -41,7 +41,7 @@
.createTableFormMasterDetailComposite(parent, SWT.BORDER, getEClass());
tableFormComposite.update(getResource());
- addContextMenuAndDragAndDrop(tableFormComposite.getViewer());
+ afterCreateViewer();
}
@Override
diff --git a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableView.java b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableView.java
index 261d709..23aacaa 100644
--- a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableView.java
+++ b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTableView.java
@@ -38,9 +38,8 @@
tableViewer = viewerFactory.
createTableViewer(parent, createTableStyles(), getEClass());
tableViewer.setInput(getResource());
- addContextMenuAndDragAndDrop(tableViewer);
- getSite().setSelectionProvider(tableViewer);
+ afterCreateViewer();
}
protected int createTableStyles() {
diff --git a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeFormView.java b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeFormView.java
index a92e686..891a532 100644
--- a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeFormView.java
+++ b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeFormView.java
@@ -23,9 +23,9 @@
public abstract class AbstractSaveableTreeFormView extends AbstractSaveableViewerView{
@Inject
- protected TreeFormFactory treeFormFactory;
+ private TreeFormFactory treeFormFactory;
- protected TreeFormComposite treeFormComposite;
+ private TreeFormComposite treeFormComposite;
protected Object getContents(Resource resource) {
return resource;
@@ -40,13 +40,11 @@
treeFormComposite.update(getContents(getResource()));
- addContextMenuAndDragAndDrop(treeFormComposite.getViewer());
- addMouseListener(treeFormComposite.getViewer());
+ afterCreateViewer();
}
public void forceReloadResource(){
treeFormComposite.update(getContents(getResource()));
-
}
@Override
diff --git a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeView.java b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeView.java
index d31861b..2831bcf 100644
--- a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeView.java
+++ b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableTreeView.java
@@ -10,15 +10,17 @@
*******************************************************************************/
package org.eclipse.emf.parsley.views;
-
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.parsley.viewers.ViewerFactory;
-import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import com.google.inject.Inject;
+/**
+ * @author Lorenzo Bettini - Initial contribution and API
+ *
+ */
public abstract class AbstractSaveableTreeView extends AbstractSaveableViewerView {
@Inject
@@ -37,10 +39,7 @@
treeViewer = new TreeViewer(parent);
viewerFactory.initialize(treeViewer, getContents(getResource()));
- addContextMenuAndDragAndDrop(treeViewer);
- addMouseListener(treeViewer);
-
- getSite().setSelectionProvider(treeViewer);
+ afterCreateViewer();
}
@Override
@@ -49,11 +48,7 @@
}
@Override
- public StructuredViewer getViewer() {
- return treeViewer;
- }
-
- public TreeViewer getTreeViewer() {
+ public TreeViewer getViewer() {
return treeViewer;
}
diff --git a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableViewerView.java b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableViewerView.java
index e4fb834..711ee41 100644
--- a/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableViewerView.java
+++ b/plugins/org.eclipse.emf.parsley.views.common/src/org/eclipse/emf/parsley/views/AbstractSaveableViewerView.java
@@ -14,19 +14,24 @@
import java.util.Collection;
import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.common.ui.viewer.IViewerProvider;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.CreateChildCommand;
import org.eclipse.emf.parsley.edit.ui.dnd.ViewerDragAndDropHelper;
import org.eclipse.emf.parsley.menus.ViewerContextMenuHelper;
+import org.eclipse.emf.parsley.viewers.IStructuredViewerProvider;
import org.eclipse.emf.parsley.viewers.IViewerMouseListener;
import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.StructuredViewer;
import com.google.inject.Inject;
import com.google.inject.Provider;
-public abstract class AbstractSaveableViewerView extends AbstractSaveableView implements IViewerProvider {
+/**
+ * A common saveable view based on a viewer.
+ *
+ * @author Francesco Guidieri - Initial contribution and API
+ * @author Lorenzo Bettini - some refactoring
+ */
+public abstract class AbstractSaveableViewerView extends AbstractSaveableView implements IStructuredViewerProvider {
@Inject
private ViewerContextMenuHelper contextMenuHelper;
@@ -35,7 +40,22 @@
private ViewerDragAndDropHelper dragAndDropHelper;
@Inject
- protected Provider<IViewerMouseListener> viewerMouseListenerProvider;
+ private Provider<IViewerMouseListener> viewerMouseListenerProvider;
+
+ /**
+ * This assumes that the viewer has already been created, that is,
+ * {@link #getViewer()} must not return null.
+ */
+ protected void afterCreateViewer() {
+ addContextMenuToViewer();
+ addDragAndDropToViewer();
+ addMouseListenerToViewer();
+ setViewerAsSelectionProvider();
+ }
+
+ protected void setViewerAsSelectionProvider() {
+ getSite().setSelectionProvider(getViewer());
+ }
@Override
protected void postCommandStackChanged(Command mostRecentCommand) {
@@ -66,9 +86,12 @@
}
}
- protected void addContextMenuAndDragAndDrop(StructuredViewer viewer) {
- contextMenuHelper.addViewerContextMenu(viewer, editingDomain, this);
- dragAndDropHelper.addDragAndDrop(viewer, editingDomain);
+ protected void addContextMenuToViewer() {
+ contextMenuHelper.addViewerContextMenu(getViewer(), editingDomain, this);
+ }
+
+ protected void addDragAndDropToViewer() {
+ dragAndDropHelper.addDragAndDrop(getViewer(), editingDomain);
}
/**
@@ -76,8 +99,8 @@
*
* @param viewer
*/
- public void addMouseListener(StructuredViewer viewer) {
- viewer.getControl().addMouseListener(viewerMouseListenerProvider.get());
+ public void addMouseListenerToViewer() {
+ getViewer().getControl().addMouseListener(viewerMouseListenerProvider.get());
}
}