`

RCP 工具栏、菜单栏中,用Command配置的情况下,设置子元素 可用不可用(enable)问题

 
阅读更多
工具栏或菜单栏的子元素(就是各种工具按钮或者菜单项)有多种实现方式,比如通过最传统的Action等,但是,

问题:如何在图形配置Command实现工具栏或菜单栏子元素的情况下,控制Command的可用不可用能?

1.首先是对org.eclipse.ui.menus插件进行扩展:

(1)创建菜单栏

右键-->new-->menuContribution:

-----locationURI*: menu:org.eclipse.ui.main.menu

-----class: (可以不填)

-----allPopups: false

然后,创建菜单项:(可用创建多个,这里就创建一个File菜单项为例)

在menuContributions上 右键--->new--->menu

------label*: File

------id:   (可以不填)

------mnemonic: F(这个是表示Ctrl+F快捷键)

------(其他的可以不填)

然后,创建File菜单的子菜单项,用Command的形式(比如new、exit等)

在File(menu)上右键--->new--->command

------commandId*: org.xxx.xxx.NewCommand(需要自定义Command,扩展org.eclipse.ui.commands插件,稍后说明)

------label: new

------(其他可选填)

(2)创建工具栏

步骤和创建菜单类似,不过有几个地方要改动:

在org.eclipse.ui.menus上右键--->new ---->menuContribution

-----locationURI*: toolbar:org.eclipse.ui.main.toolbar

-----class: (可以不填)

-----allPopups: false

然后,创建工具栏项

在menuContributions上 右键--->new--->toolbar

在toolbar上创建Command就和Menu时的一样了

(于是菜单栏和工具栏都建好了)

(同样,可用创建多个command,不过这个Command只是个引用,还需要有真正的对象可调:于是应该扩展org.eclipse.ui.commands插件)

2.对org.eclipse.ui.commands插件进行扩展:

----new---->command

--------id*:org.xxx.xxx.NewCommand(和前面指定的commandID对应)

--------defaultHandler:这里就是Command的具体实现,继承org.eclipse.core.commands.AbstractHandler实现自己的handler

===================================

现在菜单栏和工具栏都创建好了,如果再加入了各子的defaultHandler就可以促发事件正常使用了,但是,如果想控制command的可用不可用该怎么办呢,就回到了开始的问题上?

-------------------

看看各个扩展点的情况可以得知:org.eclipse.ui.menus的menu和toolbar中只能控制其visibleWhen(显示与否,而不是可用与否---注意:这两点是不同的)---行不通

--------------------

那么解决办法呢?

======================

就是扩展org.eclipse.ui.handlers对自定义实现的handler进行操作,进而控制command的可用与否。

--------------

扩展 org.eclipse.ui.handlers

----new ---->handler(填写commandID--即该handler所关联的command的id;class就是该handler的具体实现类)

----->enabledWhen/activeWhen-----------这里就可以控制handler的状态了

可用通过ISourse的一些状态,比如某个view、Editor或者透视图活动的时候才使该handler可用。(具体可参考org.eclipse.ui.handlers扩展点的Eclipse帮助文档)。

在这里我举个例子:

eg.:  handler----enabledWhen-----with

                       Variable*: activeWorkbenchWindow.activePerspective-----value*: org.xxx.xxx.YourRCPPerspective

代表的意思就是:该handler在YourRCPPerspective透视图活动的时候 可用。activeWorkbenchWindow.activePerspective是org.eclipse.ui.ISources的变量,可用直接看其源码。

//ISources部分源码
public interface ISources {

public static final String ACTIVE_CONTEXT_NAME = "activeContexts";

public static final String ACTIVE_ACTION_SETS_NAME = "activeActionSets";

public static final String ACTIVE_SHELL_NAME = "activeShell";

 public static final String ACTIVE_WORKBENCH_WINDOW_SHELL_NAME = "activeWorkbenchWindowShell";

 public static final String ACTIVE_WORKBENCH_WINDOW_IS_COOLBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME
   + ".isCoolbarVisible";  
 public static final String ACTIVE_WORKBENCH_WINDOW_IS_PERSPECTIVEBAR_VISIBLE_NAME = ACTIVE_WORKBENCH_WINDOW_NAME
   + ".isPerspectiveBarVisible";

 public static final String ACTIVE_MENU_SELECTION_NAME = "activeMenuSelection";   

public static final String ACTIVE_MENU_EDITOR_INPUT_NAME = "activeMenuEditorInput"; 

 public static final String ACTIVE_FOCUS_CONTROL_NAME = "activeFocusControl";

 public static final String ACTIVE_FOCUS_CONTROL_ID_NAME = "activeFocusControlId";

//.... 

}

你可以根据编程实际需要,选择合适的variable,当然也可以定义自己的:

//1.设置自己的AbleMark
 
IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
  IEvaluationContext context = handlerService.getCurrentState();
  context.addVariable(“AbleMark”, xxxValue);

  //2.请求该mark(使该mark处于被激活状态)
 
IEvaluationService service = (IEvaluationService)getSite().getService(IEvaluationService.class);
  service.requestEvaluation(“AbleMark”);


-----这时,"AbleMark"就是自定义的variable,从而实现对handler的更个性化的控制。
分享到:
评论

相关推荐

    RCP 菜单与工具栏小结

    在探讨RCP菜单与工具栏小结之前,我们先来明确一下RCP(Rich Client Platform)的概念。RCP是Eclipse平台的一部分,用于构建复杂的、数据丰富的桌面应用程序。它提供了强大的框架和工具集,使开发者能够创建具有高度...

    rcp 工具栏

    Eclipse RCP的核心特性包括插件系统、工作台(Workbench)、视图(Views)、编辑器(Editors)以及菜单和工具栏等用户界面元素。 在Eclipse RCP中,工具栏(Toolbar)是一种图形用户界面组件,通常位于窗口顶部,...

    plugin2_RCP菜单_teamcenter_

    总的来说,"plugin2_RCP菜单_teamcenter_"涉及的知识点主要包括了Eclipse RCP的原理,`plugin.xml`配置文件的使用,以及如何在Teamcenter环境中定制和集成菜单与工具栏。开发者需要具备扎实的Java编程基础,熟悉...

    plugin1_RCP菜单_teamcenter_

    例如,可以使用`<menuContribution>`元素来添加新的菜单,使用`<command>`元素定义命令,然后通过`<menu>`和`<menuitem>`元素来组织菜单结构。 下面是一个简单的plugin.xml配置示例,展示了如何创建一个“文件”...

    RCP的Navigator例子源代码(包括修改默认的new右键菜单)

    然后,通过菜单贡献(MenuContribution)将这个命令添加到指定的菜单或工具栏上。`com.itec.rcp`可能是实现这一功能的具体代码,其中可能包含自定义命令、处理程序和服务的实现。 具体步骤如下: 1. **创建自定义...

    eclipse rcp 菜单小例子

    在这个“eclipse rcp 菜单小例子”项目中,我们将深入探讨如何在Eclipse RCP应用中创建和配置菜单,以及如何通过`visibleWhen`标签控制菜单项的可见性。 首先,让我们了解Eclipse RCP中的菜单结构。菜单主要分为三...

    RCP自定义透视图切换按钮的右键菜单

    默认情况下,Eclipse RCP提供了标准的透视图切换方式,但开发者可以根据需求进行自定义。下面我们将逐步解析这个过程: 1. **理解org.eclipse.ui.presentationFactories扩展点**: `org.eclipse.ui....

    RCP-1500中文操作手册.pdf

    索尼公司生产的RCP-1500系列遥控面板(包括RCP-1500、RCP-1501和RCP-1530型号)是用于配置和控制演播室级及广播级摄像机的专业设备。这些设备提供了高级的操作便利性和功能的多样性,使得用户能够高效地进行摄影机的...

    eclipse 3.6 rcp 开发

    - 使用ContributionItem贡献至工具栏或菜单栏。 **3.3 “扩展”方式添加菜单和工具栏** - **XML贡献**: 在plugin.xml中定义扩展点,通过XML贡献菜单项和工具栏。 - **示例**: ```xml <command commandId=...

    RCP程序中集成其他插件的配置方法

    这将确保新插件的视图、透视图或其他元素能在RCP程序中被正确展示和使用。 5. **运行时配置**: 更新RCP程序的启动配置,确保新的插件被包含在运行时环境中。这可以通过修改`.product`文件或使用Eclipse的运行配置来...

    Eclipse-RCP中文入门教程

    - **ApplicationActionBarAdvisor**:用于配置工具栏和菜单栏等UI元素,使得用户界面更加友好。 通过这些详细的介绍可以看出,创建一个RCP应用涉及到了多个核心组件的设计与实现。理解这些组件的功能和交互方式对于...

    eclipse rcp 自学教程

    1. 创建菜单和工具栏:通过编程或者使用Eclipse的图形化工具(如Perspective Editor和Action Set Editor)来添加菜单项和工具栏按钮。 2. 绑定事件处理:为菜单项和工具栏按钮关联相应的事件处理器,实现功能逻辑。 ...

    Eclipse RCP Plug-in开发自学教程(Eclipse3.6)

    - **概述**:介绍菜单栏和工具栏在RCP中的使用。 - **通过编码添加**:演示如何直接在代码中创建菜单和工具栏项。 - **“扩展”方式添加**:利用Eclipse插件系统的扩展点添加菜单和工具栏。 - **添加全局快捷键*...

    Eclipse-4-RCP教程

    菜单和工具栏是Eclipse RCP应用中常见的UI元素。 - **菜单和工具栏**:学习如何在Eclipse RCP应用中创建和定制菜单及工具栏。 #### 十七、增加菜单练习 - **添加菜单**:实践如何在Eclipse RCP应用中添加菜单项。...

    Eclipse RCP详细教程

    扩展是一种动态的方式,可以在不修改原有代码的情况下扩展应用的功能。 - **扩展点**:扩展点是插件提供的接口,用于接收来自其他插件的扩展。通过定义扩展点,插件可以指定其他插件可以扩展的部分。 #### 2. 创建...

Global site tag (gtag.js) - Google Analytics