remove UI objects when a task is deleted

This commit is contained in:
itsmattkc
2019-06-29 02:30:42 -07:00
parent 84720b39cb
commit 2e6b36b2ae
3 changed files with 52 additions and 2 deletions
+16
View File
@@ -30,6 +30,11 @@ TaskManager::TaskManager()
maximum_task_count_ = QThread::idealThreadCount();
}
TaskManager::~TaskManager()
{
Clear();
}
void TaskManager::AddTask(Task* t)
{
// Connect Task's status signal to the Callback
@@ -45,6 +50,17 @@ void TaskManager::AddTask(Task* t)
StartNextWaiting();
}
void TaskManager::Clear()
{
// TODO Cancelling tasks
// Delete Tasks from memory
for (int i=0;i<tasks_.size();i++) {
delete tasks_.at(i);
}
tasks_.clear();
}
void TaskManager::StartNextWaiting()
{
// Count the tasks that are currently active
+32
View File
@@ -42,6 +42,33 @@ public:
*/
TaskManager();
/**
* @brief TaskManager Destructor
*
* Ensures all Tasks are deleted
*/
virtual ~TaskManager();
/**
* @brief Deleted copy constructor
*/
TaskManager(const TaskManager& other) = delete;
/**
* @brief Deleted move constructor
*/
TaskManager(TaskManager&& other) = delete;
/**
* @brief Deleted copy assignment
*/
TaskManager& operator=(const TaskManager& other) = delete;
/**
* @brief Deleted move assignment
*/
TaskManager& operator=(TaskManager&& other) = delete;
/**
* @brief Add a new Task
*
@@ -56,6 +83,11 @@ public:
*/
void AddTask(Task *t);
/**
* @brief Forcibly
*/
void Clear();
signals:
/**
* @brief Signal emitted when a Task is added by AddTask()
+4 -2
View File
@@ -52,6 +52,7 @@ void TaskViewItem::SetTask(Task *t)
if (task_ != nullptr) {
disconnect(task_, SIGNAL(StatusChanged(Task::Status)), this, SLOT(TaskStatusChange(Task::Status)));
disconnect(task_, SIGNAL(ProgressChanged(int)), progress_bar_, SLOT(setValue(int)));
disconnect(task_, SIGNAL(destroyed()), this, SLOT(deleteLater()));
}
// Set task
@@ -61,8 +62,9 @@ void TaskViewItem::SetTask(Task *t)
task_name_lbl_->setText(QString("<b>%1</b>").arg(task_->text()));
// Connect to the task
connect(t, SIGNAL(StatusChanged(Task::Status)), this, SLOT(TaskStatusChange(Task::Status)));
connect(t, SIGNAL(ProgressChanged(int)), progress_bar_, SLOT(setValue(int)));
connect(task_, SIGNAL(StatusChanged(Task::Status)), this, SLOT(TaskStatusChange(Task::Status)));
connect(task_, SIGNAL(ProgressChanged(int)), progress_bar_, SLOT(setValue(int)));
connect(task_, SIGNAL(destroyed()), this, SLOT(deleteLater()));
}
void TaskViewItem::TaskStatusChange(Task::Status status)