這是一個計劃中的項目。用於方便編寫自訂控制項。分為兩個項目
silver:抽象控制項以及架構
iron:使用Silver的具體控制項Example
下分3個子項目
silver.control:自訂控制項架構
silver.tree:抽象的樹型控制項
iron.tree:具體的樹型控制項(將contribute給lumaQQ,介面風格完全模仿QQ和TencentMessenger)
————
自訂控制項架構的原理就是MVC。silver.control包含以下的類
SilverModel 通用的模型類
SilverModelListener 通用的模型Listener
SilverView 通用的視圖類
SilverViewFactory 視圖工廠,用於關聯Model與View
SilverControl 中心的控制項,用於維護Model與View的關聯,以及View的建立
————
由於SWT對於控制項parent的可變性的一些限制,我沒有把SilverView做成Composite之類的Widget,而是把SilverView作為一個抽象的視圖單元,它一方便起到Layout的作用,一方面又維護一個與View相關的控制項列表。控制項中的所有子控制項實際上都是添加到一個最外層的控制項上的。而每個SilverView的職責就是擺放好這些小的控制項。
————
SilverModel通過SilverModelListener與SilverView相互。SilverView實現了SilverModelListener介面。SilverView在建立時就知道它所對應的SilverModel,但是它需要通過SilverControl才能知道其他SilverModel所對應的SilverView。
————
silver.tree 的目標是建立一個抽象的樹型控制項。它不包含任何具體的field。只是有一個樹型的資料結構,以及一個通用的基礎View用來排列將來使用者自己寫的View。另外它會使用動態代理來動態產生Model的Wrapper,以接觸Model與View的強制一一對應。否則一個Model在一棵樹中只能被添加一次。
————
iron.tree 在silver.tree的基礎上添加自己所需要的Model欄位,以及編寫幾個具體的View,在其中擺放好所需要的表現用控制項。最終的效果應該與TencentMessenger或者QQ的連絡人清單儘可能的像,並且有完整的動態功能特性。
整體結構上來看非常像Swing。SWT與Swing最大的不同是Swing完全自己畫,而SWT只有系統沒有才自己畫。我覺得這樣做出來的控制項雖然會比原生控制項慢許多,不過靈活性是極其強大的,這種靈活性在某些表現豐富的娛樂類應用是必要的。對於整體的結構把握已經比較清楚了。今天已經實現了iron.tree的abstract.tree,現在不過是把abstract.tree再抽象一次變成一個單獨的silver項目。下一步的架構目標應該是支援換膚之類的東西。