`

[zt]第二章 主类和主界面类的实现(1)

阅读更多

FROM:http://www.blog.edu.cn/user1/19180/archives/2005/372845.shtml

1 插件主类

    所谓的插件主类,就等同于一般Java程序中的main函数。它实现了如何启动、停止插件等动作。这个类实际上就是一个实现了org.eclipse.ui.plugin.AbstractUIPlugin的类,这个类的代码比较简单,利用向导生成的默认代码就可以了。如果你删除了默认的文件,下面的示例可以帮助你编写新的类:

java 代码
  1. package pku.oo.notationBuilder;   
  2.   
  3. import org.eclipse.ui.plugin.*;   
  4. import org.eclipse.jface.resource.ImageDescriptor;   
  5. import org.osgi.framework.BundleContext;   
  6.   
  7. public class NotationBuilderPlugin extends AbstractUIPlugin {   
  8.   
  9.     //The shared instance.   
  10.     private static NotationBuilderPlugin plugin;   
  11.        
  12.     /**  
  13.      * The constructor.  
  14.      */  
  15.     public NotationBuilderPlugin() {   
  16.         plugin = this;   
  17.     }   
  18.   
  19.     /**  
  20.      * This method is called upon plug-in activation  
  21.      */  
  22.     public void start(BundleContext context) throws Exception {   
  23.         super.start(context);   
  24.     }   
  25.   
  26.     /**  
  27.      * This method is called when the plug-in is stopped  
  28.      */  
  29.     public void stop(BundleContext context) throws Exception {   
  30.         super.stop(context);   
  31.         plugin = null;   
  32.     }   
  33.   
  34.     /**  
  35.      * Returns the shared instance.  
  36.      */  
  37.     public static NotationBuilderPlugin getDefault() {   
  38.         return plugin;   
  39.     }   
  40.   
  41.     /**  
  42.      * Returns an image descriptor for the image file at the given  
  43.      * plug-in relative path.  
  44.      *  
  45.      * @param path the path  
  46.      * @return the image descriptor  
  47.      */  
  48.     public static ImageDescriptor getImageDescriptor(String path) {   
  49.         return AbstractUIPlugin.imageDescriptorFromPlugin("NotationBuilder", path);   
  50.     }   
  51. }   

 

    注释已经很清晰了,大部分代码只要拷贝就可以了。

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增加什么新的功能,可以重载这个函数,一般情况下使用默认的就可以了。

    下面的示例代码能够帮助你了解如何编写这个类,你只需要注意函数的功能,至于中间的一些代码、出现的类我会在稍后说明:

java 代码
  1. package pku.oo.ui;   
  2.   
  3. import org.eclipse.core.runtime.IProgressMonitor;   
  4. import org.eclipse.gef.DefaultEditDomain;   
  5. import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;   
  6. import org.eclipse.gef.palette.PaletteRoot;   
  7. import org.eclipse.gef.ui.actions.ActionRegistry;   
  8. import org.eclipse.gef.ui.parts.ContentOutlinePage;   
  9. import org.eclipse.gef.ui.parts.GraphicalEditorWithPalette;   
  10. import org.eclipse.gef.ui.parts.TreeViewer;   
  11. import org.eclipse.swt.widgets.Composite;   
  12. import org.eclipse.ui.IActionBars;   
  13. import org.eclipse.ui.actions.ActionFactory;   
  14. import org.eclipse.ui.part.IPageSite;   
  15. import org.eclipse.ui.views.contentoutline.IContentOutlinePage;   
  16.   
  17. import pku.oo.model.Diagram;   
  18. import pku.oo.part.PartFactory;   
  19. import pku.oo.part.TreePartFactory;   
  20. import pku.oo.util.PaletteFactory;   
  21.   
  22. public class NotationBuilderEditor extends GraphicalEditorWithPalette {   
  23.   
  24.     private Diagram diagram = new Diagram();   
  25.        
  26.     public NotationBuilderEditor() {   
  27.         super();   
  28.         this.setEditDomain(new DefaultEditDomain(this));   
  29.     }   
  30.     public Diagram getDiagram() {   
  31.         return this.diagram;   
  32.     }   
  33.   
  34.     protected void configureGraphicalViewer() {   
  35.         super.configureGraphicalViewer();   
  36.         getGraphicalViewer().setRootEditPart(new ScalableFreeformRootEditPart());   
  37.         getGraphicalViewer().setEditPartFactory(new PartFactory());   
  38.     }   
  39.     private PaletteRoot paletteRoot;   
  40.        
  41.     protected PaletteRoot getPaletteRoot() {   
  42.         if (this.paletteRoot == null) {   
  43.             this.paletteRoot = PaletteFactory.createPalette();   
  44.         }   
  45.         return this.paletteRoot;   
  46.     }   
  47.   
  48.     protected void initializeGraphicalViewer() {   
  49.         getGraphicalViewer().setContents(this.diagram);   
  50.     }   
  51.   
  52.     public void doSave(IProgressMonitor monitor) {   
  53.     }   
  54.   
  55.     public boolean isDirty() {   
  56.         return getCommandStack().isDirty();   
  57.     }   
  58.   
  59.     public void doSaveAs() {   
  60.     }   
  61.     public Object getAdapter(Class type) {   
  62.         if (type == IContentOutlinePage.class)   
  63.             return new OutlinePage();   
  64.         return super.getAdapter(type);   
  65.     }   
  66.   
  67.     public boolean isSaveAsAllowed() {   
  68.         return false;   
  69.     }   
  70.   
  71.   
  72.     class OutlinePage extends ContentOutlinePage {   
  73.         public OutlinePage() {   
  74.             super(new TreeViewer());   
  75.         }   
  76.   
  77.         public void init(IPageSite pageSite) {   
  78.             super.init(pageSite);   
  79.         }   
  80.   
  81.         public void createControl(Composite parent) {   
  82.             super.createControl(parent);   
  83.             getSelectionSynchronizer().addViewer(getViewer());   
  84.             getViewer().setEditDomain(getEditDomain());   
  85.             getViewer().setEditPartFactory(new TreePartFactory());   
  86.             getViewer().setContents(getDiagram());   
  87.         }   
  88.   
  89.         public void dispose() {   
  90.             getSelectionSynchronizer().removeViewer(getViewer());   
  91.             super.dispose();   
  92.         }   
  93.     }   
  94.   
  95. }   


分享到:
评论
2 楼 macrochen 2008-06-28  
引用
呵呵,看你的文章对理清楚概念很有帮助,顶

我只是转贴而已
1 楼 zenghongwei 2008-06-27  
呵呵,看你的文章对理清楚概念很有帮助,顶

相关推荐

    zt411-zt421-ug-zhcn_ZT411/ZT421_斑马打印机手册_

    斑马打印机ZT411和ZT421是工业级条码和标签打印机,广泛应用于制造业、物流、零售业等对打印质量和效率有高要求的领域。这两款打印机以其出色的性能、耐用性和易用性赢得了用户的信赖。这份中文手册详细地介绍了ZT...

    ZT213/ZT213LEEA规格书V2.10-低功耗RS232多通道USB收发器/驱动器芯片手册

    《ZT213/ZT213LEEA:低功耗RS232多通道USB收发器/驱动器芯片详解》 ZT213/ZT213LEEA是一款专为低功耗应用设计的RS232多通道USB收发器和驱动器芯片,广泛应用于数据通信、工业控制、物联网设备等领域。本文将深入...

    第二章_隐马尔科夫模型

    1. **状态数目N**:表示状态集合的大小,状态集合标记为S,其中每个时刻t的状态用zt表示,属于状态集合S。 2. **观察符号数目M**:观察符号集合标记为V,观察到的符号用ot表示,属于观察符号集合V。 3. **状态转移...

    Zebra ZT230 条码打印机驱动

    本驱动程序专为Zebra的ZT210、ZT220及ZT230系列打印机设计,提供了全面的功能支持,以实现高质量的条形码、二维码以及其他标签打印。 1. **驱动程序安装** - `zd51166465-certified.exe` 是Zebra ZT230系列打印机...

    ZT7548 Datasheet Rev.1.0.3.pdf

    ZT7548是一款第五代电容式触控屏幕控制器,支持30x18或18x30的通道配置,可以同时检测最多10个触点。该控制器能够与最多8个键与TSP(触控屏面板)或FPC(柔性印刷电路板)模式一起工作,在多点触控时无扫描率下降的...

    斑马打印机ZT210用户指南

    本设备经测试符合 FCC 规则第 15 章规定的 B 类数字设备的限制。这些限制专门用于在家庭环境下提供适当的有害干扰防护。本设备产生、使用并且会辐射射频能量。如果未根据说明进行安装和使用,则会对无线电通信产生...

    ZT410打印机IP地址设置网络打印机

    ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机

    证通ZT598金属键盘开发资料.rar

    证通ZT598是一款专门用于金融、安防等领域,具备高安全性和可靠性的金属键盘设备。这款设备的开发资料包含在"证通ZT598金属键盘开发资料.rar"压缩包中,主要适用于那些进行嵌入式系统开发的工程师。在深入探讨其开发...

    RS485通信芯片zt13085e的原理图库和PCB库

    1. **内置总线收发器**:芯片内集成了收发器,可以实现半双工通信,即在同一时刻只能发送或接收数据。 2. **数据速率**:ZT13085E支持多种数据速率,通常可达到10Mbps,具体速率取决于线路条件和应用需求。 3. **...

    斑马zt410中文库

    1. **斑马ZT410打印机特性** - 高性能:ZT410采用强大的32位处理器,提供快速打印速度,满足高效率需求。 - 介质处理:支持各种标签类型和宽度,具有自动检测和校准功能,确保打印质量。 - 网络连接:具备以太网...

    《随机过程》第二章题目与答案[参照].pdf

    《随机过程》第二章主要涉及了随机过程的基本概念和特性,包括随机过程的分类、概率密度函数、数学期望、方差、协方差和相关函数等核心知识点。以下是这些知识点的详细解释: 1. **随机过程分类**: - 离散参数链...

    数字信号处理 课后答案第2章

    在数字信号处理中,有三个重要的数学变换工具,即傅里叶变换(FT)、Z 变换(ZT)和离散傅里叶变换(DFT)。这些变换可以将信号和系统在时域空间和频域空间相互转换,方便了对信号和系统的分析和处理。 傅里叶变换...

    ZT-TR43系列参数设置软件

    而ZT-TR43系列参数设置软件就是为了确保这些LED设备能够根据用户需求进行个性化调整,实现最佳性能和效果。 该软件的核心功能在于LED的参数配置。这包括但不限于以下几个方面: 1. **亮度调节**:用户可以通过软件...

    斑马打印机(ZT210).docx

    斑马打印机ZT210是一款专业的工业级条形码和标签打印机,广泛应用于物流、零售、医疗等行业的标签制作。以下是对如何设置和使用斑马ZT210打印机的详细步骤: 首先,我们需要安装电脑驱动。双击下载好的驱动程序文件...

    ZT2835W0M1贴片发光二极管规格书.pdf

    标题中“ZT2835W0M1贴片发光二极管规格书”指的是中之光电科技有限公司生产的型号为ZT2835W0M1的中功率贴片LED灯珠的相关技术参数和使用说明文档。这种LED具备2.8mm×3.5mm×0.8mm的封装尺寸,具有超长使用寿命和防...

    斑马ZT510打印机驱动文件

    斑马ZT510打印机驱动文件

    ZT598命令集技术手册(C45)(B46.04)_证通密码键盘指令集_

    1. 初始化指令:这类指令用于设置键盘的工作模式,如波特率、奇偶校验、停止位等,确保数据传输的正确性。 2. 输入获取指令:当用户在键盘上输入密码或其他数据时,系统需要通过这些指令来读取并处理这些信息。 3....

Global site tag (gtag.js) - Google Analytics