2011-07-02 21 views
1

我有兩個eclipse插件(自定義文本編輯器插件和一個視圖插件作爲兩個不同的項目)。在文本編輯器中有一個動作可以構建所有相關源文件的「函數」索引。在這個動作結束時,我想在視圖插件的tableviewer中顯示index('functions'列表)。你會怎麼說最好的方法來實現這一目標?該視圖不必聽編輯。只有在來自編輯器插件的動作觸發時才應更新。從文本編輯器插件中的動作更新視圖插件

我從編輯器插件中導出了一個包,並從視圖插件中導出了另一個包,因爲文本編輯器插件需要引用視圖類型以在視圖插件中填充tableViewer,而視圖插件需要在tableviewer的contentProvider中引用編輯器類型。但我得到的構建路徑錯誤:

項目

的構建路徑中檢測到循環

我怎樣才能解決這個問題?或者如果這是一個不好的方法,我有更好的方法嗎?

謝謝。

tk。

回答

1

首先,插件之間的循環引用是不允許的。因此,當您需要在插件之間共享雙向信息時,您經常需要重構問題,爲其中一個方向創建偵聽器模式。

在這種情況下,我會爲您的視圖使用與現有的大綱視圖相同的結構。因此,您的觀點應該對PageBookView進行分類,對於參與編輯者如何向視圖提供數據,協議具有相當簡單的協議。

基本上我會像做大綱視圖一樣做,並讓編輯器本身通過自適應提供視圖的內容。 「大綱」視圖通過跟蹤當前編輯器來執行此操作,每當「看到」新編輯器時,「大綱」視圖嘗試修改IEditorPartIContentOutlinePage。編輯器負責SWT窗口小部件和偵聽器等,這些將在這個特定的編輯器的視圖頁面中被需要...仔細查看JavaDoc的ContentOutline - 這是對相關協議的較好描述。

如果您有多個「打開」編輯器,那麼新視圖將自動顯示活動編輯器的相關信息,而不是僅「上一次執行操作時處於活動狀態的編輯器」。

有了這個計劃,你的行動會簡單

  • 展(並激活)新的視圖。這可以通過IWorkbenchPage.showView(...)完成。
  • 要求提供頁面更新其視圖...
+0

很好。謝謝。 – timk