/******************************************************************************* * Copyright (c) 2013 Wind River Systems, Inc. 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tcf.te.ui.views.listeners; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IPartService; import org.eclipse.ui.IPerspectiveListener; import org.eclipse.ui.IWindowListener; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.IWorkbenchWindow; /** * Abstract window listener implementation. */ public abstract class AbstractWindowListener implements IWindowListener { // The part listener instance protected final IPartListener2 partListener; // The perspective listener instance protected final IPerspectiveListener perspectiveListener; // Flag to remember if the initialization is done or not private boolean initialized = false; /** * Constructor */ public AbstractWindowListener() { // Create the part listener instance partListener = createPartListener(); // Create the perspective listener instance perspectiveListener = createPerspectiveListener(); } /** * Creates a new part listener instance. * <p> * <b>Note:</b> The default implementation returns <code>null</code>. * * @return The part listener instance or <code>null</code>. */ protected IPartListener2 createPartListener() { return null; } /** * Creates a new perspective listener instance. * <p> * <b>Note:</b> The default implementation returns <code>null</code>. * * @return The perspective listener instance or <code>null</code>. */ protected IPerspectiveListener createPerspectiveListener() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow) */ @Override public void windowActivated(IWorkbenchWindow window) { if (!initialized && window != null) { windowOpened(window); } } /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowDeactivated(org.eclipse.ui.IWorkbenchWindow) */ @Override public void windowDeactivated(IWorkbenchWindow window) { } /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowClosed(org.eclipse.ui.IWorkbenchWindow) */ @Override public void windowClosed(IWorkbenchWindow window) { // On close, remove the listeners from the window if (window != null) { if (window.getPartService() != null && partListener != null) { window.getPartService().removePartListener(partListener); } if (perspectiveListener != null) window.removePerspectiveListener(perspectiveListener); } } /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowOpened(org.eclipse.ui.IWorkbenchWindow) */ @Override public void windowOpened(IWorkbenchWindow window) { if (window != null) { // On open, register the part listener to the window if (window.getPartService() != null && partListener != null) { // Get the part service IPartService service = window.getPartService(); // Unregister the part listener, just in case service.removePartListener(partListener); // Register the part listener service.addPartListener(partListener); // Signal the active part to the part listener after registration IWorkbenchPage page = window.getActivePage(); if (page != null) { IWorkbenchPartReference partRef = page.getActivePartReference(); if (partRef != null) partListener.partActivated(partRef); } } // Register the perspective listener if (perspectiveListener != null) { window.addPerspectiveListener(perspectiveListener); // Signal the active perspective to the perspective listener after registration if (window.getActivePage() != null) { perspectiveListener.perspectiveActivated(window.getActivePage(), window.getActivePage().getPerspective()); } } initialized = true; } } }