1 /* 2 * Created on Jan 19, 2004 3 * 4 * Copyright (C) 2004 Sean Ruff 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 9 * of the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 */ 20 21 package org.un4gvn.editorviewer.internal.ui; 22 23 import org.eclipse.core.resources.IResourceChangeEvent; 24 import org.eclipse.core.resources.IResourceChangeListener; 25 import org.eclipse.jface.viewers.ILabelProviderListener; 26 import org.eclipse.jface.viewers.IOpenListener; 27 import org.eclipse.jface.viewers.IStructuredSelection; 28 import org.eclipse.jface.viewers.LabelProviderChangedEvent; 29 import org.eclipse.jface.viewers.OpenEvent; 30 import org.eclipse.ui.IEditorPart; 31 import org.eclipse.ui.IEditorReference; 32 import org.eclipse.ui.IPageListener; 33 import org.eclipse.ui.IPartListener2; 34 import org.eclipse.ui.IPropertyListener; 35 import org.eclipse.ui.IWorkbenchPage; 36 import org.eclipse.ui.IWorkbenchPartReference; 37 import org.eclipse.ui.part.EditorPart; 38 import org.un4gvn.editorviewer.internal.element.EditorElement; 39 import org.un4gvn.editorviewer.internal.element.IViewerElement; 40 41 /*** 42 * Listener class between the model and the Viewer<p> 43 * @author Sean Ruff 44 * 45 *TODO ADD RESOURCE CHANGE LISTENER FUNCTIONALITY 46 */ 47 public class EditorViewerListener implements IPartListener2, 48 IPropertyListener, 49 IOpenListener, 50 ILabelProviderListener, 51 IPageListener, 52 IResourceChangeListener { 53 54 /*** 55 * Instance of EditorViewer for Callbacks 56 */ 57 private EditorViewer _viewer = null; 58 59 /*** 60 * Constructor 61 * @param helper EditorViewer instance for Callbacks 62 */ 63 public EditorViewerListener(EditorViewer helper){ 64 _viewer = helper; 65 } 66 67 /*** 68 * @see org.eclipse.ui.IPageListener#pageActivated(org.eclipse.ui.IWorkbenchPage) 69 */ 70 public void pageActivated(IWorkbenchPage page) { 71 _viewer.refreshContent(); 72 } 73 74 /*** 75 * @see org.eclipse.ui.IPageListener#pageClosed(org.eclipse.ui.IWorkbenchPage) 76 */ 77 public void pageClosed(IWorkbenchPage page) { 78 _viewer.refreshContent(); 79 } 80 81 /*** 82 * @see org.eclipse.ui.IPageListener#pageOpened(org.eclipse.ui.IWorkbenchPage) 83 */ 84 public void pageOpened(IWorkbenchPage page) { 85 } 86 87 /*** 88 * Listen for editors to become active and select them in the viewer if so 89 * @see org.eclipse.ui.IPartListener2#partActivated(org.eclipse.ui.IWorkbenchPartReference) 90 */ 91 public void partActivated(IWorkbenchPartReference ref) { 92 if ( _viewer.isLinkedWithEditor() && ref instanceof IEditorReference ){ 93 IViewerElement child = _viewer.getElement(((IEditorReference)ref).getEditor(true));//IEditorReference)ref); 94 if ( child != null ) 95 _viewer.setSelection(new IViewerElement[]{child}); 96 } 97 } 98 99 /*** 100 * Listen for editors to become active and select them in the viewer if so 101 * @see org.eclipse.ui.IPartListener2#partBroughtToTop(org.eclipse.ui.IWorkbenchPartReference) 102 */ 103 public void partBroughtToTop(IWorkbenchPartReference ref) { 104 if ( _viewer.isLinkedWithEditor() && ref instanceof IEditorReference ){ 105 IViewerElement child = _viewer.getElement(((IEditorReference)ref).getEditor(true));//IEditorReference)ref); 106 if ( child != null ) 107 _viewer.setSelection(new IViewerElement[]{child}); 108 } 109 } 110 111 /*** 112 * Listen for editors to close and remove from the model 113 * @see org.eclipse.ui.IPartListener2#partClosed(org.eclipse.ui.IWorkbenchPartReference) 114 */ 115 public void partClosed(IWorkbenchPartReference ref) { 116 if ( ref instanceof IEditorReference ){ 117 IViewerElement child = _viewer.getElement(((IEditorReference)ref).getEditor(true));//IEditorReference)ref); 118 if ( child != null ) 119 _viewer.removeElement(child); 120 } 121 } 122 123 /*** 124 * Listen for Editor to become Deactivated 125 * @see org.eclipse.ui.IPartListener2#partDeactivated(org.eclipse.ui.IWorkbenchPartReference) 126 */ 127 public void partDeactivated(IWorkbenchPartReference ref) {} 128 129 /*** 130 * Listen for an Editor to open and add it to the model 131 * @see org.eclipse.ui.IPartListener2#partOpened(org.eclipse.ui.IWorkbenchPartReference) 132 */ 133 public void partOpened(IWorkbenchPartReference ref) { 134 if ( ref instanceof IEditorReference ){ 135 _viewer.addElement(((IEditorReference)ref).getEditor(true)); 136 } 137 } 138 139 /*** 140 * @see org.eclipse.ui.IPartListener2#partHidden(org.eclipse.ui.IWorkbenchPartReference) 141 */ 142 public void partHidden(IWorkbenchPartReference ref) {} 143 144 /*** 145 * @see org.eclipse.ui.IPartListener2#partVisible(org.eclipse.ui.IWorkbenchPartReference) 146 */ 147 public void partVisible(IWorkbenchPartReference ref) {} 148 149 /*** 150 * @see org.eclipse.ui.IPartListener2#partInputChanged(org.eclipse.ui.IWorkbenchPartReference) 151 */ 152 public void partInputChanged(IWorkbenchPartReference ref) {} 153 154 155 /* (non-Javadoc) 156 * @see org.eclipse.jface.viewers.IOpenListener#open(org.eclipse.jface.viewers.OpenEvent) 157 */ 158 public void open(OpenEvent event) { 159 if ( event.getSelection() instanceof IStructuredSelection ){ 160 Object sel = ((IStructuredSelection)event.getSelection()).getFirstElement(); 161 if ( sel instanceof EditorElement ){ 162 IEditorPart part = (IEditorPart)((EditorElement)sel).getEditorPart(); 163 IWorkbenchPage page = part.getSite().getPage(); 164 if ( page == null ) 165 return; 166 page.bringToTop(part); 167 } else if ( sel instanceof IViewerElement ){ 168 _viewer.switchExpansion((IViewerElement)sel,1); 169 } 170 } 171 } 172 173 174 /*** 175 * Listen for any Editors to become "DIRTY" so that the Label can dictate the change 176 * @see org.eclipse.ui.IPropertyListener#propertyChanged(java.lang.Object, int) 177 */ 178 public void propertyChanged(Object source, int propId) { 179 switch (propId){ 180 case EditorPart.PROP_DIRTY : 181 case EditorPart.PROP_TITLE : 182 if ( source instanceof IEditorPart ){ 183 IViewerElement child = _viewer.getElement((IEditorPart)source);//.getEditorInput()); 184 _viewer.refreshLabel(child); 185 } 186 } 187 } 188 189 /*** 190 * @see org.eclipse.jface.viewers.ILabelProviderListener#labelProviderChanged(org.eclipse.jface.viewers.LabelProviderChangedEvent) 191 */ 192 public void labelProviderChanged(LabelProviderChangedEvent event) { 193 Object[] elements= event.getElements(); 194 if (elements == null) { 195 _viewer.refreshView(); 196 return; 197 } 198 for (int i = 0; i < elements.length; i++) { 199 Object element= elements[i]; 200 if ( element != null && element instanceof IViewerElement ) { 201 _viewer.refreshLabel((IViewerElement)element); 202 } 203 } 204 } 205 206 /* (non-Javadoc) 207 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) 208 */ 209 public void resourceChanged(IResourceChangeEvent event) { 210 _viewer.refreshContent(); 211 } 212 213 214 }

This page was automatically generated by Maven