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

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

在创建节点时,从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()方法。代码如下: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值