2011-10-05 43 views
7

說我已經定義了我自己的TextEditorX extends TextEditor。在典型的Eclipse的RCP情景(標準插件,工作臺與工程資源管理器/導航),當有人試圖重命名(通過Project Explorer或導航器),有些編輯已經打開的文件的行爲是:骯髒的EditorPart如何禁止Eclipse重命名其資源?

  • 如果編輯器不是dirty,則允許重命名。之後將調用editor.setInput(),並將新文件名作爲參數。

  • 如果是dirty,拋出一個錯誤(「重命名資源」:doc.txt是未保存「:」發現問題「而執行重構發生了致命錯誤」)。

我的問題:

  • 在哪個級別定義這種行爲?我想包含org.eclipse.ltk.ui.refactoring.resource ......但是,假設我想禁止重命名,即使編輯器不是髒的:這種行爲可以通過編輯器(或文檔提供者)中的某種方法來確定,或者我應該編碼/擴展一些RenameParticipant

  • 重命名人員如何知道資源doc.txt是由該編輯器實例打開的?它只是檢查所有打開的編輯器,並要求每個人的editorInput,或者是documentProviders參與?具體來說,假設我有一個特定的編輯器,除了「主」文件之外,還依賴於其他資源(多文件輸入),並且希望重命名者在重命名他的任何輸入之前詢問他。你會如何處理這種情況?

+0

在這裏沒有獲得源代碼,所以很難看到哪些類涉及到哪些地方,但對於第一個問題,是否考慮過簡單地重寫'isDirty()'以在編輯器中返回'true'?你仍然可以使用'super.isDirty()',如果你需要找出它是否真的改變了... –

+0

這不會有副作用,即在編輯器部件的選項卡上的小「這件事很髒」星號會永不消失?這可能會讓用戶刮目相看。 – stracka

回答

0

Eclipse沒有理由阻止重命名修改後的文件。首先,編輯器可以在工作空間中註冊ResourceChangeListener,並簡單地更新其IEditorInput以響應MOVE通知。不知道這是否是一個好的答案,但也許是一個好方法。