Diffstat (limited to 'noncore/applets/keyhelper/keyhelperapplet/config/MappingsHandler.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/applets/keyhelper/keyhelperapplet/config/MappingsHandler.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/noncore/applets/keyhelper/keyhelperapplet/config/MappingsHandler.cpp b/noncore/applets/keyhelper/keyhelperapplet/config/MappingsHandler.cpp new file mode 100644 index 0000000..3680fbf --- a/dev/null +++ b/noncore/applets/keyhelper/keyhelperapplet/config/MappingsHandler.cpp | |||
@@ -0,0 +1,102 @@ | |||
1 | #include "MappingsHandler.h" | ||
2 | |||
3 | void MappingsHandler::dispose(QXmlReader* parser, QXmlContentHandler* parent) | ||
4 | { | ||
5 | m_parser = parser; | ||
6 | m_parent = parent; | ||
7 | m_parser->setContentHandler(this); | ||
8 | } | ||
9 | |||
10 | bool MappingsHandler::startElement(const QString& /* namespaceURI */, | ||
11 | const QString& localName, | ||
12 | const QString& /* qName */, | ||
13 | const QXmlAttributes& attr) | ||
14 | { | ||
15 | if(localName == "define"){ | ||
16 | /* ÊÑ¿ô½é´ü²½ */ | ||
17 | m_code = 0; | ||
18 | m_mask = 0; | ||
19 | m_mapcode = 0; | ||
20 | m_unicode = 0; | ||
21 | m_mapmodifiers.clear(); | ||
22 | m_mapunicodes.clear(); | ||
23 | for(int i=0; i<attr.length(); i++){ | ||
24 | if(attr.localName(i).lower() == "key"){ | ||
25 | /* keyname */ | ||
26 | m_code = KeyNames::getCode(attr.value(i)); | ||
27 | } else if(attr.localName(i).lower() == "code"){ | ||
28 | /* keycode */ | ||
29 | m_code = KHUtil::hex2int(attr.value(i).lower()); | ||
30 | } | ||
31 | } | ||
32 | } else if(localName == "modifier"){ | ||
33 | /* modifier keys */ | ||
34 | for(int i=0; i<attr.length(); i++){ | ||
35 | if(attr.value(i).lower() == "on"){ | ||
36 | m_mask |= m_pModifiers->getMask(attr.localName(i)); | ||
37 | } | ||
38 | } | ||
39 | } else if(localName == "map"){ | ||
40 | /* mapping key */ | ||
41 | for(int i=0; i<attr.length(); i++){ | ||
42 | if(attr.localName(i).lower() == "key"){ | ||
43 | /* keyname */ | ||
44 | m_mapcode = KeyNames::getCode(attr.value(i)); | ||
45 | } else if(attr.localName(i).lower() == "code"){ | ||
46 | /* keycode */ | ||
47 | m_mapcode = KHUtil::hex2int(attr.value(i).lower()); | ||
48 | } | ||
49 | } | ||
50 | } else if(localName == "map_modifier"){ | ||
51 | /* mapping modifiers */ | ||
52 | for(int i=0; i<attr.length(); i++){ | ||
53 | m_mapmodifiers[attr.localName(i)] = attr.value(i); | ||
54 | } | ||
55 | } else if(localName == "map_unicode"){ | ||
56 | /* mapping unicodes */ | ||
57 | for(int i=0; i<attr.length(); i++){ | ||
58 | if(attr.localName(i).lower() == "char"){ | ||
59 | /* unicode char */ | ||
60 | m_unicode = attr.value(i)[0].unicode(); | ||
61 | } else if(attr.localName(i).lower() == "code"){ | ||
62 | /* unicode code */ | ||
63 | m_unicode = KHUtil::hex2int(attr.value(i).lower()); | ||
64 | } else { | ||
65 | m_mapunicodes[attr.localName(i)] = attr.value(i); | ||
66 | } | ||
67 | } | ||
68 | } | ||
69 | return(true); | ||
70 | } | ||
71 | |||
72 | bool MappingsHandler::endElement(const QString& /* namespaceURI */, | ||
73 | const QString& localName, | ||
74 | const QString& /* qName */) | ||
75 | { | ||
76 | if(localName == "define"){ | ||
77 | if(m_code > 0){ | ||
78 | /* assign mapping */ | ||
79 | m_pMappings->assign(m_code, m_mask, m_mapcode); | ||
80 | |||
81 | for(QMap<QString,QString>::Iterator it=m_mapmodifiers.begin(); | ||
82 | it!=m_mapmodifiers.end(); ++it){ | ||
83 | /* assign mapping modifier state */ | ||
84 | m_pMappings->assignModifier(it.key(), it.data()); | ||
85 | } | ||
86 | |||
87 | if(m_unicode > 0){ | ||
88 | m_pMappings->assignUnicode(m_unicode); | ||
89 | } else { | ||
90 | for(QMap<QString,QString>::Iterator it=m_mapunicodes.begin(); | ||
91 | it!=m_mapunicodes.end(); ++it){ | ||
92 | /* assign mapping unicode */ | ||
93 | m_pMappings->assignUnicode(it.key(), it.data()); | ||
94 | } | ||
95 | } | ||
96 | } | ||
97 | } else if(localName == "mappings"){ | ||
98 | /* return parent */ | ||
99 | m_parser->setContentHandler(m_parent); | ||
100 | } | ||
101 | return(true); | ||
102 | } | ||