www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]基于GEF的MiniGUI可視化開發(fā)工具設計

1 概 述
    隨著嵌入式系統(tǒng)的廣泛應用,圖形用戶界面(Graphical User Interface,GUI)在嵌入式系統(tǒng)中的地位也越來越重要。
    目前比較成熟的嵌入式GUI系統(tǒng)包括MicroWin-dows、Qt/Embedded、MiniGUI等。MicroWindows可移植性好,開發(fā)重點在底層的圖形引擎,但窗口系統(tǒng)和圖形接口方面的功能還比較欠缺。Qt/Embedded可移植性較好,基于Qt的X Window程序可以非常方便地移植到嵌入式系統(tǒng),但對系統(tǒng)硬件要求較高,主要用于手持設備。MiniGUI最初是為了工業(yè)控制系統(tǒng)設計開發(fā)的,定制能力強,速度快,性能好,特別適合于實時性要求高的場合。由于受到嵌入式系統(tǒng)硬件資源的限制,對嵌入式系統(tǒng)GUI的基本要求包括:占用資源少、高性能、高可靠性、可配置。本文設計的可視化開發(fā)工具選擇MiniGUI作為圖形界面支持系統(tǒng)。
    MiniGUI是一款遵循LGPL條款的純自由軟件,是根據(jù)嵌入式系統(tǒng)應用特點量身定做的圖形界面支持系統(tǒng),得到了廣泛應用。它提供了完備的多窗口機制和消息傳遞機制,以及對話框和常用的控件類,包括文本框、按鈕、編輯框、列表框等;非常小巧,包含全部功能的庫文件僅為300 KB左右。傳統(tǒng)的MiniGUI程序開發(fā)是基于文本編輯器的,開發(fā)人員在程序源代碼編寫過程中無法預先看到窗口、控件的整體效果,缺乏一個可視化的開發(fā)環(huán)境。因此,本文設計了一個MiniGUI可視化開發(fā)工具,并使用Eclipse GEF(Graphical Editing Framework)實現(xiàn)。


2 可視化開發(fā)工具整體設計
2.1 功能需求
    可視化開發(fā)工具要提供界面布局設計功能,主要包括:界面上控件位置的擺放、屬性的設置,為每個控件定義callback函數(shù);菜單、狀態(tài)條、位圖編輯;響應界面編輯過程中發(fā)生的交互事件,比如drop/drag、undo/redo、move、de-lete、resize等;保存及解析呈現(xiàn)相應布局的功能;根據(jù)用戶設計生成可運行的MiniGUI源代碼。
2.2 整體結構
    可視化開發(fā)工具主要由界面設計工具和源代碼生成工具兩部分組成。整體結構如圖1所示。

    界面設計工具:實現(xiàn)所見即所得的界面編輯器功能,可以根據(jù)需要改變和調(diào)整顯示的內(nèi)容和形式,這使得用戶界面的制作非常方便。采用傳統(tǒng)的面向?qū)ο笤O計方法來開發(fā)可視化界面,會遇到用戶界面和底層的數(shù)據(jù)雜合、接口擴展導致的類膨脹等問題,因此界面設計工具使用MVC模式設計。用戶通過界面設計工具的“控件設計”設置控件屬性;“交互事件響應”用于響應界面編輯過程中發(fā)生的交互事件,完成控件屬性的修改。這兩部分對應MVC中的Control-ler?!翱丶悺北4婵丶母鞣N屬性,對應Model?!翱丶@示”根據(jù)控件類的屬性設置顯示控件,對應View。XML文檔則負責保存界面布局,控件類也能夠根據(jù)XML解析文檔內(nèi)容得到自身屬性。
    源代碼生成工具:通過遍歷所有控件類的屬性,將圖形用戶界面布局按照運行平臺要求(目前僅支持RTEMS)生成相應的MiniGUI源代碼。
