Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ModifiersHandler.cpp

Go to the documentation of this file.
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& /* namespaceURI */,
00011         const QString& localName,
00012         const QString& /* qName */,
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                                 /* keyname */
00026                                 m_code = KeyNames::getCode(attr.value(i));
00027                         } else if(attr.localName(i).lower() == "code"){
00028                                 /* keycode */
00029                                 m_code = KHUtil::hex2int(attr.value(i).lower());
00030                         } else if(attr.localName(i).lower() == "type"){
00031                                 /* modifier type */
00032                                 m_type = attr.value(i);
00033                         } else if(attr.localName(i).lower() == "mapping"){
00034                                 /* auto mapping */
00035                                 if(attr.value(i).lower() == "true"){
00036                                         m_mapping = true;
00037                                 }
00038                         } else if(attr.localName(i).lower() == "toggle"){
00039                                 /* toggle mode */
00040                                 if(attr.value(i).lower() == "true"){
00041                                         m_toggle = true;
00042                                 }
00043                         }
00044                 }
00045         } else if(localName == "modifier"){
00046                 /* modifier keys */
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                 /* release keys */
00054                 int code = 0;
00055                 for(int i=0; i<attr.length(); i++){
00056                         if(attr.localName(i) == "key"){
00057                                 /* keyname */
00058                                 code = KeyNames::getCode(attr.value(i));
00059                         } else if(attr.localName(i) == "code"){
00060                                 /* keycode */
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& /* namespaceURI */,
00072         const QString& localName,
00073         const QString& /* qName */)
00074 {
00075         if(localName == "define"){
00076                 if(m_type != QString::null && m_code > 0){
00077                         /* assign modifier */
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                                 /* assign modifier release keys */
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                                 /* auto mapping */
00091                                 m_pMappings->assign(m_code, m_mask, code, 0);
00092                         }
00093                 }
00094         } else if(localName == "modifiers"){
00095                 /* return parent */
00096                 m_parser->setContentHandler(m_parent);
00097         }
00098         return(true);
00099 }

Generated on Sat Nov 5 16:16:42 2005 for OPIE by  doxygen 1.4.2