summaryrefslogtreecommitdiff
path: root/noncore/applets/keyhelper/keyhelperapplet/config/MappingsHandler.cpp
Unidiff
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.cpp102
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
3void MappingsHandler::dispose(QXmlReader* parser, QXmlContentHandler* parent)
4{
5 m_parser = parser;
6 m_parent = parent;
7 m_parser->setContentHandler(this);
8}
9
10bool 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
72bool 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}