예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
파일: agenda.cpp 프로젝트: Erzrael/LO21
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)) );

}
예제 #4
0
파일: tache.cpp 프로젝트: dotpy3/projetLO21
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();
}
예제 #5
0
파일: timing.cpp 프로젝트: clemencevaz/LO21
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;
}
예제 #6
0
파일: agenda.cpp 프로젝트: Erzrael/LO21
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 );
}
예제 #7
0
bool operator<(Duree const &a, Duree const &b) {
  if (a.estPlusPetitQue(b))
    return true;
  else
    return false;
}
예제 #8
0
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'");
        }
    }
}
예제 #10
0
//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";
}