KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nightlabs > editor2d > outline > EditorOutlinePage


1 /* *****************************************************************************
2  * NightLabs Editor2D - Graphical editor framework *
3  * Copyright (C) 2004-2005 NightLabs - http://NightLabs.org *
4  * Project author: Daniel Mazurek <Daniel.Mazurek [at] nightlabs [dot] org> *
5  * *
6  * This library is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Lesser General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2.1 of the License, or (at your option) any later version. *
10  * *
11  * This library 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 GNU *
14  * Lesser General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Lesser General Public *
17  * License along with this library; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin St, Fifth Floor, *
20  * Boston, MA 02110-1301 USA *
21  * *
22  * Or get it online : *
23  * http://www.gnu.org/copyleft/lesser.html *
24  * *
25  * *
26  ******************************************************************************/

27
28 package org.nightlabs.editor2d.outline;
29
30 import java.beans.PropertyChangeEvent JavaDoc;
31 import java.beans.PropertyChangeListener JavaDoc;
32 import java.util.Collection JavaDoc;
33 import java.util.Iterator JavaDoc;
34
35 import org.apache.log4j.Logger;
36 import org.eclipse.core.runtime.IAdaptable;
37 import org.eclipse.draw2d.J2DLightweightSystem;
38 import org.eclipse.draw2d.LightweightSystem;
39 import org.eclipse.draw2d.MarginBorder;
40 import org.eclipse.draw2d.Viewport;
41 import org.eclipse.draw2d.parts.ScrollableThumbnail;
42 import org.eclipse.draw2d.parts.Thumbnail;
43 import org.eclipse.gef.ContextMenuProvider;
44 import org.eclipse.gef.EditPartViewer;
45 import org.eclipse.gef.LayerConstants;
46 import org.eclipse.gef.RootEditPart;
47 import org.eclipse.gef.editparts.J2DScalableFreeformRootEditPart;
48 import org.eclipse.gef.editparts.ZoomManager;
49 import org.eclipse.gef.ui.actions.ActionRegistry;
50 import org.eclipse.gef.ui.parts.ContentOutlinePage;
51 import org.eclipse.jface.action.Action;
52 import org.eclipse.jface.action.IAction;
53 import org.eclipse.jface.action.IMenuManager;
54 import org.eclipse.jface.action.IToolBarManager;
55 import org.eclipse.swt.SWT;
56 import org.eclipse.swt.events.DisposeEvent;
57 import org.eclipse.swt.events.DisposeListener;
58 import org.eclipse.swt.widgets.Canvas;
59 import org.eclipse.swt.widgets.Composite;
60 import org.eclipse.swt.widgets.Control;
61 import org.eclipse.ui.IActionBars;
62 import org.eclipse.ui.actions.ActionFactory;
63 import org.eclipse.ui.part.IPageSite;
64 import org.eclipse.ui.part.PageBook;
65 import org.holongate.j2d.J2DCanvas;
66 import org.nightlabs.base.resource.SharedImages;
67 import org.nightlabs.editor2d.AbstractEditor;
68 import org.nightlabs.editor2d.EditorContextMenuProvider;
69 import org.nightlabs.editor2d.EditorPlugin;
70 import org.nightlabs.editor2d.j2dswt.MLDCPaintable;
71 import org.nightlabs.editor2d.outline.filter.FilterManager;
72
73
74 public class EditorOutlinePage
75 extends ContentOutlinePage
76 implements IAdaptable
77 {
78     public static final Logger LOGGER = Logger.getLogger(EditorOutlinePage.class.getName());
79     
80   static final int ID_OUTLINE = 0;
81   static final int ID_OVERVIEW = 1;
82   static final int ID_FILTER = 3;
83   
84   protected AbstractEditor editor;
85   protected FilterManager filterMan;
86   protected IAction showFilterAction;
87   
88   protected PageBook pageBook;
89   protected Control outline;
90   protected IAction showOutlineAction;
91   protected IAction showOverviewAction;
92   protected IAction filterOutlineAction;
93   protected Thumbnail thumbnail;
94   protected DisposeListener disposeListener;
95   
96   protected Canvas overview;
97     
98   public EditorOutlinePage(AbstractEditor editor, EditPartViewer viewer){
99     super(viewer);
100     this.editor = editor;
101     this.filterMan = editor.getFilterManager();
102     filterMan.addPropertyChangeListener(filterListener);
103   }
104     
105   public void init(IPageSite pageSite) {
106     super.init(pageSite);
107     ActionRegistry registry = editor.getOutlineActionRegistry();
108     IActionBars bars = pageSite.getActionBars();
109     String JavaDoc id = ActionFactory.UNDO.getId();
110     bars.setGlobalActionHandler(id, registry.getAction(id));
111     id = ActionFactory.REDO.getId();
112     bars.setGlobalActionHandler(id, registry.getAction(id));
113     id = ActionFactory.DELETE.getId();
114     bars.setGlobalActionHandler(id, registry.getAction(id));
115     bars.updateActionBars();
116   }
117
118   protected void configureOutlineViewer()
119   {
120     getViewer().setEditDomain(editor.getOutlineEditDomain());
121     getViewer().setEditPartFactory(editor.getOutlineEditPartFactory());
122     ContextMenuProvider provider = editor.getContextMenuProvider();
123     getViewer().setContextMenu(provider);
124     // TODO: ContextMenu ID Problem
125
getSite().registerContextMenu(
126       EditorContextMenuProvider.CONTEXT_MENU_ID, //$NON-NLS-1$
127
provider, getSite().getSelectionProvider());
128     getViewer().setKeyHandler(editor.getCommonKeyHandler());
129 // getViewer().addDropTargetListener(
130
// new EditorTemplateTransferDropTargetListener(getViewer()));
131
IToolBarManager tbm = getSite().getActionBars().getToolBarManager();
132     
133     IMenuManager menuMan = getSite().getActionBars().getMenuManager();
134     createFilterEntries(menuMan);
135     
136     // Show Outline
137
showOutlineAction = new Action() {
138       public void run() {
139         showPage(ID_OUTLINE);
140       }
141     };
142 // showOutlineAction.setImageDescriptor(ImageDescriptor.createFromFile(
143
// EditorPlugin.class,"icons/outline.gif")); //$NON-NLS-1$
144
showOutlineAction.setImageDescriptor(SharedImages.getSharedImageDescriptor(
145             EditorPlugin.getDefault(), EditorOutlinePage.class, "Outline"));
146     
147     tbm.add(showOutlineAction);
148     
149     // Show Overview
150
showOverviewAction = new Action() {
151       public void run() {
152         showPage(ID_OVERVIEW);
153       }
154     };
155 // showOverviewAction.setImageDescriptor(ImageDescriptor.createFromFile(
156
// EditorPlugin.class,"icons/overview.gif")); //$NON-NLS-1$
157
showOverviewAction.setImageDescriptor(SharedImages.getSharedImageDescriptor(
158             EditorPlugin.getDefault(), EditorOutlinePage.class, "Overview"));
159     tbm.add(showOverviewAction);
160         
161     showPage(ID_OUTLINE);
162   }
163     
164   protected IAction createFilterAction(final Class JavaDoc c)
165   {
166         IAction filterAction = new Action() {
167       public void run() {
168         filterMan.setFilter(c);
169       }
170         };
171         filterAction.setText(filterMan.getTypeName(c));
172         return filterAction;
173   }
174   
175   protected void createFilterEntries(IMenuManager menuMan)
176   {
177         IAction filterNoneAction = new Action() {
178       public void run() {
179         filterMan.setAllFiltersAvailable();
180       }
181         };
182         filterNoneAction.setText(EditorPlugin.getResourceString("action.filter.none"));
183         menuMan.add(filterNoneAction);
184         
185     for (Iterator JavaDoc it = filterMan.getAllFilters().iterator(); it.hasNext(); )
186     {
187         Class JavaDoc c = (Class JavaDoc) it.next();
188             IAction filterAction = createFilterAction(c);
189             menuMan.add(filterAction);
190     }
191   }
192   
193   public void createControl(Composite parent){
194     pageBook = new PageBook(parent, SWT.NONE);
195     outline = getViewer().createControl(pageBook);
196     // TODO J2DCanvas maybe this is only TreeOutline
197
// overview = new Canvas(pageBook, SWT.NONE);
198

199 // overview = new J2DCanvas(pageBook, SWT.NONE, new J2DSamplePaintable("TestMessage"));
200
overview = new J2DCanvas(pageBook, SWT.NONE, new MLDCPaintable(editor.getMultiLayerDrawComponent()));
201     pageBook.showPage(outline);
202     configureOutlineViewer();
203     hookOutlineViewer();
204     initializeOutlineViewer();
205   }
206   
207   public void dispose(){
208     unhookOutlineViewer();
209     if (thumbnail != null) {
210       thumbnail.deactivate();
211       thumbnail = null;
212     }
213     super.dispose();
214 // outlinePage = null;
215
}
216   
217   public Object JavaDoc getAdapter(Class JavaDoc type) {
218     if (type == ZoomManager.class)
219       return editor.getOutlineGraphicalViewer().getProperty(ZoomManager.class.toString());
220     return null;
221   }
222
223   public Control getControl() {
224     return pageBook;
225   }
226
227   protected void hookOutlineViewer(){
228     editor.getOutlineSelectionSynchronizer().addViewer(getViewer());
229   }
230
231   protected void initializeOutlineViewer(){
232     setContents(editor.getMultiLayerDrawComponent());
233   }
234   
235 // protected void initializeOverview()
236
// {
237
// LightweightSystem lws = new LightweightSystem(overview);
238
// RootEditPart rep = editor.getOutlineGraphicalViewer().getRootEditPart();
239
// if (rep instanceof ScalableFreeformRootEditPart) {
240
// ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart)rep;
241
// thumbnail = new ScrollableThumbnail((Viewport)root.getFigure());
242
// thumbnail.setBorder(new MarginBorder(3));
243
// thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
244
// lws.setContents(thumbnail);
245
// disposeListener = new DisposeListener() {
246
// public void widgetDisposed(DisposeEvent e) {
247
// if (thumbnail != null) {
248
// thumbnail.deactivate();
249
// thumbnail = null;
250
// }
251
// }
252
// };
253
// editor.getEditor().addDisposeListener(disposeListener);
254
// }
255
// }
256
protected void initializeOverview()
257   {
258     LightweightSystem lws = new J2DLightweightSystem(overview);
259 // LightweightSystem lws = new J2DLightweightSystem();
260
RootEditPart rep = editor.getOutlineGraphicalViewer().getRootEditPart();
261     if (rep instanceof J2DScalableFreeformRootEditPart) {
262         J2DScalableFreeformRootEditPart root = (J2DScalableFreeformRootEditPart)rep;
263 // thumbnail = new J2DScrollableThumbnail((Viewport)root.getFigure());
264
thumbnail = new ScrollableThumbnail((Viewport)root.getFigure());
265       thumbnail.setBorder(new MarginBorder(3));
266       thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
267       lws.setContents(thumbnail);
268       disposeListener = new DisposeListener() {
269         public void widgetDisposed(DisposeEvent e) {
270           if (thumbnail != null) {
271             thumbnail.deactivate();
272             thumbnail = null;
273           }
274         }
275       };
276       editor.getEditor().addDisposeListener(disposeListener);
277     }
278   }
279   
280   public void setContents(Object JavaDoc contents) {
281     getViewer().setContents(contents);
282   }
283   
284   protected void showPage(int id) {
285     if (id == ID_OUTLINE) {
286       showOutlineAction.setChecked(true);
287       showOverviewAction.setChecked(false);
288       pageBook.showPage(outline);
289       if (thumbnail != null)
290         thumbnail.setVisible(false);
291     }
292     else if (id == ID_OVERVIEW) {
293       if (thumbnail == null)
294         initializeOverview();
295       showOutlineAction.setChecked(false);
296       showOverviewAction.setChecked(true);
297       pageBook.showPage(overview);
298       thumbnail.setVisible(true);
299     }
300   }
301   
302   protected void unhookOutlineViewer(){
303     editor.getOutlineSelectionSynchronizer().removeViewer(getViewer());
304     if (disposeListener != null && editor.getEditor() != null && !editor.getEditor().isDisposed())
305       editor.getEditor().removeDisposeListener(disposeListener);
306   }
307  
308   protected PropertyChangeListener JavaDoc filterListener = new PropertyChangeListener JavaDoc()
309   {
310         public void propertyChange(PropertyChangeEvent JavaDoc pce)
311         {
312             if (pce.getPropertyName().equals(FilterManager.FILTER_CHANGED))
313             {
314                 getViewer().setContents(editor.getMultiLayerDrawComponent());
315             }
316             else if (pce.getPropertyName().equals(FilterManager.FILTER_ADDED))
317             {
318                 Object JavaDoc o = pce.getNewValue();
319                 if (o instanceof Class JavaDoc) {
320                     IMenuManager menuMan = getSite().getActionBars().getMenuManager();
321                     Class JavaDoc c = (Class JavaDoc) o;
322                     menuMan.add(createFilterAction(c));
323                     getViewer().setContents(editor.getMultiLayerDrawComponent());
324                 }
325             }
326             else if (pce.getPropertyName().equals(FilterManager.FILTERS_ADDED))
327             {
328                 Object JavaDoc o = pce.getNewValue();
329                 if (o instanceof Collection JavaDoc) {
330                     IMenuManager menuMan = getSite().getActionBars().getMenuManager();
331                     Collection JavaDoc classes = (Collection JavaDoc) o;
332                     for (Iterator JavaDoc it = classes.iterator(); it.hasNext(); ) {
333                         Class JavaDoc c = (Class JavaDoc) it.next();
334                         menuMan.add(createFilterAction(c));
335                     }
336                     getViewer().setContents(editor.getMultiLayerDrawComponent());
337                 }
338             }
339         }
340     };
341     
342 }
343
Popular Tags