Trim Area指Eclipse Workbench的外圍空間,共有底部狀態欄(toolbar:org.eclipse.ui.trim.status),頂部工具欄(toolbar:org.eclipse.ui.main.toolbar),左上方trim(toolbar:org.eclipse.ui.trim.command1),右上方trim(toolbar:org.eclipse.ui.trim.command2),左邊欄trim(toolbar:org.eclipse.ui.trim.vertical1),右邊欄trim(toolbar:org.eclipse.ui.trim.vertical1)。
首先給一個底部狀態欄trim區域的實例:
圖中最右下方的"no internet"就是trim.status,從右向左依次是後臺進度狀態,編輯器狀態,公共狀態。每個區域邊緣都有虛豎線條,說明這個區域可以拖拽D$D, Drag and Drop。
我們今天要做的就是加一個控件到右下方的trim status區域,這個控件的作用是顯示當前的互聯網連接情況。
這個控件必須繼承WorkbenchWindowControlContribution類,並在createControl方法裏生成想要達到的效果。
上圖實例是添加了一個Hyperlink控件,設置爲不顯示下劃線,添加MouseTrackListener,當鼠標進入時顯示下劃線,離開後不顯示;又添加HyperlinkAdapter,當點擊鏈接時,打開互聯網配置對話框。
如果打開RCP時,狀態是no internet, 但是在使用過程中,網絡連接上了比如說上海電信,該怎麼在程序中修改狀態呢?
這個信息在網絡上很少,推薦的使用Listener方法,這樣程序的耦合性會更好。
假設網絡狀態的變化觸發了Preference的PropertyChangeEvent,那只需要在程序中添加PlatformUI.getPreferenceStore().addPropertyChangeListener,然後在事件中判斷哪個屬性event.getProperty()發生了變化,如果是網絡狀態,就可以使用event.getNewValue()設置控件中鏈接的顯示內容。
如下圖所示,網絡狀態變成了Shanghai Telecom:
細心的網友會發現,Shanghai Telecom這幾個字顯示不全,當中被用省略號代替了。
爲了讓內容顯示全,作者也費了不少勁。 首先發現如果把控件拖拽到其他trim area,比如右上方,就顯示全了,可是這不是解決方案,也不是用戶能接受的。
仔細研究WorkbenchWindowControlContribution類,發現它有個isDynamic方法,重寫此方法並返回true之後,同時在修改控件內容的地方調用getParent().udpate(true);
結果如下:
需要注意的是update(true)會重新執行createControl方法,所以createControl方法裏面的代碼一定要精簡,只需要首次執行並執行一次的,用一個boolean值判斷下是否已經初始化。
畢竟程序的性能很重要,要避免運行重複的代碼。
【完】