默认情况下,GEF中要创建一个新的结点都是通点在Palette上选择一个结点,然后在Editor区域单击实现的。
也有一些是通过拖放Palette中的一个对象到Editor区域来实现的。
要实现一个拖放支持也是很容易的。GEF中默认实现了一组drag-drop listener用来支持拖放实现:
1。TemplateTransferDropTargetListener
因为是要从palette上拖到Editor中,所以此监听事件显示是应该安放在Editor上,在GEF中就是GraphicalViewer,可以在initializeGraphicalViewer()方法中加上:
getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(
getGraphicalViewer()));
2。TemplateTransferDragSourceListener
显示此事件需要加在palette上,也就是PaletteViewer上,可以在initializePaletteViewer()方法中加上:
getPaletteViewer().addDragSourceListener(new TemplateTransferDragSourceListener(getPaletteViewer()));
回头再看一下我们对Palette上的Item的声明:
CombinedTemplateCreationEntry(String label, String shortDesc,
CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)
需要注意CombinedTemplateCreationEntry构造方法的选用。认为上述构造方法为默认选择,而CreationFactory类为SimpleFactory。
如果选择另一个构造方法:
CombinedTemplateCreationEntry(String label, String shortDesc, Object template,
CreationFactory factory, ImageDescriptor iconSmall, ImageDescriptor iconLarge)
则我们需要注意:如果template和factory都是SimpleFactory则没有问题,因为默认的template就是SimpleFactory。否则我们需要根据自己的template值来得到对应的model,也就是要实现自己的CreationFactory。例如:
CombinedTemplateCreationEntry elementCreationEntry = new CombinedTemplateCreationEntry(
"Element", "Element type",ModelCreationFactory.ELEMENT_TYPE,new ModelCreationFactory(ModelCreationFactory.ELEMENT_TYPE), Activator
.getImageDescriptor("icons/element.png"), Activator
.getImageDescriptor("icons/element.png"));
CombinedTemplateCreationEntry attributeCreationEntry = new CombinedTemplateCreationEntry(
"Attribute", "Attribute type",ModelCreationFactory.ATTRIBUTE_TYPE, new ModelCreationFactory(ModelCreationFactory.ATTRIBUTE_TYPE), Activator
.getImageDescriptor("icons/attribute.png"), Activator
.getImageDescriptor("icons/attribute.png"));
getGraphicalViewer().addDropTargetListener(new CustomTemplateTransferDropTargetListener(
getGraphicalViewer()));
public class ModelCreationFactory implements CreationFactory {
private int objectType;
public static final int ELEMENT_TYPE = 0x01;
public static final int ATTRIBUTE_TYPE = 0x02;
public static final int ROOT_TYPE = 0x04;
public ModelCreationFactory(int objectType) {
super();
this.objectType = objectType;
}
public Object getNewObject() {
switch (objectType) {
case ELEMENT_TYPE:
return new ElementType();
case ATTRIBUTE_TYPE:
return new AttributeType();
case ROOT_TYPE:
return new RootType();
default:
break;
}
return null;
}
public Object getObjectType() {
return objectType;
}
}
public class CustomTemplateTransferDropTargetListener extends
TemplateTransferDropTargetListener {
public CustomTemplateTransferDropTargetListener(EditPartViewer viewer) {
super(viewer);
}
@Override
protected CreationFactory getFactory(Object template) {
return new ModelCreationFactory(((Integer)template).intValue());
}
}
分享到:
相关推荐
明基Palette Master支持硬件自动校准,简化校正并确实地产生正确的色彩结果。 Palette Master 可以用来校正显示器的色彩引擎,并完全支支持 X-Rite 色度计/分光仪。 除了可在短时间内提供可靠的校正外,Palette ...
palette的jar包,放在libs目录里面,build path就可以使用了
android Palette和RoundedBitmapDrawable的实践
通过颜色拾取Palette来获取颜色值并进去赋值,赋值到你想运用到的地方,比如:状态栏,标题栏,toobar等等。
一个集成RecyclerView+CardView+Palette的Demo
文章《android 5.x—Palette》http://blog.csdn.net/peak1chen/article/details/51289687提供的下载链接
palette.js 是一个能够识别图像、图表、制图中色彩颜色元素的插件,还能输出颜色的 RGB 值。 标签:palette 分享 window._bd_share_config = ...
一个使用palette的小Demo,欢迎访问我的博客看具体的使用方式
android-support-v7-palette 工具库
android-support-v7-palette.jar
Android Material Design设计 Android Studion开发 Toolbar实践运用 Palette调色板运用 PagerSlidingTabStrip运用范例
Palette editor编辑调色板(4KB)
博客地址http://blog.csdn.net/sbsujjbcy/article/details/44863447
Palette实现原理demo,兼容低版本,外送利用viewpager实现“无限循环”和ImageView的复用年终礼包
216-Color Webmaster's Palette系列色板 一共4张图片
android 5.0 发布后, RecyclerView CardView Palette新组建的实例Demo。
Chrome插件-《Site Palette》自动提取网站配色.zip。Site Palette使用简单, 功能实用, 没有广告, 是典型的小而美的扩展程序, 这类扩展程序越多, Chrome的用户体验也就越好
使用:Eclipse 导入解压后5个支持包项目,然后右击选择Properties ->点击Android选项 ->在libary栏点击Add按钮 ->然后选择你需要导的support包->点击确定即可。 说明:导入四个包后android-support-design会报错,先...
Text2Palette: 基于互联网图像的颜色主题自动生成方法.pdf