白紅利
中國電子科技集團公司第二十八研究所 江蘇 210007
在空管系統(tǒng)當中管制員對人機界面的操作要求形象、簡潔、實用,在界面設(shè)計中,鍵盤的快捷鍵功能可以很好的滿足管制這方面的需求。當前空管系統(tǒng)的操作系統(tǒng)主要有UNIX、LINUX等幾種,最常用的是UNIX系統(tǒng),包括引進的雷神系統(tǒng)、馬丁系統(tǒng)、THALES系統(tǒng)、TELEPHONICS系統(tǒng)、SkyLine系統(tǒng)使用的都是Solaris UNIX系統(tǒng)。LINUX操作系統(tǒng)在空管系統(tǒng)的應用也在逐步增加當中,而不同的操作系統(tǒng)對鍵盤快捷功能的開發(fā)都會產(chǎn)生影響。因此,設(shè)計一種在多個平臺公用的鍵盤快捷功能的應用就很有必要。
現(xiàn)有國內(nèi)外空管系統(tǒng)在鍵盤快捷功能方面各有不同。
雷神系統(tǒng)使用定制鍵盤,功能快捷鍵包括雙排鍵盤支持,且鍵盤支持二級菜單、三級菜單鍵盤功能。因為雷神系統(tǒng)使用的鼠標是軌跡球,定位沒有鼠標方便,所以主要依賴鍵盤的快捷功能。
馬丁系統(tǒng)使用的是普通鍵盤,在功能設(shè)置使用人機界面代替,在管制操作和命令輸入時依賴鍵盤。
TELEPHONICS系統(tǒng)使用的硬件平臺是 SUN公司的工作站,配置的是 SUN鍵盤,與普通鍵盤存在差異。該系統(tǒng)主要依賴鼠標操作,鍵盤只提供文本輸入功能,涉及鍵盤快捷功能少。
THALES系統(tǒng)使用定制鍵盤,比普通鍵盤多六個鍵,使用的是定制的鍵盤驅(qū)動。管制操作必須依賴鍵盤和鼠標配合操作才能完成功能。因此THALES系統(tǒng)在使用時不能脫離鍵盤的操作。
國產(chǎn)系統(tǒng)主要采用通用鍵盤,鍵盤快捷按照用戶需求設(shè)置,有各地的風格。
目前空管系統(tǒng)中,在UNIX平臺上的人機界面是基于Xt開發(fā)的應用程序。Xt開發(fā)的應用程序是由事件驅(qū)動進行的,需要給目標組件注冊回調(diào)函數(shù)或者給目標組件注冊動作函數(shù),執(zhí)行用戶定義的函數(shù)功能。注冊回調(diào)函數(shù)一般用XtAddCallbacks將做好的功能函數(shù)注冊到目標組件上,但注冊回調(diào)函數(shù)局限于目標組件本身支持的特定的組件事件,不能滿足鍵盤快捷功能,如果采用注冊動作函數(shù),則可以定義事件類型和修飾,實現(xiàn)鍵盤的快捷功能。
注冊動作函數(shù)首先定義翻譯表和動作函數(shù),翻譯表是一個對象元資源的值,指出當某一事件或者一系列事件發(fā)生時調(diào)用什么動作函數(shù),它是一個由多個翻譯項組成的字符串,翻譯項把一個事件序列映射為一個或多個動作函數(shù)名,由于翻譯表是一個字符串,所以 Xt需要將它轉(zhuǎn)換成為自己的內(nèi)部形式。翻譯表的第一行可以有三種指令,它告訴轉(zhuǎn)換函數(shù)如何處理現(xiàn)有的翻譯表,三個指令是:#replace、#augment和#override。#replace指示用當前的翻譯表代替舊的翻譯表。#augment是合并新舊兩個翻譯表,當如何處理同時出現(xiàn)在兩個翻譯表中的事件時舊的翻譯項優(yōu)先。#override也是合并新舊兩個翻譯表,當如何處理同時出現(xiàn)在兩個翻譯表中的事件時新的翻譯項優(yōu)先。
翻譯項的語法:
<修飾詞表><事件>[,<事件>…]<記數(shù)>[<細節(jié)>]:<動作函數(shù)名>(<參數(shù)>)[<動作函數(shù)名>…]每個翻譯表項中至少有一個<事件>,一個冒號分隔符和至少一個<動作函數(shù)名>。翻譯項語法格式可以應用到資源文件、程序定義中。表1列出主要使用的鍵盤修飾狀態(tài)。
表1 翻譯表中使用的修飾詞
在翻譯項中還可以使用幾種對事件起修飾作用的符號,表2列出修飾符號。
表2 修飾符號
翻譯項中事件可以用實際名字描述,也可以使用縮寫描述。表3列出與鍵盤快捷功能有關(guān)的事件類型。
表3 鍵盤事件類型
Xt沒有專門提供事件縮寫描述鍵盤哪個鍵按下或釋放,但可以使用翻譯項中<細節(jié)>描述鍵盤事件,鍵符號用來描述鍵盤事件<細節(jié)>,在系統(tǒng)頭文件
鍵盤事件加載可以根據(jù)使用資源文件和程序控制分成四種。
使用資源文件和編程配合加載:
(1) 一類鍵盤符號使用一個函數(shù)接口;
(2) 一個鍵盤鍵使用一個函數(shù)接口。
完全程序控制:
(3) 所有鍵盤鍵使用一個函數(shù)接口;
(4) 一個鍵盤鍵使用一個函數(shù)接口。
(1) 定義一個函數(shù)接口方法
在資源文件中配置:
在程序中定義3個函數(shù):onekey(),shiftkey(),Cakey()。要在定義的函數(shù)中區(qū)分點擊的鍵盤是哪個鍵??梢允褂面I值區(qū)分,也可以使用鍵符值區(qū)分。
定義的函數(shù)需要4個參數(shù),例如:onekey(widget,event,string,cardinal)。
使用鍵值區(qū)分方法:在定義的函數(shù)參數(shù)中使用 event參數(shù)。Event參數(shù)是XKeyEvent結(jié)構(gòu),該結(jié)構(gòu)中的keycode可以區(qū)分事件驅(qū)動的鍵盤鍵。
使用鍵符值區(qū)分方法:使用函數(shù)參數(shù) event參數(shù)和XlookupKeysym函數(shù)獲取驅(qū)動鍵盤事件的鍵盤鍵的鍵符值。
(2) 定義多個函數(shù)接口方法
在資源文件中配置
在程序中定義多個函數(shù),在定義的函數(shù)中不需要區(qū)分點擊的鍵盤是哪個鍵。關(guān)鍵字
(1) 定義一個函數(shù)接口方法
在需要加載鍵盤事件的組建上加載:
應用程序?qū)Ψg表進行解析,解析過程由資源類型轉(zhuǎn)換函數(shù)完成:
為目標組件增加翻譯表項:
XtAppAddActions(app,keypress,XtNumber(keypress));
當程序區(qū)別鍵盤鍵時在不同的平臺或環(huán)境時需要特定處理。因為在不同的平臺和環(huán)境表現(xiàn)出不同的鍵值,在表 4列表顯示。
表4 鍵盤鍵值的比較
在不同的系統(tǒng)中keycode是不同的,根據(jù)不同的keycode處理快捷事件。因此這種鍵盤事件處理具有局限性,是針對固定的操作系統(tǒng)。
鍵符值在不同的平臺表現(xiàn)相同,表5舉例列出鍵盤對應的鍵符值。
表5 鍵盤鍵符值對應關(guān)系
在所有系統(tǒng)平臺上鍵符值是固定的。可以使用不同的系統(tǒng)版本。
鍵盤加載最終目的是鍵盤事件盡可能少或不依賴平臺和環(huán)境,增加程序的可移植性和適應性。在資源文件中設(shè)置目標對象的翻譯表資源,與設(shè)置其他資源類似,但是一旦資源文件中翻譯表或被刪除或發(fā)生錯誤,應用程序就不能使用,導致程序無法運行。上一節(jié)討論的鍵盤快捷加載方法特點如下:
(1) 使用資源文件和程序定義單個函數(shù)入口方法:必須依賴資源文件,單個函數(shù)入口決定了程序需要控制鍵盤事件的分支;
(2) 使用資源文件和程序定義多個函數(shù)入口方法:必須依賴資源文件,多個函數(shù)入口需要增加代碼,不需要區(qū)分鍵盤鍵。但是配置靈活;
(3) 完全程序控制定義單個函數(shù)入口方法:單個函數(shù)入口決定了程序需要控制鍵盤事件的分支;
(4) 完全程序控制定義多個函數(shù)入口方法:函數(shù)入口決定了程序需要控制鍵盤事件不需要區(qū)分鍵盤鍵,需要增加部分代碼。
在區(qū)分鍵盤鍵時就要選擇使用鍵符值的方法區(qū)分,可以解決操作系統(tǒng)和軟件環(huán)境的變化。
空管自動化系統(tǒng)在正式運行后,基本不會調(diào)整鍵盤的快捷鍵操作功能,但隨著系統(tǒng)的硬件和操作系統(tǒng)版本的升級,會出現(xiàn)鍵盤鍵值不一致的情況,從而引起界面軟件版本的不同。本文提供的鍵盤快捷功能的實現(xiàn)方法,解決了鍵盤鍵值的不同引起的界面軟件版本不一致的情況,該技術(shù)在現(xiàn)有國產(chǎn)空管自動化系統(tǒng)中得到了很好的應用。
[1]張倪,莫斌.Motif與圖形用戶界面開發(fā)工具.清華大學出版社.1995.
[2]張軍.現(xiàn)代空中交通管理.北京航空航天大學出版社.2005.