欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 欧美一级美国一级 | 国产色综合一区二区三区 | 久草.com| 亚洲精品国精品久久99热 | jizz亚洲大全| 2级毛片 | 亚洲成人黄色在线 | 国产午夜精品一区二区三区在线观看 | 无码无遮挡成人A片 | 91精品啪国产在线观看免费牛牛 | 黄视频在线播放 | 国产日韩视频 | 亚洲国产欧美91 | 色婷婷视频 | 二区精品视频 | 欧洲中文字幕 | 国产精品免费看久久久 | 日本特黄aa一大片 | 蜜桃视频一区二区三区 | 亚洲第一区精品观看 | 精品日韩欧美国产一区二区 | 欧美日韩视频在线 | 午夜在线小视频 | 久久夜夜操妹子 | 中文字幕日韩欧美 | 一区二区三区欧美 | jizz日| 国产免费观看一级国产 | 国产精品久久久久免费 | 国产高清一国产免费软件 | 国产精品偷拍 | 精品久久一区 | 99re在线观看| 日日摸夜夜添夜夜添破第一 | 在线视频三级 | 亚洲 欧美 中文字幕 | 丁香六月综合网 | 免费观看视频www | 成人二区三区 | 欧美日韩一区在线观看 | 超碰香蕉|