è·Ÿç€å…¥é—¨æ•™ç¨‹ä¸€æ¥ä¸€æ¥èµ°ä¸‹æ¥åQŒå¥½æÒŽ(gu¨©)œ‰ä¸ªå¯è§†åŒ–¾~–è¾‘å™¨çš„æ ·ååQŒçœ‹èµäh¥˜q˜åƒé‚£ä¹ˆå›žäº‹ã€?BR>回过å¤ß_¼Œå‘现æ·ÕdŠ çš„ç»„ä»¶è¿˜æ²¡æœ‰åˆ é™¤åŠŸèƒ½ã€‚çŽ°åœ¨ä»‹¾lä¸€ä¸‹å¦‚ä½•å®žçŽ°ç»„ä»¶åˆ é™¤çš„åŠŸèƒ½ã€?BR>
step 1åQšè¦èƒ½åˆ 除组件必™å»è¦æœ‰èœå•ã€æŒ‰é’®æˆ–者用del键,于是需è¦åœ¨ä½ 编辑器的ActionBarContributor䏿·»åŠ ç›¸å…³çš„ä»£ç æ¥è޷得䏻工具æ¡ä¸Šçš„åˆ é™¤æŒ‰é’®ï¼ŒåŒæ—¶ä¹Ÿå°†‹È€‹z»editèœå•ä¸çš„delete选项ã€?BR>public void contributeToToolBar(IToolBarManager toolBarManager) {
// TODO Auto-generated method stub
…�nbsp;
toolBarManager.add(getAction(ActionFactory.DELETE.getId()));
…�BR>}
关于工具æ¡èœå•部分功能实现的详细介ç»åQŒå…«˜q›åˆ¶çš„blog上有详细介ç»ã€?BR>
step 2åQšåŠ¨ä½œè§¦å‘åŽè¦æœ‰editPart接收相应的requeståQŒç„¶åŽè{交给æŸä¸ªeditPolicy˜q›è¡Œå¤„ç†ã€‚åœ¨åˆ é™¤˜q‡ç¨‹ä¸ï¼Œæ˜¯è¢«åˆ 除¾l„äšgçš„editPartæŽ¥æ”¶åˆ é™¤request。在˜q™ä¸ªeditPart䏿³¨å†Œä¸€ä¸ªç‘ô承于ComponentEditPolicyçš„policyåQŒeditpartž®†æŠŠrequest转交¾l™è¿™ä¸ªpolicy处ç†ã€‚在policyä¸éœ€è¦é‡å†™createDeleteCommand(GroupRequest deleteRequest)æ–ÒŽ(gu¨©)³•æ¥ç”Ÿæˆå¯¹åˆ 除动作˜q›è¡Œå¤„ç†çš„command对象åQŒåƈ对该对象的属性进行一些设¾|®ï¼Œç„¶åŽ˜q”回ã€?BR>代ç 如下åQ?BR>NodeEditPart¾cÖM¸
protected void createEditPolicies() {
// TODO Auto-generated method stub
…�BR> installEditPolicy(EditPolicy.COMPONENT_ROLE, new NodeEditPolicy());
…�BR> }
NodeEditPolicy¾c?BR>

public class NodeEditPolicy extends ComponentEditPolicy
{


public NodeEditPolicy()
{
super();
// TODO Auto-generated constructor stub
}

protected Command createDeleteCommand(GroupRequest deleteRequest)
{
// TODO Auto-generated method stub
Object parent = getHost().getParent().getModel();
RemoveNodeCommand command = new RemoveNodeCommand();
command.setParent((BaseModel)parent);
command.setChild((BaseModel)getHost().getModel());
return command;
}

}


step3åQšå®žçްcommand¾c?BR>

public class RemoveNodeCommand extends Command
{
//private List parent;
private NodeModel parent;
private NodeModel child;


public NodeModel getChild()
{
return child;
}


public void setChild(NodeModel child)
{
this.child = child;
}


public NodeModel getParent()
{
return parent;
}


public void setParent(NodeModel parent)
{
this.parent = parent;
}


public RemoveNodeCommand()
{
super();
// TODO Auto-generated constructor stub
}


public RemoveNodeCommand(String label)
{
super(label);
// TODO Auto-generated constructor stub
}

public void execute()
{
// TODO Auto-generated method stub
Assert.isNotNull(parent);
Assert.isNotNull(child);
parent.removeChild(child);
}

}
当然容器¾cÈš„模型è¦å®žçްremoveChildæ–ÒŽ(gu¨©)³•æ‰è¡Œ
public void removeChild(nodeModelchild){
child.setParent(null);
getChildren().remove(child);
this.fireChildrenChange(child);
}
以上介ç»çš„这些是我进行实现的一个过½E‹ï¼Œå®žé™…实现的时候应该抽象出一个基¾cÀL¨¡åž‹å’Œå¯¹åº”çš„editpartåQŒè¿™æ ·å°±ä¸ç”¨é‡å¤åœ¨æ¯ä¸ªç»„件举~–写了。实现完æˆåŽå·¥å…·æ¡ä¸Šçš„æŒ‰é’®ï¼Œä¸»èœå•ä¸çš„åˆ é™¤é€‰é¡¹åQŒé”®ç›˜çš„del键都å¯ä»¥ç”¨æ¥˜q›è¡Œåˆ 除æ“作ã€?BR>注愘q™é‡Œæ²¡æœ‰å†™command里的redoå’Œundoæ“作ã€?BR>

]]>