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中加入重载方法:

@Override
public 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中加入重载方法:

@Override
protected int getInitialPaletteSize() {
return 160;
}

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

在*DiagramEditor中加入重载方法:

@Override
protected 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。英文好的读者可以自行查阅http://wiki.eclipse.org/GMF_Newsgroup_Q_and_A

Binhua Liu原创,写于2013/8/27。

GMF Q&A(1): 如何让palette支持拖拽(DnD)等10则的更多相关文章

  1. 一个可以自由定制外观、支持拖拽消除的MaterialDesign风格Android BadgeView

    为了尊重作者,先放上链接:https://github.com/qstumn/BadgeView BadgeView 一个可以自由定制外观.支持拖拽消除的MaterialDesign风格Android ...

  2. .net mvc mssql easyui treegrid 及时 编辑 ,支持拖拽

    这里提到了,1个问题,怎么扩展 Easyui 参见: http://blog.csdn.net/chenkai6529/article/details/17528833 @{ ViewBag.Titl ...

  3. 关于安装了VMware tools后仍然不支持拖拽文件的问题

    我在学校机房里面的redhat4上面安装了VMware tools之后能正常支持拖拽,但是我自己电脑上的却不支持,折腾了好久,网上找了很久也还是没有解决,不过发现了一些问题,总结如下:(当然我总结的这 ...

  4. 让一个view 或者控件不支持拖拽

    让一个view 或者控件不支持拖拽: dragView.userInteractionEnabled = NO;

  5. jQuery插件之路(三)——文件上传(支持拖拽上传)

    好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下, ...

  6. Qt无边框窗体-最大化时支持拖拽还原

    目录 一.概述 二.效果展示 三.demo制作 1.设计窗体 2.双击放大 四.拖拽 五.相关文章 原文链接:Markdown模板 一.概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮 ...

  7. PyQt5控件支持拖拽方法

    让控件支持拖拽动作A.setDragEnable(True) 设置A可以拖动B.setAcceptDrops(True) 设置B可以接受拖动B需要满足两个事件1.dragEnterEvent 将A拖到 ...

  8. WinForm支持拖拽效果

    有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...

  9. 让您的WinForm控件快速支持拖拽文件

    实现原理:使用扩展方法. /// <summary> /// 控件扩展 /// </summary> public static class ControlExt { /// ...

随机推荐

  1. 面试之Java多线程

    Java多线程1.什么是多线程2.为什么需要多线程  有什么优点和缺点3.怎么运行 一.多线程是在软件或硬件上并发执行的技术共享数据空间,内存资源和CPU二.优点:把长时间运行的程序任务放到后台处理, ...

  2. 会场安排问题---nyoj14

    描述学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动.现在小刘有一些活动计划的时间表,他想尽 ...

  3. 将gridFS中的图片文件写入硬盘

    开启用户验证下的gridfs 连接使用,在执行脚本前可以在python shell中 from pymongo import Connectionfrom gridfs import *con = C ...

  4. 形行色色的下拉菜单(HTML/CSS JS方法 jQuery方法实现)

    HTML/CSS方法实现下拉菜单来源:慕课网<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  5. Struts 2.x No result defined for action 异常

      这是我跑struts2的第一个例子,跑的也够郁闷的,这个问题烦了我几个钟... 2011-5-10 10:10:17 com.opensymphony.xwork2.util.logging.co ...

  6. Python的全局变量

    应该尽量避免使用全局变量.不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性.对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误.这种错误是很难 ...

  7. 【iCore3 双核心板_FPGA】实验十五:基于USART的ARM与FPGA通信实验

    实验指导书及代码包下载: http://pan.baidu.com/s/1c1RbE5E iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  8. node crypto md5加密,并解决中文不相同的问题

    在用crypto模块时碰到了加密中文不相同的问题,多谢群里面@蚂蚁指定 1:解决中文不同的问题 function md5Pay(str) { str = (new Buffer(str)).toStr ...

  9. LightOj 1197 - Help Hanzo(分段筛选法 求区间素数个数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b ( ...

  10. 微信浏览器禁止页面下拉查看网址(不影响页面内部scroll)

    此类事件是手机touchmove默认事件行为,可以通过js代码隐藏事件: $(‘body’).on(‘touchmove’, function (event) {event.preventDefaul ...