網路城邦
上一篇 回創作列表 下一篇   字體:
Model-View-Controller and GTK Tree View
2018/03/06 14:40:47瀏覽855|回應0|推薦5

一位相當早期的挪威籍電腦科學家 Trygve Reenskaug 在 1970 年代提出了 Model-View-Controller 的概念,其主要目的是為了 code reuse 以及 parallel development (例如,Model 與 View 由不同的人或團隊所負責,而 Controller 則需兩者相互溝通來訂定規格,如此為之就能同時開發其所負責的軟體元件),其中 View 主要是指 GUI 對於資料的顯示方式,而 Controller 則有兩個面向,第一個面向在 GUI 端,第二個面向則在 Model 端;GUI 端必須提供可下達「執行資料運作」的介面,例如 add、delete、double click(activate) 的 GUI 元件,而 Model 端則需提供 API 來讓 Controller 端做呼叫。至於 Model,則是整個 Application 的核心所在,所有融合與實現 domain knowledge 與 business rules 的資料結構、演算法、軟體元件、以及軟體架構等等,全部都放在 Model 之中。

GTK TreeView 也是採用 Model-View-Controller 的設計,筆者在閱練 GtkTreeView widget 之後,寫了兩個範例程式,簡單地示範 GtkTreeView widget 底層所提供的兩種 data model: GtkListStore 與 GtkTreeStore。

請注意上述所提到的 Model,以 GtkTreeView 為例,是包含 Gtk 所提供的 GtkListStore 與 GtkTreeStore 這兩個 GUI data model,以及 Application 所針對的產業而所必須實現與融合的 domain knowledge 與 business rule,並包含與其相關的資料結構、演算法、軟體元件、以及軟體架構等等。


< Model-View-Controller Concept >

在 wikipedia 網站上關於 Model-View-Controller 的解釋圖片,其中 Controller 與 View 之間沒有任何的運作關係,對此筆者認為需要修正一下,因為實際的使用範例,user 是可以透過 Controller 去改變 View,例如 user 對 GtkTreeView 中的某一個 row 做 double-click,之後 GtkTreeView 開啟另一個視窗來顯示更加詳細的資訊,此例就是 user 透過 Controller 去改變 View,但沒有動到 Model。 




< GtkTreeView >

GtkTreeView 是以 column-based 的方式來設定如何顯示同一種類別的資料, 而資料的選擇則是採用 row-based 的方式。


< GtkTreeModel >

GtkTreeModel 主要有兩種:GtkListStore 與 GtkTreeStore;在 GtkListStore 之中,row 與 row 彼此之間是獨立的,並沒有從屬關係;在 GtkTreeStore 之中,row 與 row 之間可能具有 Parent-Child 的從屬關係。

GtkTreeModel 是以 column-based 的方式來規劃與描述各個欄位,而資料的增加與移除方式,則是採用 row-based 的方式。

GtkTreeView 與 GtkTreeModel 彼此是獨立的,因此得透過 API

          gtk_tree_view_set_model(tree_view, tree_model);

來建立兩者之間的關連性。

資料的增加與移除是由 GtkTreeModel (亦即 GtkListStore 或 GtkTreeStore) 所負責,與 GtkTreeView 無關,GtkTreeView 只負責顯示 GtkTreeModel 的資料。


< GtkTreeView and GtkListStore >




< GtkTreeView and GtkTreeStore >

screen snapshot 1



screen snapshot 2



screen snapshot 3



screen snapshot 4



screen snapshot 5

( 創作其他 )
推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=chungchia&aid=110820142