brancheditpart.java
来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 108 行
JAVA
108 行
package net.sf.freenote.mindmap;
import java.beans.PropertyChangeEvent;
import java.util.List;
import net.sf.freenote.FreeNoteConstants;
import net.sf.freenote.directedit.ShapeCellEditorLocator;
import net.sf.freenote.directedit.ShapeDirectEditManager;
import net.sf.freenote.mindmap.figure.PageNode;
import net.sf.freenote.mindmap.figure.TreeBranchFigure;
import net.sf.freenote.mindmap.figure.TreeRootFigure;
import net.sf.freenote.mindmap.model.BranchShape;
import net.sf.freenote.mindmap.model.RootShape;
import net.sf.freenote.parts.ShapeEditPart;
import net.sf.freenote.parts.ShapesContainerEditPolicy;
import org.eclipse.draw2d.ChopboxAnchor;
import org.eclipse.draw2d.ConnectionAnchor;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseListener;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
public class BranchEditPart extends ShapeEditPart {
private static PageNode selected; //TODO:静态变量有问题,可以是TreeRootFigure的属性
@Override
protected IFigure createFigureForModel() {
TreeBranchFigure figure=null;
if(getModel() instanceof RootShape){
figure=new TreeRootFigure(new PageNode(""));
((TreeRootFigure)figure).setMajorSpacing(((RootShape)getModel()).getMajor());
((TreeRootFigure)figure).setMinorSpacing(((RootShape)getModel()).getMinor());
}
else if(getModel() instanceof BranchShape)
figure=new TreeBranchFigure(new PageNode(""));
//设置属性
figure.setDesc(getCastedModel().getDesc());
figure.setStyle(getCastedModel().getStyle());
//关联动作
if(figure != null){
figure.getNode().addMouseListener(new MouseListener.Stub() {
public void mousePressed(MouseEvent me) {
setSelected((PageNode)me.getSource());
}
});
}
return figure;
}
void setSelected(PageNode node) {
if (selected != null) {
selected.setSelected(false);
}
selected = node;
selected.setSelected(true);
}
@Override
protected ConnectionAnchor getConnectionAnchor() {
return new ChopboxAnchor(getCastedFigure().getNode());
}
@Override
protected void createEditPolicies() {
super.createEditPolicies();
installEditPolicy(EditPolicy.LAYOUT_ROLE, new TreeLayoutEditPolicy());
installEditPolicy(EditPolicy.CONTAINER_ROLE, new ShapesContainerEditPolicy());
}
@Override
public void performRequest(Request req) {
if (req.getType() == RequestConstants.REQ_DIRECT_EDIT){
new ShapeDirectEditManager(this,new ShapeCellEditorLocator(((TreeBranchFigure)getFigure()).getNode())).show();
}
}
@Override
public BranchShape getCastedModel() {
return (BranchShape) getModel();
}
public TreeBranchFigure getCastedFigure(){
return (TreeBranchFigure) getFigure();
}
@Override
public IFigure getContentPane() {
return ((TreeBranchFigure)getFigure()).getContentsPane();
}
protected List getModelChildren() {
return ((BranchShape) getModel()).getChildren();
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
String prop = evt.getPropertyName();
if (FreeNoteConstants.CHILD_ADDED_PROP.equals(prop) || FreeNoteConstants.CHILD_REMOVED_PROP.equals(prop)) {
refreshChildren();
}else if(FreeNoteConstants.STYLE_PROP.equals(prop)){
getCastedFigure().setStyle(getCastedModel().getStyle());
}else if(FreeNoteConstants.MAJOR_SPACING_PROP.equals(prop)){
((TreeRootFigure)getCastedFigure()).setMajorSpacing((Integer) getCastedModel().getPropertyValue(prop));
}else if(FreeNoteConstants.MINOR_SPACING_PROP.equals(prop)){
((TreeRootFigure)getCastedFigure()).setMinorSpacing((Integer) getCastedModel().getPropertyValue(prop));
}else
super.propertyChange(evt);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?