欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Abiword 編輯事件設計

系統 1693 0

Abiword 編輯事件設計

?

?Abiword作為專業的字處理軟件,其各種編輯事件的處理封裝比較巧妙。其中包含鼠標、鍵盤、字符等各種操作的封裝。

本文將詳細記錄事件的處理各個類的設計概要。

一、EV_EditMethod類

????? 該類的定義:具有根據名字調用方法的能力。

** The EditMethod mechanism provides essentially a 'call-by-name'
** capability.? A key, mouse, menu, or toolbar event may be bound
** to a 'named' function (of type EV_EditMethod_Fn).

其中Fn函數中根據其m_fn(函數指針)動態調用各個函數。

二、ap_EditMethods類

???? 首先改類利用EV_EditMethod_Fn函數對象定義靜態的成員函數。

  typedef bool ( EV_EditMethod_Fn) (AV_View * pView, EV_EditMethodCallData * pCallData);?

???? 其次,定義靜態的EV_EditMethod的數組s_arrayEditMethods。該數組要求按字符順序排序(strcmp)

  #define F(fn)???ap_EditMethods::fn
  #define N(fn)???#fn
  #define NF(fn)???N(fn), F(fn)

三、EV_EditMethodContainer類

  該類主要用于存儲EV_EditMethod的數組s_arrayEditMethods,并且提供操作EV_EditMethod指針的方法。如:

bool??????????????????? addEditMethod(EV_EditMethod * pem);

EV_EditMethod *??getNthEditMethod(UT_uint32 ndx);
EV_EditMethod *??findEditMethodByName(const char * szName) const;

四、EV_EditBinding類

  該類主要用于封裝EV_EditMethod類,提供兩者的基本映射。

針對該類數據集合的封裝系統定義了3個集合類:

1、ev_EB_MouseTable類,定義鼠標的EV_EditBinding指針的三維數組。

  EV_EditBinding *?m_peb[EV_COUNT_EMO][EV_COUNT_EMS][EV_COUNT_EMC];

  EMC:typedef UT_uint32 EV_EditMouseContext;的縮寫

  EMS:typedef UT_uint32 EV_EditModifierState;?的縮寫

  EKP: typedef UT_uint32 EV_EditKeyPress;?的縮寫

  EMB:typedef UT_uint32 EV_EditMouseButton;的縮寫

  EMO:typedef UT_uint32 EV_EditMouseOp;的縮寫

在ev_EditBits.h文件中有具體宏的定義。

2、ev_EB_NVK_Table類,定義了鍵盤(功能鍵)的EV_EditBinding指針的二維數組。

  EV_EditBinding *?m_peb[EV_COUNT_NVK][EV_COUNT_EMS];

3、ev_EB_Char_Table類,定義了鍵盤(字符鍵)的EV_EditBinding指針的二維數組。

  EV_EditBinding *?m_peb[256][EV_COUNT_EMS_NoShift];

五、EV_EditBindingMap類

  該類主要利用EV_EditMethodContainer類初始化ev_EB_MouseTable、ev_EB_NVK_Table、ev_EB_Char_Table的指針。

   EV_EditMethodContainer *?m_pemc;

?  ev_EB_MouseTable *???m_pebMT[EV_COUNT_EMB];
?  ev_EB_NVK_Table *???m_pebNVK;
?  ev_EB_Char_Table *???m_pebChar;

常用的函數有:

  bool????setBinding(EV_EditBits eb, const char * szMethodName);
?  bool????setBinding(EV_EditBits eb, EV_EditBinding * peb);

六、初始化

  以上類的初始工作有AP_BindingSet類完成。

在src\wp\ap\xp的文件夾中,以ap_LB_*開頭的文件中定義鼠標、鍵盤、字符等操作對應的數組結構

在ap_LB_Default.cpp定義如下數組:

ap_bs_Mouse MouseTable[]

ap_bs_NVK NVKTable[]

ap_bs_Char CharTable[]

其他文件中有類似的數據結構。

系統利用AP_BindingSet類來初始化以上各個類對象。

七、EV_EditEventMapper類

  封裝EV_EditBindingMap類,提供一致的鼠標、鍵盤等外部的接口來獲取EV_EditMethod對象

  EV_EditEventMapperResult Keystroke(EV_EditBits eb, EV_EditMethod ** ppEM);
  EV_EditEventMapperResult Mouse(EV_EditBits eb, EV_EditMethod ** ppEM);

描述:

** EditEventMapper, EditBinding, and EditMethod form the basis for
** all editing operations.? All keystrokes and mouse events
** are directed thru here.? These are
** defined as classes outside of the document so that we may switch
** between different implementations as we want.

Abiword 編輯事件設計


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天久久综合网站 | 日韩高清不卡 | 免费一区二区三区 | 色777色 | 久久午夜影院 | 色综合美国色农夫网 | 狠狠色婷婷丁香六月 | 黄网站涩免费蜜桃网站 | 欧美大片在线免费观看 | 97婷婷狠狠成人免费视频 | 视频一区二区三区免费观看 | 国产视频首页 | 色天天久久 | 午夜欧美精品 | 亚洲aⅴ | 亚洲夫妻 | 一区二区三区视频在线 | 日本一区二区视频在线 | 在线观看亚洲一区二区 | 99亚洲视频 | 国产99久久精品一区二区 | 狠狠狠色丁香婷婷综合激情 | 欧美日韩精品一区三区 | 特黄特色的大片观看免费视频 | 精品一区二区三区自拍图片区 | 97麻豆精品国产自产在线观看 | 亚洲免费看片网站 | 九九这里只有精品视频 | 精品欧美一区二区在线看片 | 欧美日韩一区二区三区在线观看 | 欧美久久亚洲精品 | 午夜资源 | 新封神榜杨戬电影免费动画在线观看国语 | 精品免费久久久久久成人影院 | 国产精品影视 | 大陆精品自在线拍国语 | 国产日韩中文字幕 | 欧美视频在线看 | 色综合久久婷婷天天 | 国产中文字幕在线观看 | 国产精品1区2区 |