bug 298565: [modeling] Provide a way to define the ViewerComparator to use in the outline
https://bugs.eclipse.org/bugs/show_bug.cgi?id=298565
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java
index e06828d..21f88c0 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/editor/EmfFormEditor.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: EmfFormEditor.java,v 1.34 2009/12/08 16:52:43 bcabe Exp $
+ * $Id: EmfFormEditor.java,v 1.35 2009/12/22 14:19:11 bcabe Exp $
  */
 package org.eclipse.pde.emfforms.editor;
 
@@ -653,6 +653,7 @@
 		if (contentOutlinePage == null) {
 			contentOutlinePage = new EmfContentOutlinePage(this);
 			contentOutlinePage.setViewerInput(getEditorConfig().getOutlineInput(getCurrentEObject()));
+			contentOutlinePage.setViewerComparator(getOutlineComparator());
 
 			// Listen to selection so that we can handle it is a special way.
 			contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
@@ -674,6 +675,14 @@
 	}
 
 	/**
+	 * Subclasses may override this method to provide their own {@link ViewerComparator} to be used in the outline's {@link TreeViewer}. It could be useful in case you want to rearrange elements
+	 * @return the {@link ViewerComparator} to use to render the outline's {@link TreeViewer}. Default implementation return <code>null</code>
+	 */
+	protected ViewerComparator getOutlineComparator() {
+		return null;
+	}
+
+	/**
 	 * This deals with how we want selection in the outline to affect the other views.<br><br>
 	 * <strong>Clients can override this method</strong> to have some special behaviour on selection changed events in the outline, such
 	 * as giving focus to a particular page of the editor. 
diff --git a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/EmfContentOutlinePage.java b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/EmfContentOutlinePage.java
index ac63b09..e253e68 100644
--- a/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/EmfContentOutlinePage.java
+++ b/modeling/plugins/org.eclipse.pde.emfforms/src/org/eclipse/pde/emfforms/internal/editor/EmfContentOutlinePage.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     Anyware Technologies - initial API and implementation
  *
- * $Id: EmfFormEditor.java,v 1.23 2009/09/11 21:18:00 bcabe Exp $
+ * $Id: EmfContentOutlinePage.java,v 1.1 2009/09/12 12:57:54 bcabe Exp $
  */
 package org.eclipse.pde.emfforms.internal.editor;
 
@@ -40,6 +40,8 @@
 
 	private Object viewerInput;
 
+	private ViewerComparator viewerComparator;
+
 	public EmfContentOutlinePage(EmfFormEditor<? extends EObject> editor) {
 		this.editor = editor;
 	}
@@ -54,6 +56,7 @@
 		contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(editor.getAdapterFactory()));
 		contentOutlineViewer.setLabelProvider(new DecoratingLabelProvider(new AdapterFactoryLabelProvider(editor.getAdapterFactory()), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
 		contentOutlineViewer.setInput(viewerInput);
+		contentOutlineViewer.setComparator(viewerComparator);
 		contentOutlineViewer.addFilter(new ViewerFilter() {
 			@Override
 			public boolean select(Viewer viewer, Object parentElement, Object element) {
@@ -108,6 +111,10 @@
 		this.viewerInput = viewerInput;
 	}
 
+	public void setViewerComparator(ViewerComparator comparator) {
+		this.viewerComparator = comparator;
+	}
+
 	public TreeViewer getViewer() {
 		return contentOutlineViewer;
 	}