zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    2019山东ACM省赛K题 zoj4123 Happy Equation
    2019山东ACM省赛总结
    ds
    CCPC2018 桂林 A: Array Merge(贪心、带权并查集合并)
    temp
    BZOJ 1013 球形空间产生器(高斯消元)
    BZOJ 2973 石头游戏(矩阵构造,矩阵快速幂)
    POJ 3233 Matrix Power Series (矩阵乘法,分块矩阵)
    每日bing API
    《音乐商店》第3集:模型规划
  • 原文地址:https://www.cnblogs.com/Binhua-Liu/p/3283985.html
Copyright © 2011-2022 走看看