/**
  @brief Charge les données d'une section de configuration XML
*/
bool ConfigXmlFile::load(const QString& filename,const QString& section_name,ConfigParamList& list){

#ifdef _DEBUG
    QPRINT("Load Config '"+section_name+"' from "+filename);
#endif
    QDomDocument doc;
    QFile f(filename);
    if(!f.open(QIODevice::ReadOnly)){
        return QRESULT_DESC(Result::CantOpenFile,f.errorString());
    }
    doc.setContent(&f);

    f.close();

    QDomElement root = doc.documentElement().firstChildElement(section_name);
    if(root.isNull())
        return false;

    //scan les elements enfants
    QDomElement child = root.firstChildElement();
    while(!child.isNull()){
        QString name = child.tagName();
        QString value = child.text().trimmed();
        if(!name.isEmpty()){
            list[name] = new ConfigParam(value,name);
#ifdef _DEBUG
            QPRINT("loadConfig >> "+section_name+"."+name+" : "+value);
#endif
        }
        child = child.nextSiblingElement();
    }

    return true;
}
Example #2
0
static int
sh7722_reset( SH772xGfxSharedArea *shared )
{
     int i;

     do_gettimeofday( &base_time );

     QPRINT( "Resetting hardware..." );

     BEM_HC_CLOCK = 0;
     for (i=0; i<30000; i++);
     BEM_HC_CLOCK = 0x1111;

     BEM_HC_RESET = 0x1111;
     for (i=0; i<30000; i++);
     BEM_HC_RESET = 0;


     QPRINT( "Initializing shared area..." );

     memset( (void*) shared, 0, sizeof(SH772xGfxSharedArea) );

     shared->buffer_phys = virt_to_phys(&shared->buffer[0]);
     shared->jpeg_phys   = virt_to_phys(jpeg_area);
     shared->magic       = SH7722GFX_SHARED_MAGIC;


     QPRINT( "Clearing interrupts..." );

     BEM_HC_INT_CLEAR = 0x111111;
     BEM_HC_INT_MASK  = 0x110011;

     BEM_HC_CACHE_FLUSH = 0;

     QDUMP( "Ready" );

     return 0;
}
/**
  @brief Charge un schema depuis un fichier RIFF
  @param mem Tampon mémoire
  @return Résultat de procèdure
*/
bool QEquipmentView::fromRIFF(PTR* mem){
    RIFF riff;

    //supprime le contenu de la scene
    this->reset();

    //lit l'entete
    if(!riff_read(mem,&riff))
        return false;

    //Vérifie l'en-tete
    if(!(riff.id[0] == 'R' && riff.id[1] == 'I' && riff.id[2] == 'F' && riff.id[3] == 'F'))
        return QRESULT_DESC(Result::Failed, Result::RiffInvalidHeader);
    if(mem->ptr+riff.size > mem->down)
        return QRESULT_DESC(Result::Failed, Result::RiffInvalidTagSize);

    //lit les chunk
    char tag[4];
    unsigned int tag_size;
    while(mem->ptr<mem->down && riff_read_tag(mem,tag,&tag_size)){
        qDebug() << "tag=" << tag[0] << tag[1] << tag[2] << tag[3];
        qDebug() << "tag_size=" << tag_size;
        if(mem->ptr+tag_size > mem->down)
            return QRESULT_DESC(Result::Failed, Result::RiffInvalidTagSize);
        if(memcmp("EQUIP",tag,sizeof(tag)) == 0 ){
            qDebug() << "EQUIP tag...";
            //Charge l'équipement
            RIFF_EQUIP equip;
            equip.id = btoi(mem);
            bread(mem,equip.name,sizeof(equip.name));
            bread(mem,equip.type,sizeof(equip.type));
            //Ajoute l'équipement à la scene
            Equipment qequip;
            qequip.equipmentId = equip.id;
            qequip.name = QString(equip.name);
            qequip.type = QString(equip.type);
            QPRINT(qequip.type);
            qequip.posX = qequip.posY = qequip.posZ = 0;
            this->addEquipment(qequip);
        }
        else{
            qDebug() << "IGNORE tag";
            mem->ptr += tag_size;
        }
        qDebug() << "offset=" << boffset(mem);
    }

    return QRESULT_OK();
}
/**
  @brief Fichier de configuration XML
*/
bool ConfigXmlFile::load(const QString& filename,Configurable* config,ConfigParamList& list){

#ifdef _DEBUG
    QPRINT("Load Config '"+config->getConfigName()+"' from "+filename);
#endif
    QDomDocument doc;
    QFile f(filename);
    if(!f.open(QIODevice::ReadOnly)){
        return QRESULT_DESC(Result::CantOpenFile,f.errorString());
    }
    doc.setContent(&f);

    f.close();

    QDomElement root = doc.documentElement().firstChildElement(config->getConfigName());
    if(root.isNull())
        return false;

    //scan les elements enfants
    for(ConfigParamList::const_iterator cur = list.begin(); cur != list.end(); cur++){
        QString name = cur->first;
        QDomElement child = root.firstChildElement(name);
        if(!child.isNull()){
            cur->second->value = child.text().trimmed();
#ifdef _DEBUG
            QPRINT("loadConfig >> "+config->getConfigName()+"."+name+" : "+cur->second->value);
#endif
        }
#ifdef _DEBUG
        else
            QPRINT("loadConfig >> "+config->getConfigName()+"."+name+" [NOT FOUND]");
#endif
    }

    return true;
}
/**
  @brief Enregistre les parametres dans un fichier de configuration xml

*/
bool ConfigXmlFile::save(const QString& filename,Configurable* config){

#ifdef _DEBUG
    QPRINT("save config <"+config->getConfigName()+"> to: "+filename);
#endif
    QDomDocument doc;
    QFile f(filename);
    if(!f.open(QIODevice::ReadOnly)){
        return QRESULT_DESC(Result::CantOpenFile,f.errorString());
    }
    doc.setContent(&f);

    f.close();

    // obtient noeud principale
    QDomElement root = doc.documentElement().firstChildElement(config->getConfigName());

    //crée l'élément si il n'existe pas
    if(root.isNull()){
        root = doc.createElement(config->getConfigName());
        if(!root.isNull())
            doc.documentElement().appendChild(root);
    }
    if(root.isNull())
        return QRESULT_DESC(Result::CantEditXmlFile,"Création du noeud "+config->getConfigName());

    //noeuds enfants
    ConfigParamList list;
    config->configRead(list);

    //scan les parametres
    for(ConfigParamList::const_iterator cur = list.begin(); cur != list.end(); cur++){
        QString name = cur->first;

        // obtient noeud enfant
        QDomElement old_child = root.firstChildElement(name);

        //crée l'élément si il n'existe pas
        QDomElement child = doc.createElement(name);
        if(!child.isNull())
            root.appendChild(child);
        if(child.isNull())
            return QRESULT_DESC(Result::CantEditXmlFile,"Création du noeud "+name);

        //définit le texte
        QDomText text = doc.createTextNode(cur->second->getValue());
        child.appendChild(text);

        //insert / remplace le nouveau noeud
        if(!old_child.isNull())
            root.replaceChild(child,old_child);
        else
            root.appendChild(child);
    }

    //réouvre le fichier en écriture
    QTextStream sortie;
    f.setFileName(filename);
    if(!f.open(QIODevice::WriteOnly)){
        return QRESULT_DESC(Result::CantOpenFile,f.errorString());
    }
    sortie.setDevice(&f); // association du flux au fichier

    // insertion en début de document de <?xml version="1.0" ?>
//    QDomNode headNode = doc.createProcessingInstruction("xml","version=\"1.0\"");
//    doc.insertBefore(headNode, doc.firstChild());
    // sauvegarde dans le flux (deux espaces de décalage dans l'arborescence)
    doc.save(sortie, 2);
    f.close();

    return QRESULT_OK();
}
/**
  @brief Initialise un widget avec une liste de parametres
  @param widget Widget parent
  @param list Liste des parametres
  @remarks Les noms des widgets doivent correspondres avec les noms de paramètres
*/
void Configurable::configToWidget(QObject* widget,ConfigParamList& list){

    //scan les elements enfants
    for(ConfigParamList::const_iterator cur = list.begin(); cur != list.end(); cur++){
        QString name = cur->first;
        QString value = cur->second->getValue();
        QWidget* child = widget->findChild<QWidget*>(name);
        if(child==0){
            QPRINT("configToWidget: "+name+" not found");
            continue;
        }

        // QLineEdit ?
        QLineEdit *lineEdit = qobject_cast<QLineEdit *>(child);
        if(lineEdit){
           lineEdit->setText(value);
           continue;
        }

        // QComboBox ?
        QComboBox *comboBox = qobject_cast<QComboBox *>(child);
        if(comboBox){
            comboBox->setCurrentIndex(comboBox->findText(value));
            continue;
         }

        // QSpinBox ?
        QSpinBox *spinBox = qobject_cast<QSpinBox *>(child);
        if(spinBox){
            spinBox->setValue(value.toInt());
            continue;
         }


        // QDoubleSpinBox ?
        QDoubleSpinBox *doubleSpinBox = qobject_cast<QDoubleSpinBox *>(child);
        if(doubleSpinBox){
            doubleSpinBox->setValue(value.toInt());
            continue;
         }

        // QTextEdit ?
        QTextEdit *textEdit = qobject_cast<QTextEdit *>(child);
        if(textEdit){
            textEdit->setPlainText(value);
            continue;
         }

        // QPlainTextEdit ?
        QPlainTextEdit *plainTextEdit = qobject_cast<QPlainTextEdit *>(child);
        if(plainTextEdit){
            plainTextEdit->setPlainText(value);
            continue;
         }

        // QTimeEdit ?
        QTimeEdit *timeEdit = qobject_cast<QTimeEdit *>(child);
        if(timeEdit){
            timeEdit->setTime(QTime::fromString(value));
            continue;
         }

        // QDateTimeEdit ?
        QDateTimeEdit *dateTimeEdit = qobject_cast<QDateTimeEdit *>(child);
        if(dateTimeEdit){
            timeEdit->setDateTime(QDateTime::fromString(value));
            continue;
         }

        // QDateEdit ?
        QDateEdit *dateEdit = qobject_cast<QDateEdit *>(child);
        if(dateEdit){
            dateEdit->setDate(QDate::fromString(value));
            continue;
         }

        // QDial ?
        QDial *dial = qobject_cast<QDial *>(child);
        if(dial){
            dial->setValue(value.toInt());
            continue;
         }

        // QSlider ?
        QSlider *slider = qobject_cast<QSlider *>(child);
        if(slider){
            slider->setValue(value.toInt());
            continue;
         }

    }

}