/******************************************************************************* * Copyright (c) 2010 the CHISEL group and contributors. * 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: * Del Myers - initial API and implementation *******************************************************************************/ package ca.uvic.chisel.logging.eclipse.internal; import java.util.Set; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IPerspectiveListener; import org.eclipse.ui.IWindowListener; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; class InternalWindowListener implements IWindowListener { IWorkbenchWindow activeWindow; InternalPageListener pageListener = new InternalPageListener(); IPerspectiveListener perspectiveListener = new IPerspectiveListener() { public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, String changeId) {} public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { if (page == null || perspective == null) return; Set<LoggingCategory> categories = WorkbenchLogger.getMatchingCategories(perspective.getId()); for (LoggingCategory c : categories) { c.getLog().logLine(System.currentTimeMillis() + "\tworkbenchEvent\tperspective=" + perspective.getId() + "\tactivated"); } } }; /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowActivated(org.eclipse.ui.IWorkbenchWindow) */ public void windowActivated(IWorkbenchWindow window) { if (activeWindow != null) { activeWindow.removePageListener(pageListener); activeWindow.removePerspectiveListener(perspectiveListener); } activeWindow = window; activeWindow.addPageListener(pageListener); activeWindow.addPerspectiveListener(perspectiveListener); } /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowClosed(org.eclipse.ui.IWorkbenchWindow) */ public void windowClosed(IWorkbenchWindow window) { activeWindow = null; } /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowDeactivated(org.eclipse.ui.IWorkbenchWindow) */ public void windowDeactivated(IWorkbenchWindow window) { if (activeWindow != null && activeWindow == window) { activeWindow.removePageListener(pageListener); activeWindow.removePerspectiveListener(perspectiveListener); activeWindow = null; } } /* (non-Javadoc) * @see org.eclipse.ui.IWindowListener#windowOpened(org.eclipse.ui.IWorkbenchWindow) */ public void windowOpened(IWorkbenchWindow window) { } public void initialize(IWorkbenchWindow activeWorkbenchWindow) { windowActivated(activeWorkbenchWindow); perspectiveListener.perspectiveActivated(activeWorkbenchWindow.getActivePage(), activeWorkbenchWindow.getActivePage().getPerspective()); pageListener.initialize(activeWorkbenchWindow.getActivePage()); } }