KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > editor2d > ui > outline > EditorOutlinePage


1 /**
2  * <p> Project: com.nightlabs.editor2d </p>
3  * <p> Copyright: Copyright (c) 2005 </p>
4  * <p> Company: NightLabs GmbH (Germany) </p>
5  * <p> Creation Date: 24.05.2005 </p>
6  * <p> Author: Daniel Mazurek </p>
7 **/

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

189 // overview = new J2DCanvas(pageBook, SWT.NONE, new J2DSamplePaintable("TestMessage"));
190
overview = new J2DCanvas(pageBook, SWT.NONE, new MLDCPaintable(editor.getMultiLayerDrawComponent()));
191     pageBook.showPage(outline);
192     configureOutlineViewer();
193     hookOutlineViewer();
194     initializeOutlineViewer();
195   }
196   
197   public void dispose(){
198     unhookOutlineViewer();
199     if (thumbnail != null) {
200       thumbnail.deactivate();
201       thumbnail = null;
202     }
203     super.dispose();
204 // outlinePage = null;
205
}
206   
207   public Object JavaDoc getAdapter(Class JavaDoc type) {
208     if (type == ZoomManager.class)
209       return editor.getOutlineGraphicalViewer().getProperty(ZoomManager.class.toString());
210     return null;
211   }
212
213   public Control getControl() {
214     return pageBook;
215   }
216
217   protected void hookOutlineViewer(){
218     editor.getOutlineSelectionSynchronizer().addViewer(getViewer());
219   }
220
221   protected void initializeOutlineViewer(){
222     setContents(editor.getMultiLayerDrawComponent());
223   }
224   
225 // protected void initializeOverview()
226
// {
227
// LightweightSystem lws = new LightweightSystem(overview);
228
// RootEditPart rep = editor.getOutlineGraphicalViewer().getRootEditPart();
229
// if (rep instanceof ScalableFreeformRootEditPart) {
230
// ScalableFreeformRootEditPart root = (ScalableFreeformRootEditPart)rep;
231
// thumbnail = new ScrollableThumbnail((Viewport)root.getFigure());
232
// thumbnail.setBorder(new MarginBorder(3));
233
// thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
234
// lws.setContents(thumbnail);
235
// disposeListener = new DisposeListener() {
236
// public void widgetDisposed(DisposeEvent e) {
237
// if (thumbnail != null) {
238
// thumbnail.deactivate();
239
// thumbnail = null;
240
// }
241
// }
242
// };
243
// editor.getEditor().addDisposeListener(disposeListener);
244
// }
245
// }
246
protected void initializeOverview()
247   {
248     LightweightSystem lws = new J2DLightweightSystem(overview);
249 // LightweightSystem lws = new J2DLightweightSystem();
250
RootEditPart rep = editor.getOutlineGraphicalViewer().getRootEditPart();
251     if (rep instanceof J2DScalableFreeformRootEditPart) {
252         J2DScalableFreeformRootEditPart root = (J2DScalableFreeformRootEditPart)rep;
253 // thumbnail = new J2DScrollableThumbnail((Viewport)root.getFigure());
254
thumbnail = new ScrollableThumbnail((Viewport)root.getFigure());
255       thumbnail.setBorder(new MarginBorder(3));
256       thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
257       lws.setContents(thumbnail);
258       disposeListener = new DisposeListener() {
259         public void widgetDisposed(DisposeEvent e) {
260           if (thumbnail != null) {
261             thumbnail.deactivate();
262             thumbnail = null;
263           }
264         }
265       };
266       editor.getEditor().addDisposeListener(disposeListener);
267     }
268   }
269   
270   public void setContents(Object JavaDoc contents) {
271     getViewer().setContents(contents);
272   }
273   
274   protected void showPage(int id) {
275     if (id == ID_OUTLINE) {
276       showOutlineAction.setChecked(true);
277       showOverviewAction.setChecked(false);
278       pageBook.showPage(outline);
279       if (thumbnail != null)
280         thumbnail.setVisible(false);
281     }
282     else if (id == ID_OVERVIEW) {
283       if (thumbnail == null)
284         initializeOverview();
285       showOutlineAction.setChecked(false);
286       showOverviewAction.setChecked(true);
287       pageBook.showPage(overview);
288       thumbnail.setVisible(true);
289     }
290   }
291   
292   protected void unhookOutlineViewer(){
293     editor.getOutlineSelectionSynchronizer().removeViewer(getViewer());
294     if (disposeListener != null && editor.getEditor() != null && !editor.getEditor().isDisposed())
295       editor.getEditor().removeDisposeListener(disposeListener);
296   }
297  
298   protected PropertyChangeListener JavaDoc filterListener = new PropertyChangeListener JavaDoc()
299   {
300         public void propertyChange(PropertyChangeEvent JavaDoc pce)
301         {
302             if (pce.getPropertyName().equals(FilterManager.FILTER_CHANGED)) {
303                 getViewer().setContents(editor.getMultiLayerDrawComponent());
304             }
305         }
306     };
307 }
308
Popular Tags