-/*******************************************************************************\r
- * Copyright (c) 2007, 2011 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.browsing.ui.graph.impl;\r
-\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.ui.ISelectionListener;\r
-import org.eclipse.ui.ISelectionService;\r
-import org.eclipse.ui.IWorkbenchPage;\r
-import org.eclipse.ui.IWorkbenchPart;\r
-import org.eclipse.ui.IWorkbenchSite;\r
-import org.eclipse.ui.IWorkbenchWindow;\r
-import org.eclipse.ui.PlatformUI;\r
-import org.simantics.browsing.ui.GraphExplorer;\r
-import org.simantics.db.Disposable;\r
-import org.simantics.db.management.ISessionContext;\r
-import org.simantics.utils.ObjectUtils;\r
-\r
-/**\r
- * @author Antti Villberg\r
- */\r
-public class WorkbenchSelectionInputSource implements WorkbenchSessionContextInputSource, ObservableInputSource,\r
- ISelectionListener, Disposable {\r
-\r
- protected ISelectionService service;\r
- protected Object selection;\r
- protected IWorkbenchPart part;\r
- protected IWorkbenchPart ownPart;\r
- protected InputSourceListener listener;\r
-\r
- @Override\r
- public void init(IWorkbenchSite site, IWorkbenchPart ownPart) {\r
- this.ownPart = ownPart;\r
- attachToWorkbench();\r
- }\r
-\r
- /**\r
- * @thread SWT\r
- */\r
- protected void attachToWorkbench() {\r
- IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();\r
- if (window == null)\r
- return;\r
- service = window.getSelectionService();\r
- ISelection initialSelection = service.getSelection();\r
- IWorkbenchPart activePart = null;\r
- if (initialSelection != null) {\r
- IWorkbenchPage activePage = window.getActivePage();\r
- if (activePage != null)\r
- activePart = activePage.getActivePart();\r
- }\r
- selectionChanged(activePart, initialSelection);\r
- service.addPostSelectionListener(this);\r
- }\r
-\r
- /**\r
- * @thread SWT\r
- */\r
- @Override\r
- public void dispose() {\r
- if (service != null)\r
- service.removePostSelectionListener(this);\r
- service = null;\r
- selection = null;\r
- listener = null;\r
- }\r
-\r
- /**\r
- * @thread SWT\r
- */\r
- @Override\r
- public void selectionChanged(IWorkbenchPart part, ISelection selection) {\r
- // Do not process selections from self\r
- if(ObjectUtils.objectEquals(ownPart, part)) return;\r
- Object old = this.selection;\r
- this.selection = selection;\r
- this.part = part;\r
- //System.err.println("WorkbenchSelectionInputSource.selectionChanged(" + part + ", " + this.selection + ")");\r
- fireIfInputChanged(old, selection);\r
- }\r
-\r
- /**\r
- * @param oldSelection\r
- * @param newSelection\r
- * @thread SWT\r
- */\r
- protected void fireIfInputChanged(Object oldSelection, Object newSelection) {\r
- InputSourceListener l = listener;\r
- if (l != null)\r
- if (!ObjectUtils.objectEquals(oldSelection, newSelection))\r
- l.inputChanged(this);\r
- }\r
-\r
- @Override\r
- public Object get(ISessionContext ctx) {\r
- return selection != null ? selection : GraphExplorer.EMPTY_INPUT;\r
- }\r
- \r
- @Override\r
- public IWorkbenchPart getProvider() {\r
- return this.part;\r
- }\r
-\r
- @Override\r
- public void setListener(InputSourceListener listener) {\r
- this.listener = listener;\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.browsing.ui.graph.impl;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISelectionService;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.simantics.browsing.ui.GraphExplorer;
+import org.simantics.db.Disposable;
+import org.simantics.db.management.ISessionContext;
+import org.simantics.utils.ObjectUtils;
+
+/**
+ * @author Antti Villberg
+ */
+public class WorkbenchSelectionInputSource implements WorkbenchSessionContextInputSource, ObservableInputSource,
+ ISelectionListener, Disposable {
+
+ protected ISelectionService service;
+ protected Object selection;
+ protected IWorkbenchPart part;
+ protected IWorkbenchPart ownPart;
+ protected InputSourceListener listener;
+
+ @Override
+ public void init(IWorkbenchSite site, IWorkbenchPart ownPart) {
+ this.ownPart = ownPart;
+ attachToWorkbench();
+ }
+
+ /**
+ * @thread SWT
+ */
+ protected void attachToWorkbench() {
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window == null)
+ return;
+ service = window.getSelectionService();
+ ISelection initialSelection = service.getSelection();
+ IWorkbenchPart activePart = null;
+ if (initialSelection != null) {
+ IWorkbenchPage activePage = window.getActivePage();
+ if (activePage != null)
+ activePart = activePage.getActivePart();
+ }
+ selectionChanged(activePart, initialSelection);
+ service.addPostSelectionListener(this);
+ }
+
+ /**
+ * @thread SWT
+ */
+ @Override
+ public void dispose() {
+ if (service != null)
+ service.removePostSelectionListener(this);
+ service = null;
+ selection = null;
+ listener = null;
+ }
+
+ /**
+ * @thread SWT
+ */
+ @Override
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ // Do not process selections from self
+ if(ObjectUtils.objectEquals(ownPart, part)) return;
+ Object old = this.selection;
+ this.selection = selection;
+ this.part = part;
+ //System.err.println("WorkbenchSelectionInputSource.selectionChanged(" + part + ", " + this.selection + ")");
+ fireIfInputChanged(old, selection);
+ }
+
+ /**
+ * @param oldSelection
+ * @param newSelection
+ * @thread SWT
+ */
+ protected void fireIfInputChanged(Object oldSelection, Object newSelection) {
+ InputSourceListener l = listener;
+ if (l != null)
+ if (!ObjectUtils.objectEquals(oldSelection, newSelection))
+ l.inputChanged(this);
+ }
+
+ @Override
+ public Object get(ISessionContext ctx) {
+ return selection != null ? selection : GraphExplorer.EMPTY_INPUT;
+ }
+
+ @Override
+ public IWorkbenchPart getProvider() {
+ return this.part;
+ }
+
+ @Override
+ public void setListener(InputSourceListener listener) {
+ this.listener = listener;
+ }
+
+}