/** @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; }
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; } } }