1 8 package com.nightlabs.editor2d.ui.outline; 9 10 import java.beans.PropertyChangeEvent ; 11 import java.beans.PropertyChangeListener ; 12 import java.util.Iterator ; 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 } 100 }; 101 102 public void init(IPageSite pageSite) { 103 super.init(pageSite); 104 ActionRegistry registry = editor.getOutlineActionRegistry(); 105 IActionBars bars = pageSite.getActionBars(); 106 String 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 getSite().registerContextMenu( 123 EditorContextMenuProvider.CONTEXT_MENU_ID, 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 showOutlineAction = new Action() { 135 public void run() { 136 showPage(ID_OUTLINE); 137 } 138 }; 139 showOutlineAction.setImageDescriptor(ImageDescriptor.createFromFile( 140 EditorPlugin.class,"icons/outline.gif")); tbm.add(showOutlineAction); 142 143 showOverviewAction = new Action() { 145 public void run() { 146 showPage(ID_OVERVIEW); 147 } 148 }; 149 showOverviewAction.setImageDescriptor(ImageDescriptor.createFromFile( 150 EditorPlugin.class,"icons/overview.gif")); 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 it = filterMan.getAllFilters().iterator(); it.hasNext(); ) 167 { 168 final Class c = (Class ) it.next(); 169 if (!Layer.class.isAssignableFrom(c)) { 171 IAction filterAction = new Action() { 172 public void run() { 173 filterMan.setFilter(c); 174 } 175 }; 176 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 189 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 } 206 207 public Object getAdapter(Class 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() 247 { 248 LightweightSystem lws = new J2DLightweightSystem(overview); 249 RootEditPart rep = editor.getOutlineGraphicalViewer().getRootEditPart(); 251 if (rep instanceof J2DScalableFreeformRootEditPart) { 252 J2DScalableFreeformRootEditPart root = (J2DScalableFreeformRootEditPart)rep; 253 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 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 filterListener = new PropertyChangeListener () 299 { 300 public void propertyChange(PropertyChangeEvent pce) 301 { 302 if (pce.getPropertyName().equals(FilterManager.FILTER_CHANGED)) { 303 getViewer().setContents(editor.getMultiLayerDrawComponent()); 304 } 305 } 306 }; 307 } 308 | Popular Tags |