diff -r 14dc2103a631 -r ed1c9f64298a trace/tracebuilder/com.nokia.tracebuilder.eclipse/src/com/nokia/tracebuilder/eclipse/WorkbenchListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trace/tracebuilder/com.nokia.tracebuilder.eclipse/src/com/nokia/tracebuilder/eclipse/WorkbenchListener.java Wed Jun 23 14:35:40 2010 +0300 @@ -0,0 +1,283 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +* Workbench listener +* +*/ +package com.nokia.tracebuilder.eclipse; + +import java.util.ArrayList; +import java.util.Iterator; + +import org.eclipse.core.resources.IFile; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IPageListener; +import org.eclipse.ui.IPartListener2; +import org.eclipse.ui.IWindowListener; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.texteditor.ITextEditor; + +import com.nokia.tracebuilder.file.FileUtils; + +/** + * Workbench listener + * + */ +final class WorkbenchListener implements IWindowListener, IPageListener, + IPartListener2 { + + /** + * List of open windows + */ + private ArrayList windowList = new ArrayList(); + + /** + * Callback for editor notifications + */ + private WorkbenchListenerCallback callback; + + /** + * Constructor + * + * @param callback + * callback for editor notifications + */ + WorkbenchListener(WorkbenchListenerCallback callback) { + this.callback = callback; + } + + /** + * Starts this listener + */ + void startListener() { + PlatformUI.getWorkbench().addWindowListener(this); + IWorkbenchWindow[] windows = PlatformUI.getWorkbench() + .getWorkbenchWindows(); + for (IWorkbenchWindow element : windows) { + windowOpened(element); + } + } + + /** + * Stops this listener + */ + void stopListener() { + Iterator itr; + do { + itr = windowList.iterator(); + if (itr.hasNext()) { + windowClosed(itr.next()); + } + } while (itr.hasNext()); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWindowListener# + * windowActivated(org.eclipse.ui.IWorkbenchWindow) + */ + public void windowActivated(IWorkbenchWindow window) { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWindowListener# + * windowDeactivated(org.eclipse.ui.IWorkbenchWindow) + */ + public void windowDeactivated(IWorkbenchWindow window) { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWindowListener# + * windowClosed(org.eclipse.ui.IWorkbenchWindow) + */ + public void windowClosed(IWorkbenchWindow window) { + window.removePageListener(this); + windowList.remove(window); + IWorkbenchPage[] pages = window.getPages(); + for (IWorkbenchPage element : pages) { + pageClosed(element); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWindowListener# + * windowOpened(org.eclipse.ui.IWorkbenchWindow) + */ + public void windowOpened(IWorkbenchWindow window) { + boolean found = false; + for (int j = 0; j < windowList.size(); j++) { + if (windowList.get(j) == window) { + found = true; + } + } + if (!found) { + window.addPageListener(this); + IWorkbenchPage[] pages = window.getPages(); + for (IWorkbenchPage element : pages) { + pageOpened(element); + } + windowList.add(window); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPageListener#pageActivated(org.eclipse.ui.IWorkbenchPage) + */ + public void pageActivated(IWorkbenchPage page) { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPageListener#pageClosed(org.eclipse.ui.IWorkbenchPage) + */ + public void pageClosed(IWorkbenchPage page) { + page.removePartListener(this); + IEditorReference[] editors = page.getEditorReferences(); + for (IEditorReference element : editors) { + partClosed(element); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPageListener#pageOpened(org.eclipse.ui.IWorkbenchPage) + */ + public void pageOpened(IWorkbenchPage page) { + page.addPartListener(this); + IEditorReference[] references = page.getEditorReferences(); + for (IEditorReference element : references) { + partOpened(element); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partOpened(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partOpened(IWorkbenchPartReference partRef) { + IFile file = WorkbenchUtils.getEditorFile(partRef); + if (file != null && FileUtils.isFileAllowed(file.getName())) { + callback.editorOpened((ITextEditor) ((IEditorReference) partRef) + .getEditor(false), file); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partClosed(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partClosed(IWorkbenchPartReference partRef) { + if (partRef != null) { + IFile file = WorkbenchUtils.getEditorFile(partRef); + + if (partRef instanceof IEditorReference) { + IEditorPart editorPart = ((IEditorReference) partRef) + .getEditor(false); + // Check that editorPart is instance of ITextEditor + if (editorPart instanceof ITextEditor) { + // Variable file might be null, but it does not matter. So + // null check is not needed. + callback.editorClosed((ITextEditor) editorPart, file); + } + } + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partActivated(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partActivated(IWorkbenchPartReference partRef) { + IFile file = WorkbenchUtils.getEditorFile(partRef); + if (file != null && FileUtils.isFileAllowed(file.getName())) { + callback.editorActivated((ITextEditor) ((IEditorReference) partRef) + .getEditor(false), file); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partDeactivated(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partDeactivated(IWorkbenchPartReference partRef) { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partInputChanged(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partInputChanged(IWorkbenchPartReference partRef) { + IFile file = WorkbenchUtils.getEditorFile(partRef); + if (file != null && FileUtils.isFileAllowed(file.getName())) { + callback.editorReplaced((ITextEditor) ((IEditorReference) partRef) + .getEditor(false), file); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partBroughtToTop(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partBroughtToTop(IWorkbenchPartReference partRef) { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partVisible(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partVisible(IWorkbenchPartReference partRef) { + IFile file = WorkbenchUtils.getEditorFile(partRef); + if (file != null && FileUtils.isFileAllowed(file.getName())) { + callback.editorVisible((ITextEditor) ((IEditorReference) partRef) + .getEditor(false), file); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IPartListener2#partHidden(org.eclipse.ui.IWorkbenchPartReference) + */ + public void partHidden(IWorkbenchPartReference partRef) { + IFile file = WorkbenchUtils.getEditorFile(partRef); + if (file != null && FileUtils.isFileAllowed(file.getName())) { + callback.editorHidden((ITextEditor) ((IEditorReference) partRef) + .getEditor(false), file); + } + } + +} \ No newline at end of file