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,用下面的代码:
AbstractTransactionalCommand command = new AbstractTransactionalCommand(TransactionUtil
.getEditingDomain(myElement), "Command Name", Collections.EMPTY_LIST) {
@Override
protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException {
//Any modification to the model
return CommandResult.newOKCommandResult();
}
};
3、如何禁用PopupBar和ConnectionHandler功能(鼠标停止在图形上时出现的连线符号)
在需要禁用该功能的EditPart的createDefaultEditPolicies()方法的最后加下面的语句:
//禁用PopupBar
removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
//禁用ConnectionHandler
removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);