- 浏览: 2469579 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
FROM:http://www.blog.edu.cn/user1/19180/archives/2005/372845.shtml
1 插件主类
所谓的插件主类,就等同于一般Java程序中的main函数。它实现了如何启动、停止插件等动作。这个类实际上就是一个实现了org.eclipse.ui.plugin.AbstractUIPlugin的类,这个类的代码比较简单,利用向导生成的默认代码就可以了。如果你删除了默认的文件,下面的示例可以帮助你编写新的类:
- package pku.oo.notationBuilder;
- import org.eclipse.ui.plugin.*;
- import org.eclipse.jface.resource.ImageDescriptor;
- import org.osgi.framework.BundleContext;
- public class NotationBuilderPlugin extends AbstractUIPlugin {
- //The shared instance.
- private static NotationBuilderPlugin plugin;
- /**
- * The constructor.
- */
- public NotationBuilderPlugin() {
- plugin = this;
- }
- /**
- * This method is called upon plug-in activation
- */
- public void start(BundleContext context) throws Exception {
- super.start(context);
- }
- /**
- * This method is called when the plug-in is stopped
- */
- public void stop(BundleContext context) throws Exception {
- super.stop(context);
- plugin = null;
- }
- /**
- * Returns the shared instance.
- */
- public static NotationBuilderPlugin getDefault() {
- return plugin;
- }
- /**
- * Returns an image descriptor for the image file at the given
- * plug-in relative path.
- *
- * @param path the path
- * @return the image descriptor
- */
- public static ImageDescriptor getImageDescriptor(String path) {
- return AbstractUIPlugin.imageDescriptorFromPlugin("NotationBuilder", path);
- }
- }
注释已经很清晰了,大部分代码只要拷贝就可以了。
2 编写插件界面主类
插件界面主类实现了如何创建插件的主界面,但是一个GEF编辑器插件的主界面到底是什么呢?我下面先详细介绍一下。
一个GEF编辑器插件的主界面一般包括三个部分:Palette,调色板,就好像是eclipse中WindowsBuilder Pro中的控件工具栏;Outline Page,大纲页,好像是eclipse的Package Explorer;主编辑区域,顾名思义了。
当然,一个GEF编辑器插件并非一个需要这三个,对于Palette和Outline Page是可选的,而我们将要创建的界面主类,则是用来创建主编辑区域的,因此它是必选的。在后面的分析中我们会看到,Outline Page和主编辑区域的工作原理十分相似,地位上他们是平等的(这就是说,他们都是一种编辑区域,都可以对我们的文件内容进行编辑),这与Palette不同。
如果要编写一个支持Palette的界面主类,我们需要一个继承自GraphicalEditorWithPalette的类。同时我们应该实现或覆盖下面的函数或接口:
protected void configureGraphicalViewer();
这个函数告诉eclipse如何配置编辑器的主界面,在这个函数里我们应该编写创建主界面的代码,并设置EditPart的工厂,关于EditPart的概念,稍后详述,而EditPart的工厂类,主要作用是根据模型创建EditPart,这其中牵扯到GEF的框架以及各个部分的创建顺序(先创建模型,再创建EditPart、最后创建Figure,这些概念都在后面叙述)。
protected PaletteRoot getPaletteRoot();
这个接口用来创建调色板。调色板的结构实际就是一个颗树,这里用来获得树根。
protected void initializeGraphicalViewer();
这个接口用于为编辑器创建context,实际就是编辑器的模型部分。然后eclipse会根据这个模型创建编辑器的EditPart,创建的原则由EditPart的工厂给出。这些概念都在以后说明。
public void doSave(IProgressMonitor monitor);
public void doSaveAs();
这两个接口都是顾名思义,不做过多解释。只是这个参数的作用还没有搞明白。
public boolean isDirty();
这个函数用于返回命令栈是不是“脏的”(虽然我不太喜欢这么翻译)。
public Object getAdapter(Class type);
这个函数用于获得指定类型的适配器类,一般重载这个函数创建自己的Outline Page。这个函数可以用来创建很多其它的东西,比如Property Sheet,你可以参考其父类的实现。
protected void initializePaletteViewer();
这个函数用来初始化Palette,如果你需要给Palette增加什么新的功能,可以重载这个函数,一般情况下使用默认的就可以了。
下面的示例代码能够帮助你了解如何编写这个类,你只需要注意函数的功能,至于中间的一些代码、出现的类我会在稍后说明:
- package pku.oo.ui;
- import org.eclipse.core.runtime.IProgressMonitor;
- import org.eclipse.gef.DefaultEditDomain;
- import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
- import org.eclipse.gef.palette.PaletteRoot;
- import org.eclipse.gef.ui.actions.ActionRegistry;
- import org.eclipse.gef.ui.parts.ContentOutlinePage;
- import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette;
- import org.eclipse.gef.ui.parts.TreeViewer;
- import org.eclipse.swt.widgets.Composite;
- import org.eclipse.ui.IActionBars;
- import org.eclipse.ui.actions.ActionFactory;
- import org.eclipse.ui.part.IPageSite;
- import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
- import pku.oo.model.Diagram;
- import pku.oo.part.PartFactory;
- import pku.oo.part.TreePartFactory;
- import pku.oo.util.PaletteFactory;
- public class NotationBuilderEditor extends GraphicalEditorWithPalette {
- private Diagram diagram = new Diagram();
- public NotationBuilderEditor() {
- super();
- this.setEditDomain(new DefaultEditDomain(this));
- }
- public Diagram getDiagram() {
- return this.diagram;
- }
- protected void configureGraphicalViewer() {
- super.configureGraphicalViewer();
- getGraphicalViewer().setRootEditPart(new ScalableFreeformRootEditPart());
- getGraphicalViewer().setEditPartFactory(new PartFactory());
- }
- private PaletteRoot paletteRoot;
- protected PaletteRoot getPaletteRoot() {
- if (this.paletteRoot == null) {
- this.paletteRoot = PaletteFactory.createPalette();
- }
- return this.paletteRoot;
- }
- protected void initializeGraphicalViewer() {
- getGraphicalViewer().setContents(this.diagram);
- }
- public void doSave(IProgressMonitor monitor) {
- }
- public boolean isDirty() {
- return getCommandStack().isDirty();
- }
- public void doSaveAs() {
- }
- public Object getAdapter(Class type) {
- if (type == IContentOutlinePage.class)
- return new OutlinePage();
- return super.getAdapter(type);
- }
- public boolean isSaveAsAllowed() {
- return false;
- }
- class OutlinePage extends ContentOutlinePage {
- public OutlinePage() {
- super(new TreeViewer());
- }
- public void init(IPageSite pageSite) {
- super.init(pageSite);
- }
- public void createControl(Composite parent) {
- super.createControl(parent);
- getSelectionSynchronizer().addViewer(getViewer());
- getViewer().setEditDomain(getEditDomain());
- getViewer().setEditPartFactory(new TreePartFactory());
- getViewer().setContents(getDiagram());
- }
- public void dispose() {
- getSelectionSynchronizer().removeViewer(getViewer());
- super.dispose();
- }
- }
- }
评论
我只是转贴而已
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21926原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2209在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4527知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4152GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7940以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4080filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5201Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7664以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5671错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5500内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6724最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 9986JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4937List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4668在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5252修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9583这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5154在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4057在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3376Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2105java.lang.IllegalAccessError: t ...
相关推荐
斑马打印机ZT411和ZT421是工业级条码和标签打印机,广泛应用于制造业、物流、零售业等对打印质量和效率有高要求的领域。这两款打印机以其出色的性能、耐用性和易用性赢得了用户的信赖。这份中文手册详细地介绍了ZT...
《ZT213/ZT213LEEA:低功耗RS232多通道USB收发器/驱动器芯片详解》 ZT213/ZT213LEEA是一款专为低功耗应用设计的RS232多通道USB收发器和驱动器芯片,广泛应用于数据通信、工业控制、物联网设备等领域。本文将深入...
1. **状态数目N**:表示状态集合的大小,状态集合标记为S,其中每个时刻t的状态用zt表示,属于状态集合S。 2. **观察符号数目M**:观察符号集合标记为V,观察到的符号用ot表示,属于观察符号集合V。 3. **状态转移...
本驱动程序专为Zebra的ZT210、ZT220及ZT230系列打印机设计,提供了全面的功能支持,以实现高质量的条形码、二维码以及其他标签打印。 1. **驱动程序安装** - `zd51166465-certified.exe` 是Zebra ZT230系列打印机...
ZT7548是一款第五代电容式触控屏幕控制器,支持30x18或18x30的通道配置,可以同时检测最多10个触点。该控制器能够与最多8个键与TSP(触控屏面板)或FPC(柔性印刷电路板)模式一起工作,在多点触控时无扫描率下降的...
本设备经测试符合 FCC 规则第 15 章规定的 B 类数字设备的限制。这些限制专门用于在家庭环境下提供适当的有害干扰防护。本设备产生、使用并且会辐射射频能量。如果未根据说明进行安装和使用,则会对无线电通信产生...
ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机
证通ZT598是一款专门用于金融、安防等领域,具备高安全性和可靠性的金属键盘设备。这款设备的开发资料包含在"证通ZT598金属键盘开发资料.rar"压缩包中,主要适用于那些进行嵌入式系统开发的工程师。在深入探讨其开发...
1. **内置总线收发器**:芯片内集成了收发器,可以实现半双工通信,即在同一时刻只能发送或接收数据。 2. **数据速率**:ZT13085E支持多种数据速率,通常可达到10Mbps,具体速率取决于线路条件和应用需求。 3. **...
1. **斑马ZT410打印机特性** - 高性能:ZT410采用强大的32位处理器,提供快速打印速度,满足高效率需求。 - 介质处理:支持各种标签类型和宽度,具有自动检测和校准功能,确保打印质量。 - 网络连接:具备以太网...
《随机过程》第二章主要涉及了随机过程的基本概念和特性,包括随机过程的分类、概率密度函数、数学期望、方差、协方差和相关函数等核心知识点。以下是这些知识点的详细解释: 1. **随机过程分类**: - 离散参数链...
在数字信号处理中,有三个重要的数学变换工具,即傅里叶变换(FT)、Z 变换(ZT)和离散傅里叶变换(DFT)。这些变换可以将信号和系统在时域空间和频域空间相互转换,方便了对信号和系统的分析和处理。 傅里叶变换...
而ZT-TR43系列参数设置软件就是为了确保这些LED设备能够根据用户需求进行个性化调整,实现最佳性能和效果。 该软件的核心功能在于LED的参数配置。这包括但不限于以下几个方面: 1. **亮度调节**:用户可以通过软件...
斑马打印机ZT210是一款专业的工业级条形码和标签打印机,广泛应用于物流、零售、医疗等行业的标签制作。以下是对如何设置和使用斑马ZT210打印机的详细步骤: 首先,我们需要安装电脑驱动。双击下载好的驱动程序文件...
标题中“ZT2835W0M1贴片发光二极管规格书”指的是中之光电科技有限公司生产的型号为ZT2835W0M1的中功率贴片LED灯珠的相关技术参数和使用说明文档。这种LED具备2.8mm×3.5mm×0.8mm的封装尺寸,具有超长使用寿命和防...
斑马ZT510打印机驱动文件
1. 初始化指令:这类指令用于设置键盘的工作模式,如波特率、奇偶校验、停止位等,确保数据传输的正确性。 2. 输入获取指令:当用户在键盘上输入密码或其他数据时,系统需要通过这些指令来读取并处理这些信息。 3....