00001 #include "MappingsHandler.h"
00002
00003 void MappingsHandler::dispose(QXmlReader* parser, QXmlContentHandler* parent)
00004 {
00005 m_parser = parser;
00006 m_parent = parent;
00007 m_parser->setContentHandler(this);
00008 }
00009
00010 bool MappingsHandler::startElement(const QString& ,
00011 const QString& localName,
00012 const QString& ,
00013 const QXmlAttributes& attr)
00014 {
00015 if(localName == "define"){
00016
00017 m_code = 0;
00018 m_mask = 0;
00019 m_mapcode = 0;
00020 m_unicode = 0;
00021 m_mapmodifiers.clear();
00022 m_mapunicodes.clear();
00023 for(int i=0; i<attr.length(); i++){
00024 if(attr.localName(i).lower() == "key"){
00025
00026 m_code = KeyNames::getCode(attr.value(i));
00027 } else if(attr.localName(i).lower() == "code"){
00028
00029 m_code = KHUtil::hex2int(attr.value(i).lower());
00030 }
00031 }
00032 } else if(localName == "modifier"){
00033
00034 for(int i=0; i<attr.length(); i++){
00035 if(attr.value(i).lower() == "on"){
00036 m_mask |= m_pModifiers->getMask(attr.localName(i));
00037 }
00038 }
00039 } else if(localName == "map"){
00040
00041 for(int i=0; i<attr.length(); i++){
00042 if(attr.localName(i).lower() == "key"){
00043
00044 m_mapcode = KeyNames::getCode(attr.value(i));
00045 } else if(attr.localName(i).lower() == "code"){
00046
00047 m_mapcode = KHUtil::hex2int(attr.value(i).lower());
00048 }
00049 }
00050 } else if(localName == "map_modifier"){
00051
00052 for(int i=0; i<attr.length(); i++){
00053 m_mapmodifiers[attr.localName(i)] = attr.value(i);
00054 }
00055 } else if(localName == "map_unicode"){
00056
00057 for(int i=0; i<attr.length(); i++){
00058 if(attr.localName(i).lower() == "char"){
00059
00060 m_unicode = attr.value(i)[0].unicode();
00061 } else if(attr.localName(i).lower() == "code"){
00062
00063 m_unicode = KHUtil::hex2int(attr.value(i).lower());
00064 } else {
00065 m_mapunicodes[attr.localName(i)] = attr.value(i);
00066 }
00067 }
00068 }
00069 return(true);
00070 }
00071
00072 bool MappingsHandler::endElement(const QString& ,
00073 const QString& localName,
00074 const QString& )
00075 {
00076 if(localName == "define"){
00077 if(m_code > 0){
00078
00079 m_pMappings->assign(m_code, m_mask, m_mapcode);
00080
00081 for(QMap<QString,QString>::Iterator it=m_mapmodifiers.begin();
00082 it!=m_mapmodifiers.end(); ++it){
00083
00084 m_pMappings->assignModifier(it.key(), it.data());
00085 }
00086
00087 if(m_unicode > 0){
00088 m_pMappings->assignUnicode(m_unicode);
00089 } else {
00090 for(QMap<QString,QString>::Iterator it=m_mapunicodes.begin();
00091 it!=m_mapunicodes.end(); ++it){
00092
00093 m_pMappings->assignUnicode(it.key(), it.data());
00094 }
00095 }
00096 }
00097 } else if(localName == "mappings"){
00098
00099 m_parser->setContentHandler(m_parent);
00100 }
00101 return(true);
00102 }