亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Abiword 編輯事件設(shè)計(jì)

系統(tǒng) 1621 0

Abiword 編輯事件設(shè)計(jì)

?

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

本文將詳細(xì)記錄事件的處理各個類的設(shè)計(jì)概要。

一、EV_EditMethod類

????? 該類的定義:具有根據(jù)名字調(diào)用方法的能力。

** 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函數(shù)中根據(jù)其m_fn(函數(shù)指針)動態(tài)調(diào)用各個函數(shù)。

二、ap_EditMethods類

???? 首先改類利用EV_EditMethod_Fn函數(shù)對象定義靜態(tài)的成員函數(shù)。

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

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

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

三、EV_EditMethodContainer類

  該類主要用于存儲EV_EditMethod的數(shù)組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類,提供兩者的基本映射。

針對該類數(shù)據(jù)集合的封裝系統(tǒng)定義了3個集合類:

1、ev_EB_MouseTable類,定義鼠標(biāo)的EV_EditBinding指針的三維數(shù)組。

  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指針的二維數(shù)組。

  EV_EditBinding *?m_peb[EV_COUNT_NVK][EV_COUNT_EMS];

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

  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;

常用的函數(shù)有:

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

六、初始化

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

在src\wp\ap\xp的文件夾中,以ap_LB_*開頭的文件中定義鼠標(biāo)、鍵盤、字符等操作對應(yīng)的數(shù)組結(jié)構(gòu)

在ap_LB_Default.cpp定義如下數(shù)組:

ap_bs_Mouse MouseTable[]

ap_bs_NVK NVKTable[]

ap_bs_Char CharTable[]

其他文件中有類似的數(shù)據(jù)結(jié)構(gòu)。

系統(tǒng)利用AP_BindingSet類來初始化以上各個類對象。

七、EV_EditEventMapper類

  封裝EV_EditBindingMap類,提供一致的鼠標(biāo)、鍵盤等外部的接口來獲取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 編輯事件設(shè)計(jì)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费视频精品一区二区三区 | 豆奶视频污 | 国产普通话自拍 | 成人免费一级毛片在线播放视频 | 四虎精品福利视频精品 | 中文字幕日韩欧美一区二区三区 | 欧美精品一区二区三区视频 | 殴美一级视频 | 狠狠色狠狠色综合久久第一次 | 国内精品自在自线视频香蕉 | 国产在线精品福利大全 | 综合久久久久综合97色 | 天天操夜夜草 | 手机看片日韩日韩韩 | 女人18毛片黄 | 九九视频精品在线 | 毛片视 | 九九精品国产兔费观看久久 | 青草视频在线 | 99久久伊人 | 亚洲国产二区三区 | 一级黄色免费网站 | 久久亚洲精品中文字幕亚瑟 | 老司机福利免费 | 成人性生免费视频 | 欧美一区二区三区东南亚 | 久久精品视频网 | 中文字幕在线观看日本 | 综合色99 | 欧美成人专区 | 中文字幕最新中文字幕中文字幕 | 99日影院在线播放 | 欧美另类黑人巨大videos | 天天干天天谢 | 91中文字幕在线播放 | 九九热免费在线观看 | 亚洲精品一区二区久久久久 | 老司机午夜永久在线观看 | 国产成人一级片 | 老司机免费福利影院 | 国产亚洲美女精品久久久久狼 |