void TasksView::addTaskHelper( const Task& parent ) { ViewFilter* filter = Application::instance().model().taskModel(); Task task; int suggestedId = parent.isValid() ? parent.id() : 1; if ( parent.isValid() ) { task.setParent( parent.id() ); // subscribe if the parent is subscribed: task.setSubscribed( parent.subscribed() || CONFIGURATION.taskPrefilteringMode == Configuration::TaskPrefilter_SubscribedOnly || CONFIGURATION.taskPrefilteringMode == Configuration::TaskPrefilter_SubscribedAndCurrentOnly ); } // yeah, daredevil! while ( filter->taskIdExists( suggestedId ) ) ++suggestedId; TaskIdDialog dialog( filter, this ); dialog.setSuggestedId( suggestedId ); if ( dialog.exec() ) { task.setId( dialog.selectedId() ); task.setName( dialog.taskName() ); CommandAddTask* cmd = new CommandAddTask( task, this ); emit emitCommand( cmd ); if ( parent.isValid() ) { const QModelIndex parentIdx = filter->indexForTaskId( parent.id() ); m_treeView->setExpanded( parentIdx, true ); } } }
QString SmartNameCache::makeCombined( const Task& task ) const { Q_ASSERT( task.isValid() || task.name().isEmpty() ); // an invalid task (id == 0) must not have a name if ( !task.isValid() ) return QString(); const Task parent = findTask( task.parent() ); if ( parent.isValid() ) return QObject::tr( "%1/%2", "parent task name/task name" ).arg( parent.name(), task.name() ); else return task.name(); }
bool SelectTaskDialog::isValidAndTrackable( const QModelIndex& index ) const { if ( !index.isValid() ) return false; const Task task = m_proxy.taskForIndex( index ); return task.isValid() && task.trackable(); }
// try to restore subscriptions where possible Q_FOREACH( const Task& oldTask, oldTasks ) { const Task task = getTask( oldTask.id() ); if ( task.isValid() ) { if ( oldTask.subscribed() ) { addSubscription( user, task ); } } }
Task Database::getTask( int taskid ) throw (TimesheetProcessorException ) { Task task = m_storage.getTask( taskid ); if ( !task.isValid() ) { throw TimesheetProcessorException( QObject::tr( "Invalid task %1 in report" ).arg( taskid ) ); } return task; }
bool Job::createFromFile(QString filename) { XMLParser bitsParser; Task *tempTask; QFile *xmlFile = new QFile(filename); bitsParser.parseFile(xmlFile); QMapIterator<QString, QMap<QString,QVariant> > it(bitsParser.properties); while (it.hasNext()) { it.next(); if (it.key() == "Job") setAttributeValue("Filename",filename); else if (it.key() == "Task") { tempTask = new Task; tempTask->setAttributeValue("Filename",filename); } else continue; QMapIterator<QString,QVariant> j(it.value()); while (j.hasNext()) { j.next(); if (it.key() == "Job") { addAttribute(j.key()); setAttributeValue(j.key(),j.value()); } else if (it.key() == "Task" && tempTask) { if (j.key() != "Name" && j.key() != "StartDate" && j.key() != "EndDate" && j.key() != "TimeSpent" && j.key() != "TaskID" && j.key() != "HotKey" && j.key() != "Completed") tempTask->addAttribute(j.key()); tempTask->setAttributeValue(j.key(),j.value()); } } if (it.key() == "Task" && tempTask) { if (tempTask->isValid()) addTask(tempTask); else emit statusChanged("Invalid Task not added!"); } } if (isValid()) { makeTaskIDs(); writeConfigFile(); } else emit statusChanged(QString("Invalid Job in %1 not added!").arg(filename)); xmlFile->close(); delete xmlFile; return true; }
void EnterVacationDialog::updateTaskLabel() { const Task task = DATAMODEL->getTask( m_selectedTaskId ); if ( !task.isValid() ) m_ui->taskLabel->setText( tr( "(No task selected)") ); else m_ui->taskLabel->setText( task.name() ); updateGeometry(); }
void TasksView::actionEditTask() { Task task = selectedTask(); Q_ASSERT( task.isValid() ); TaskEditor editor( this ); editor.setTask( task ); if( editor.exec() ) { const Task newTask = editor.getTask(); newTask.dump(); CommandModifyTask* cmd = new CommandModifyTask( newTask, this ); emit emitCommand( cmd ); } configureUi(); // FIXME needed? }
void SqLiteStorageTests::makeModifyDeleteEventsTest() { // make a user User user = m_storage->makeUser( tr("MakeEventTestUser") ); // make two events Task task = m_storage->getTask( 1 ); // WARNING: depends on leftover task created in previous test QVERIFY( task.isValid() ); Event event1 = m_storage->makeEvent(); QVERIFY( event1.isValid() ); event1.setTaskId( task.id() ); event1.setUserId( user.id() ); event1.setReportId( 42 ); const QString Event1Comment( "Event-1-Comment" ); event1.setComment( Event1Comment ); Event event2 = m_storage->makeEvent(); QVERIFY( event2.isValid() ); event2.setTaskId( task.id() ); event2.setUserId( user.id() ); const QString Event2Comment( "Event-2-Comment" ); event2.setComment( Event2Comment ); QVERIFY( event1.id() != event2.id() ); // modify the events QVERIFY( m_storage->modifyEvent( event1 ) ); // store new name QVERIFY( m_storage->modifyEvent( event2 ) ); // -"- // verify event database entries Event event1_1 = m_storage->getEvent( event1.id() ); QCOMPARE( event1_1.comment(), event1.comment() ); Event event2_1 = m_storage->getEvent( event2.id() ); QCOMPARE( event2_1.comment(), event2.comment() ); // delete one event QVERIFY( m_storage->deleteEvent( event1 ) ); // verify the event is gone: QVERIFY( ! m_storage->getEvent( event1.id() ).isValid() ); // verify the other event is still there: QVERIFY( m_storage->getEvent( event2.id() ).isValid() ); }
void SmartNameCache::regenerateSmartNames() { m_smartTaskNamesById.clear(); typedef QPair<TaskId, TaskId> TaskParentPair; QMap<QString, QVector<TaskParentPair> > byName; Q_FOREACH( const Task& task, m_tasks ) byName[makeCombined(task)].append( qMakePair( task.id(), task.parent() ) ); QSet<QString> cannotMakeUnique; while ( !byName.isEmpty() ) { QMap<QString, QVector<TaskParentPair> > newByName; for ( QMap<QString, QVector<TaskParentPair> >::ConstIterator it = byName.constBegin(); it != byName.constEnd(); ++it ) { const QString currentName = it.key(); const QVector<TaskParentPair>& taskPairs = it.value(); Q_ASSERT( !taskPairs.isEmpty() ); if ( taskPairs.size() == 1 || cannotMakeUnique.contains( currentName ) ) { Q_FOREACH( const TaskParentPair& i, taskPairs ) m_smartTaskNamesById.insert( i.first, currentName ); } else { Q_FOREACH( const TaskParentPair& taskPair, taskPairs ) { const Task parent = findTask( taskPair.second ); if ( parent.isValid() ) { const QString newName = parent.name() + QLatin1Char('/') + currentName; newByName[newName].append( qMakePair( taskPair.first, parent.parent() ) ); } else { QMap<QString, QVector<TaskParentPair> >::const_iterator existing = newByName.constFind( currentName ); if ( existing != newByName.constEnd() ) cannotMakeUnique.insert( currentName ); newByName[currentName].append( taskPair ); } } } }
void TasksView::actionNewSubTask() { Task task = selectedTask(); Q_ASSERT( task.isValid() ); addTaskHelper( task ); }