八进制

少年壮志无烟抽

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  233 随笔 :: 0 文章 :: 3032 评论 :: 11 引用

除了利用Eclipse提供的属性视图以外,GEF应用程序里当然也可以通过弹出对话框修改模型信息。

要实现双击一个节点打开对话框,在NodePart里要增加的代码如下:

public void performRequest(Request req) {
    
if(req.getType().equals(RequestConstants.REQ_OPEN)){
        MessageDialog.openInformation(getViewer().getControl().getShell(),
"Gef Practice","A Dialog");
    }
}

作为例子,上面这段代码只打开一个显示信息的对话框,你可以替换成自己实现的对话框显示/修改节点信息。

在CreateNodeCommand里增加下面的代码,可以在每次创建一个节点时通过对话框指定节点的名称:

public void execute() {
    InputDialog dlg 
= new InputDialog(shell, "Gef Practice""New node's name:""Node"null);
    
if (Window.OK == dlg.open()) {
        
this.node.setName(dlg.getValue());
    }
    
this.diagram.addNode(this.node);
}

因为打开对话框时需要用到Shell,所以要在CreateNodeCommand里增加一个Shell类型的成员变量,并在DiagramLayoutEditPolicy里创建CreateNodeCommand时把一个shell实例传递给它。


创建节点时先弹出对话框

点此下载工程,此工程修改自GEF应用实例中的GefPractice,目标文件的扩展名改为.gefpracticedlg。

posted on 2006-07-07 23:13 八进制 阅读(3596) 评论(19)  编辑 收藏 所属分类: EclipseGEF

评论

#1楼  2006-08-14 12:08 xiruo [未注册用户]
问个问题:
怎么修改左边那个工具箱的标题文字???
或者隐藏掉?
默认是Palette
  回复  引用    

#2楼  2006-08-14 12:41 xiruo [未注册用户]
图片
<img src="http://old.photo.qq.com/?file=31766BFC3B6E3DE9769586FDBE14150CF541E90D8D0F01512E0C45B6DE8F1723" />
  回复  引用    

#3楼  2006-08-23 09:40 JoyAndLove [未注册用户]
请问,如何在新的对话框中打开用GEF实现的Editor,而不是在Workbench中的Editor Area中打开Editor?
  回复  引用    

#4楼 [楼主] 2006-08-23 18:15 八进制      
这个要求和在vieapart里实现gef应用程序比较像,你可以在gef系列的其他几篇的回复里找一下,我应该贴过代码的,但功能并不全。
  回复  引用  查看    

#5楼  2006-08-23 22:00 JoyAndLove [未注册用户]
八进制 你好
你说的把gef放到viewpart里的代码中,viewpart的createPartControl(Composite)是会被workbench调用的,workbench可以为viewpart设置显示的位置的,而且这些是workbench封装好的,是这样的么?而且此时的viewpart是显示在workbench当前的activepage中的,是这样的么?
我希望在一个新产生的swt对话框中(比如通过点击一个按钮来触发)显示EdItor,这个Editor有paletteViewer 和graphicalViewer,能够实现图形编辑功能,workbench要对这个Editor扩展点进行管理的话,是在什么时候打开Editor的呢?如何才能把打开这个Editor的位置区域转移到新产生的对话框上去,同时又保证workbench对其的控制(如根据文件是否已经打开决定是否开启一个新的Editor实例)呢?
  回复  引用    

八进制,你好

请问如何从NodePart变量或DiagramPart变量获取其所在的EditorPart呢?

好像你此文中的例子,如果我在“Gef Practice”的Dialog中输入的不是Node的新名称,而是外层“Practice Editor”的新名称,那么在Dialog关闭后,我能够拿到的是NodePart和它对应的Node,怎样能够通过获得EditorPart,从而调用其“setPartName(String)”函数完成对EditorPart名称的更新?

ps.刚来你的blog就冒昧提问,很不好意思,十分感谢你能分享你的经验,从中获益匪浅
  回复  引用    

#7楼 [楼主] 2006-11-03 09:32 八进制      
To JoyAndLove: swt对话框里能显示Editor吗,我不确定,感觉不太可能。
To moon: 在action里一般可以得到editorpart的引用。
  回复  引用  查看    

谢谢八进制的回复

可是我在action里没有找到editorpart的引用
我现在用的是下面的方法:

EditorPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor()

好像也可以获取,但不知是否合理
  回复  引用    

#9楼 [楼主] 2006-11-03 16:57 八进制      
这要看你的Action是哪种类型,例如实现IEditorActionDelegate的Action就可以在setActiveEditor()方法里记住editorpart的引用,而实现IViewActionDelegate的Action也类似可以在init()方法里记住对viewpart的引用。
你用的方法可以得到当前活动的editorpart,但得到以后要做一些判断保证是你需要的那个editorpart,除非你有其他机制保证你的workspace任何时刻有且仅有一个打开的editor。
  回复  引用  查看    

了解了
我采用的是继承SelectionAction的
再往上追溯的话,是继承自WorkbenchPartAction最终到Action
谢谢

  回复  引用    

我想通过,双击节点设置该节点的一些其它属性,当然可以通过JFACE中的TitleAreaDialog自定义窗口来设置。
可是,当我增加一个Node时,在插入到编辑器时,如果给它设定一个id值?如果得到拖入时设定的id值 (id,只是一个节点的标识)?我双击时,如何获得双击节点的对象?
谢谢了
  回复  引用    

#12楼 [楼主] 2006-11-28 20:36 八进制      
双击一般是在editpart的performRequest()里响应的,所以应该可以得到被双击的那个editpart,也就能得到相应的model对象了。
  回复  引用  查看    

#13楼  2006-12-01 10:05 gengan [未注册用户]
八进制,你好
我刚开始学习gef,我看过你的gefpractice,我想问一下在你对话框的例子中我想填出一个对话框,需要填入名字,类型等等好几项信息,我该如何实现呢?
  回复  引用    

#14楼  2007-03-29 13:33 paradox [未注册用户]
八进制,你好
有个问题请教一下。
我想实现下面的功能:
在流程图里点击某个NODE(这是一个子流程)能打开这个NODE所代表的子流程?
能不能给个思路。
谢谢!
  回复  引用    

#15楼 [楼主] 2007-03-30 16:19 八进制      
我的想法是双击时打开一个新的editor,其input是这个子流程。
  回复  引用  查看    

#16楼 [楼主] 2007-03-30 16:20 八进制      
to gengan: 只是对话框实现的问题,你完全可以用自己的对话框代替例子里这个InputDialog。
  回复  引用  查看    

#17楼  2007-04-12 16:20 wenwen [未注册用户]
八进制,你好

我也与gengan有同样的问题,我想是不是用Dialog就可以解决了?
自己生成一个Dialog,然后再自己往里面填button,text,label等等,组成满足自己需要的样子?
  回复  引用    

#18楼  2008-06-24 19:04 shirry [未注册用户]
请问,如何用代码实现打开一个新的editor @八进制

  回复  引用    

#19楼  2008-07-30 13:23 人 [未注册用户]
您好,我尝试了一下通过双击某个节点,然后更改节点的某些属性,虽然更改成功了,但似乎CommandStack里面并不会感应到这个Dirty,也就是说CommandStack并没有更新,所以也就无法保存这个改动了,我想这个问题的原因可能是我没有正确地配置该行为对应的Policy,而且我实在不知道双击节点然后更改节点属性会产生什么Command和对应的Policy,请问你能告诉我吗
  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-07 23:19 编辑过


相关链接: