如何防止eclipse 4 RCP应用程序中的浮动编辑器窗口?

时间:2014-06-09 14:59:34

标签: eclipse-rcp e4

Eclipse 4 RCP应用程序支持浮动编辑器窗口。

使用兼容层,我将一组RCP应用程序从Eclipse 3.8移植到Eclipse 4.4。这些应用程序不是为浮动编辑器设计的。我想将重新设计的成本推迟到以后。

评论40中的Eclipse enhancement request for floating editor windows提到了控制编辑窗口政策的可取性:

  

在e4中,我们理想情况下能够“主持”当前编辑器或布局中任何位置的视图。选择将其位置限制在编辑区域应该通过一些“政策”来强制执行。

     

请注意,实际上并非如此简单,主要是由于编辑器处理菜单/ TB的方式存在根本差异(即托管编辑器的任何地方都需要 - 托管编辑器工具的“主要”工具栏。< / p>

问题:

  • 如何关闭浮动编辑器窗口的功能?
  • 我是否可以通过仍然允许在工作台窗口之间拖动编辑器窗口的方式来实现?
  • 或者,如果我们允许浮动编辑器窗口,是否有一种简单的方法可以将现有的ActionBarAdvisor用于新删除的编辑器,以设置其菜单和工具栏?

1 个答案:

答案 0 :(得分:2)

我有一个解决方案,但它并不漂亮,并且有一些问题。

此解决方案需要复制Eclipse DnDAddon的整个包,并在DetachedDropAgent中进行小的更改。 (在@greg-449的初步评论和一些初步研究之后,我曾希望将DndAddon替换为我自己安装了DnDManager子类的类。但是,DnDManager和其他关键类都是受包保护的。)

这个工作思路来自Eclipse e4的开发负责人Eric Moffat,以回应我的增强请求Disabling floating editors。他在那里列出了另外两个选项,其中一个类似于@ christoph.keimel的选项 a

以下是一些细节。这至少适用于Eclipse 4.4。

首先,您需要一个应用程序模型文件。如果您还没有,请从Eclipse插件 org.eclipse.ui.workbench * .jar 中提取文件LegacyIDE.e4xmi。使用新名称将其复制到您自己的插件(在此示例中为 myApp.e4xmi )。然后通过向应用程序的plugin.xml文件中的产品扩展添加属性applicationXMI来使用它。

   <extension
         id="product"
         point="org.eclipse.core.runtime.products">
      <product
            application="com.mycompany.myapp"
            name="MyApplicationName">
         ...
         <property
               name="applicationXMI"
               value="com.my.plugin/myApp.e4xmi">
         </property>
      </product>
   </extension>

接下来,将整个包org.eclipse.e4.ui.workbench.addons.dndaddon从插件 org.eclipse.e4.ui.workbench.addons.swt * .jar 复制到您自己的包{{1}中}。

该包名称的后缀很重要。同样重要的是不要更改加载项*.ui.workbench.addons.dndaddon的名称。如果你改变了,你会发现标准的DnDAddOn除了你修改过的版本之外还会被添加,感谢DnDAddon,编辑器可能仍然会被浮动。

接下来,在 myApp.e4xmi 中,修改“DnD Addon”行以指向您的版本。 contribURI包含包含您的DnDAddon版本的插件的名称,以及它的类路径。例如:

  

&lt; addons xmi:id =“_ bqcWME2EEd-DfN2vYY4Lew”elementId =“DnD Addon”          contributionURI = “bundleclass://com.one.of.my.plugins/com.mypackage.e4.ui.workbench.addons.dndaddon.DnDAddon”/&GT;

最后,在DetachedDropAgent类中,修改canDrop()方法以使兼容性编辑器失败。 (我在下面写了添加的代码。)

org.eclipse.e4.ui.workbench.addons.swt.DnDProcessor