GMF Q&A(1): 如何让palette支持拖拽(DnD)等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中加入重载方法:
@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则的更多相关文章
- 一个可以自由定制外观、支持拖拽消除的MaterialDesign风格Android BadgeView
为了尊重作者,先放上链接:https://github.com/qstumn/BadgeView BadgeView 一个可以自由定制外观.支持拖拽消除的MaterialDesign风格Android ...
- .net mvc mssql easyui treegrid 及时 编辑 ,支持拖拽
这里提到了,1个问题,怎么扩展 Easyui 参见: http://blog.csdn.net/chenkai6529/article/details/17528833 @{ ViewBag.Titl ...
- 关于安装了VMware tools后仍然不支持拖拽文件的问题
我在学校机房里面的redhat4上面安装了VMware tools之后能正常支持拖拽,但是我自己电脑上的却不支持,折腾了好久,网上找了很久也还是没有解决,不过发现了一些问题,总结如下:(当然我总结的这 ...
- 让一个view 或者控件不支持拖拽
让一个view 或者控件不支持拖拽: dragView.userInteractionEnabled = NO;
- jQuery插件之路(三)——文件上传(支持拖拽上传)
好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下, ...
- Qt无边框窗体-最大化时支持拖拽还原
目录 一.概述 二.效果展示 三.demo制作 1.设计窗体 2.双击放大 四.拖拽 五.相关文章 原文链接:Markdown模板 一.概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮 ...
- PyQt5控件支持拖拽方法
让控件支持拖拽动作A.setDragEnable(True) 设置A可以拖动B.setAcceptDrops(True) 设置B可以接受拖动B需要满足两个事件1.dragEnterEvent 将A拖到 ...
- WinForm支持拖拽效果
有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button,我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本. 其实这个操作主要分成三步走 ...
- 让您的WinForm控件快速支持拖拽文件
实现原理:使用扩展方法. /// <summary> /// 控件扩展 /// </summary> public static class ControlExt { /// ...
随机推荐
- FileIOUtils.java
package com.vcredit.ddcash.batch.util; import com.vcredit.ddcash.batch.autoAdvance.AutoAdvanceTask;i ...
- OPPO某某產品拍攝範圍嶄露頭角
手機熱風暴再次襲來.oppo 開闢新道路.OPPO爆料N3採用旋智能轉攝像頭!很青睞一些愛拍照的我們.愛攝影的我們.覺的代攝影機麻煩.OPPo同樣給你全新的視野新加坡自由行. 隨著OPPO N3發布會 ...
- 网站部署后Parser Error Message: Could not load type 的解决方案
asp.net 的Webproject 项目是在64bit机上开发,默认选项发布后,部署到32bit的服务器上,出现Parser Error Message: Could not load type的 ...
- java 正则表达式获取匹配和非获取匹配
package test1; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestExp ...
- jquery 取消绑定事件
$(".TreeView1_0").unbind("mouseover"); $("#id").attr("onclick&quo ...
- 【iCore3双核心板】【4.3寸液晶驱动板爆照!】
[源代码完全开源,过几天连同硬件一起发布] 花了好久的时间,我们的fpga工程师才完成这液晶模块的驱动代码,其核心价值如下: 1.完全基于fpga驱动,sdram当做缓存: 2.内建双缓冲机制:方便 ...
- 利用脚本获取mysql的tps,qps等状态信息
#!/bin/bash mysqladmin -uroot -p'123456' extended-status -i1|awk 'BEGIN{local_switch=0;print "Q ...
- Git的常用操作
$ git log //查看commit记录 $ git add <file> //添加文件到commit中 .代表所有改动的文件 $ git commit -m 'meesage' // ...
- IIS7配置PHP 报错 "对找不到的文件启用文件监视"
原文 IIS7配置PHP5.4报错对找不到的文件启用文件监视怎么解决? 案例环境:windows2008+IIS7+PHP5.4+ZEND LOADER用户在配置后遇到报错:错误摘要 HTTP 错误 ...
- [LeetCode]题解(python):119 Pascal's Triangle II
题目来源 https://leetcode.com/problems/pascals-triangle-ii/ Given an index k, return the kth row of the ...