1 8 package com.mountainminds.eclemma.internal.ui.annotation; 9 10 import org.eclipse.ui.IEditorReference; 11 import org.eclipse.ui.IPartListener2; 12 import org.eclipse.ui.IWindowListener; 13 import org.eclipse.ui.IWorkbench; 14 import org.eclipse.ui.IWorkbenchPage; 15 import org.eclipse.ui.IWorkbenchPart; 16 import org.eclipse.ui.IWorkbenchPartReference; 17 import org.eclipse.ui.IWorkbenchWindow; 18 import org.eclipse.ui.texteditor.ITextEditor; 19 20 26 public class EditorTracker { 27 28 private final IWorkbench workbench; 29 30 private IWindowListener windowListener = new IWindowListener() { 31 public void windowOpened(IWorkbenchWindow window) { 32 window.getPartService().addPartListener(partListener); 33 } 34 public void windowClosed(IWorkbenchWindow window) { 35 window.getPartService().removePartListener(partListener); 36 } 37 public void windowActivated(IWorkbenchWindow window) { } 38 public void windowDeactivated(IWorkbenchWindow window) { } 39 }; 40 41 private IPartListener2 partListener = new IPartListener2() { 42 public void partOpened(IWorkbenchPartReference partref) { 43 annotateEditor(partref); 44 } 45 public void partActivated(IWorkbenchPartReference partref) { } 46 public void partBroughtToTop(IWorkbenchPartReference partref) { } 47 public void partVisible(IWorkbenchPartReference partref) { } 48 public void partInputChanged(IWorkbenchPartReference partref) { } 49 public void partClosed(IWorkbenchPartReference partref) { } 50 public void partDeactivated(IWorkbenchPartReference partref) { } 51 public void partHidden(IWorkbenchPartReference partref) { } 52 }; 53 54 public EditorTracker(IWorkbench workbench) { 55 this.workbench = workbench; 56 IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); 57 for (int i = 0; i < windows.length; i++) { 58 windows[i].getPartService().addPartListener(partListener); 59 } 60 workbench.addWindowListener(windowListener); 61 annotateAllEditors(); 62 } 63 64 public void dispose() { 65 workbench.removeWindowListener(windowListener); 66 IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); 67 for (int i = 0; i < windows.length; i++) { 68 windows[i].getPartService().removePartListener(partListener); 69 } 70 } 71 72 private void annotateAllEditors() { 73 IWorkbenchWindow[] windows = workbench.getWorkbenchWindows(); 74 for (int i = 0; i < windows.length; i++) { 75 IWorkbenchPage[] pages = windows[i].getPages(); 76 for (int j = 0; j < pages.length; j++) { 77 IEditorReference[] editors = pages[j].getEditorReferences(); 78 for (int k = 0; k < editors.length; k++) { 79 annotateEditor(editors[k]); 80 } 81 } 82 } 83 } 84 85 private void annotateEditor(IWorkbenchPartReference partref) { 86 IWorkbenchPart part = partref.getPart(false); 87 if (part instanceof ITextEditor) { 88 CoverageAnnotationModel.attach((ITextEditor) part); 89 } 90 } 91 92 } 93 | Popular Tags |