buiw的基本框架如下圖,這幅圖是比較完整的乙個結構,
rootform
通過乙個
vectormodel
管理所有
forms
;通過乙個
rootcontainer
管理所有
rootform
上的widgets
和其它form
的piwidget
成員(xycontainer
型別,其它所有
forms
都通過自己的
piwidget
管理自己的子
container
或子widget)。
插入乙個新的
form
的過程(rootform_insertform):
1. 分別找到新
form
和對應piwidget
在piforms
和piwidget
中的位置。 2.
分別把form
插入piforms
和picontainer。
3. 更新
formstack
,包括:
(1)設定最頂層
form
為active狀態
(2) 所有其他
forms
設為not active狀態
(3) 設定
activeform
偵聽函式
(4)設定最上面的非
popup form
偵聽函式
(5)所有popup forms
和最上面的非
popupforms
需要顯示,把它們的
piwidget
àbshow
標誌位都置為1
(6) 其它
forms
不必顯示,把它們的
piwidget->bshow
標誌位都清零
(7)設定focus widget
,設定過程是乙個遞迴呼叫的過程,一直會設定到最上層
form
的最底層乙個
container
最底層的
widget。
(8) softkey widget
在最頂層
form
的piwidget下面
(9) title widget
在最上面的非
popupform
下面,如果沒有
popup forms
,則為topform---softkeywidget---titlewidget
由上述插入過程基本可以看出整個
buiw
的form---contaienr---widget
的框架了。
下面再來看其訊息處理流程:
(1)把訊息傳給
rootform
,由rootform_handleevent處理
(2) rootform_handleevent
首先查詢當前
widget
處理,分兩步: l
如果此時
rootform
指定了piwcapture
,用該widget
處理該訊息,
piwcapture
在設定touch
的時候會指定好; l
如果未指定
piwcapture
,則由當前
focus widget
處理。插入
form
過程中指定
focus widget
過程上面已經描述過了;
(3)如果此時仍然沒有被處理,則轉給當前
topform處理
幾個概念區分: 1.
bactive
是標誌當前
form
是否active
的標誌位;最頂層
form
為active
狀態,另外,當
處於啟用狀態時,
rootform
的bactive
也為true
,而被掛起的時候
rootform
的bactive
被置為false。
rootform->piactivewidget指向當前topform的piwidget。 2.
pfocus
是每個container
用來儲存其子控制項中的
focus
控制項指標的變數。 3.
piwcapture
是rootform
用來儲存支援觸控操作時當前操作的
widget。
訊息的寫入和讀取流程
接之前幾篇訊息中介軟體元件的模組劃分,本篇內容講述訊息的寫入和讀取流程。佇列模型 在描述訊息的寫入和讀取流程之前,首先要弄清楚訊息佇列的模型是怎麼樣的,包括訊息是怎麼儲存的。簡化的佇列模型大致如上圖所示。儲存模型 為了便於理解,上面的佇列模型中僅僅將訊息的乙個寫入佇列抽象成乙個topic parti...
BS架構下使用訊息佇列的工作流程
非同步通訊 對於bs browser server 瀏覽器 架構,很多情景下server的處理時間較長。如果瀏覽器傳送請求後,保持跟server的連線,等待server響應,那麼一方面會對使用者的體驗有負面影響 另一方面,很有可能會由於超時,提示使用者服務請求失敗。對於這種情景,訊息佇列提供了乙個較...
BS架構下使用訊息佇列的工作流程
非同步通訊 對於bs browser server 瀏覽器 架構,很多情景下server的處理時間較長。如果瀏覽器傳送請求後,保持跟server的連線,等待server響應,那麼一方面會對使用者的體驗有負面影響 另一方面,很有可能會由於超時,提示使用者服務請求失敗。對於這種情景,訊息佇列提供了乙個較...