GEF Programmers' Guide 中文版(工具和繪圖板)

工具 (Tools) 和繪圖板 ( Palette )

GEF 的工具處理幾乎可以所有的事件,在 GEF 中, EditDomain 用來記錄當前有效地工具。 應用程序可能會選擇使用繪圖板 (PaletteViewer) 來顯示多種工具,它允許用戶在不用的工具集之間切換。

工具如何工作

工具的實現有點像狀態機, SWT 的事件 (Event) 驅動狀態機工作。根據事件和當前狀態,工具將執行特定的處理,這些處理包括:

1.     請示 EditPart 是否顯示反饋

2.     EditPart 中得到命令

3.     在命令棧 (Command Stack) 中執行命令

4.     更新鼠標光標,比如有時候有手型,有時候則爲指針型

工具的激活需要通過 EditDomain ,在一個 EditDomain 中的所有 Viewer 只能擁有同一個工具。 如果使用了繪圖板,從繪圖板中選擇某個工具也會激活它。

選擇工具 (The Selection Tool )

選擇工具是 GEF 中最基本的工具,一般也是應用程序一開始默認的工具。我們可以委託選擇工具來處理任何 EditPart 。它會從 EditPart 獲得一種叫做拖拽跟蹤者 (DragTacker) 的輔助工具,也會在鼠標進行拖拽時響應。拖拽 (Drag) 是鼠標在按下與鬆開之間進行的任何操作,這期間會產生很多事件。事件被轉發給代理,然後根據拖拽發生的時間和位置來進行不同的處理。例如,點擊一個 Handle( 選中圖形時圖形邊框上出現的柄狀節點,一般在四個角和邊框的中點位置 ) 可能會帶來形狀大小的修改,或者連接端點的移動。

selection tool

 

值得一提的是,選擇工具並不選中 EditPart ,所有的鼠標點擊都作爲拖拽來處理。當選擇工具接收到一個針對 EditPart 的鼠標按下事件時,它會請求獲得一個拖拽跟蹤 (Tracker) EditPart 使用 SelectEditPartTracker 來獲取跟蹤,它不但跟蹤鼠標按下事件,而且還包括鼠標鬆開之前的所有事件。 Tracker 甚至還處理鼠標的雙擊事件。

更多選擇工具和 Tracker 的信息請參考選擇交互一節。

繪圖板 ( Palette)

 

GEF PaletteViewer 使用的是 SWT 控件,它提供了一系列的工具可供用戶選擇。同時 PaletteVIewer 也可以作爲拖拽的源,允許用戶直接把對象從繪圖板中拖到圖形中。繪圖板雖然不是必需的,但是使用非常普遍。

我們可以指定繪圖板的位置,甚至可以放在編輯器裏。 GEF 提供了一個 WorkbenchView 來放置繪圖板,同時一個自定義的面板—— FlyoutPaletteComposite 將負責管理 PaletteViewer 的位置,一般地 PaletteViewer 位於主控件的旁邊。 Logic 示例中,這個面板就是編輯器的主控件,見下圖:

palette

PaletteViewer 顯示繪圖模型,一般以根模型 (PaletteRoot) 開始。 PaletteRoot 使用可以展開合攏的目錄抽屜 (Drawer) 或者組 (Group) 來組織各種繪圖模型。每個組成員都可以包含繪圖元素 (Palette Entry) 。繪圖元素或者是一個工具,或者是一個模板 (Template) 。模板將在下面的創建一節中講述。

繪圖板提供幾種顯示模式,比如只顯示圖標。你也可以提供一個自定義的模式,允許用戶自己修改或創建繪圖板內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章