/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * 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: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.rc.rcp.e3.gef.listener; import org.eclipse.gef.GraphicalViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.internal.WorkbenchPartReference; import org.eclipse.ui.part.MultiPageEditorPart; /** * @author BREDEX GmbH * @created Dec 17, 2009 */ public class GefPartListener implements IPartListener2 { /** Key for GEF Viewer in component data */ public static final String TEST_GEF_VIEWER_DATA_KEY = "TEST_GEF_VIEWER"; //$NON-NLS-1$ /** * * {@inheritDoc} */ public void partActivated(IWorkbenchPartReference partRef) { // Do nothing } /** * * {@inheritDoc} */ public void partBroughtToTop(IWorkbenchPartReference partRef) { // Do nothing } /** * * {@inheritDoc} */ public void partClosed(IWorkbenchPartReference partRef) { // Do nothing } /** * * {@inheritDoc} */ public void partDeactivated(IWorkbenchPartReference partRef) { // Do nothing } /** * * {@inheritDoc} */ public void partHidden(IWorkbenchPartReference partRef) { // Do nothing } /** * * {@inheritDoc} */ public void partInputChanged(IWorkbenchPartReference partRef) { // Do nothing } /** * * {@inheritDoc} */ public void partOpened(final IWorkbenchPartReference partRef) { IWorkbenchPart part = partRef.getPart(false); if (part instanceof MultiPageEditorPart) { ((MultiPageEditorPart)part).getSite().getSelectionProvider() .addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { if (event.getSource() instanceof GraphicalViewer) { registerGraphicalViewer( (GraphicalViewer)event.getSource(), partRef); } } }); } if (part != null && partRef instanceof WorkbenchPartReference) { GraphicalViewer viewer = part.getAdapter( GraphicalViewer.class); registerGraphicalViewer(viewer, partRef); } } /** * * {@inheritDoc} */ public void partVisible(IWorkbenchPartReference partRef) { partOpened(partRef); } /** * Registers a {@link GraphicalViewer} with the given * {@link IWorkbenchPartReference}. * * @param viewer The viewer to register. * @param partRef The reference to the part that (indirectly) contains the * viewer. */ private void registerGraphicalViewer(GraphicalViewer viewer, IWorkbenchPartReference partRef) { IWorkbenchPart part = partRef.getPart(false); if (part != null && partRef instanceof WorkbenchPartReference) { if (viewer != null) { // Note the viewer on the component Control partContent = ((WorkbenchPartReference)partRef).getPane().getControl(); if (partContent != null && !partContent.isDisposed()) { partContent.setData( GefPartListener.TEST_GEF_VIEWER_DATA_KEY, viewer); } } } } }