diff --git a/de.bmotionstudio.gef.editor/plugin.xml b/de.bmotionstudio.gef.editor/plugin.xml index 560ae9ff5d6cd3771d9531f2590c1c0dc55646e5..fcf68ecbf61c2d30b9dcdfc7e75b308106cc13bb 100644 --- a/de.bmotionstudio.gef.editor/plugin.xml +++ b/de.bmotionstudio.gef.editor/plugin.xml @@ -19,7 +19,7 @@ extensions="bmso" icon="icons/logo_bmotion.png" id="de.bmotionstudio.gef.editor.BMotionStudioEditor" - name="BMotion Studio Editor"> + name="BMotion Studio"> </editor> </extension> <extension @@ -65,6 +65,7 @@ allowMultiple="true" category="de.bmotionstudio.views" class="de.bmotionstudio.gef.editor.VisualizationViewPart" + icon="icons/logo_bmotion.png" id="de.bmotionstudio.gef.editor.VisualizationView" name="Visualization" restorable="true"> @@ -76,6 +77,14 @@ name="Palette" restorable="true"> </view> + <view + allowMultiple="false" + category="de.bmotionstudio.views" + class="de.bmotionstudio.gef.editor.BMotionOutlineView" + id="de.bmotionstudio.gef.editor.OutlineView" + name="Outline" + restorable="true"> + </view> </extension> <extension point="org.eclipse.ui.menus"> @@ -164,6 +173,15 @@ </enabledWhen> </handler> </extension> + <extension + point="org.eclipse.ui.perspectives"> + <perspective + class="de.bmotionstudio.gef.editor.BMSPerspectiveFactory" + icon="icons/logo_bmotion.png" + id="de.bmotionstudio.gef.editor.perspective" + name="BMS"> + </perspective> + </extension> <extension point="de.prob.core.animation"> <listener @@ -682,5 +700,5 @@ </observer> </control> </include> - </extension> + </extension> </plugin> diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPaletteView.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPaletteView.java index cd961b33c80cf98989abb87cb116906fb09762d2..b89cc1a7b15a9d55aea764881812578609a2ae46 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPaletteView.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPaletteView.java @@ -2,6 +2,7 @@ package de.bmotionstudio.gef.editor; import org.eclipse.draw2d.ColorConstants; import org.eclipse.gef.EditDomain; +import org.eclipse.gef.dnd.TemplateTransferDragSourceListener; import org.eclipse.gef.ui.palette.PaletteViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; @@ -18,7 +19,9 @@ import org.eclipse.ui.part.PageBookView; public class BMSPaletteView extends PageBookView { - // private PaletteViewer paletteViewer; + private PaletteViewer paletteViewer; + + public static String ID = "de.bmotionstudio.gef.editor.PaletteView"; @Override protected IWorkbenchPart getBootstrapPart() { @@ -29,6 +32,17 @@ public class BMSPaletteView extends PageBookView { return null; } + @Override + public void partActivated(IWorkbenchPart part) { + if (part instanceof VisualizationViewPart) { + VisualizationViewPart visView = (VisualizationViewPart) part; + EditDomain domain = visView.getEditDomain(); + if (domain != null) + domain.setPaletteViewer(paletteViewer); + } + super.partActivated(part); + } + @Override protected PageRec doCreatePage(IWorkbenchPart part) { if (part instanceof VisualizationViewPart) { @@ -40,11 +54,6 @@ public class BMSPaletteView extends PageBookView { return null; } - @Override - public void partActivated(IWorkbenchPart part) { - super.partActivated(part); - } - @Override protected boolean isImportant(IWorkbenchPart part) { return part instanceof VisualizationViewPart; @@ -55,17 +64,19 @@ public class BMSPaletteView extends PageBookView { private Composite container; protected void createPaletteViewer(Composite parent) { - PaletteViewer viewer = new PaletteViewer(); - viewer.createControl(parent); - viewer.getControl().setBackground(ColorConstants.green); - EditDomain domain = new EditDomain(); - domain.setPaletteViewer(viewer); + paletteViewer = new PaletteViewer(); + paletteViewer.createControl(parent); + paletteViewer.getControl().setBackground(ColorConstants.green); + paletteViewer.setPaletteRoot(new EditorPaletteFactory() + .createPalette(null)); + paletteViewer + .addDragSourceListener(new TemplateTransferDragSourceListener( + paletteViewer)); } @Override public void createControl(Composite parent) { container = new Composite(parent, SWT.NONE); - container.setBackground(ColorConstants.red); container.setLayout(new FillLayout()); createPaletteViewer(container); } @@ -92,8 +103,6 @@ public class BMSPaletteView extends PageBookView { @Override protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) { - // TODO Auto-generated method stub - } } diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPerspectiveFactory.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPerspectiveFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..2de5fb53f108b0b665a0a0dcdaa7899db0a6c78e --- /dev/null +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPerspectiveFactory.java @@ -0,0 +1,68 @@ +package de.bmotionstudio.gef.editor; + +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +import de.bmotionstudio.gef.editor.library.LibraryView; +import de.bmotionstudio.gef.editor.observer.view.ObserverView; + +public class BMSPerspectiveFactory implements IPerspectiveFactory { + + public static String ID = "de.bmotionstudio.gef.editor.perspective"; + + @Override + public void createInitialLayout(IPageLayout layout) { + + String editorArea = layout.getEditorArea(); + + // ProB Event View (Top-Left) + IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, + 0.15f, editorArea); + left.addView("de.prob.ui.OperationView"); + + IFolderLayout leftb = layout.createFolder("leftb", IPageLayout.BOTTOM, + 0.4f, "left"); + leftb.addView("de.prob.ui.StateView"); + leftb.addView("de.prob.ui.HistoryView"); + leftb.addView("de.prob.ui.EventErrorView"); + + // Navigator + Rodin Problem View (Bottom-Left) + // IFolderLayout leftb = layout.createFolder("leftb", + // IPageLayout.BOTTOM, + // 0.6f, "left"); + // leftb.addView("fr.systerel.explorer.navigator.view"); + + // Outline View + Palette View + Library View (Right) + IFolderLayout right1 = layout.createFolder("right1", IPageLayout.RIGHT, + 0.80f, editorArea); + right1.addView(BMSPaletteView.ID); + right1.addView(BMotionOutlineView.ID); + + IFolderLayout right2 = layout.createFolder("right2", + IPageLayout.BOTTOM, 0.60f, "right1"); + right2.addView(LibraryView.ID); + + // ProB State View + ProB History + ProB Event Error View (Right) + // IFolderLayout right2 = layout.createFolder("right2", + // IPageLayout.RIGHT, + // 0.6f, "right1"); + // right2.addView("de.prob.ui.StateView"); + // right2.addView("de.prob.ui.HistoryView"); + // right2.addView("de.prob.ui.EventErrorView"); + + // Placeholder for new visualization views + IFolderLayout top = layout.createFolder("bottom1", IPageLayout.BOTTOM, + 0.20f, IPageLayout.ID_EDITOR_AREA); + top.addPlaceholder(VisualizationViewPart.ID + ":*"); + + // Properties view + observer view + placeholder for new visualization + // views + IFolderLayout bottom = layout.createFolder("bottom2", + IPageLayout.BOTTOM, 0.65f, "bottom1"); + bottom.addView(IPageLayout.ID_PROP_SHEET); + bottom.addView(ObserverView.ID); + + } + +} diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlinePage.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlinePage.java new file mode 100644 index 0000000000000000000000000000000000000000..d67b5086e0ab812286c1ea2c2d86080f29fe393c --- /dev/null +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlinePage.java @@ -0,0 +1,170 @@ +package de.bmotionstudio.gef.editor; + +import org.eclipse.draw2d.LightweightSystem; +import org.eclipse.draw2d.Viewport; +import org.eclipse.draw2d.parts.ScrollableThumbnail; +import org.eclipse.gef.GraphicalViewer; +import org.eclipse.gef.LayerConstants; +import org.eclipse.gef.editparts.ScalableRootEditPart; +import org.eclipse.gef.ui.parts.ContentOutlinePage; +import org.eclipse.gef.ui.parts.TreeViewer; +import org.eclipse.jface.action.Action; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.widgets.Canvas; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.ui.part.IPageSite; + +import de.bmotionstudio.gef.editor.part.BMSTreeEditPartFactory; + +public class BMotionOutlinePage extends ContentOutlinePage { + + private SashForm sash; + + private ScrollableThumbnail thumbnail; + + private DisposeListener disposeListener; + + private VisualizationViewPart viewPart; + + public BMotionOutlinePage(VisualizationViewPart viewPart) { + super(new TreeViewer()); + this.viewPart = viewPart; + } + + @Override + public void init(IPageSite pageSite) { + super.init(pageSite); + // IActionBars bars = pageSite.getActionBars(); + // ActionRegistry ar = getActionRegistry(); + // bars.setGlobalActionHandler(ActionFactory.UNDO.getId(), + // ar.getAction(ActionFactory.UNDO.getId())); + // bars.setGlobalActionHandler(ActionFactory.REDO.getId(), + // ar.getAction(ActionFactory.REDO.getId())); + // bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), + // ar.getAction(ActionFactory.DELETE.getId())); + // bars.setGlobalActionHandler(ActionFactory.COPY.getId(), + // ar.getAction(ActionFactory.COPY.getId())); + // bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), + // ar.getAction(ActionFactory.PASTE.getId())); + // buildCustomActions(bars, ar); + // bars.updateActionBars(); + } + + protected void configureOutlineViewer() { + getViewer().setEditDomain(this.viewPart.getEditDomain()); + getViewer().setEditPartFactory(new BMSTreeEditPartFactory()); + // ContextMenuProvider provider = new + // BMSContextMenuProvider(getViewer(), + // getActionRegistry()); + // getViewer().setContextMenu(provider); + // getViewer().setKeyHandler(getCommonKeyHandler()); + } + + protected void hookOutlineViewer() { + // getSelectionSynchronizer().addViewer(getViewer()); + } + + protected void unhookOutlineViewer() { + GraphicalViewer graphicalViewer = viewPart.getGraphicalViewer(); + // getSelectionSynchronizer().removeViewer(getViewer()); + if (graphicalViewer.getControl() != null + && !graphicalViewer.getControl().isDisposed()) + graphicalViewer.getControl().removeDisposeListener( + disposeListener); + } + + @Override + public void createControl(Composite parent) { + initializeOverview(parent); + viewPart.getGraphicalViewer().getControl() + .addDisposeListener(disposeListener); + configureOutlineViewer(); + // hookOutlineViewer(); + initializeOutlineViewer(); + createMenu(); + } + + private void initializeOutlineViewer() { + getViewer().setContents(viewPart.getVisualization()); + } + + /** + * + */ + private void createMenu() { + + Action expandAllAction = new Action("Expand All") { + + @Override + public void run() { + for (TreeItem item : ((Tree) getViewer().getControl()) + .getItems()) { + item.setExpanded(true); + } + } + + }; + + Action collapseAllAction = new Action("Collapse All") { + + @Override + public void run() { + for (TreeItem item : ((Tree) getViewer().getControl()) + .getItems()) { + item.setExpanded(false); + } + } + + }; + + getSite().getActionBars().getMenuManager().add(expandAllAction); + getSite().getActionBars().getMenuManager().add(collapseAllAction); + + } + + protected void initializeOverview(Composite parent) { + sash = new SashForm(parent, SWT.VERTICAL); + + getViewer().createControl(sash); + + Canvas canvas = new Canvas(sash, SWT.BORDER); + canvas.setBackground(Display.getDefault().getSystemColor( + SWT.COLOR_WHITE)); + LightweightSystem lws = new LightweightSystem(canvas); + + thumbnail = new ScrollableThumbnail( + (Viewport) ((ScalableRootEditPart) this.viewPart + .getGraphicalViewer().getRootEditPart()).getFigure()); + thumbnail.setSource(((ScalableRootEditPart) this.viewPart + .getGraphicalViewer().getRootEditPart()) + .getLayer(LayerConstants.PRINTABLE_LAYERS)); + + lws.setContents(thumbnail); + + disposeListener = new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + if (thumbnail != null) { + thumbnail.deactivate(); + thumbnail = null; + } + } + }; + } + + public Control getControl() { + return sash; + } + + public void dispose() { + unhookOutlineViewer(); + super.dispose(); + } + +} diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlineView.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlineView.java new file mode 100644 index 0000000000000000000000000000000000000000..8e7b34f6d50c8c30ecb0e6c9ad93bedb7547fd8f --- /dev/null +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlineView.java @@ -0,0 +1,26 @@ +package de.bmotionstudio.gef.editor; + +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.views.contentoutline.ContentOutline; + +public class BMotionOutlineView extends ContentOutline { + + public static final String ID = "de.bmotionstudio.gef.editor.OutlineView"; + + @Override + protected IWorkbenchPart getBootstrapPart() { + IWorkbenchPage page = getSite().getPage(); + IViewPart view = page.findView(VisualizationViewPart.ID); + if (view != null) + return view; + return null; + } + + @Override + protected boolean isImportant(IWorkbenchPart part) { + return part instanceof VisualizationViewPart; + } + +} diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditor.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditor.java index 842d6bf725dfbbeb91e47fd51902c20bf1a43941..ee9c49c0bc16acc589f5283d1fb9c9709048a3c4 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditor.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditor.java @@ -15,6 +15,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; +import java.util.EventObject; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -31,6 +32,7 @@ import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.core.runtime.preferences.PreferenceFilterEntry; import org.eclipse.gef.EditDomain; import org.eclipse.gef.commands.CommandStack; +import org.eclipse.gef.commands.CommandStackListener; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; @@ -47,7 +49,6 @@ import org.eclipse.ui.IPerspectiveRegistry; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; @@ -114,11 +115,12 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { // Yes --> just switch to this perspective if (perspective != null) { + System.out.println("Swtich perspective"); switchPerspective(perspective.getId()); } else { // No --> create a new one IPerspectiveDescriptor originalPerspectiveDescriptor = perspectiveRegistry - .findPerspectiveWithId("de.bmotionstudio.perspective.run"); + .findPerspectiveWithId(BMSPerspectiveFactory.ID); switchPerspective(originalPerspectiveDescriptor.getId()); perspective = perspectiveRegistry.clonePerspective(perspectiveId, perspectiveId, originalPerspectiveDescriptor); @@ -240,6 +242,7 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { @Override public void dispose() { + getCommandStack().removeCommandStackListener(getCommandStackListener()); IWorkbenchPage activePage = PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage(); if (activePage != null) @@ -255,9 +258,11 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { file = ((IFileEditorInput) input).getFile(); + InputStream inputStream = null; + try { - InputStream inputStream = file.getContents(); + inputStream = file.getContents(); XStream xstream = new XStream() { @Override @@ -296,7 +301,8 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { "New Visualization View", visualization); String secId = UUID.randomUUID().toString(); - createVisualizationViewPart(secId, editDomain, visualization); + createVisualizationViewPart(secId, editDomain, + visualizationView); simulation.getVisualizationViews() .put(secId, visualizationView); @@ -316,47 +322,58 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { vis.setProjectFile(file); // String partName = visView.getPartName(); IViewReference viewReference = site.getPage() - .findViewReference( - VisualizationViewPart.ID, secId); + .findViewReference(VisualizationViewPart.ID, secId); // Check if view already exists + if (viewReference != null) { - VisualizationViewPart visualizationView = (VisualizationViewPart) viewReference - .getView(false); - if (visualizationView != null) { - visualizationView.initGraphicalViewer(editDomain, - vis); - } else { - //TODO return some error! - } } else { // If not, create a new one - createVisualizationViewPart(secId, editDomain, vis); + createVisualizationViewPart(secId, editDomain, visView); } } + // Close all unused visualization views + for (IViewReference viewReference : site.getPage() + .getViewReferences()) { + if (viewReference.getId().equals(VisualizationViewPart.ID)) { + if (!simulation.getVisualizationViews().containsKey( + viewReference.getSecondaryId())) + site.getPage().hideView(viewReference); + } + } + } } catch (CoreException e) { e.printStackTrace(); + } finally { + try { + if (inputStream != null) + inputStream.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } setSite(site); setInput(input); + getCommandStack().addCommandStackListener(getCommandStackListener()); + } private VisualizationViewPart createVisualizationViewPart(String secId, - EditDomain editDomain, Visualization visualization) + EditDomain editDomain, VisualizationView visualizationView) throws PartInitException { IWorkbenchWindow window = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); IWorkbenchPage activePage = window.getActivePage(); - VisualizationViewPart visualizationView = (VisualizationViewPart) activePage + VisualizationViewPart visualizationViewPart = (VisualizationViewPart) activePage .showView(VisualizationViewPart.ID, secId, IWorkbenchPage.VIEW_VISIBLE); - visualizationView.initGraphicalViewer(editDomain, visualization); - return visualizationView; + return visualizationViewPart; } private void switchPerspective(String id) { @@ -386,13 +403,14 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { @Override public void doSave(final IProgressMonitor monitor) { - + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() + .savePerspectiveAs(perspective); exportPerspective(perspective); - ByteArrayOutputStream out = new ByteArrayOutputStream(); + OutputStreamWriter writer = null; try { // saveProperties(); - OutputStreamWriter writer = new OutputStreamWriter(out, "UTF8"); + writer = new OutputStreamWriter(out, "UTF8"); XStream xstream = new XStream(); BMotionEditorPlugin.setAliases(xstream); xstream.toXML(simulation, writer); @@ -404,8 +422,15 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ce.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); + } finally { + try { + out.close(); + if (writer != null) + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } } - } @Override @@ -445,14 +470,14 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { Visualization visualization = new Visualization( "RushHour.bmso", "EventB", version); - - createVisualizationViewPart(secId, editDomain, - visualization); VisualizationView visualizationView = new VisualizationView( "New Visulization View", visualization); simulation.getVisualizationViews().put(secId, visualizationView); + + createVisualizationViewPart(secId, editDomain, + visualizationView); setDirty(true); @@ -473,6 +498,24 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { public void setFocus() { } + public Simulation getSimulation() { + return simulation; + } + + public void setSimulation(Simulation simulation) { + this.simulation = simulation; + } + + private CommandStackListener commandStackListener = new CommandStackListener() { + public void commandStackChanged(EventObject event) { + setDirty(getCommandStack().isDirty()); + } + }; + + protected CommandStackListener getCommandStackListener() { + return commandStackListener; + } + public CommandStack getCommandStack() { return getEditDomain().getCommandStack(); } @@ -483,9 +526,9 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { @Override public void partActivated(IWorkbenchPartReference partRef) { - IWorkbenchPart part = partRef.getPart(false); - if (part == this) - openPerspective(partRef.getPage()); + // IWorkbenchPart part = partRef.getPart(false); + // if (part == this) + // openPerspective(partRef.getPage()); } @Override @@ -499,6 +542,11 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { exportPerspective(perspective); closePerspective(partRef.getPage(), perspective); deletePerspective(partRef.getPage(), perspective); + } else if (partRef.getPart(true) instanceof VisualizationViewPart) { + VisualizationViewPart visPart = (VisualizationViewPart) partRef + .getPart(true); + String secondaryId = visPart.getViewSite().getSecondaryId(); + simulation.getVisualizationViews().remove(secondaryId); } } diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/VisualizationViewPart.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/VisualizationViewPart.java index cdc04fbfc3160359f04a685e8857fcabba59d212..989afd6d02a77643d4e52bc6e2f0b654b319fe80 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/VisualizationViewPart.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/VisualizationViewPart.java @@ -1,90 +1,225 @@ package de.bmotionstudio.gef.editor; +import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.PositionConstants; import org.eclipse.gef.EditDomain; import org.eclipse.gef.GraphicalViewer; -import org.eclipse.gef.commands.CommandStack; +import org.eclipse.gef.SnapToGeometry; +import org.eclipse.gef.SnapToGrid; import org.eclipse.gef.editparts.ScalableRootEditPart; -import org.eclipse.gef.editparts.ZoomManager; +import org.eclipse.gef.rulers.RulerProvider; import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer; +import org.eclipse.gef.ui.rulers.RulerComposite; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.part.ViewPart; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.part.IPage; +import org.eclipse.ui.part.MessagePage; +import org.eclipse.ui.part.Page; +import org.eclipse.ui.part.PageBook; +import org.eclipse.ui.part.PageBookView; +import org.eclipse.ui.views.contentoutline.IContentOutlinePage; import org.eclipse.ui.views.properties.IPropertySheetPage; +import de.bmotionstudio.gef.editor.internal.BControlTransferDropTargetListener; +import de.bmotionstudio.gef.editor.model.BMotionRuler; +import de.bmotionstudio.gef.editor.model.BMotionRulerProvider; +import de.bmotionstudio.gef.editor.model.Simulation; import de.bmotionstudio.gef.editor.model.Visualization; +import de.bmotionstudio.gef.editor.model.VisualizationView; import de.bmotionstudio.gef.editor.part.BMSEditPartFactory; -public class VisualizationViewPart extends ViewPart { +public class VisualizationViewPart extends PageBookView { public static String ID = "de.bmotionstudio.gef.editor.VisualizationView"; private EditDomain editDomain; - private GraphicalViewer graphicalViewer; + private VisualizationView visualizationView; - private Visualization visualization; - - public void initGraphicalViewer(EditDomain editDomain, - Visualization visualization) { - this.editDomain = editDomain; - this.visualization = visualization; - graphicalViewer.setEditDomain(editDomain); - graphicalViewer.setContents(visualization); - } - - @Override - public void createPartControl(Composite parent) { - graphicalViewer = new ScrollingGraphicalViewer(); - graphicalViewer.createControl(parent); - ScalableRootEditPart rootEditPart = new ScalableRootEditPart(); - rootEditPart.setViewer(graphicalViewer); - graphicalViewer.setRootEditPart(rootEditPart); - graphicalViewer.setEditPartFactory(new BMSEditPartFactory()); - } + private VisualizationViewPage page; @Override public Object getAdapter(@SuppressWarnings("rawtypes") Class type) { - // Adapter for zoom manager - if (type == ZoomManager.class) - return ((ScalableRootEditPart) getGraphicalViewer() - .getRootEditPart()).getZoomManager(); -// if (type == IContentOutlinePage.class) -// return new BMotionOutlinePage(); - + // // Adapter for zoom manager + // if (type == ZoomManager.class) + // return ((ScalableRootEditPart) getGraphicalViewer() + // .getRootEditPart()).getZoomManager(); + if (type == IContentOutlinePage.class) { + return new BMotionOutlinePage(this); + } + // // Adapter for property page if (type == IPropertySheetPage.class) { BMotionStudioPropertySheet page = new BMotionStudioPropertySheet(); - page.setRootEntry(new CustomSortPropertySheetEntry( - getCommandStack())); + page.setRootEntry(new CustomSortPropertySheetEntry(editDomain + .getCommandStack())); return page; } return super.getAdapter(type); } - - public CommandStack getCommandStack() { - return getEditDomain().getCommandStack(); + + @Override + public void setFocus() { } - - protected EditDomain getEditDomain() { - return editDomain; + + public Visualization getVisualization() { + return this.visualizationView.getVisualization(); } - protected GraphicalViewer getGraphicalViewer() { - return graphicalViewer; + public GraphicalViewer getGraphicalViewer() { + return page.getGraphicalViewer(); } - + @Override - public void setFocus() { + protected IPage createDefaultPage(PageBook book) { + MessagePage page = new MessagePage(); + initPage(page); + page.createControl(book); + page.setMessage("NA"); + return page; } - public Visualization getVisualization() { - return visualization; + @Override + protected PageRec doCreatePage(IWorkbenchPart part) { + if (part instanceof BMotionStudioEditor) { + BMotionStudioEditor editor = (BMotionStudioEditor) part; + Simulation simulation = editor.getSimulation(); + this.editDomain = editor.getEditDomain(); + this.visualizationView = simulation.getVisualizationViews().get( + getViewSite().getSecondaryId()); + if (this.editDomain == null || this.visualizationView == null) + return null; + page = new VisualizationViewPage(); + initPage(page); + page.createControl(getPageBook()); + return new PageRec(part, page); + } + return null; + } + + @Override + protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) { + } + + @Override + protected IWorkbenchPart getBootstrapPart() { + IWorkbenchPage page = getSite().getPage(); + if (page != null) { + return page.getActiveEditor(); + } + return null; + } + + @Override + protected boolean isImportant(IWorkbenchPart part) { + return part instanceof BMotionStudioEditor; + } + + public EditDomain getEditDomain() { + return editDomain; + } + + public void setEditDomain(EditDomain editDomain) { + this.editDomain = editDomain; } - public void setVisualization(Visualization visualization) { - this.visualization = visualization; + public VisualizationView getVisualizationView() { + return visualizationView; + } + + public void setVisualizationView(VisualizationView visualizationView) { + this.visualizationView = visualizationView; + } + + private class VisualizationViewPage extends Page { + + private RulerComposite container; + + private GraphicalViewer graphicalViewer; + + public GraphicalViewer getGraphicalViewer() { + return graphicalViewer; + } + + @Override + public void createControl(Composite parent) { + container = new RulerComposite(parent, SWT.NONE); + // container = new Composite(parent, SWT.NONE); + // container.setLayout(new FillLayout()); + graphicalViewer = new ScrollingGraphicalViewer(); + graphicalViewer.createControl(container); + configureGraphicalViewer(); + initGraphicalViewer(); + setPartName(getVisualizationView().getName()); + } + + public void configureGraphicalViewer() { + ScalableRootEditPart rootEditPart = new ScalableRootEditPart(); + rootEditPart.setViewer(graphicalViewer); + graphicalViewer.setRootEditPart(rootEditPart); + graphicalViewer.setEditPartFactory(new BMSEditPartFactory()); + graphicalViewer.getControl().setBackground(ColorConstants.red); + container + .setGraphicalViewer((ScrollingGraphicalViewer) graphicalViewer); + graphicalViewer.setEditDomain(getEditDomain()); + graphicalViewer + .addDropTargetListener(new BControlTransferDropTargetListener( + graphicalViewer, getVisualization())); + graphicalViewer.getControl().setBackground(ColorConstants.white); + loadProperties(); + } + + public void initGraphicalViewer() { + graphicalViewer.setContents(getVisualization()); + loadProperties(); + } + + @Override + public Control getControl() { + return container; + } + + @Override + public void setFocus() { + } + + protected void loadProperties() { + + // Ruler properties + BMotionRuler ruler = getVisualization().getRuler( + PositionConstants.WEST); + RulerProvider provider = null; + if (ruler != null) { + provider = new BMotionRulerProvider(ruler); + } + getGraphicalViewer().setProperty( + RulerProvider.PROPERTY_VERTICAL_RULER, provider); + ruler = getVisualization().getRuler(PositionConstants.NORTH); + provider = null; + if (ruler != null) { + provider = new BMotionRulerProvider(ruler); + } + getGraphicalViewer().setProperty( + RulerProvider.PROPERTY_HORIZONTAL_RULER, provider); + getGraphicalViewer().setProperty( + RulerProvider.PROPERTY_RULER_VISIBILITY, + getVisualization().getRulerVisibility()); + getGraphicalViewer().setProperty( + SnapToGeometry.PROPERTY_SNAP_ENABLED, + getVisualization().isSnapToGeometryEnabled()); + getGraphicalViewer().setProperty(SnapToGrid.PROPERTY_GRID_ENABLED, + getVisualization().isGridEnabled()); + getGraphicalViewer().setProperty(SnapToGrid.PROPERTY_GRID_VISIBLE, + getVisualization().isGridEnabled()); + + } + } } diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java index 93336446419897fa1b4daac4bcc009057612fcdc..f092cadc8f3846aad1a181156e41f4cd9c946bc8 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java @@ -18,6 +18,7 @@ import de.bmotionstudio.gef.editor.model.Visualization; public class BMSTreeEditPartFactory implements EditPartFactory { + @Override public EditPart createEditPart(EditPart context, Object model) { BMSAbstractTreeEditPart part = null; @@ -51,6 +52,8 @@ public class BMSTreeEditPartFactory implements EditPartFactory { if (part != null) part.setModel(model); + System.out.println("CREATE EDIT PART!!! " + part); + return part; }