2.3 組織結構
    所有控件類通過樹的形式來管理。樹的頂層表示一個管理的工程,其下包括所有的對話框、菜單、狀態(tài)條及位圖資源,對話框的子節(jié)點是其上顯示的所有控件,菜單包括彈出菜單和菜單項,狀態(tài)條與對話框類似,樹形結構如圖2所示。由于XML文檔會被Java解析成樹形結構,解析界面布局的過程就是一個樹的遍歷過程。使用樹形結構來組織控件類,能夠讓軟件在邏輯上簡單易懂,控件組織關系清晰明了,并且通過樹的遍歷可以保存界面布局及生成源代碼。

    由于圖形用戶界面中許多元素具有共同屬性,本文把這些元素的共有屬性及方法抽象出來作為基類。主要使用2個基類:容器類Content和控件類Control。Content主要包括容器ID、文字屬性及保存解析控件等方法;Control主要包括控件ID、位置大小、控件風格等屬性,以及保存解析控件、生成源代碼等方法。其中,對話框、菜單、狀態(tài)條和位圖繼承自Content,如圖3(a)所示;對話框控件繼承自Control,如圖3(b)所示。在生成源代碼等操作時自頂向下遍歷整個界面工程,可直接調(diào)用基類的方法,無需區(qū)分控件具體的類別。這樣提高了代碼的重用度,減少了冗余代碼。

[!--empirenews.page--]

3 系統(tǒng)實現(xiàn)
    GEF基于MVC框架,可以方便地實現(xiàn)drop/drag、undo/redo、move、delete、resize等圖形編輯器的基本功能,并且提供了常用的布局器,非常適合用于開發(fā)所見即所得的界面編輯器。其中,GEF的EditPart對應MVC中的Controller,F(xiàn)igure對應View。
    本工具基于GEF開發(fā),可以最大限度地減小開發(fā)工作量,增強軟件的穩(wěn)定性。同時,Java開發(fā)使得本工具可以在任何具有Java虛擬機的系統(tǒng)上運行,具有良好的跨平臺性。
3.1 基于GEF實現(xiàn)的界面設計工具
    本工具提供對菜單、狀態(tài)條、位圖,以及對話框控件(包括CheckBox, ComboBox,PushButton, RadioButton,MonthCalendar,GridView,M1Edit,ProgressBar,Property-Sheet,Static,StaticBox,TreeView,TrackBar,SpinBox等)的編輯功能。對于控件的修改,可以通過屬性頁和在界面上直接操作來進行。屬性頁上的編輯通過IPropertySource接口的setPropertyValue方法告知Model,Model再通過PropertyChangeSupport類的firePropertyChange方法通知EditPart做出修改;來自界面上的變化被封裝成request派發(fā)給EditPart,EditPart再通過command修改Model中的數(shù)據(jù),Model在修改完數(shù)據(jù)之后告知EditPart有數(shù)據(jù)被修改;EditPart收到Property改變的通知后,根據(jù)修改數(shù)據(jù)類型做出相應操作(比如重繪figure等)。以對CheekBox的操作為例來說明基于GEF的控件處理流程,如圖4所示。其中,操作A是從工具箱拖拽一個新的CheckBox到Dialog中;操作B是通過屬性頁修改CheckBox顯示的文本(Text);操作C直接通過選中CheckBox拖拽改變其大小。操作A1~A4、B1~B3、C1~C3為具體的執(zhí)行流程。

