GMF学习系列(二) 一些知识点

863项目做完了,一直没有时间总结,先将一些知识点记录一下吧。

 1. 连线约束是在com.yangqk.diagram.diagram.edit.policies中的

DiagramBaseItemSemanticEditPolicy类中,它包含一个内部类public static class LinkConstraints,包含方法canExistLink,可以添加约束。

2.问题:提示java.lang.IllegalStateException: Cannot modify resource set without a write transaction异常

在GMF里修改Model要通过在TransactionalEditingDomain里执行命令完成,GMF提供的RecordingCommand是不错的选择,它为我们提供了Undo支持,我们只要实现执行部分的代码就可以了,下面是一个例子:

TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(myElement);
domain.getCommandStack().execute(
new RecordingCommand(domain) {
    @Override
    
protected void doExecute() {
        //Do anything
    }
});


若是在EditPolicy里需要返回一个Command,用下面的代码:

http://www.cnblogs.com/Images/OutliningIndicators/None.gifAbstractTransactionalCommand command = new AbstractTransactionalCommand(TransactionUtil
http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif        .getEditingDomain(myElement), "Command Name", Collections.EMPTY_LIST) http://www.cnblogs.com/Images/dot.gif{
http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif    @Override
http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif    
protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info)
http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gifhttp://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif            
throws ExecutionException http://www.cnblogs.com/Images/dot.gif{
http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif        
//Any modification to the model
http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif
        return CommandResult.newOKCommandResult();
http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif    }
http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif};
http://www.cnblogs.com/Images/OutliningIndicators/None.gif

3、如何禁用PopupBar和ConnectionHandler功能(鼠标停止在图形上时出现的连线符号)

在需要禁用该功能的EditPart的createDefaultEditPolicies()方法的最后加下面的语句:

//禁用PopupBar
removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
//禁用ConnectionHandler
removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);

posted on 2011-10-21 21:56  缠中说禅  阅读(436)  评论(0)    收藏  举报