在Eclipse RCP開發中利用Trim Areas

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值判斷下是否已經初始化。

 

畢竟程序的性能很重要,要避免運行重複的代碼。

【完】

發佈了65 篇原創文章 · 獲贊 3 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章