博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GMF Q&A(1): 如何让palette支持拖拽(DnD)等10则
阅读量:7184 次
发布时间:2019-06-29

本文共 3140 字,大约阅读时间需要 10 分钟。

1,如何让palette支持拖拽(DnD)

在*PaletteFactory类中,把私有类NodeToolEntry 和LinkToolEntry的基类修改为PaletteToolEntry。并在构造函数中把调用

super(title, description, null, null);

修改为

super(null, title, null);this.setDescription(description);

最后别忘了把@generated改为@generated NOT

 

2,如何移除connection handles(就是鼠标hover在node上时,自动出现的连接线提示)

在所有的节点的editpart的createDefaultEditPolicies()方法中,加入removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE); 是的,正是这个policy role添加了这个行为。

另一个办法是使用动态模板(dynamic template)我没有试过。

 

3,如何移除assistant popups(即鼠标停留在节点或者空白处时出现的小图标调色板)

在所有的节点的editpart和DocumentEditPart的createDefaultEditPolicies()方法中,加入removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE),移除POPUPBAR_ROLE。(在DocumentEditPart中移除POPUPBAR_ROLE,移除的是鼠标停留在空白处时弹出popup的行为)

 

4,当创建连接线,连接目标节点时,如果把鼠标放在空白处点击,会出现content menu来创建目标结点,如何禁止这种行为.

在DocumentEditPart的createDefaultEditPolicies()方法中,加入removeEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE)

 

5,如何使*DiagramEditor默认不显示X轴和Y轴滚动条,而是需要时自动显示。

在*DiagramEditor的configureGraphicalViewer()方法加入以下代码

Control control = this.getGraphicalViewer().getControl();if (control instanceof FigureCanvas) {	FigureCanvas figureCanvas = (FigureCanvas) control;	figureCanvas.setScrollBarVisibility(FigureCanvas.AUTOMATIC);}

6,如何使连接线上的标签不允许被右键删除

在所有的WrappingLabel*EditPart的createDefaultEditPolicies()方法中,加入removeEditPolicy(EditPolicy.COMPONENT_ROLE)

 

7,如何为节点添加双击事件。

在对应的editpart中加入重载方法:

@Overridepublic void performRequest(Request request) {	// TODO Auto-generated method stub	super.performRequest(request);	if (request.getType() == RequestConstants.REQ_OPEN) {		System.out.println("requested double-click.");		//在这里加入双击处理代码	}}

8,如何改变palette的默认宽度。

在*DiagramEditor中加入重载方法:

@Overrideprotected int getInitialPaletteSize() {	return 160;}

9,如何改变palette的默认布局为columns,默认使用大图标(Use Large Icons)

在*DiagramEditor中加入重载方法:

@Overrideprotected PaletteViewer constructPaletteViewer() {	// TODO Auto-generated method stub	PaletteViewer paletteViewer = super.constructPaletteViewer();	//from DefaultPaletteViewerPreferences class DefaultPaletteViewerPreferences method	IPreferenceStore store = InternalGEFPlugin.getDefault()				.getPreferenceStore();	store.setDefault(PaletteViewerPreferences.PREFERENCE_DETAILS_ICON_SIZE, true);	store.setDefault(PaletteViewerPreferences.PREFERENCE_COLUMNS_ICON_SIZE, true);	store.setDefault(PaletteViewerPreferences.PREFERENCE_ICONS_ICON_SIZE, true);	store.setDefault(PaletteViewerPreferences.PREFERENCE_LIST_ICON_SIZE, true);	store.setDefault(PaletteViewerPreferences.PREFERENCE_LAYOUT,				PaletteViewerPreferences.LAYOUT_COLUMNS);	//store.setDefault(PREFERENCE_AUTO_COLLAPSE, COLLAPSE_AS_NEEDED);	//store.setDefault(PREFERENCE_FONT, DEFAULT_FONT);	return paletteViewer;}

这种修改PreferenceStore中默认值的方式,要比直接去设置palettle的属性要好。因为如果直接设置属性,那么用户在界面上调整palettle布局后,下次再打开时总是会被重置。

 

10,如何设置Grid(网格)的属性

在*DiagramEditor中initializeGraphicalViewer方法(或者configureGraphicalViewer方法中加入代码):

DiagramRootEditPart root = (DiagramRootEditPart) this.getDiagramGraphicalViewer().getRootEditPart();root.setGridStyle(SWT.LINE_SOLID);root.setGridSpacing(0.125);root.setGridColor(FigureUtilities.colorToInteger(new Color(null,192,192,192)));

 

 

 

参考

以上是我遇到的部分问题和解决办法的总结,部分参考了GMF新闻组的Q&A。英文好的读者可以自行查阅

 

原创,写于2013/8/27。

转载地址:http://seukm.baihongyu.com/

你可能感兴趣的文章
UILabel根据字数多少自动实现适应高度
查看>>
Warning: lio_listio returned EAGAIN Performance degradation may be seen
查看>>
我的友情链接
查看>>
iOS开发必备HUD(透明指示层)
查看>>
mysql删除大表的部分数据
查看>>
Linux内核升级
查看>>
java枚举常用配置
查看>>
本人的性格弱点
查看>>
C#实现一维小波变换
查看>>
PHP内核定义变量的方式
查看>>
hadoop零散笔记
查看>>
uboot移植——uboot启动回顾
查看>>
分段机制和分页机制
查看>>
三天学会HTML5 之第一天
查看>>
学习《计算机网络》思路总结
查看>>
Jquery对象与DOM对象的转换
查看>>
IM设计思考:点对点消息交换
查看>>
Java 线程池框架核心代码分析
查看>>
Xpath语法
查看>>
接地气又好用,8 款优秀的国产开源博客系统推荐
查看>>