【问题标题】:How to disable/enable view toolbar menu/action in Eclipse Plugin Development如何在 Eclipse 插件开发中禁用/启用视图工具栏菜单/操作
【发布时间】:2012-04-30 03:17:24
【问题描述】:

我有扩展ViewPart 的视图。在这个视图中,我想添加工具栏菜单。

据我所知,我们可以使用ActionContributionItem 或Action 添加工具栏菜单,并通过ViewPart 中的createPartControl 方法将其添加到ToolBarMenu。

但我不知道的是:我们如何以编程方式禁用/启用工具栏菜单?

所以基本上,我想在工具栏视图中添加播放、停止和暂停按钮。因此,一开始,播放按钮处于启用模式,而其他按钮则处于禁用状态。当我按下播放按钮时,它被禁用,其他的将被启用。

关于更多细节,我想要实现的是如下图所示。

红圈内为禁用按钮,蓝圈内为启用按钮。

【问题讨论】:

    标签: eclipse eclipse-plugin swt eclipse-rcp jface


    【解决方案1】:

    不要使用 Actions,而是看一下 Eclipse 命令(它们以更简洁的方式替代了操作和功能):http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/guide/workbench_cmd.htm

    您将在文档中看到您可以启用和禁用命令,并且所有使用该命令的地方都会自动正确更新其状态。

    【讨论】:

    • 感谢推荐链接。我已经阅读了它,但是(也许我想念它)我没有发现如何以编程方式禁用/启用该命令。从这个link,它说明了如何通过 IHandleService 激活命令,但没有说明如何启用/禁用它。
    • 用你的处理程序实现IHandler2接口,然后你可以找到你的处理程序并动态启用/禁用它。
    • 好的,如何以编程方式找到我的处理程序以及我应该调用什么来禁用/启用处理程序?
    • 正在使用IHandlerService handlerService.deactivateHandler() 好方法吗?所以我制作了playHandler、stopHandler等等。如果单击 playHandler 则我将停用 playHandler 并激活 stopHandler?好听吗?
    • 其实我发现了另一个问题。详情是here
    【解决方案2】:

    我在 google 上偶然发现了另一种方法。这种方法使用 ISourceProvider 来提供变量状态。因此,我们可以在该类(实现 ISourceProvider)中提供命令的启用/禁用状态。这是详细链接http://eclipse-tips.com/tutorials/1-actions-vs-commands?showall=1

    【讨论】:

      【解决方案3】:

      试试这个..

      1:实施你的行动。例如:PlayAction、StopAction。

      Public class StartAction extends Action {
      
      @Override
      public void run() {
          //actual code run here
      }
      
      @Override
      public boolean isEnabled() {
          //This is the initial value, Check for your respective criteria and return the appropriate value.
          return false;
      }
      
      @Override
      public String getText() {
          return "Play";
      }
      }
      

      2:注册你的视图部分(玩家视图部分)

      Public class Playerview extends ViewPart
          {
      
       @Override
      public void createPartControl(Composite parent) {
      
       //your player UI code here.
      
      
          //Listener registration. This is very important for enabling and disabling the tool bar level buttons
           addListenerObject(this);
      
      
          //Attach selection changed listener to the object where you want to perform the action based on the selection type. ex; viewer
          viewer.addselectionchanged(new SelectionChangedListener())  
      
      
      
            }
              }
      
          //selection changed
      
          private class SelectionChangedListener implements ISelectionChangedListener        {
      
          @Override
          public void selectionChanged(SelectionChangedEvent event) {
              ISelection selection = Viewer.getSelection();
              if (selection != null && selection instanceof StructuredSelection) {
                  Object firstElement = ((StructuredSelection)selection).getFirstElement();
      
                  //here you can handle the enable or disable based on your selection. that could be your viewer selection or toolbar.
                  if (playaction.isEnabled()) { //once clicked on play, stop  should be enabled.
                      stopaction.setEnabled(true); //Do required actions here.
                      playaction.setEnabled (false);  //do
      
                  }
      
              }
      
          }
      
          }
      

      希望这会对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-19
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多