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. jquery 温故而知新 animate动画的一些坑

    注意1,只有hover事件后才能紧跟着第二个回调函数(mouseleave),尽量还是不使用mouseover事件了 注意2,.stop(false,true); 结束动画,在动画队列中删除自己,并且 ...

  2. html代码中的form参数是基本一致的

    由于pear的大多数模块仍处于开发当中,因此,这里列举的是随着php4.05一起发布的pear中的模块,需要注意的是,一些抽象类或者是基类(如mail.php,log.php,cache.php)没有 ...

  3. 增强for循环

    import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Li ...

  4. 精通JavaScript的this关键字

    小提示 阅读本文,您需要了解JS的基本常识.您将花费40分钟完成本文的阅读. JS中的this关键字让很多新老JS开发人员都感到困惑.这篇文章将对this关键字进行完整地阐述.读完本文以后,您的困惑将 ...

  5. ios-改变button四个角的弧度

    -(void)createTitleView{ UIView * backview = [[UIView alloc]init]; backview.frame =CGRectMake(87*kHei ...

  6. yii 基础版用rbac-plus

    1.将高级版的common/models/user.php覆盖掉基础版的models/user.php 2.将命名空间 namespace common\models;改为 namespace app ...

  7. ng-repeat 嵌套 ng-switch 出错解决

    Error: $compile:ctreq Missing Required Controller Controller 'ngSwitch', required by directive 'ngSw ...

  8. CCEA OCX

    <HTML> <HEAD> <TITLE>CCEAActiveX演示页面</TITLE> <meta http-equiv="Conte ...

  9. Vue 双层嵌套

    这种的需要双层嵌套. 代码: <table id="ict-table" class="ict-table ict-report-table blue-theme& ...

  10. 【转】linux下memcached安装以及启动

    1.下载memcached服务器端安装文件 版本: memcached-1.4.25.tar.gz 下载地址:http://www.memcached.org/files/memcached-1.4. ...