Tuesday, July 29, 2008

DiagramEditor.java

package cn.edu.whu.sklse.aopworkshop.aosa.ui;

import java.util.ArrayList;
import java.util.EventObject;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.GroupBoxBorder;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.parts.ScrollableThumbnail;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.KeyHandler;
import org.eclipse.gef.KeyStroke;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.MouseWheelHandler;
import org.eclipse.gef.MouseWheelZoomHandler;
import org.eclipse.gef.SnapToGeometry;
import org.eclipse.gef.SnapToGrid;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.editparts.ScalableRootEditPart;
import org.eclipse.gef.editparts.ZoomManager;
import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
import org.eclipse.gef.palette.ConnectionCreationToolEntry;
import org.eclipse.gef.palette.CreationToolEntry;
import org.eclipse.gef.palette.MarqueeToolEntry;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.PaletteSeparator;
import org.eclipse.gef.palette.PanningSelectionToolEntry;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.requests.SimpleFactory;
import org.eclipse.gef.rulers.RulerProvider;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.actions.AlignmentAction;
import org.eclipse.gef.ui.actions.DirectEditAction;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gef.ui.actions.ToggleGridAction;
import org.eclipse.gef.ui.actions.ToggleSnapToGeometryAction;
import org.eclipse.gef.ui.actions.ZoomInAction;
import org.eclipse.gef.ui.actions.ZoomOutAction;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.gef.ui.palette.PaletteViewerProvider;
import org.eclipse.gef.ui.palette.FlyoutPaletteComposite.FlyoutPreferences;
import org.eclipse.gef.ui.parts.ContentOutlinePage;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.gef.ui.parts.TreeViewer;
import org.eclipse.gef.ui.rulers.RulerComposite;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor;
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.ui.IActionBars;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;

import cn.edu.whu.sklse.aopworkshop.aosa.AosaPlugin;
import cn.edu.whu.sklse.aopworkshop.aosa.Application;
import cn.edu.whu.sklse.aopworkshop.aosa.constants.DiagramPaletteStrings;
import cn.edu.whu.sklse.aopworkshop.aosa.constants.IIconNames;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ArrowConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.AspectComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.CombinationConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ConnectorModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.CrosscutConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.CrosscutInterfaceComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.InOutConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.InterfaceComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.LogicRuler;
import cn.edu.whu.sklse.aopworkshop.aosa.models.NoteComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.ParentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.LineConnectionModel;
import cn.edu.whu.sklse.aopworkshop.aosa.models.WhiteInterfaceComponentModel;
import cn.edu.whu.sklse.aopworkshop.aosa.parts.PartFactory;
import cn.edu.whu.sklse.aopworkshop.aosa.parts.TreeEditPartFactory;
import cn.edu.whu.sklse.aopworkshop.aosa.rulers.LogicRulerProvider;

/**
* @author Terry Qu
*
*/
public class DiagramEditor extends GraphicalEditorWithFlyoutPalette {

/**
*
*/
public static final String ID = "cn.edu.whu.sklse.aopworkshop.aosa.ui.DiagramEditor";

GraphicalViewer diagramViewer;

private ParentModel parentModel;

public DiagramEditor() {
super();
setEditDomain(new DefaultEditDomain(this));
}

protected void loadProperties() {

}

/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer()
*/
protected void initializeGraphicalViewer() {
diagramViewer = getGraphicalViewer();
diagramViewer.setProperty(SnapToGrid.PROPERTY_GRID_ENABLED,
new Boolean(true));
// We keep grid visibility and enablement in sync
diagramViewer.setProperty(SnapToGrid.PROPERTY_GRID_VISIBLE,
new Boolean(true));
diagramViewer.setProperty(SnapToGeometry.PROPERTY_SNAP_ENABLED,
new Boolean(true));

// diagramViewer.setProperty(RulerProvider.PROPERTY_VERTICAL_RULER,new
// SubjectRulerProvider(diagram.getLeftRuler()));
// diagramViewer().setProperty(RulerProvider.PROPERTY_HORIZONTAL_RULER,
// new SubjectRulerProvider(diagram.getTopRuler()));
// diagramViewer().setProperty(RulerProvider.PROPERTY_RULER_VISIBILITY,new
// Boolean(diagram.isRulerVisibility()));
//
// // Ruler properties
// LogicRuler ruler = diagramViewer().getRuler(PositionConstants.WEST);
// RulerProvider provider = null;
// if (ruler != null) {
// provider = new LogicRulerProvider(ruler);
// }
// getGraphicalViewer().setProperty(RulerProvider.PROPERTY_VERTICAL_RULER,
// provider);
// ruler = getLogicDiagram().getRuler(PositionConstants.NORTH);
// provider = null;
// if (ruler != null) {
// provider = new LogicRulerProvider(ruler);
// }
// getGraphicalViewer().setProperty(RulerProvider.PROPERTY_HORIZONTAL_RULER,
// provider);
// getGraphicalViewer().setProperty(RulerProvider.PROPERTY_RULER_VISIBILITY,
// new Boolean(getLogicDiagram().getRulerVisibility()));
// Ruler properties
///%%%%%%%%%%%%%%
LogicRuler ruler = new LogicRuler(true);
RulerProvider provider = null;
if (ruler != null) {
provider = new LogicRulerProvider(ruler);
}
getGraphicalViewer().setProperty(RulerProvider.PROPERTY_VERTICAL_RULER,
provider);
ruler = new LogicRuler(true);
provider = null;
if (ruler != null) {
provider = new LogicRulerProvider(ruler);
}
getGraphicalViewer().setProperty(
RulerProvider.PROPERTY_HORIZONTAL_RULER, provider);
getGraphicalViewer().setProperty(
RulerProvider.PROPERTY_RULER_VISIBILITY, new Boolean(true));

parentModel = new ParentModel();
// ComponentModel componentModel_1 = new ComponentModel();
// componentModel_1.setRectConstraint(new Rectangle(0, 0, -1, -1));
//
// InterfaceComponentModel inter = new InterfaceComponentModel();
// inter.setConstraint(new Rectangle(30, 30, -1, -1));
// NoteComponentModel noteComponentModel = new NoteComponentModel();
// noteComponentModel.setRecConstraint(new Rectangle(80, 80, 80,50));
// parentModel.addChild(componentModel_1);
// parentModel.addChild(inter);
// parentModel.addChild(noteComponentModel);
diagramViewer.setContents(parentModel);
diagramViewer.setProperty(MouseWheelHandler.KeyGenerator
.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);
}

/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
*/
public void doSave(IProgressMonitor monitor) {
// TODO Auto-generated method stub
getCommandStack().markSaveLocation();
}

/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.EditorPart#doSaveAs()
*/
public void doSaveAs() {
// TODO Auto-generated method stub

}

public boolean isDirty() {
return getCommandStack().isDirty();// true * dirty
}

//
public void commandStackChanged(EventObject event) {
firePropertyChange(IEditorPart.PROP_DIRTY);

super.commandStackChanged(event);
}

/*
* (non-Javadoc)
*
* @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
*/
public boolean isSaveAsAllowed() {
// TODO Auto-generated method stub
return false;
}

// getGraphicalControl RulerComposite

// 配置GraphicalViewer
// 把自定义的PartFactory映射到GraphicalViewer上的EditPartFactory
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
diagramViewer = getGraphicalViewer();
diagramViewer.setEditPartFactory(new PartFactory());
IEditorSite editorSite = getEditorSite();

// create keyboard operation keyhandler
KeyHandler keyHandler = new KeyHandler();

keyHandler.put(KeyStroke.getPressed(SWT.DEL, 127, 0),
getActionRegistry().getAction(GEFActionConstants.DELETE));
keyHandler.put(KeyStroke.getPressed(SWT.F3, 0), getActionRegistry()
.getAction(GEFActionConstants.DIRECT_EDIT));
keyHandler.put(KeyStroke.getPressed(SWT.INSERT, 0), getActionRegistry()
.getAction(GEFActionConstants.EDIT_START));
// getGraphicalViewer().setKeyHandler(keyHandler);
getGraphicalViewer().setKeyHandler(
new GraphicalViewerKeyHandler(getGraphicalViewer())
.setParent(keyHandler));

ContextMenuProvider provider = new DiagramEditorContextMenuProvider(
diagramViewer, getActionRegistry());
diagramViewer.setContextMenu(provider);
getSite().registerContextMenu(
"cn.whu.sklse.aopworkshop.aoso.diagrameditor.contextmenu",
provider, diagramViewer);
ScalableRootEditPart rootEditPart = new ScalableRootEditPart();
diagramViewer.setRootEditPart(rootEditPart);
// get a ZoomManager
ZoomManager manager = rootEditPart.getZoomManager();
//
double[] zoomLevels = new double[] {
// 252000
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 zoomContributions = new ArrayList();
zoomContributions.add(ZoomManager.FIT_ALL);
zoomContributions.add(ZoomManager.FIT_HEIGHT);
zoomContributions.add(ZoomManager.FIT_WIDTH);
manager.setZoomLevelContributions(zoomContributions);
// magnify
IAction zoomIn = new ZoomInAction(manager);

getActionRegistry().registerAction(zoomIn);
// shrink
IAction zoomOut = new ZoomOutAction(manager);

getActionRegistry().registerAction(zoomOut);
getSite().getKeyBindingService().registerAction(zoomIn);
getSite().getKeyBindingService().registerAction(zoomOut);
IAction showGrid = new ToggleGridAction(diagramViewer);
showGrid.setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
Application.PLUGIN_ID, "icons/help.gif"));
showGrid.setToolTipText("show a grid on the background");
getActionRegistry().registerAction(showGrid);
IAction snapAction = new ToggleSnapToGeometryAction(diagramViewer);
getActionRegistry().registerAction(snapAction);
}

/**
* A generic selection tool.
*/
private static ToolEntry _selectionTool = new PanningSelectionToolEntry(
DiagramPaletteStrings.SELECTION_LABEL,
DiagramPaletteStrings.SELECTION_DESCRIPTION);

/**
* @return The generic selection tool.
*/
public static ToolEntry getSelectionTool() {
return _selectionTool;
}

/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditorWithPalette#getPaletteRoot()
*/
protected PaletteRoot getPaletteRoot() {
// TODO Auto-generated method stub
PaletteRoot paletteRoot = new PaletteRoot();
// PaletteGroup tools = new
// PaletteGroup(DiagramPaletteStrings.GROUP_MAIN_LABEL);
paletteRoot.setDefaultEntry(getSelectionTool());
ToolEntry marqueeTool = new MarqueeToolEntry();
ImageDescriptor descriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.COMPONENT_MODEL);

//notation
ImageDescriptor noteDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.NOTE_COMPONENT_MODEL);
CombinedTemplateCreationEntry combinedTemplateCreationEntry = new CombinedTemplateCreationEntry(
"Notation", "make notations for graphs", NoteComponentModel.class,
new SimpleFactory(NoteComponentModel.class), noteDescriptor, noteDescriptor);

//provided port
ImageDescriptor interDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry interTemplateCreationEntry = new CombinedTemplateCreationEntry(
"provided port ", "create a provided port ",InterfaceComponentModel.class,
new SimpleFactory(InterfaceComponentModel.class),
interDescriptor, interDescriptor);

//connector
ImageDescriptor connectorDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry connectTemplateCreationEntry = new CombinedTemplateCreationEntry(
"connector ", "create a connector used by kinds of components",ConnectorModel.class,
new SimpleFactory(ConnectorModel.class),
connectorDescriptor, connectorDescriptor);

//aspect
ImageDescriptor aspectDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.ASPECT_COMPONENT_MODEL);
CombinedTemplateCreationEntry aspectTemplateCreationEntry = new CombinedTemplateCreationEntry(
"Aspect Component ", "create a aspect component used ",AspectComponentModel.class,
new SimpleFactory(AspectComponentModel.class),
aspectDescriptor, aspectDescriptor);

ImageDescriptor whiteInterDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.WHITE_INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry whiteInterTemplateCreationEntry = new CombinedTemplateCreationEntry(
"required port ", "create a required port ",WhiteInterfaceComponentModel.class,
new SimpleFactory(WhiteInterfaceComponentModel.class),
whiteInterDescriptor, whiteInterDescriptor);

ImageDescriptor cutInterDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.CROSSCUT_INTERFACE_COMPONENT_MODEL);
CombinedTemplateCreationEntry cutInterTemplateCreationEntry = new CombinedTemplateCreationEntry(
"crosscutting port ", "create a crosscutting port ",CrosscutInterfaceComponentModel.class,
new SimpleFactory(CrosscutInterfaceComponentModel.class),
cutInterDescriptor, cutInterDescriptor);
/////////////drawer
PaletteDrawer drawer = new PaletteDrawer(
DiagramPaletteStrings.DRAWER_LABEL);

CreationToolEntry creationToolEntry = new CreationToolEntry(
"Base Commponent", "create a base component", new SimpleFactory(
ComponentModel.class), descriptor, descriptor);
drawer.add(creationToolEntry);


// ConnectionCreationToolEntry noteCreationToolEntry = new ConnectionCreationToolEntry(
// "Notation ", "make notations for graphs",
// new SimpleFactory(NoteComponentModel.class),
// noteDescriptor, noteDescriptor);


ImageDescriptor descriptorRelationship = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.RELATIONSHIP_MODEL);
ConnectionCreationToolEntry conCreationToolEntry = new ConnectionCreationToolEntry(
"association ", "create a association among components and connectors ", new SimpleFactory(
LineConnectionModel.class), descriptorRelationship,
descriptorRelationship);
drawer.add(conCreationToolEntry);
drawer.add(new PaletteSeparator());
ImageDescriptor arrowDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.ARROW_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry arrowConCreationToolEntry = new ConnectionCreationToolEntry(
"arrow connector", "create a arrow connector ",
new SimpleFactory(ArrowConnectionModel.class), arrowDescriptor,
arrowDescriptor);
drawer.add(arrowConCreationToolEntry);

ImageDescriptor crosscutDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.CROSSCUT_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry crosscutConCreationToolEntry = new ConnectionCreationToolEntry(
"crosscutting ", "create a crosscutting relationship ",
new SimpleFactory(CrosscutConnectionModel.class),
crosscutDescriptor, crosscutDescriptor);
drawer.add(crosscutConCreationToolEntry);
ImageDescriptor inoutDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.IN_OUT_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry inoutConCreationToolEntry = new ConnectionCreationToolEntry(
"in-out relationship ", "create an inner-outter relationship ",
new SimpleFactory(InOutConnectionModel.class),
inoutDescriptor, inoutDescriptor);
drawer.add(inoutConCreationToolEntry);

ImageDescriptor combinationDescriptor = AbstractUIPlugin
.imageDescriptorFromPlugin(Application.PLUGIN_ID,
IIconNames.COMBINATION_RELATIONSHIP_MODEL);
ConnectionCreationToolEntry combinationConCreationToolEntry = new ConnectionCreationToolEntry(
"combination relationship ", "combination relationship between BaseRole and CrosscutRole ",
new SimpleFactory(CombinationConnectionModel.class),
combinationDescriptor, combinationDescriptor);
drawer.add(combinationConCreationToolEntry);





/***********************************************************************
* commono tool
*/
PaletteDrawer commonDrawer = new PaletteDrawer(
DiagramPaletteStrings.COMMON_DRAWER_LABEL);
commonDrawer.add(getSelectionTool());
commonDrawer.add(marqueeTool);
commonDrawer.add(aspectTemplateCreationEntry);
commonDrawer.add(connectTemplateCreationEntry);
commonDrawer.add(combinedTemplateCreationEntry);
commonDrawer.add(interTemplateCreationEntry);
commonDrawer.add(whiteInterTemplateCreationEntry);
commonDrawer.add(cutInterTemplateCreationEntry);

paletteRoot.add(commonDrawer);
paletteRoot.add(drawer);
return paletteRoot;
}

/**
* keyboard operation override method
*
*/
protected void createActions() {
super.createActions();
ActionRegistry registry = getActionRegistry();

// registry DirectEditAction
IAction action = new DirectEditAction((IWorkbenchPart) this);
registry.registerAction(action);

getSelectionActions().add(action.getId());

//
// action = new
// ZoomOutAction(((ScalableRootEditPart)diagramViewer.getRootEditPart()).getZoomManager());
// action.setId(GEFActionConstants.ZOOM_OUT);
// registry.registerAction(action);
// getSelectionActions().add(action.getId());
// action = new
// ZoomInAction(((ScalableRootEditPart)diagramViewer.getRootEditPart()).getZoomManager());
// action.setId(GEFActionConstants.ZOOM_IN);
// registry.registerAction(action);
// getSelectionActions().add(action.getId());
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.LEFT);
registry.registerAction(action);
getSelectionActions().add(action.getId());

action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.CENTER);
registry.registerAction(action);
getSelectionActions().add(action.getId());

action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.RIGHT);
registry.registerAction(action);
getSelectionActions().add(action.getId());

//
action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.TOP);
registry.registerAction(action);
getSelectionActions().add(action.getId());

action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.MIDDLE);
registry.registerAction(action);
getSelectionActions().add(action.getId());

action = new AlignmentAction((IWorkbenchPart) this,
PositionConstants.BOTTOM);
registry.registerAction(action);
getSelectionActions().add(action.getId());
}

/**
* ZoomComboContributionItem
*/
// override
public Object getAdapter(Class type) {
if (type == ZoomManager.class)
return ((ScalableRootEditPart) getGraphicalViewer()
.getRootEditPart()).getZoomManager();
if (type == IContentOutlinePage.class) {
return new CustomContentOutlinePage();
}
return super.getAdapter(type);
}

/**
* outline
*/
// ContentOutlinePage
class CustomContentOutlinePage extends ContentOutlinePage {

public CustomContentOutlinePage() {
super(new TreeViewer());
// TODO Auto-generated constructor stub
}

// SashForm Outline
private SashForm sash;

private ScrollableThumbnail thumbnail;

private DisposeListener disposeListener;

//
public void createControl(Composite parent) {
// SashForm
sash = new SashForm(parent, SWT.VERTICAL);
//
getViewer().createControl(sash);

// Edit Domain
getViewer().setEditDomain(getEditDomain());
// set EditPartFactory
getViewer().setEditPartFactory(new TreeEditPartFactory());
// outline--->ParentModel
getViewer().setContents(parentModel);
// synchronize
getSelectionSynchronizer().addViewer(getViewer());

Canvas canvas = new Canvas(sash, SWT.BORDER);
// LightweightSystem
LightweightSystem lws = new LightweightSystem(canvas);

// RootEditPart
thumbnail = new ScrollableThumbnail(
(Viewport) ((ScalableRootEditPart) getGraphicalViewer()
.getRootEditPart()).getFigure());
thumbnail.setBorder(new GroupBoxBorder("Thumbnail"));
// thumbnail.setBorder(new MarginBorder(3));
thumbnail.setSource(((ScalableRootEditPart) getGraphicalViewer()
.getRootEditPart())
.getLayer(LayerConstants.PRINTABLE_LAYERS));

lws.setContents(thumbnail);

disposeListener = new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
//
if (thumbnail != null) {
thumbnail.deactivate();
thumbnail = null;
}
}
};
// Graphical Viewer thumbnail
getGraphicalViewer().getControl().addDisposeListener(
disposeListener);
}

public Control getControl() {
// outline 为active
return sash;
}

public void dispose() {
// TreeViewer SelectionSynchronizer
getSelectionSynchronizer().removeViewer(getViewer());
if (getGraphicalViewer().getControl() != null
&& !getGraphicalViewer().getControl().isDisposed())
getGraphicalViewer().getControl().removeDisposeListener(
disposeListener);
super.dispose();

}

public void init(IPageSite pageSite) {
super.init(pageSite);
// graphical editor Action
ActionRegistry registry = getActionRegistry();
// Action
IActionBars bars = pageSite.getActionBars();

String id = IWorkbenchActionConstants.UNDO;
bars.setGlobalActionHandler(id, registry.getAction(id));

id = IWorkbenchActionConstants.REDO;
bars.setGlobalActionHandler(id, registry.getAction(id));

id = IWorkbenchActionConstants.DELETE;
bars.setGlobalActionHandler(id, registry.getAction(id));
bars.updateActionBars();
}

}

protected FlyoutPreferences getPalettePreferences() {
return new FlyoutPreferences() {

public int getDockLocation() {
return
// AosaPlugin.getDefault().getPreferenceStore().getInt(IConstants.PREF_PALETTE_DOCK_LOCATION);
AosaPlugin.getDefault().getPreferenceStore().getInt("pre");
}

public void setDockLocation(int location) {
AosaPlugin.getDefault().getPreferenceStore().setValue("pre",
location);
}

public int getPaletteState() {
return 0;
}

public int getPaletteWidth() {
return 0;
}

public void setPaletteState(int arg0) {

}

public void setPaletteWidth(int arg0) {
}
};
}

protected PaletteViewerProvider createPaletteViewerProvider() {
return new PaletteViewerProvider(getEditDomain()) {
protected void configurePaletteViewer(PaletteViewer viewer) {
super.configurePaletteViewer(viewer);
viewer
.addDragSourceListener(new TemplateTransferDragSourceListener(
viewer));
}
};
}

/*
* (non-Javadoc)
*
* @see org.eclipse.gef.ui.parts.GraphicalEditor#createGraphicalViewer(org.eclipse.swt.widgets.Composite)
*/
private RulerComposite rulerComp;

protected void createGraphicalViewer(Composite parent) {
rulerComp = new RulerComposite(parent, SWT.NONE);
super.createGraphicalViewer(rulerComp);
rulerComp
.setGraphicalViewer((ScrollingGraphicalViewer) getGraphicalViewer());
}

// getGraphicalControl RulerComposite

protected Control getGraphicalControl() {
return rulerComp;
}
}

No comments: