Eclipse rcp eclipsercp菜单&;操作:配置或编码?

Eclipse rcp eclipsercp菜单&;操作:配置或编码?,eclipse-rcp,eclipse-rap,plugin.xml,Eclipse Rcp,Eclipse Rap,Plugin.xml,这是一个一般性的问题,但我目前的问题围绕着菜单处理 在带有菜单操作的普通插件中,您可以在plugin.xml配置中配置操作集等。这显然是明智的 我正在开发一个RCP应用程序(实际上是RAP),我想知道通过plugin.xml配置所有东西是否值得。我的插件不必与其他未知插件交互,因此,理论上,我有控制权。我可以通过编程方式添加菜单和操作 我一直在尝试配置包含子菜单的菜单。我曾尝试定义动作集并将一个动作集与另一个动作集链接起来,但没有成功。根据用户角色,需要禁用某些项目 我想我可以在几分钟内完成全部

这是一个一般性的问题,但我目前的问题围绕着菜单处理

在带有菜单操作的普通插件中,您可以在plugin.xml配置中配置操作集等。这显然是明智的

我正在开发一个RCP应用程序(实际上是RAP),我想知道通过plugin.xml配置所有东西是否值得。我的插件不必与其他未知插件交互,因此,理论上,我有控制权。我可以通过编程方式添加菜单和操作

我一直在尝试配置包含子菜单的菜单。我曾尝试定义动作集并将一个动作集与另一个动作集链接起来,但没有成功。根据用户角色,需要禁用某些项目

我想我可以在几分钟内完成全部代码,但我不确定这是否符合eclipse的“精神气质”


有什么意见?该应用程序将变得相当大,因此我希望从一开始就正确使用该方法。也许有人可以给我举一个配置嵌套菜单的例子:-)

如果您正在编写RCP应用程序,最好的做法是在ActionBarAdvisor中创建占位符。虽然这将定义菜单和工具栏的基本结构,但您可以扩展menuContributions,并使用命令来提供实际的菜单/工具项。

我的观点是plugin.xml实现是一条可行之路

我使用此方法的两个主要原因:

  • 在不编写java代码的情况下,重新配置和重组菜单和按钮非常容易
  • 非常清晰的菜单树分层可视化
下面是一个实现菜单和子菜单的代码段。在本例中,它们被添加到主菜单中

您可以将其粘贴到plugin.xml中:


要激活/停用菜单,必须使用核心表达式来启用/禁用命令处理程序。如果命令没有附加任何活动的处理程序,它将被禁用。因此,调用该命令的菜单项也将被禁用

下面的代码片段演示如何在视图的工具栏上创建按钮,并根据变量的值启用/禁用该按钮。请记住,您必须更改此代码中的某些内容才能使其正常工作。大多数更改用于引用名称和类实现

在工具栏中创建按钮(plugin.xml):


创建命令(plugin.xml):


创建命令处理程序(plugin.xml):




  • 对于Eclipse,有两种不同的方式为工作台做出贡献:操作和命令。

    我绝对推荐命令比操作更新、更高级。 此处规定的措施的缺点(1):

    • UI和处理始终是绑定的。你们不可能彼此分开

    • 虽然操作可以贡献给工作台的不同部分(弹出菜单/工具栏),但它们都是不同的扩展点,因此最终会在多个地方复制XML。最糟糕的是,并非所有扩展点都期望相同的配置

    • 在多个位置指定操作是维护的噩梦。如果必须更改某个操作的图标,则需要在所有位置进行更改

    • 在plugin.xml中复制操作的另一个问题是,相同操作的多个实例将在内存中创建

      (一)


    要在RCP中添加操作,您还可以使用ApplicationActinBarAcvisor。它比上述解决方案更简单 在这种情况下,您只需首先将操作声明为IWorkbenchAction的对象,然后在“受保护的void makeActions(IWorkbenchWindow)”方法中注册它。 最后一步是将其添加到菜单中。 下面的代码将帮助您

    1.首先宣布行动:-

    private IWorkbenchAction newAction
    
    protected void makeActions(IWorkbenchWindow window) {
    newAction = ActionFactory.NEW_WIZARD_DROP_DOWN.create(window);
        register(newAction);
        newAction.setText("New");
    
    2.登记行动:-

    private IWorkbenchAction newAction
    
    protected void makeActions(IWorkbenchWindow window) {
    newAction = ActionFactory.NEW_WIZARD_DROP_DOWN.create(window);
        register(newAction);
        newAction.setText("New");
    
    3.最后一步是在菜单中添加操作:-

    MenuManager filemenu = new MenuManager("&File", "file");
        filemenu.add(newAction);
    
    也可以按如下方式在工具栏中添加操作:-

    protected void fillCoolBar(ICoolBarManager coolBar) {
        IToolBarManager toolbar = new ToolBarManager(coolBar.getStyle());
        coolBar.add(toolbar);
        toolbar.add(newAction);
    

    我发现整个检查、更改和重新加载周期太慢,特别是当您有很多上下文菜单需要调试复杂行为时。但我可以看到它在这个例子中是如何工作的。