如何在 rcp 应用程序的工具栏中显示撤消和重做操作

How to show undo and redo actions in toolbar in rcp application

我正在开发一个带有工具栏的 rcp 应用程序,可以快速访问某些操作,包括撤消和重做。我的问题是这两个特定操作没有显示在工具栏中。我已找到应用程序启动时生成的 workbench.xmi 文件的原因。具有属性 key="persp.hiddenItems" 的标记 persistedStatevalue="..." 属性中包含 persp.hideToolbarSC:org.eclipse.ui.edit.undo,persp.hideToolbarSC:org.eclipse.ui.edit.redo。如果我从 workbench.xmi 中删除这些条目,撤消和重做操作将按应有的方式显示在工具栏中。

我的问题是:我该怎么做才能使 org.eclipse.ui.edit.undoorg.eclipse.ui.edit.redo 不以该属性结尾?

我最初使用 eclipse neon 没有这个问题,但是当更新到 eclipse 2018-12 时,这个问题开始发生了。

编辑:

我终于通过将我的撤消和重做操作的 ID 更改为其他内容来让它工作。我必须在动作的构造函数中使用 setId(...)setActionDefinedId(...) 设置 ID,然后必须在 [=22= 中的 <extension point="org.eclipse.ui.commands"> 下的 plugin.xml 中定义命令] 标签。

这个解决方案感觉更像是一种解决方法,而不是实际的解决方案,但它对我有用。

这是由 org.eclipse.ui.perspectiveExtensions 扩展点的 hiddenToolBarItem 元素设置的。

org.eclipse.ui.ide 插件使用它来禁用这些工具栏项目:

  <extension
         point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension targetID="*">
         <!--
              disable "print" button which is defined by org.eclipse.ui.actions.ActionFactory.PRINT
              and contributed by org.eclipse.ui.internal.ide.WorkbenchActionBuilder
         -->
         <hiddenToolBarItem id="print" />
         <!--
              disable "undo" button which is defined by org.eclipse.ui.actions.ActionFactory.UNDO
              and contributed by org.eclipse.ui.internal.ide.WorkbenchActionBuilder
         -->
         <hiddenToolBarItem id="org.eclipse.ui.edit.undo" />
         <!--
              disable "redo" button which is defined by org.eclipse.ui.actions.ActionFactory.REDO
              and contributed by org.eclipse.ui.internal.ide.WorkbenchActionBuilder
         -->
         <hiddenToolBarItem id="org.eclipse.ui.edit.redo" />
      </perspectiveExtension>
   </extension>

除了删除插件之外,我看不出有什么方法可以清除它。

我运行遇到了同样的问题。 Undo/Redo升级到2019 eclipse后消失了。

覆盖org.eclipse.ui.ide全局透视设置中硬编码的一种方法是直接修改透视状态。例如。在 ApplicationWorkbenchWindowAdvisor.postWindowOpen()

        WorkbenchPage page = (WorkbenchPage) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
            String str = page.getCurrentPerspective().getPersistedState().get(ModeledPageLayout.HIDDEN_ITEMS_KEY);
            str=str.replace("persp.hideToolbarSC:org.eclipse.ui.edit.undo,", "");
            str=str.replace("persp.hideToolbarSC:org.eclipse.ui.edit.redo,", "");
            page.getCurrentPerspective().getPersistedState().put(ModeledPageLayout.HIDDEN_ITEMS_KEY,str);