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