`

[zt]工具栏(Action Bar)

阅读更多

FROM:http://www.blog.edu.cn/user1/19180/archives/2006/1406358.shtml

对于图形界面工具来说,工具栏是必不可少的支持。对于Eclipse插件而言,工具栏可以分为两种:主工具栏(全局)和视图工具栏。从实现的角度上,二者没有什么太大区别,只是在初始化的时候略有不同。

 

工具条上的每一个按钮实际上是一个Action,每个Action负责执行一些功能。Action分为普通的Action和RetargetAction两种,我们看到的工具栏上的按钮其实都是RetargetAction,他们负责提供按钮的图标、说明等等,而真正的功能则由另一个普通的Action负责实现。这就是说,在普通的Action和RetargetAction之间存在一个对应关系,当用户点中工具栏上的RetargetAction时,其对应的Action将被执行(我们称这个Action为RetargetAction的handler)。一般来说,只要二者的ID一样,那么这两个Action之间就能自动建立这种对应。实际上,存在一个函数为RetargetAction建立handler,但是默认情况下GEF帮我们做了,有关映射的问题,稍后再做讨论。

自定义一个Action

下面给出一个RetargetAction的例子:

  1. public class MappingRetargetAction extends RetargetAction {   
  2.     public MappingRetargetAction() {   
  3.         super(MappingAction.ID, "do Mapping");   
  4.         setToolTipText("Mapping abstract Model");   
  5.         setImageDescriptor(ModelConstance.ICON_MAPPING_A);   
  6.         setDisabledImageDescriptor(ModelConstance.ICON_MAPPING_D);   
  7.     }   
  8. }  

上面的代码一目了然,这里不再做过多的解释。接下来创建MappingAction,也就是RetargetAction的Handler。MappingAction的作用是为模型元素进行语义映射,因而,我们首先需要选中一个模型元素——重点是,MappingAction必须是SelectionAction的子类。

SelectionAction用于实现选中元素的操作,如果某一项功能需要选中一些元素后才能执行,那么你就可以使用SelectionAction。SelectionAction是WorkbenchPartAction的子类,WorkbenchPartAction的子类还包括CopyTemplateAction、EditorPartAction、PrintAction、StackAction,这看起来比较晕,不过幸运的是最常用的还是SelectionAction,或者你可以直接继承自WorkbenchPartAction甚至是Action来实现你的功能。

对于每个WorkbenchPartAction来说,最重要的方法是calculateEnabled和run,前者用于判断这个Action是否可以被激活,后者则执行这些操作,这一点对于SelectionAction也是一样的,如下面的示例:

  1. public class MappingAction extends SelectionAction {   
  2.     final static public String ID = "USER_DEFINE:Mapping";   
  3.     protected MappingDialog dlg = null;   
  4.     public MappingAction(IWorkbenchPart part) {   
  5.         super(part);   
  6.         this.setId(ID);   
  7.     }   
  8.     protected boolean calculateEnabled() {   
  9.         IStructuredSelection s = (IStructuredSelection)this.getSelection();     
  10.         if(s==null||s.size()!=1return false;   
  11.         if(s.getFirstElement() instanceof DiagramPart) return false;   
  12.         if(s.getFirstElement() instanceof TextObjectModelPart) return true;   
  13.         return false;   
  14.     }   
  15.     public void run() {   
  16.         IStructuredSelection s = (IStructuredSelection)this.getSelection();   
  17.         if(dlg==null) dlg  = new MappingDialog((Shell)null);   
  18.         if(dlg.open()!=Window.OK) {   
  19.             return;   
  20.         }   
  21.         MappingTextObjectCommand c = new MappingTextObjectCommand();   
  22.         c.path = dlg.path;   
  23.         c.model = (TextObjectModel)((TextObjectModelPart)s.getFirstElement()).getModel();   
  24.         this.execute(c);   
  25.     }   
  26. }  

有两点需要说明,首先在初始化的时候Action的ID一定和之前的RetargetAction一致;其次,原则上run方法里可以实现全部的功能,但是出于复用的角度,我们还是讲真正的逻辑封装在一个Command里。

安装Action

首先我们需要一个ActionBarContributor,它用于创建主工具栏。其中我们主要需要实现三个函数:buildActions、declareGlobalActionKeys、contributeToToolBar。buildActions通常用于创建新的Action,declareGlobalActionKeys则用于声明那些已经存在RetargetAction的Action,比如有些功能如DELETE、UNDO、REDO等等。

GEF 在ActionBarContributor里维护了retargetActions和globalActionKeys两个列表,其中后者是一个Retarget Actions的ID列表,addRetargetAction()方法会把一个Retarget Action同时加到二者中,对于已有的Retarget Actions,我们应该在declareGlobalActionKeys()方法里调用addGlobalActionKey()方法来声明,在一个编辑器被激活的时候,与globalActionKeys里的那些ID具有相同ID值的(具有实际功能的)Action将被联系到该ID对应的Retarget Action,只要保证二者的ID相同即可实现映射。[八进制]

示例如下:

  1. public class DiagramActionBarContributor extends ActionBarContributor {   
  2.     protected void buildActions() {   
  3.         addRetargetAction(new DeleteRetargetAction());   
  4.         addRetargetAction(new MappingRetargetAction());   
  5.         addRetargetAction(new MappingRelationshipRetargetAction());   
  6.     }   
  7.     protected void declareGlobalActionKeys() {   
  8.     }   
  9.     public void contributeToToolBar(IToolBarManager toolBarManager) {   
  10.         toolBarManager.add(getAction(ActionFactory.DELETE.getId()));   
  11.         toolBarManager.add(getAction(MappingAction.ID));   
  12.         toolBarManager.add(getAction(MappingRelationshipAction.ID));   
  13.     }   
  14. }  

ActionBarContributor 中只设置了RetargetAction,真正实现功能的Action则要在Editor中进行设置。重载Editor的createActions,安装真正Action,如下:

java 代码
  1. protected void createActions() {   
  2.     super.createActions();   
  3.     IAction a;   
  4.     a = new MappingAction(this);   
  5.     getActionRegistry().registerAction(a);   
  6.     getSelectionActions().add(a.getId());   
  7.     ...   
  8. }  

最后在plugin.xml中的Extensions选项页里选择你的Editor,并在右侧Extension Element Details里设置ContributorClass为ActionBarContributor,主工具栏就会出现我们自定义的那个Action了。

PS:八进制这篇写的真不错,推荐一下http://bjzhanghao.cnblogs.com/archive/2005/03/30/128704.html

java 代码

java 代码

java 代码
分享到:
评论

相关推荐

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

    总结,斑马打印机ZT411和ZT421的中文手册是用户操作、维护和解决问题的重要工具。它详尽地涵盖了打印机的所有方面,无论是初次使用者还是经验丰富的技术人员,都能从中获益。通过学习和参考这份手册,用户可以充分...

    Linux 下编程的三个重要工具(ZT).rar_linux rar_linux 编程

    本资源"Linux下编程的三个重要工具(ZT)"似乎提供了一些关键工具的介绍,虽然具体细节未在描述中详述,但我们可以根据常见的编程工具来探讨这三个可能的重要工具。以下是Linux编程中经常使用的三大工具的详细讲解:...

    项目管理工具——ZT

    "项目管理工具——ZT",在这里指的是禅道(ZentaoPMS),这是一款专为中国企业打造的开源项目管理软件,旨在提升团队协作效率,规范项目流程,实现产品开发的精细化管理。 禅道的核心功能涵盖了需求管理、任务管理...

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

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

    ZT213LEEA.PDF

    ### ZT213LEEA.PDF 知识点概览 #### 一、产品概述 **ZT213LEEA** 是一款由 Zywyn Corporation 生产的低功耗 RS232 通信接口芯片。该系列器件采用 +5V 供电,支持 EIA/TIA-232 和 V.28/V.24 通信标准,并具有较低的...

    ZT的官服客户端物品查看工具

    官服物品查看工具,ZT的官服客户端物品查看工具

    斑马zt410中文库

    - 安装中文库通常需要通过斑马的软件工具,如ZebraDesigner,将"chinesefont"文件上传到打印机内存中。 - 使用时,在打印软件中选择已安装的中文字体,然后编辑并打印包含中文的标签内容。 - 验证打印效果:打印...

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

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

    Zebra ZT230 条码打印机驱动

    斑马(Zebra)ZT230条码打印机是一款广泛应用在工业环境中的高效设备,其驱动程序是确保打印机正常工作的重要组成部分。本驱动程序专为Zebra的ZT210、ZT220及ZT230系列打印机设计,提供了全面的功能支持,以实现高...

    ZT7548 Datasheet Rev.1.0.3.pdf

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

    斑马打印机ZT210用户指南

    "斑马打印机ZT210用户指南" 本用户指南旨在为Zebra ZT210/ZT220/ZT230打印机的用户提供操作和维护指南,该设备是一种工业级的条码打印机,具有高速打印、高速处理和高质量打印输出等特点。 版权信息 本手册的版权...

    斑马ZT510打印机驱动文件

    斑马ZT510打印机驱动文件

    斑马打印机(ZT210).docx

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

    CAD工具箱5.2

    CAD 贱人工具箱5.2,使用说明:CAD命令:ap,加载文件,再使用命令:Y

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

    RS485通信芯片ZT13085E是一种常用的工业级串行通信接口芯片,主要用于构建远程、多节点的通信网络。在工业自动化、楼宇自动化、物联网设备等领域有广泛应用。ZT13085E的设计目标是提供一种高效、可靠的数据传输方式...

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

    开发SDK是软件开发工具包的简称,它为开发者提供了实现特定功能所需的接口、库文件、示例代码等资源。在证通ZT598的SDK中,接口说明文档详细阐述了如何与硬件进行通信,包括发送指令、接收反馈、处理错误等方面,是...

    zt-exec-1.9-API文档-中文版.zip

    赠送jar包:zt-exec-1.9.jar; 赠送原API文档:zt-exec-1.9-javadoc.jar; 赠送源代码:zt-exec-1.9-sources.jar; 赠送Maven依赖信息文件:zt-exec-1.9.pom; 包含翻译后的API文档:zt-exec-1.9-javadoc-API文档-...

    斑马zt210打印机驱动 v5.1.07.5146 官方版

    斑马zt210是一款专为中国市场设计的工业条码打印机,非常适合不需要频繁更换标签的条码标签应用。这里给大家提供斑马zt210驱动下载,推荐有需要的用户下载安装。斑马zt210打印机优势:◆ 节省空间* 小巧紧凑和流线型...

    zebra ZT400系列打印机技术手册

    ### zebra ZT400系列打印机技术手册 #### 知识点概述: 1. **版权及法律声明**:Zebra ZT400系列打印机技术手册的版权及相关软件固件的所有权归属ZIH Corp.及其许可证持有者,未经授权复制会受到法律制裁。 2. **...

    ZT210 230加载介质和碳带

    《ZT210 230加载介质和碳带》 在条形码和标签打印领域,Zebra公司的ZT210和ZT230打印机是广泛应用的设备,以其可靠性和效率赢得了广大用户的青睐。这两个型号的打印机都属于入门级工业级条码打印机,适用于各种商业...

Global site tag (gtag.js) - Google Analytics