创建节点时通过对话框输入属性

来源:互联网 发布:yum 更新 编辑:程序博客网 时间:2024/05/18 20:50

我需要实现这样一种场景:

在创建节点时,从PaetteRoot中选择一个CreationEntry,然后在编辑区点击(或拖拽到编辑区),这时弹出一节点属性设置对话框。

之前在网上看到了两种实现方式,但都有一点问题。如下:

1、在Command中实现。也是就是在execute()方法中打开对话框。

问题:由于这个Command已经放入EditDomain的CommandStack中,如果用户选择了“Cancel”,这时Editor显示仍然是dirty,并且造成undo、redo等实现的复杂性(得判断Command中对话框中是否选择了ok)。

因为GEF中会一直监听鼠标事件,所以会一直触发policy事件,故而也不能在policy中打开对话框。否则只要鼠标在编辑区移动,就会不停地打开对话框。

2、使用自定义的CreationTool,在performCreation(int button)方法中打开对话框。

问题:这种方式,虽然解决了CommandStack混乱的问题,但是,如果用户要通过拖拽(非点击)方式创建节点的话,就不会打开对话框。因为拖拽方式是通过DragSourceListener和DropTargetListener来调用CommandStack的execut方法,不会使用到CreationTool。

解决方法:重写CommandStack的execute()方法。代码如下: 

原创粉丝点击