Evenement1j* Evenement1j::getFromXml(QXmlStreamReader& xml) { QDate date; QTime horaire; Duree duree; QString sujet; //construction de l'objet en lisant le xml while(!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == "evenement1j")){ if(xml.tokenType() == QXmlStreamReader::StartElement) { if(xml.name() == "date") { xml.readNext(); date = QDate::fromString(xml.text().toString(),Qt::ISODate); } if(xml.name() == "horaire") { xml.readNext(); horaire = QTime::fromString(xml.text().toString(),Qt::ISODate); } if(xml.name() == "sujet") { xml.readNext(); sujet=xml.text().toString(); } if(xml.name() == "duree") { xml.readNext(); duree.setDuree(xml.text().toString().toUInt()); } } xml.readNext(); } Evenement1j *evt = new Evenement1j(date,horaire,duree,sujet); return evt; }
Rdv* Rdv::getFromXml(QXmlStreamReader& xml) { QDate date; QTime horaire; Duree duree; QString sujet; QString lieu; //construction de l'objet a partir des donnees xml while(!(xml.tokenType() == QXmlStreamReader::StartElement && xml.name() == "personnes")){ if(xml.tokenType() == QXmlStreamReader::StartElement) { if(xml.name() == "date") { xml.readNext(); date = QDate::fromString(xml.text().toString(),Qt::ISODate); } if(xml.name() == "horaire") { xml.readNext(); horaire = QTime::fromString(xml.text().toString(),Qt::ISODate); } if(xml.name() == "sujet") { xml.readNext(); sujet=xml.text().toString(); } if(xml.name() == "lieu") { xml.readNext(); lieu=xml.text().toString(); } if(xml.name() == "duree") { xml.readNext(); duree.setDuree(xml.text().toString().toUInt()); } } xml.readNext(); } //creation du rdv Rdv *evt = new Rdv(date,horaire,duree,sujet,lieu); xml.readNext(); // ajout des participants au Rdv while(!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == "personnes")){ QString personne; if(xml.tokenType() == QXmlStreamReader::StartElement) { if(xml.name() == "personne") { xml.readNext(); personne = xml.text().toString(); evt->ajouterPersonne(personne); } } xml.readNext(); } xml.readNext(); return evt; }
void Agenda::ajouterProgrammation(const QString & nomDeLEventClassique, const QDate & d, const QTime & h, const Duree duree) { EvenementClassique & evt = *(new EvenementClassique(duree, nomDeLEventClassique) ); int minute_fin = h.minute() + duree.getMinute(); int heure_fin = h.hour() + duree.getHeure() + (minute_fin / 60) ; minute_fin = minute_fin % 60; if ( !QTime::isValid(heure_fin, minute_fin, 0) ) { throw CalendarException("erreur ajouterProgrammation : une programmation ne peut pas être à cheval sur deux jours"); } ajouterProgrammation(evt, d, h, *(new QTime(heure_fin, minute_fin)) ); }
void Tache::writeOnto(QXmlStreamWriter* xmlStream){ if(isTacheComposee()){ xmlStream->writeStartElement("TacheComposee"); xmlStream->writeAttribute("nom",getTitre().c_str()); for(int i=0;i<dynamic_cast<TacheComposee*>(this)->getNbTaches();i++){ dynamic_cast<TacheComposee*>(this)->getListeTaches()[i]->writeOnto(xmlStream); } } else { // TACHE UNITAIRE xmlStream->writeStartElement("TacheUnitaire"); xmlStream->writeAttribute("nom",getTitre().c_str()); TacheUnitaire* cast = dynamic_cast<TacheUnitaire*>(this); if (cast->EstPreemptable()) xmlStream->writeAttribute("preemptable","true"); else xmlStream->writeAttribute("preemptable","false"); Duree duree = dynamic_cast<TacheUnitaire*>(this)->GetDuree(); xmlStream->writeAttribute("heures",to_string(duree.getHeure()).c_str()); xmlStream->writeAttribute("minutes",to_string(duree.getMinute()).c_str()); xmlStream->writeAttribute("secondes",to_string(duree.getSeconde()).c_str()); } if (isDateDisp()){ xmlStream->writeStartElement("dateDisponibilite"); xmlStream->writeCharacters(dateDispo->getFormatedTime().c_str() ); xmlStream->writeEndElement(); } if (isDateEcheance()){ xmlStream->writeStartElement("dateEcheance"); xmlStream->writeCharacters(dateEcheance->getFormatedTime().c_str() ); xmlStream->writeEndElement(); } for (int i=0;i<nbPrecedences;i++){ xmlStream->writeStartElement("precedence"); xmlStream->writeCharacters(precedence[i]->getTitre().c_str() ); xmlStream->writeEndElement(); } xmlStream->writeEndElement(); }
Horaire Horaire::operator+(const Duree& d) const{ Horaire h1=*this; unsigned short heure=0; unsigned short minute=0; heure=h1.getHeure(); minute=h1.getMinute(); minute=d.getDureeEnMinutes(); while(minute>=60) { minute=minute-60; heure++; } h1.setHoraire(heure,minute); return h1; }
void Agenda::ajouterProgrammation(const TachePreemptable & t, const QDate& d, const QTime& h, const Duree duree){ Duree d_totale = Duree(duree); vector <Programmation *> & listeProgrammation = trouverProgrammation(t); std::vector<Programmation *>::const_iterator it ; //On vérifie que la durée totale des taches programmée n'est pas supérieure à la durée de la tache préempée for(it = listeProgrammation.begin(); it != listeProgrammation.end() ; ++it ) { d_totale.setDuree( d_totale.getDureeEnMinutes() + (*it)->getDuree().getDureeEnMinutes() ); } if ( t.getDuree() < d_totale ) { throw CalendarException("erreur AjouterProgrammation : durée totale supérieure à la durée de la tâche") ; } int minutes = duree.getDureeEnMinutes(); QTime * fin = new QTime(h.addSecs( minutes * 60) ); // qDebug() << "minutes" << minutes << "Time :" << *fin; ajouterProgrammation( t, d, h, *fin ); }
bool operator<(Duree const &a, Duree const &b) { if (a.estPlusPetitQue(b)) return true; else return false; }
bool operator==(Duree const &a, Duree const &b) { return a.estEgal(b); }
void EditeurTache::enregisterTache(){ if(!(ProjetManager::getInstance().isProjetExistant(ui->comboBoxProjet->currentText()))){ QMessageBox::warning(this, "Attention", "Veuilliez choisir un projet."); } else{ QString id = ui->lineEditId->text(); QString titre = ui->lineEditTitre->text(); if((id==NULL) || (titre==NULL)) QMessageBox::warning(this, "Attention", "Veuilliez donnez un identificateur et un titre."); else{ QDate disp = ui->dateEditDispo->date(); QDate ech = ui->dateEditEch->date(); if(ui->radioButtonUnit->isChecked()){ Duree d = Duree(ui->timeEditDuree->time().hour(),ui->timeEditDuree->time().minute()); bool pre = ui->radioButtonOui->isChecked(); if((d.getDureeEnMinutes()==0)|| (pre==false && ui->radioButtonNon->isChecked()==false))//test si les champs durée et preemptive sont bien renseignés QMessageBox::warning(this, "Attention", "Veuilliez renseigner la durée de la tache."); else{ try{ TacheUnitaire& t = (ProjetManager::getInstance().trouverProjet(ui->comboBoxProjet->currentText())->ajouterTacheUnitaire(id,titre, disp,ech, d, pre)); //ajouter précédence try { for(QMap<QString, Tache*>::const_iterator it= predecesseurs.cbegin();it!=predecesseurs.cend();it++){ t.ajouterPrecedence(*(*it)); } //ajouter tache mère if(ui->comboBoxMere->currentText()!=QString(" ")) { static_cast<TacheComposite*>(ProjetManager::getInstance().trouverTache(ui->comboBoxMere->currentText()))->ajouterSousTache(t); } //emit nouvelleTache(); MessageValidation mv(QString("Succès"), QString("La tache "+ui->lineEditId->text()+" a été ajoutée.")); int rep = mv.exec(); if (rep == QMessageBox::No) close(); else { ui->lineEditId->clear(); ui->lineEditTitre->clear(); remplirComboMere(ui->comboBoxProjet->currentText()); } } catch(CalendarException e){ QMessageBox::warning(this, "Erreur", e.getInfo()); ProjetManager::getInstance().trouverProjet(ui->comboBoxProjet->currentText())->removeTache(&t); } } catch(CalendarException e){ QMessageBox::warning(this, "Erreur", e.getInfo()); } } } else if(ui->radioButtonComp->isChecked()){ try{ TacheComposite& t = (ProjetManager::getInstance().trouverProjet(ui->comboBoxProjet->currentText())->ajouterTacheComposite(id, titre, disp, ech)); //ajouter précédence try { for(QMap<QString, Tache*>::const_iterator it= predecesseurs.cbegin();it!=predecesseurs.cend();it++){ t.ajouterPrecedence(*(*it)); } //ajouter tache mère if(ui->comboBoxMere->currentText()!=QString(" ")) { static_cast<TacheComposite*>(ProjetManager::getInstance().trouverTache(ui->comboBoxMere->currentText()))->ajouterSousTache(t); } MessageValidation mv(QString("Succès"), QString("La tache "+ui->lineEditId->text()+" a été ajoutée.")); int rep = mv.exec(); if (rep == QMessageBox::No) close(); else { ui->lineEditId->clear(); ui->lineEditTitre->clear(); remplirComboMere(ui->comboBoxProjet->currentText()); } } catch(CalendarException e){ QMessageBox::warning(this, "Erreur", e.getInfo()); ProjetManager::getInstance().trouverProjet(ui->comboBoxProjet->currentText())->removeTache(&t); } //ajouter sous taches*/ } catch(CalendarException e){QMessageBox::warning(this, "Erreur", e.getInfo());} } else QMessageBox::warning(this, "Attention", "Veuillez renseigner le champ 'type de tache'"); } } }
//au niveau des fichiers void Manager::load(const QString& f){ //qDebug()<<"debut load\n"; this->~Manager(); file = f; QFile fin(file); // If we can't open it, let's show an error message. if (!fin.open(QIODevice::ReadOnly | QIODevice::Text)) { throw TimeException("Erreur ouverture fichier tâches"); } // QXmlStreamReader takes any QIODevice. QXmlStreamReader xml(&fin); //qDebug()<<"debut fichier\n"; // We'll parse the XML until we reach end of it. while (!xml.atEnd() && !xml.hasError()) { // Read next element. QXmlStreamReader::TokenType token = xml.readNext(); // If token is just StartDocument, we'll go to next. if (token == QXmlStreamReader::StartDocument) continue; // If token is StartElement, we'll see if we can read it. if (token == QXmlStreamReader::StartElement) { // If it's named taches, we'll go to the next. if (xml.name() == "taches") continue; // If it's named tache, we'll dig the information from there. if (xml.name() == "tache") { qDebug() << "new tache\n"; QString titre; QDate disponibilite; QDate echeance; Duree duree; bool preemptive; QXmlStreamAttributes attributes = xml.attributes(); /* Let's check that Task has attribute. */ if (attributes.hasAttribute("preemptive")) { QString val = attributes.value("preemptive").toString(); preemptive = (val == "true" ? true : false); } //qDebug()<<"preemptive="<<preemptive<<"\n"; xml.readNext(); //We're going to loop over the things because the order might change. //We'll continue the loop until we hit an EndElement named tache. while (!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == "tache")) { if (xml.tokenType() == QXmlStreamReader::StartElement) { // We've found titre. if (xml.name() == "titre") { xml.readNext(); titre = xml.text().toString(); //qDebug()<<"titre="<<titre<<"\n"; } // We've found disponibilite if (xml.name() == "disponibilite") { xml.readNext(); disponibilite = QDate::fromString(xml.text().toString(), Qt::ISODate); //qDebug()<<"disp="<<disponibilite.toString()<<"\n"; } // We've found echeance if (xml.name() == "echeance") { xml.readNext(); echeance = QDate::fromString(xml.text().toString(), Qt::ISODate); //qDebug()<<"echeance="<<echeance.toString()<<"\n"; } // We've found duree if (xml.name() == "duree") { xml.readNext(); duree.setDuree(xml.text().toString().toUInt()); //qDebug()<<"duree="<<duree.getDureeEnMinutes()<<"\n"; } } // ...and next... xml.readNext(); } //qDebug()<<"ajout tache "<<identificateur<<"\n"; creerT(titre,disponibilite, echeance); } } } // Error handling. if (xml.hasError()) { throw TimeException("Erreur lecteur fichier taches, parser xml"); } // Removes any device() or data from the reader * and resets its internal state to the initial state. xml.clear(); //qDebug()<<"fin load\n"; }