3.2 圖形顯示問題
    在GEF中,每個視圖只有在其父視圖的有效范圍內(nèi)才能響應交互事件。如果直接按照MiniGUI的控件關系來組織模型,則界面設計工具不能很好地完成與用戶的交互。
    以菜單為例,生成MiniGUI中菜單部分的代碼僅需完成一棵樹的遍歷。這棵樹的每個非葉節(jié)點都是一個彈出菜單,葉節(jié)點是普通的菜單項,根節(jié)點是一個虛節(jié)點,用于串連起整個菜單,如圖5(a)所示。每個節(jié)點都被稱作MenuItem。這種樹形結構在GEF顯示時根據(jù)Model創(chuàng)建的Figure如圖5(b)所示,其中Figure11為Figure1的childFigure。在GEF中,只有childFigure被包含在parentFigure的有效范圍內(nèi),對childFigure提出的請求才能被其parentFigure派發(fā)給childFigure對應的control-ler,并反映給Model,如圖5(c)所示。顯然樹形結構無法滿足修改菜單項的需求,因此,在MenuItem構成的樹形結構基礎上增加了由MeInu組成的鏈表結構,同時每個MenuItem都增加一個指向自己上一級MenuItem的Par-ent指針,如圖5(d)所示。每個Menu(ij)記錄包括的所有MenuItem(ij,k),以及創(chuàng)建自己的Menultem(i,j)。MenuItem(ij,k)表示屬于Menu(ij)的第k個MenuItem,Menu(ij)表示MenuItem(i,j)展開的下級Menu。所有的Menu組成一個鏈表,GEF顯示的是這個鏈表的內(nèi)容,而不是原來的MenuItem樹。這樣,每個MenuItem對應的Figure就可以包含在其parentFigure中,相應的controller也就能夠收到界面上傳來的請求。

    將MenuItem屬性改變?yōu)镻opUp,可以為其建立下級子Menu。新建函數(shù)的流程如下(參數(shù)是當前屬性修改為PopUp的MenuItem):

    為Menu新建一個MenuItem的函數(shù):

[!--empirenews.page--]
    MenuItem對應的Figure還應提供方法DimensiongetPreferredSize(int hint,int hint2),用于獲得MenuItem屬性改變導致的Figure新的大小和位置。
    Menu的EditPart還應提供以下方法:
    ①重繪自己和下面所有的MenuItem及其下級的Menu。函數(shù)Rectangle CalcMenuSize(MenuEditPart)用于得到一個能夠容納下包括的所有MenuItem的矩形。


    ②遞歸地將要update的MenuEditPart的下級Menu中,當前可見的所有Menu及其對應的MenuItem變?yōu)椴豢梢姟?/p>


3.3 數(shù)據(jù)存儲
    可擴展標記語言(Extensible Markup Language,XML)與其他格式的語言相比,具有以下優(yōu)勢:具有良好的擴展性,允許使用者創(chuàng)建和使用自己定義的標記來定義控件的類型和屬性;樹狀存儲結構和良好的自描述性,非常適合對界面元素進行描述;XML的靈活性提供了一種結構化的數(shù)據(jù)表示方式,使得用戶界面分離于結構化數(shù)據(jù)。
    因此,界面設計工具將界面設計結果存儲為XML格式。由于Java中提供了XML文檔生成和解析的類,因而簡化了編碼工作量,增強了軟件可靠性。
    示例如下:

    
    最外層的Project表示內(nèi)層都是界面的布局,第2層Dialog表示其內(nèi)層對應一個對話框布局,第3層由多個<XXCtrl>和</XXCtrl>對構成(XXCtrl對應不同的控件名,比如buttonCtrl對應button控件)。每個XXCtrl代表一個控件,<XXCtrl>和</XXCtrl>對里面是控件的屬性。第2層也可由多個<Content>和</Content>對構成,Content可為Dialog(對話框)、Menu(菜單)、Tool-Bar(狀態(tài)條)、Icon(位圖),其內(nèi)層根據(jù)Content不同而由不同的XXCtrl對構成。


4 實驗結果
    可視化工具的運行界面如圖6所示。左側為工程管理區(qū),可以看到當前工程建立的所有界面布局。中間部分的編輯區(qū)是一個打開的對話框布局,可在這里進行控件的drop/drag、undo/redo、move、delete、resize等操作。右側是控件屬性編輯區(qū),用于修改控件屬性(比如ID、文字風格、邊框等)。

結 語
    本文設計了一個MiniGUI可視化開發(fā)工具,利用Eclipse GEF實現(xiàn)。用戶使用本工具可以對圖形用戶界面進行可視化的設計及修改,同時可以擴充自己的控件、定義控件的屬性,豐富界面的表現(xiàn)形式。實驗表明,本工具在實際系統(tǒng)中運行良好穩(wěn)定,有效地提高了圖形用戶界面的開發(fā)效率。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