void MainWindow::nouvelleTacheUnitairePreemptable() { QList<QTreeWidgetItem*> selected = projets->selectedItems(); if (selected.size() != 0 && (selected.at(0)->text(0) == "Projet" || dynamic_cast<TacheComposite*>(tm->trouverTache(selected.at(0)->text(1))))) { Tache& tach = tm->ajouterTache("preemptable"); if (selected.at(0)->text(0) == "Projet") { QString id = selected.at(0)->text(1); Projet* proj = pm->trouverProjet(id); try{proj->ajouterTache(&tach);}catch(ProjetException e){qDebug()<<e.get_info();} tach.setProjet_conteneur(proj); } else { TacheComposite* task = dynamic_cast<TacheComposite*>(tm->trouverTache(selected.at(0)->text(1))); task->ajouterTache(&tach); tach.setTache_conteneur(task); } try { tm->saveToDB(); } catch (TacheManagerException e) { showError("Project Calendar", e.getInfo()); tm->clearAll(); pm->clearAll(); pm->loadProjets(); tm->loadTaches(); em->clearAll(); em->loadEvents(); displayEvents(this->current_debut,this->current_fin); } displayProjetsAndTasks(); } }
Tache *ProjetManager::ajouterTache(const QString & id_projet, const QString & id, const QString & titre, const QDate & dispo, const QDate & deadline, const Duree & dur, const bool & pre) { if (this->trouverTache(id)) { throw CalendarException("Erreur AjouterTache : l'id de la tache existe déjà"); } Projet * p = this->trouverProjet(id_projet); if ( p == 0 ) { throw CalendarException("Erreur AjouterTache : l'id_projet n'existe pas"); } Tache * t = 0; if(dur.getDureeEnMinutes() != 0 ) { // si une durée est fixée, la tâche est unitaire if (pre) { t = new TachePreemptable(id,titre,dispo,deadline,dur); } else { t= new TacheNonPreemptable(id, titre, dispo, deadline, dur); } } else { t = new TacheComposite(id,titre,dispo,deadline); } p->ajouterTache(*t); return t; }