1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#include "KeyExtensions.h"
KeyExtensions::KeyExtensions()
{
qDebug("KeyExtensions::KeyExtensions()");
m_cancelcode = 0;
}
KeyExtensions::~KeyExtensions()
{
qDebug("KeyExtensions::~KeyExtensions()");
clear();
}
void KeyExtensions::assign(const QString& kind, int keycode,
int keymask, const QValueList<int>& modcodes)
{
ExtensionInterface* ext;
#if 0
ext = m_oExtFactory.createInstance(kind);
if(ext != NULL){
ext->setKeycode(keycode);
ext->setKeymask(keymask);
ext->setModcodes(modcodes);
}
#else
ext = m_oExtFactory.createInstance(kind, keycode, keymask);
if(ext != NULL){
ext->setModcodes(modcodes);
}
#endif
}
void KeyExtensions::assign(const QString& kind, int keycode,
int keymask, int modcode)
{
QValueList<int> modcodes;
modcodes.append(modcode);
assign(kind, keycode, keymask, modcodes);
}
bool KeyExtensions::doKey(int keycode, int keymask, bool isPress)
{
bool fCancel = false;
ExtensionList& list = m_oExtFactory.getList();
for(ExtensionList::Iterator it=list.begin();
it!=list.end(); ++it){
if(isPress){
int code = (*it)->getKeycode();
if((*it)->getKeymask() == keymask
&& (code == 0 || code == keycode)){
if((*it)->onKeyPress(keycode)){
fCancel = true;
}
qWarning("ext:onKeyPress[%s][%x][%d]",
(*it)->kind().latin1(),
(*it)->getKeycode(),
fCancel);
}
} else {
if(keycode == m_cancelcode){
fCancel = true;
}
const QValueList<int>& rlist = (*it)->getModcodes();
if(rlist.contains(keycode)){
if((*it)->onModRelease(keycode)){
m_pModifiers->resetToggles();
}
qWarning("ext:onModRelease[%s][%x]",
(*it)->kind().latin1(),
keycode);
}
}
}
if(isPress && fCancel){
m_cancelcode = keycode;
} else {
m_cancelcode = 0;
}
return(fCancel);
}
void KeyExtensions::clear()
{
m_oExtFactory.clear();
}
void KeyExtensions::reset()
{
//clear();
m_oExtFactory.reset();
}
void KeyExtensions::init()
{
m_oExtFactory.sweep();
}
void KeyExtensions::statistics()
{
qWarning("KeyExtensions::statistics()");
ExtensionList& list = m_oExtFactory.getList();
for(ExtensionList::Iterator it=list.begin();
it!=list.end(); ++it){
qWarning(" [%s][%x][%x]",
(*it)->kind().latin1(),
(*it)->getKeycode(),
(*it)->getKeymask());
}
}
|