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