00001 #include "ModifiersHandler.h"
00002
00003 void ModifiersHandler::dispose(QXmlReader* parser, QXmlContentHandler* parent)
00004 {
00005 m_parser = parser;
00006 m_parent = parent;
00007 m_parser->setContentHandler(this);
00008 }
00009
00010 bool ModifiersHandler::startElement(const QString& ,
00011 const QString& localName,
00012 const QString& ,
00013 const QXmlAttributes& attr)
00014 {
00015 if(localName == "define"){
00016
00017 m_type = QString::null;
00018 m_code = 0;
00019 m_mask = 0;
00020 m_release.clear();
00021 m_toggle = false;
00022 m_mapping = false;
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 } else if(attr.localName(i).lower() == "type"){
00031
00032 m_type = attr.value(i);
00033 } else if(attr.localName(i).lower() == "mapping"){
00034
00035 if(attr.value(i).lower() == "true"){
00036 m_mapping = true;
00037 }
00038 } else if(attr.localName(i).lower() == "toggle"){
00039
00040 if(attr.value(i).lower() == "true"){
00041 m_toggle = true;
00042 }
00043 }
00044 }
00045 } else if(localName == "modifier"){
00046
00047 for(int i=0; i<attr.length(); i++){
00048 if(attr.value(i).lower() == "on"){
00049 m_mask |= m_pModifiers->getMask(attr.localName(i));
00050 }
00051 }
00052 } else if(localName == "release"){
00053
00054 int code = 0;
00055 for(int i=0; i<attr.length(); i++){
00056 if(attr.localName(i) == "key"){
00057
00058 code = KeyNames::getCode(attr.value(i));
00059 } else if(attr.localName(i) == "code"){
00060
00061 code = KHUtil::hex2int(attr.value(i).lower());
00062 }
00063 }
00064 if(code > 0){
00065 m_release.append(code);
00066 }
00067 }
00068 return(true);
00069 }
00070
00071 bool ModifiersHandler::endElement(const QString& ,
00072 const QString& localName,
00073 const QString& )
00074 {
00075 if(localName == "define"){
00076 if(m_type != QString::null && m_code > 0){
00077
00078 m_pModifiers->assign(m_type, m_code, m_mask, m_toggle);
00079 for(QValueList<int>::Iterator it=m_release.begin();
00080 it!=m_release.end(); ++it){
00081
00082 m_pModifiers->assignRelease(*it);
00083 }
00084 int code = KeyNames::getCode(m_type);
00085 if(code <= 0){
00086 qDebug("setCode[%s][%x]", m_type.latin1(), m_code);
00087 KeyNames::setCode(m_type, m_code);
00088 }
00089 if(m_mapping){
00090
00091 m_pMappings->assign(m_code, m_mask, code, 0);
00092 }
00093 }
00094 } else if(localName == "modifiers"){
00095
00096 m_parser->setContentHandler(m_parent);
00097 }
00098 return(true);
00099 }