diff --git a/de.bmotionstudio.gef.editor/plugin.xml b/de.bmotionstudio.gef.editor/plugin.xml index d44d7914a1c714edf19f32656e68d01aecb97ec6..4db1b733bb67e0e349851bf84f1ef4be3bedd54a 100644 --- a/de.bmotionstudio.gef.editor/plugin.xml +++ b/de.bmotionstudio.gef.editor/plugin.xml @@ -13,17 +13,15 @@ <extension point="org.eclipse.ui.editors"> <editor - class="de.bmotionstudio.gef.editor.BMotionStudioEditor" - contributorClass="de.bmotionstudio.gef.editor.BMotionStudioContributor" default="true" extensions="bmso" icon="icons/logo_bmotion.png" id="de.bmotionstudio.gef.editor.BMotionStudioEditor" + launcher="de.bmotionstudio.gef.editor.BMotionStudioLauncher" name="BMotion Studio"> - </editor> - </extension> - <extension - point="org.eclipse.ui.newWizards"> + </editor> + </extension> + <extension point="org.eclipse.ui.newWizards"> <category id="de.bmotionstudio.gef.editor.wizards" name="BMotion Studio"> @@ -85,6 +83,14 @@ name="Outline" restorable="true"> </view> + <view + allowMultiple="false" + category="de.bmotionstudio.views" + class="de.bmotionstudio.gef.editor.controlpanel.ControlPanel" + id="de.bmotionstudio.gef.editor.ControlPanel" + name="Control Panel" + restorable="true"> + </view> </extension> <extension point="org.eclipse.ui.menus"> 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 index 0c2eb123404bd27296021f150a3ca0d8feb2f5f5..c62ac993da67ac68f8a2de13478054ccbe86d849 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPerspectiveFactory.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSPerspectiveFactory.java @@ -4,6 +4,7 @@ import org.eclipse.ui.IFolderLayout; import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPerspectiveFactory; +import de.bmotionstudio.gef.editor.controlpanel.ControlPanel; import de.bmotionstudio.gef.editor.library.LibraryView; import de.bmotionstudio.gef.editor.observer.view.ObserverView; @@ -14,6 +15,8 @@ public class BMSPerspectiveFactory implements IPerspectiveFactory { @Override public void createInitialLayout(IPageLayout layout) { + layout.setEditorAreaVisible(false); + String editorArea = layout.getEditorArea(); // ProB Event View (Top-Left) @@ -27,42 +30,29 @@ public class BMSPerspectiveFactory implements IPerspectiveFactory { 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); + // Library View + Event-B Explorer IFolderLayout right2 = layout.createFolder("right2", IPageLayout.BOTTOM, 0.60f, "right1"); right2.addView(LibraryView.ID); right2.addView("fr.systerel.explorer.navigator.view"); - // 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 + // Properties view + observer view + control panel IFolderLayout bottom = layout.createFolder("bottom2", IPageLayout.BOTTOM, 0.65f, "bottom1"); bottom.addView(IPageLayout.ID_PROP_SHEET); bottom.addView(ObserverView.ID); + bottom.addView(ControlPanel.ID); } diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionEditorPlugin.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionEditorPlugin.java index 5317ce24401ef95b3bdfb72badc8f435b35fe090..6e95833400c5fd288dd135fbb74f512f022e5f5f 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionEditorPlugin.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionEditorPlugin.java @@ -8,6 +8,8 @@ package de.bmotionstudio.gef.editor; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; @@ -40,6 +42,8 @@ public class BMotionEditorPlugin extends AbstractUIPlugin { public static final String FILEEXT_STUDIO = "bmso"; + public static List<ISimulationListener> openSimulationListeners = new ArrayList<ISimulationListener>(); + // The shared instance private static BMotionEditorPlugin plugin; @@ -55,6 +59,8 @@ public class BMotionEditorPlugin extends AbstractUIPlugin { static BMotionStudioEditorPage activeBMotionStudioEditor = null; + public static Map<String, Simulation> openSimulations = new HashMap<String, Simulation>(); + /** * The constructor */ @@ -222,4 +228,20 @@ public class BMotionEditorPlugin extends AbstractUIPlugin { xstream.alias("children", BControlList.class); } + public static void openSimulation(Simulation simulation) { + openSimulations.put(simulation.getProjectFile().getName(), simulation); + for (ISimulationListener l : openSimulationListeners) + l.openSimulation(simulation); + } + + public static void closeSimulation(Simulation simulation) { + openSimulations.remove(simulation.getProjectFile().getName()); + for (ISimulationListener l : openSimulationListeners) + l.closeSimulation(simulation); + } + + public static Map<String, Simulation> getOpenSimulations() { + return openSimulations; + } + } 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 index 4ec90be5429a0322970e010ca01c1e1d7a78b2dc..d9afc560e3a9ab165f30a38de49ea5b609ea0a29 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlinePage.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionOutlinePage.java @@ -100,7 +100,7 @@ public class BMotionOutlinePage extends ContentOutlinePage { } private void initializeOutlineViewer() { - getViewer().setContents(viewPart.getVisualization()); + // getViewer().setContents(viewPart.getVisualization()); } /** 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 05ca297daa5806397c1634f7ace2b8b5d2378056..8dd24ca48b01dc28d36c76957289a31eac1904b6 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 @@ -292,7 +292,6 @@ public class BMotionStudioEditor extends EditorPart implements "New Visualization View", visualization); String secId = UUID.randomUUID().toString(); - createVisualizationViewPart(secId, visualizationView); simulation.getVisualizationViews() .put(secId, visualizationView); @@ -317,7 +316,10 @@ public class BMotionStudioEditor extends EditorPart implements // if (viewReference != null) { // } else { // If not, create a new one - createVisualizationViewPart(secId, visView); + VisualizationViewPart visualizationViewPart = createVisualizationViewPart( + secId, visView); + visualizationViewPart.init(simulation, visView); + // } } @@ -348,17 +350,13 @@ public class BMotionStudioEditor extends EditorPart implements setSite(site); setInput(input); - + // getCommandStack().addCommandStackListener(getCommandStackListener()); } private VisualizationViewPart createVisualizationViewPart(String secId, - VisualizationView visualizationView) - throws PartInitException { - - System.out.println("CREATE VISUALIZATION PART: " + secId); - + VisualizationView visualizationView) throws PartInitException { IWorkbenchWindow window = PlatformUI.getWorkbench() .getActiveWorkbenchWindow(); IWorkbenchPage activePage = window.getActivePage(); 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 d1713e10a0286327ec5cf8ab7302b30a8ed4385e..e3dad235fa64df73e8ff965ade38d824de7818f2 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 @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.EventObject; import java.util.Iterator; import java.util.List; -import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; @@ -46,17 +45,11 @@ import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.actions.ActionFactory; -import org.eclipse.ui.part.IPage; -import org.eclipse.ui.part.IPageSite; -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.part.ViewPart; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; import org.eclipse.ui.views.properties.IPropertySheetPage; @@ -72,7 +65,7 @@ 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 PageBookView implements +public class VisualizationViewPart extends ViewPart implements CommandStackListener { public static String ID = "de.bmotionstudio.gef.editor.VisualizationView"; @@ -81,18 +74,22 @@ public class VisualizationViewPart extends PageBookView implements private VisualizationView visualizationView; - private VisualizationViewPage page; - private ActionRegistry actionRegistry; - private Composite container; - - private Simulation simulation; - private BMotionStudioEditor editor; private BMotionSelectionSynchronizer selectionSynchronizer; + private RulerComposite container; + + private GraphicalViewer graphicalViewer; + + private ScalableRootEditPart rootEditPart; + + private Simulation simulation; + + private boolean isInitialized = false; + private List<String> selectionActions = new ArrayList<String>(); private List<String> stackActions = new ArrayList<String>(); private List<String> propertyActions = new ArrayList<String>(); @@ -137,76 +134,8 @@ public class VisualizationViewPart extends PageBookView implements return selectionSynchronizer; } - // Workaround for prevent recursive activation of part - @Override - public void setFocus() { - this.container.setFocus(); - super.setFocus(); - } - - public Visualization getVisualization() { - if (this.visualizationView != null) - return this.visualizationView.getVisualization(); - return null; - } - public GraphicalViewer getGraphicalViewer() { - if (page != null) - return page.getGraphicalViewer(); - return null; - } - - @Override - protected IPage createDefaultPage(PageBook book) { - MessagePage page = new MessagePage(); - initPage(page); - page.createControl(book); - page.setMessage("NA"); - return page; - } - - @Override - public void createPartControl(Composite parent) { - this.container = parent; - super.createPartControl(parent); - } - - @Override - protected PageRec doCreatePage(IWorkbenchPart part) { - - if (part instanceof BMotionStudioEditor) { - - BMotionStudioEditor cEditor = (BMotionStudioEditor) part; - - this.simulation = cEditor.getSimulation(); - if (this.simulation == null) - return null; - - Map<String, VisualizationView> visualizationViews = this.simulation - .getVisualizationViews(); - - this.visualizationView = visualizationViews - .get(getViewSite().getSecondaryId()); - - if (visualizationView == null) - return null; - - this.editor = cEditor; - this.editDomain = new EditDomain(); - this.editDomain.getCommandStack().addCommandStackListener(this); - - createActions(); - - page = new VisualizationViewPage(); - initPage(page); - page.createControl(getPageBook()); - - return new PageRec(part, page); - - } - - return null; - + return graphicalViewer; } /** @@ -220,28 +149,6 @@ public class VisualizationViewPart extends PageBookView implements return actionRegistry; } - @Override - protected void doDestroyPage(IWorkbenchPart part, PageRec rec) { - unregister(); - VisualizationViewPage page = (VisualizationViewPage) rec.page; - page.dispose(); - rec.dispose(); - } - - @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; } @@ -288,6 +195,47 @@ public class VisualizationViewPart extends PageBookView implements action = new SelectAllAction(this); registry.registerAction(action); + ZoomManager manager = rootEditPart.getZoomManager(); + getActionRegistry().registerAction(new ZoomInAction(manager)); + getActionRegistry().registerAction(new ZoomOutAction(manager)); + + double[] zoomLevels = new double[] { 0.25, 0.5, 0.75, 1.0, 1.5, 2.0, + 2.5, 3.0, 4.0, 5.0, 10.0, 20.0 }; + manager.setZoomLevels(zoomLevels); + ArrayList<String> zoomContributions = new ArrayList<String>(); + zoomContributions.add(ZoomManager.FIT_ALL); + zoomContributions.add(ZoomManager.FIT_HEIGHT); + zoomContributions.add(ZoomManager.FIT_WIDTH); + manager.setZoomLevelContributions(zoomContributions); + + getActionRegistry().registerAction( + new ToggleRulerVisibilityAction(getGraphicalViewer()) { + @Override + public void run() { + super.run(); + setChecked(!isChecked()); + editor.setDirty(true); + } + }); + getActionRegistry().registerAction( + new ToggleSnapToGeometryAction(getGraphicalViewer()) { + @Override + public void run() { + super.run(); + setChecked(!isChecked()); + editor.setDirty(true); + } + }); + getActionRegistry().registerAction( + new ToggleGridAction(getGraphicalViewer()) { + @Override + public void run() { + super.run(); + setChecked(!isChecked()); + editor.setDirty(true); + } + }); + installObserverActions(); installSchedulerActions(); @@ -363,244 +311,6 @@ public class VisualizationViewPart extends PageBookView implements } - private class VisualizationViewPage extends Page { - - private RulerComposite container; - - private GraphicalViewer graphicalViewer; - - private ScalableRootEditPart rootEditPart; - - @Override - public void init(IPageSite site) { - super.init(site); - } - - private void createActions() { - - ZoomManager manager = rootEditPart.getZoomManager(); - getActionRegistry().registerAction(new ZoomInAction(manager)); - getActionRegistry().registerAction(new ZoomOutAction(manager)); - - double[] zoomLevels = new double[] { 0.25, 0.5, 0.75, 1.0, 1.5, - 2.0, 2.5, 3.0, 4.0, 5.0, 10.0, 20.0 }; - manager.setZoomLevels(zoomLevels); - ArrayList<String> zoomContributions = new ArrayList<String>(); - zoomContributions.add(ZoomManager.FIT_ALL); - zoomContributions.add(ZoomManager.FIT_HEIGHT); - zoomContributions.add(ZoomManager.FIT_WIDTH); - manager.setZoomLevelContributions(zoomContributions); - - getActionRegistry().registerAction( - new ToggleRulerVisibilityAction(getGraphicalViewer()) { - @Override - public void run() { - super.run(); - setChecked(!isChecked()); - editor.setDirty(true); - } - }); - getActionRegistry().registerAction( - new ToggleSnapToGeometryAction(getGraphicalViewer()) { - @Override - public void run() { - super.run(); - setChecked(!isChecked()); - editor.setDirty(true); - } - }); - getActionRegistry().registerAction( - new ToggleGridAction(getGraphicalViewer()) { - @Override - public void run() { - super.run(); - setChecked(!isChecked()); - editor.setDirty(true); - } - }); - - } - - private void buildActions() { - - IActionBars bars = getSite().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.COPY.getId(), - ar.getAction(ActionFactory.COPY.getId())); - bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), - ar.getAction(ActionFactory.PASTE.getId())); - - bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), - ar.getAction(ActionFactory.DELETE.getId())); - - bars.updateActionBars(); - - } - - private void createMenu(final IPageSite pageSite) { - - pageSite.getActionBars() - .getToolBarManager() - .add(getActionRegistry().getAction( - ActionFactory.UNDO.getId())); - pageSite.getActionBars() - .getToolBarManager() - .add(getActionRegistry().getAction( - ActionFactory.REDO.getId())); - pageSite.getActionBars() - .getToolBarManager() - .add(getActionRegistry().getAction( - ActionFactory.COPY.getId())); - pageSite.getActionBars() - .getToolBarManager() - .add(getActionRegistry().getAction( - ActionFactory.PASTE.getId())); - pageSite.getActionBars() - .getToolBarManager() - .add(getActionRegistry().getAction( - ActionFactory.DELETE.getId())); - - pageSite.getActionBars().getToolBarManager().add(new Separator()); - - pageSite.getActionBars() - .getToolBarManager() - .add(getActionRegistry().getAction( - GEFActionConstants.ZOOM_IN)); - pageSite.getActionBars() - .getToolBarManager() - .add(getActionRegistry().getAction( - GEFActionConstants.ZOOM_OUT)); - - pageSite.getActionBars() - .getMenuManager() - .add(getActionRegistry().getAction( - GEFActionConstants.TOGGLE_GRID_VISIBILITY)); - pageSite.getActionBars() - .getMenuManager() - .add(getActionRegistry().getAction( - GEFActionConstants.TOGGLE_SNAP_TO_GEOMETRY)); - pageSite.getActionBars() - .getMenuManager() - .add(getActionRegistry().getAction( - GEFActionConstants.TOGGLE_RULER_VISIBILITY)); - - pageSite.getActionBars().updateActionBars(); - - // TODO Reimplement me! - // pageSite.getActionBars().getToolBarManager() - // .add(new ZoomComboContributionItem(pageSite.getPage())); - - } - - @Override - public void createControl(Composite parent) { - container = new RulerComposite(parent, SWT.NONE); - graphicalViewer = new ScrollingGraphicalViewer(); - graphicalViewer.createControl(container); - configureGraphicalViewer(); - initGraphicalViewer(); - hookGraphicalViewer(); - loadProperties(); - buildActions(); - createActions(); - createMenu(getSite()); - setPartName(getVisualizationView().getName()); - } - - protected void hookGraphicalViewer() { - getSelectionSynchronizer().addViewer(getGraphicalViewer()); - getSite().setSelectionProvider(getGraphicalViewer()); - } - - public void configureGraphicalViewer() { - - 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); - - graphicalViewer - .addSelectionChangedListener(new ISelectionChangedListener() { - @Override - public void selectionChanged(SelectionChangedEvent event) { - updateActions(selectionActions); - } - }); - - ContextMenuProvider provider = new BMSContextMenuProvider( - graphicalViewer, getActionRegistry()); - graphicalViewer.setContextMenu(provider); - - } - - public GraphicalViewer getGraphicalViewer() { - return graphicalViewer; - } - - public void initGraphicalViewer() { - graphicalViewer.setContents(getVisualization()); - } - - @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()); - - getGraphicalViewer().setProperty( - MouseWheelHandler.KeyGenerator.getKey(SWT.NONE), - MouseWheelZoomHandler.SINGLETON); - - } - - } - @Override public void dispose() { unregister(); @@ -617,7 +327,7 @@ public class VisualizationViewPart extends PageBookView implements @Override public void commandStackChanged(EventObject event) { updateActions(stackActions); - this.editor.setDirty(getCommandStack().isDirty()); + simulation.setDirty(getCommandStack().isDirty()); } /** @@ -652,4 +362,180 @@ public class VisualizationViewPart extends PageBookView implements return selectionActions; } + @Override + public void createPartControl(Composite parent) { + container = new RulerComposite(parent, SWT.NONE); + } + + @Override + public void setFocus() { + } + + public void init(Simulation simulation, VisualizationView visualizationView) { + this.simulation = simulation; + this.graphicalViewer = new ScrollingGraphicalViewer(); + this.graphicalViewer.createControl(this.container); + Visualization visualization = visualizationView.getVisualization(); + this.editDomain = new EditDomain(); + this.editDomain.getCommandStack().addCommandStackListener(this); + configureGraphicalViewer(visualization); + hookGraphicalViewer(); + loadProperties(visualization); + buildActions(); + createActions(); + createMenu(getViewSite()); + setPartName(visualizationView.getName()); + getGraphicalViewer().setContents(visualization); + setInitialized(true); + } + + protected void hookGraphicalViewer() { + getSelectionSynchronizer().addViewer(getGraphicalViewer()); + getSite().setSelectionProvider(getGraphicalViewer()); + } + + public void configureGraphicalViewer(Visualization visualization) { + + rootEditPart = new ScalableRootEditPart(); + rootEditPart.setViewer(graphicalViewer); + graphicalViewer.setRootEditPart(rootEditPart); + graphicalViewer.setEditPartFactory(new BMSEditPartFactory()); + container + .setGraphicalViewer((ScrollingGraphicalViewer) graphicalViewer); + graphicalViewer.setEditDomain(getEditDomain()); + graphicalViewer + .addDropTargetListener(new BControlTransferDropTargetListener( + graphicalViewer, visualization)); + graphicalViewer.getControl().setBackground(ColorConstants.white); + + graphicalViewer + .addSelectionChangedListener(new ISelectionChangedListener() { + @Override + public void selectionChanged(SelectionChangedEvent event) { + updateActions(selectionActions); + } + }); + + ContextMenuProvider provider = new BMSContextMenuProvider( + graphicalViewer, getActionRegistry()); + graphicalViewer.setContextMenu(provider); + + } + + private void buildActions() { + + IActionBars bars = getViewSite().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.COPY.getId(), + ar.getAction(ActionFactory.COPY.getId())); + bars.setGlobalActionHandler(ActionFactory.PASTE.getId(), + ar.getAction(ActionFactory.PASTE.getId())); + + bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), + ar.getAction(ActionFactory.DELETE.getId())); + + bars.updateActionBars(); + + } + + private void createMenu(final IViewSite iViewSite) { + + iViewSite.getActionBars().getToolBarManager() + .add(getActionRegistry().getAction(ActionFactory.UNDO.getId())); + iViewSite.getActionBars().getToolBarManager() + .add(getActionRegistry().getAction(ActionFactory.REDO.getId())); + iViewSite.getActionBars().getToolBarManager() + .add(getActionRegistry().getAction(ActionFactory.COPY.getId())); + iViewSite + .getActionBars() + .getToolBarManager() + .add(getActionRegistry().getAction(ActionFactory.PASTE.getId())); + iViewSite + .getActionBars() + .getToolBarManager() + .add(getActionRegistry() + .getAction(ActionFactory.DELETE.getId())); + + iViewSite.getActionBars().getToolBarManager().add(new Separator()); + + iViewSite.getActionBars().getToolBarManager() + .add(getActionRegistry().getAction(GEFActionConstants.ZOOM_IN)); + iViewSite + .getActionBars() + .getToolBarManager() + .add(getActionRegistry().getAction(GEFActionConstants.ZOOM_OUT)); + + iViewSite + .getActionBars() + .getMenuManager() + .add(getActionRegistry().getAction( + GEFActionConstants.TOGGLE_GRID_VISIBILITY)); + iViewSite + .getActionBars() + .getMenuManager() + .add(getActionRegistry().getAction( + GEFActionConstants.TOGGLE_SNAP_TO_GEOMETRY)); + iViewSite + .getActionBars() + .getMenuManager() + .add(getActionRegistry().getAction( + GEFActionConstants.TOGGLE_RULER_VISIBILITY)); + + iViewSite.getActionBars().updateActionBars(); + + // TODO Reimplement me! + // pageSite.getActionBars().getToolBarManager() + // .add(new ZoomComboContributionItem(pageSite.getPage())); + + } + + protected void loadProperties(Visualization visualization) { + + // Ruler properties + BMotionRuler ruler = visualization.getRuler( + PositionConstants.WEST); + RulerProvider provider = null; + if (ruler != null) { + provider = new BMotionRulerProvider(ruler); + } + getGraphicalViewer().setProperty( + RulerProvider.PROPERTY_VERTICAL_RULER, provider); + ruler = visualization.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, + visualization.getRulerVisibility()); + getGraphicalViewer().setProperty( + SnapToGeometry.PROPERTY_SNAP_ENABLED, + visualization.isSnapToGeometryEnabled()); + getGraphicalViewer().setProperty(SnapToGrid.PROPERTY_GRID_ENABLED, + visualization.isGridEnabled()); + getGraphicalViewer().setProperty(SnapToGrid.PROPERTY_GRID_VISIBLE, + visualization.isGridEnabled()); + + getGraphicalViewer().setProperty( + MouseWheelHandler.KeyGenerator.getKey(SWT.NONE), + MouseWheelZoomHandler.SINGLETON); + + } + + public boolean isInitialized() { + return isInitialized; + } + + public void setInitialized(boolean isInitialized) { + this.isInitialized = isInitialized; + } + } diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/Simulation.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/Simulation.java index f99cec3d117aded76318d10dd4a4300204b79605..bb59e02e24127f876ccce29fc6f3a82d4d8209c9 100644 --- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/Simulation.java +++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/model/Simulation.java @@ -1,12 +1,22 @@ package de.bmotionstudio.gef.editor.model; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; import java.util.HashMap; import java.util.Map; +import org.eclipse.core.resources.IFile; + public class Simulation { + private transient PropertyChangeSupport listeners; + private Map<String, VisualizationView> views; + private transient IFile projectFile; + + private transient boolean dirty; + public Simulation() { this.views = new HashMap<String, VisualizationView>(); } @@ -20,4 +30,36 @@ public class Simulation { this.views = visualizationViews; } + public IFile getProjectFile() { + return projectFile; + } + + public void setProjectFile(IFile projectFile) { + this.projectFile = projectFile; + } + + public boolean isDirty() { + return dirty; + } + + public void setDirty(boolean dirty) { + boolean oldVal = this.dirty; + this.dirty = dirty; + listeners.firePropertyChange("dirty", oldVal, dirty); + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + getListeners().addPropertyChangeListener(listener); + } + + public PropertyChangeSupport getListeners() { + if (listeners == null) + listeners = new PropertyChangeSupport(this); + return listeners; + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + getListeners().removePropertyChangeListener(listener); + } + }