2014-06-09 103 views
5

Eclipse 4 RCP應用程序支持浮動編輯器窗口。如何防止在Eclipse 4 RCP應用程序中浮動編輯器窗口?

使用兼容層,我將一組RCP應用程序從Eclipse 3.8移植到Eclipse 4.4。這些應用程序不是爲浮動編輯器設計的。我想推遲重新設計的成本,直到以後。

Eclipse enhancement request for floating editor windows,在註釋40,提到控制政策對編輯器窗口的願望:

在E4我們希望最好能「主機」什麼是目前無論是編輯或視圖中的任何地方佈局。限制其位置到編輯區的選擇應通過一些「策略」來執行。

請注意,這並不是那麼簡單,主要是由於編輯器處理菜單/ TB的方式根本不同(即任何託管編輯器的位置都需要 - 「主」工具欄來承載編輯器工具。

問題:?

  • 我如何關閉浮動編輯器窗口的能力
  • 我能做到這一點的方式,仍然允許工作臺窗口之間拖動編輯器窗口
  • 或者,如果我們允許浮動編輯器窗口,是否有一種簡單的方法可以使現有的ActionBarAdvisor用於新放置的編輯器,以設置其菜單和工具欄?
+0

如果您將DndAddon離開應用程序模型,則會停止將窗口拖到任何地方。 –

+0

我想保留3.x能夠將視圖拖出工作臺窗口。 –

+0

您可以嘗試:a)創建一個AddOn,用於偵聽浮動窗口的創建並始終將該部分移回到其先前的堆棧中b)擴展/操作DndAddon以阻止浮動窗口 –

回答

2

我有一個解決方案,但它不漂亮,還有幾個問題。

該解決方案需要複製Eclipse DnDAddon的整個包,並在DetachedDropAgent中做一些小改動。 (在@ greg-449的初步評論和一些初步研究之後,我曾希望用我自己的班級來取代DndAddon,這個班級安裝了DnDManager的一個子類,但是DnDManager和其他關鍵類是受封裝保護的。)

This working idea來自Eclipse e4的開發負責人Eric Moffat,迴應我的增強請求Disabling floating editors。他在那裏列出了兩個其他選項,其中之一類似於@ christoph.keimel的選項a

以下是一些細節。這至少適用於Eclipse 4.4。

首先,您需要一個應用程序模型文件。如果還沒有,請從Eclipse插件org.eclipse.ui.workbench * .jar中提取文件LegacyIDE.e4xmi。使用新名稱將其複製到您自己的插件中(在本例中,myApp.e4xmi)。然後通過將屬性applicationXMI添加到應用程序的plugin.xml文件中的產品擴展中來使用它。

 
    <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到自己的包*.ui.workbench.addons.dndaddon

該包名的後綴很重要。不要更改附加類DnDAddon的名稱也很重要。如果你改變了,你會發現標準的DnDAddOn除了被修改之外還被添加,這要歸功於org.eclipse.e4.ui.workbench.addons.swt.DnDProcessor,並且編輯器可能仍然是浮動的。

接下來,在myApp.e4xmi中,修改「DnD Addon」行以指向您的版本。 contributionURI包括包含您的DnDAddon版本的插件的名稱以及它的類路徑。例如:

<插件XMI:ID = 「_ bqcWME2EEd-DfN2vYY4Lew」 elementId = 「的DnD附加組件」 contributionURI =「bundleclass://com.one.of.my.plugins/com.mypackage.e4。 ui.workbench.addons.dndaddon.DnDAddon「/ >

最後,在DetachedDropAgent類,修改canDrop()方法失敗的兼容性編輯器。 (我在下面寫了添加的代碼。)

public class DetachedDropAgent extends DropAgent { 
... 
@Override 
public boolean canDrop(MUIElement dragElement, DnDInfo info) { 
    if (info.curElement != null) 
     return false; 

    // Add this code to disable floating of editors using the compatibility layer. 
    String elementId = dragElement.getElementId(); 
    if ("org.eclipse.e4.ui.compatibility.editor".equals(elementId)) { 
     return false; 
    } 

      ... 
} 
相關問題