Skip to content
Snippets Groups Projects
Commit 6ca1f3fe authored by Lukas Ladenberger's avatar Lukas Ladenberger
Browse files

working on multiple view feature

parent de5cbd1b
No related branches found
No related tags found
No related merge requests found
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
extensions="bmso" extensions="bmso"
icon="icons/logo_bmotion.png" icon="icons/logo_bmotion.png"
id="de.bmotionstudio.gef.editor.BMotionStudioEditor" id="de.bmotionstudio.gef.editor.BMotionStudioEditor"
name="BMotion Studio Editor"> name="BMotion Studio">
</editor> </editor>
</extension> </extension>
<extension <extension
...@@ -65,6 +65,7 @@ ...@@ -65,6 +65,7 @@
allowMultiple="true" allowMultiple="true"
category="de.bmotionstudio.views" category="de.bmotionstudio.views"
class="de.bmotionstudio.gef.editor.VisualizationViewPart" class="de.bmotionstudio.gef.editor.VisualizationViewPart"
icon="icons/logo_bmotion.png"
id="de.bmotionstudio.gef.editor.VisualizationView" id="de.bmotionstudio.gef.editor.VisualizationView"
name="Visualization" name="Visualization"
restorable="true"> restorable="true">
...@@ -76,6 +77,14 @@ ...@@ -76,6 +77,14 @@
name="Palette" name="Palette"
restorable="true"> restorable="true">
</view> </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>
<extension <extension
point="org.eclipse.ui.menus"> point="org.eclipse.ui.menus">
...@@ -164,6 +173,15 @@ ...@@ -164,6 +173,15 @@
</enabledWhen> </enabledWhen>
</handler> </handler>
</extension> </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 <extension
point="de.prob.core.animation"> point="de.prob.core.animation">
<listener <listener
......
...@@ -2,6 +2,7 @@ package de.bmotionstudio.gef.editor; ...@@ -2,6 +2,7 @@ package de.bmotionstudio.gef.editor;
import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.ColorConstants;
import org.eclipse.gef.EditDomain; import org.eclipse.gef.EditDomain;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.ui.palette.PaletteViewer; import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FillLayout;
...@@ -18,7 +19,9 @@ import org.eclipse.ui.part.PageBookView; ...@@ -18,7 +19,9 @@ import org.eclipse.ui.part.PageBookView;
public class BMSPaletteView extends PageBookView { public class BMSPaletteView extends PageBookView {
// private PaletteViewer paletteViewer; private PaletteViewer paletteViewer;
public static String ID = "de.bmotionstudio.gef.editor.PaletteView";
@Override @Override
protected IWorkbenchPart getBootstrapPart() { protected IWorkbenchPart getBootstrapPart() {
...@@ -29,6 +32,17 @@ public class BMSPaletteView extends PageBookView { ...@@ -29,6 +32,17 @@ public class BMSPaletteView extends PageBookView {
return null; 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 @Override
protected PageRec doCreatePage(IWorkbenchPart part) { protected PageRec doCreatePage(IWorkbenchPart part) {
if (part instanceof VisualizationViewPart) { if (part instanceof VisualizationViewPart) {
...@@ -40,11 +54,6 @@ public class BMSPaletteView extends PageBookView { ...@@ -40,11 +54,6 @@ public class BMSPaletteView extends PageBookView {
return null; return null;
} }
@Override
public void partActivated(IWorkbenchPart part) {
super.partActivated(part);
}
@Override @Override
protected boolean isImportant(IWorkbenchPart part) { protected boolean isImportant(IWorkbenchPart part) {
return part instanceof VisualizationViewPart; return part instanceof VisualizationViewPart;
...@@ -55,17 +64,19 @@ public class BMSPaletteView extends PageBookView { ...@@ -55,17 +64,19 @@ public class BMSPaletteView extends PageBookView {
private Composite container; private Composite container;
protected void createPaletteViewer(Composite parent) { protected void createPaletteViewer(Composite parent) {
PaletteViewer viewer = new PaletteViewer(); paletteViewer = new PaletteViewer();
viewer.createControl(parent); paletteViewer.createControl(parent);
viewer.getControl().setBackground(ColorConstants.green); paletteViewer.getControl().setBackground(ColorConstants.green);
EditDomain domain = new EditDomain(); paletteViewer.setPaletteRoot(new EditorPaletteFactory()
domain.setPaletteViewer(viewer); .createPalette(null));
paletteViewer
.addDragSourceListener(new TemplateTransferDragSourceListener(
paletteViewer));
} }
@Override @Override
public void createControl(Composite parent) { public void createControl(Composite parent) {
container = new Composite(parent, SWT.NONE); container = new Composite(parent, SWT.NONE);
container.setBackground(ColorConstants.red);
container.setLayout(new FillLayout()); container.setLayout(new FillLayout());
createPaletteViewer(container); createPaletteViewer(container);
} }
...@@ -92,8 +103,6 @@ public class BMSPaletteView extends PageBookView { ...@@ -92,8 +103,6 @@ public class BMSPaletteView extends PageBookView {
@Override @Override
protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) { protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) {
// TODO Auto-generated method stub
} }
} }
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);
}
}
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();
}
}
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;
}
}
...@@ -15,6 +15,7 @@ import java.io.FileOutputStream; ...@@ -15,6 +15,7 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.util.EventObject;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
...@@ -31,6 +32,7 @@ import org.eclipse.core.runtime.preferences.InstanceScope; ...@@ -31,6 +32,7 @@ import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.core.runtime.preferences.PreferenceFilterEntry; import org.eclipse.core.runtime.preferences.PreferenceFilterEntry;
import org.eclipse.gef.EditDomain; import org.eclipse.gef.EditDomain;
import org.eclipse.gef.commands.CommandStack; import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.commands.CommandStackListener;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.events.SelectionListener;
...@@ -47,7 +49,6 @@ import org.eclipse.ui.IPerspectiveRegistry; ...@@ -47,7 +49,6 @@ import org.eclipse.ui.IPerspectiveRegistry;
import org.eclipse.ui.IViewReference; import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException; import org.eclipse.ui.PartInitException;
...@@ -114,11 +115,12 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -114,11 +115,12 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
// Yes --> just switch to this perspective // Yes --> just switch to this perspective
if (perspective != null) { if (perspective != null) {
System.out.println("Swtich perspective");
switchPerspective(perspective.getId()); switchPerspective(perspective.getId());
} else { } else {
// No --> create a new one // No --> create a new one
IPerspectiveDescriptor originalPerspectiveDescriptor = perspectiveRegistry IPerspectiveDescriptor originalPerspectiveDescriptor = perspectiveRegistry
.findPerspectiveWithId("de.bmotionstudio.perspective.run"); .findPerspectiveWithId(BMSPerspectiveFactory.ID);
switchPerspective(originalPerspectiveDescriptor.getId()); switchPerspective(originalPerspectiveDescriptor.getId());
perspective = perspectiveRegistry.clonePerspective(perspectiveId, perspective = perspectiveRegistry.clonePerspective(perspectiveId,
perspectiveId, originalPerspectiveDescriptor); perspectiveId, originalPerspectiveDescriptor);
...@@ -240,6 +242,7 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -240,6 +242,7 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
@Override @Override
public void dispose() { public void dispose() {
getCommandStack().removeCommandStackListener(getCommandStackListener());
IWorkbenchPage activePage = PlatformUI.getWorkbench() IWorkbenchPage activePage = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage(); .getActiveWorkbenchWindow().getActivePage();
if (activePage != null) if (activePage != null)
...@@ -255,9 +258,11 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -255,9 +258,11 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
file = ((IFileEditorInput) input).getFile(); file = ((IFileEditorInput) input).getFile();
InputStream inputStream = null;
try { try {
InputStream inputStream = file.getContents(); inputStream = file.getContents();
XStream xstream = new XStream() { XStream xstream = new XStream() {
@Override @Override
...@@ -296,7 +301,8 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -296,7 +301,8 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
"New Visualization View", visualization); "New Visualization View", visualization);
String secId = UUID.randomUUID().toString(); String secId = UUID.randomUUID().toString();
createVisualizationViewPart(secId, editDomain, visualization); createVisualizationViewPart(secId, editDomain,
visualizationView);
simulation.getVisualizationViews() simulation.getVisualizationViews()
.put(secId, visualizationView); .put(secId, visualizationView);
...@@ -316,47 +322,58 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -316,47 +322,58 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
vis.setProjectFile(file); vis.setProjectFile(file);
// String partName = visView.getPartName(); // String partName = visView.getPartName();
IViewReference viewReference = site.getPage() IViewReference viewReference = site.getPage()
.findViewReference( .findViewReference(VisualizationViewPart.ID, secId);
VisualizationViewPart.ID, secId);
// Check if view already exists // Check if view already exists
if (viewReference != null) { if (viewReference != null) {
VisualizationViewPart visualizationView = (VisualizationViewPart) viewReference
.getView(false);
if (visualizationView != null) {
visualizationView.initGraphicalViewer(editDomain,
vis);
} else {
//TODO return some error!
}
} else { } else {
// If not, create a new one // 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) { } catch (CoreException e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try {
if (inputStream != null)
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
setSite(site); setSite(site);
setInput(input); setInput(input);
getCommandStack().addCommandStackListener(getCommandStackListener());
} }
private VisualizationViewPart createVisualizationViewPart(String secId, private VisualizationViewPart createVisualizationViewPart(String secId,
EditDomain editDomain, Visualization visualization) EditDomain editDomain, VisualizationView visualizationView)
throws PartInitException { throws PartInitException {
IWorkbenchWindow window = PlatformUI.getWorkbench() IWorkbenchWindow window = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow(); .getActiveWorkbenchWindow();
IWorkbenchPage activePage = window.getActivePage(); IWorkbenchPage activePage = window.getActivePage();
VisualizationViewPart visualizationView = (VisualizationViewPart) activePage VisualizationViewPart visualizationViewPart = (VisualizationViewPart) activePage
.showView(VisualizationViewPart.ID, secId, .showView(VisualizationViewPart.ID, secId,
IWorkbenchPage.VIEW_VISIBLE); IWorkbenchPage.VIEW_VISIBLE);
visualizationView.initGraphicalViewer(editDomain, visualization); return visualizationViewPart;
return visualizationView;
} }
private void switchPerspective(String id) { private void switchPerspective(String id) {
...@@ -386,13 +403,14 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -386,13 +403,14 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
@Override @Override
public void doSave(final IProgressMonitor monitor) { public void doSave(final IProgressMonitor monitor) {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
.savePerspectiveAs(perspective);
exportPerspective(perspective); exportPerspective(perspective);
ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream();
OutputStreamWriter writer = null;
try { try {
// saveProperties(); // saveProperties();
OutputStreamWriter writer = new OutputStreamWriter(out, "UTF8"); writer = new OutputStreamWriter(out, "UTF8");
XStream xstream = new XStream(); XStream xstream = new XStream();
BMotionEditorPlugin.setAliases(xstream); BMotionEditorPlugin.setAliases(xstream);
xstream.toXML(simulation, writer); xstream.toXML(simulation, writer);
...@@ -404,8 +422,15 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -404,8 +422,15 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
ce.printStackTrace(); ce.printStackTrace();
} catch (IOException ioe) { } catch (IOException ioe) {
ioe.printStackTrace(); ioe.printStackTrace();
} finally {
try {
out.close();
if (writer != null)
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
} }
@Override @Override
...@@ -446,14 +471,14 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -446,14 +471,14 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
"RushHour.bmso", "RushHour.bmso",
"EventB", version); "EventB", version);
createVisualizationViewPart(secId, editDomain,
visualization);
VisualizationView visualizationView = new VisualizationView( VisualizationView visualizationView = new VisualizationView(
"New Visulization View", visualization); "New Visulization View", visualization);
simulation.getVisualizationViews().put(secId, simulation.getVisualizationViews().put(secId,
visualizationView); visualizationView);
createVisualizationViewPart(secId, editDomain,
visualizationView);
setDirty(true); setDirty(true);
} catch (PartInitException e1) { } catch (PartInitException e1) {
...@@ -473,6 +498,24 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -473,6 +498,24 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
public void setFocus() { 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() { public CommandStack getCommandStack() {
return getEditDomain().getCommandStack(); return getEditDomain().getCommandStack();
} }
...@@ -483,9 +526,9 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -483,9 +526,9 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
@Override @Override
public void partActivated(IWorkbenchPartReference partRef) { public void partActivated(IWorkbenchPartReference partRef) {
IWorkbenchPart part = partRef.getPart(false); // IWorkbenchPart part = partRef.getPart(false);
if (part == this) // if (part == this)
openPerspective(partRef.getPage()); // openPerspective(partRef.getPage());
} }
@Override @Override
...@@ -499,6 +542,11 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 { ...@@ -499,6 +542,11 @@ public class BMotionStudioEditor extends EditorPart implements IPartListener2 {
exportPerspective(perspective); exportPerspective(perspective);
closePerspective(partRef.getPage(), perspective); closePerspective(partRef.getPage(), perspective);
deletePerspective(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);
} }
} }
......
package de.bmotionstudio.gef.editor; package de.bmotionstudio.gef.editor;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.gef.EditDomain; import org.eclipse.gef.EditDomain;
import org.eclipse.gef.GraphicalViewer; 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.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.parts.ScrollingGraphicalViewer;
import org.eclipse.gef.ui.rulers.RulerComposite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite; 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 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.Visualization;
import de.bmotionstudio.gef.editor.model.VisualizationView;
import de.bmotionstudio.gef.editor.part.BMSEditPartFactory; 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"; public static String ID = "de.bmotionstudio.gef.editor.VisualizationView";
private EditDomain editDomain; 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 private VisualizationViewPage page;
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());
}
@Override @Override
public Object getAdapter(@SuppressWarnings("rawtypes") Class type) { public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
// Adapter for zoom manager // // Adapter for zoom manager
if (type == ZoomManager.class) // if (type == ZoomManager.class)
return ((ScalableRootEditPart) getGraphicalViewer() // return ((ScalableRootEditPart) getGraphicalViewer()
.getRootEditPart()).getZoomManager(); // .getRootEditPart()).getZoomManager();
// if (type == IContentOutlinePage.class) if (type == IContentOutlinePage.class) {
// return new BMotionOutlinePage(); return new BMotionOutlinePage(this);
}
//
// Adapter for property page // Adapter for property page
if (type == IPropertySheetPage.class) { if (type == IPropertySheetPage.class) {
BMotionStudioPropertySheet page = new BMotionStudioPropertySheet(); BMotionStudioPropertySheet page = new BMotionStudioPropertySheet();
page.setRootEntry(new CustomSortPropertySheetEntry( page.setRootEntry(new CustomSortPropertySheetEntry(editDomain
getCommandStack())); .getCommandStack()));
return page; return page;
} }
...@@ -63,28 +64,162 @@ public class VisualizationViewPart extends ViewPart { ...@@ -63,28 +64,162 @@ public class VisualizationViewPart extends ViewPart {
} }
public CommandStack getCommandStack() { @Override
return getEditDomain().getCommandStack(); public void setFocus() {
}
public Visualization getVisualization() {
return this.visualizationView.getVisualization();
}
public GraphicalViewer getGraphicalViewer() {
return page.getGraphicalViewer();
}
@Override
protected IPage createDefaultPage(PageBook book) {
MessagePage page = new MessagePage();
initPage(page);
page.createControl(book);
page.setMessage("NA");
return page;
}
@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;
} }
protected EditDomain getEditDomain() { public EditDomain getEditDomain() {
return editDomain; return editDomain;
} }
protected GraphicalViewer getGraphicalViewer() { public void setEditDomain(EditDomain editDomain) {
this.editDomain = editDomain;
}
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; 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 @Override
public void setFocus() { public void setFocus() {
} }
public Visualization getVisualization() { protected void loadProperties() {
return visualization;
// 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());
} }
public void setVisualization(Visualization visualization) {
this.visualization = visualization;
} }
} }
...@@ -18,6 +18,7 @@ import de.bmotionstudio.gef.editor.model.Visualization; ...@@ -18,6 +18,7 @@ import de.bmotionstudio.gef.editor.model.Visualization;
public class BMSTreeEditPartFactory implements EditPartFactory { public class BMSTreeEditPartFactory implements EditPartFactory {
@Override
public EditPart createEditPart(EditPart context, Object model) { public EditPart createEditPart(EditPart context, Object model) {
BMSAbstractTreeEditPart part = null; BMSAbstractTreeEditPart part = null;
...@@ -51,6 +52,8 @@ public class BMSTreeEditPartFactory implements EditPartFactory { ...@@ -51,6 +52,8 @@ public class BMSTreeEditPartFactory implements EditPartFactory {
if (part != null) if (part != null)
part.setModel(model); part.setModel(model);
System.out.println("CREATE EDIT PART!!! " + part);
return part; return part;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment