DiagramEditPart HEELP [message #152768] |
Mon, 01 October 2007 15:52 |
Eclipse User |
|
|
|
Originally posted by: surayya.daimi.au.dk
I want to layout the loaded elements from left to right and not how they are
now from top to down
I suppose that i need to do some magic in the class that extends
DiagramEditPart ?
This class looks like that
public class MacroEditPart extends DiagramEditPart {
public final static String MODEL_ID = "Execution"; //$NON-NLS-1$
private boolean shouldUpdatePageBreakLocation = false;
public static final int VISUAL_ID = 79;
public MacroEditPart(View view) {
super(view);
}
protected void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
new MacroItemSemanticEditPolicy());
installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
new MacroCanonicalEditPolicy());
//removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpo licies.EditPolicyRoles.POPUPBAR_ROLE);
}
}
I suppose i need to create a method
protected @Override IFigure createFigure() {}
and to also add createDefaultEditPolicies() with a policy for
FlowLayoutPolicy()
as this policy is abstract i need to extend the policy
as some in the forum sugessted FlowLayout implementatioin could be done by
overiding methods in DiagramEditPart
I did so and ended up with following class
public class MacroEditPart extends DiagramEditPart {
private boolean shouldUpdatePageBreakLocation = false;
public final static String MODEL_ID = "Execution"; //$NON-NLS-1$
public static final int VISUAL_ID = 79;
public MacroEditPart(View view) {
super(view);
}
protected @Override void createDefaultEditPolicies() {
super.createDefaultEditPolicies();
installEditPolicy( EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy());
installEditPolicy(EditPolicy.CONTAINER_ROLE, new ContainerEditPolicy());
installEditPolicy( EditPolicy.COMPONENT_ROLE, new
RootComponentEditPolicy());
installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy() );
//FLOW LAYOUT POLICY IMPL
installEditPolicy( EditPolicyRoles.DRAG_DROP_ROLE, new
DiagramDragDropEditPolicy());
installEditPolicy( EditPolicy.GRAPHICAL_NODE_ROLE, new
ContainerNodeEditPolicy());
installEditPolicy(EditPolicyRoles.SNAP_FEEDBACK_ROLE, new
SnapFeedbackPolicy());
installEditPolicy(EditPolicyRoles.POPUPBAR_ROLE, new
DiagramPopupBarEditPolicy());
installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, new
MacroItemSemanticEditPolicy()); //OLD PLOICIES of MacroEditPart
installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new
MacroCanonicalEditPolicy()); //OLD PLOICIES of MacroEditPart
}
protected LayoutEditPolicy createLayoutEditPolicy() {
FlowLayoutEditPolicy lep = new FlowLayoutEditPolicy() {
protected Command createAddCommand(EditPart child, EditPart after) { return
null; }protected Command createMoveChildCommand(EditPart child,EditPart
after) {
return null;}
protected Command getCreateCommand(CreateRequest request) { return null;}};
return lep;
}
private class PageBreaksLayoutListener extends LayoutListener.Stub {
public void postLayout(IFigure container) {
super.postLayout(container);
updatePageBreaksLocation();
}
}
protected @Override IFigure createFigure() {
// Override the containsPoint and findFigureAt methods
// to treat this layer (Primary Layer) as if it were opaque.
// This is for the grid layer so that it can be seen beneath the
// figures.
IFigure f = new BorderItemsAwareFreeFormLayer() {
/* (non-Javadoc)
* @see org.eclipse.draw2d.Layer#containsPoint(int, int)
*/
public boolean containsPoint(int x, int y) {
return getBounds().contains(x, y);
}
/* (non-Javadoc)
* @see org.eclipse.draw2d.Layer#findFigureAt(int, int,
org.eclipse.draw2d.TreeSearch)
*/
public IFigure findFigureAt(int x, int y, TreeSearch search) {
if (!isEnabled())
return null;
if (!containsPoint(x, y))
return null;
if (search.prune(this))
return null;
IFigure child = findDescendantAtExcluding(x, y, search);
if (child != null)
return child;
if (search.accept(this))
return this;
return null;
}
/* (non-Javadoc)
* @see org.eclipse.draw2d.Figure#validate()
*/
public void validate() {
super.validate();
if (shouldUpdatePageBreakLocation){
shouldUpdatePageBreakLocation = false;
updatePageBreaksLocation();
}
}
};
f.setLayoutManager(new FlowLayout(true)); ///Here
i set the flow layout and horisontal true
f.addLayoutListener(LayoutAnimator.getDefault());
f.addLayoutListener(new PageBreaksLayoutListener());
return f;
}
}
The problem is that i can not see anything in my diagram when loaded a
diagram
What am i doing wrong
OR How to change the layout to be horizontal
any help is appreciated
Suaryya
|
|
|
Powered by
FUDForum. Page generated in 0.07439 seconds