定制GEF的Palette

用GEF框架实现一个Editor时,会有一个默认的paletteViewer。

 

看源码就知道,这个paletteViewer也是用一种和GEF框架一样的方式实现的。要定制PaletteViewer,我们可以从重写editor的createPaletteViewerProvider()方法开始。

 

在createPaletteViewerProvider()需要返回一个palette的Provider。所以我们可以返回一个自己的provider的实现。

例如:

	protected PaletteViewerProvider createPaletteViewerProvider() {
		return new UMLPaletteViewerProvider(getEditDomain(),getPalettePreferences());
	}

 当然不用完全实现这个provider,我们可以让它继承PaletterViewerProvider,以重用大部分内容。

 

PaletteViewer具体实现是在Provider的createPaletterViewer()方法里,所以重写这个方法,提供自己的PaletteViewer替换掉缺省的PaletteViewer。例如:

	public PaletteViewer createPaletteViewer(Composite parent) {
		PaletteViewer pViewer = new UMLPaletteViewer(flyoutPreferences,getEditDomain());
		pViewer.createControl(parent);
		configurePaletteViewer(pViewer);
		hookPaletteViewer(pViewer);
		return pViewer;
	}

 在PaletteViewer实现中,如果要对每一种不用的类型的entry提供自己的外观实现,那重写PaletteEditPartFactory就是需要的。可以写一个类继承这个类,然后在viewer中设置factory为这个新的类。

 

进到factory里可以看到,每种类型的entry为对应的create方法。所以如果你像替换掉某个类型的实现方法,你就可以重写对应的方法,例如:

 

	protected EditPart createDrawerEditPart(EditPart parentEditPart,
			Object model) {
		return new UMLDrawerEditpart(graphicalsEditDomain,parentEditPart, (PaletteDrawer) model,
				flyoutPreferences);
	}

 

这个editpart就像我们写的所有的gef应用的模型对应的editpart一样,如果需要有不同的显示,那就重写其中的createFigure()方法。例如可以实现一个如下样的palette。

 

之前这四个元素是直接放在一个drawer里面的,现在点“java元素”就会出现一个列表。同样可以创建元素。如果palette上的元素很多的时候,像这样倒更方便了。

 

因为paletteViewer的位置可以拖动,所以要做点好一点的话,就可以根据palette所在的位置进行适应,如下图:

 

可以和上图对比。当放到右边时,箭头和菜单都有变化

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值