From 3ce0bc7dee8c44db20431185880753ef14f4ce2b Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Sun, 25 Feb 2018 23:49:42 +0100 Subject: [PATCH] MetaTaskListModel: don't remove top-level items --- .../motion_planning_tasks/src/meta_task_list_model.cpp | 7 +++++++ .../motion_planning_tasks/src/meta_task_list_model.h | 3 ++- visualization/motion_planning_tasks/src/task_panel.cpp | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/visualization/motion_planning_tasks/src/meta_task_list_model.cpp b/visualization/motion_planning_tasks/src/meta_task_list_model.cpp index 12d6d460..582f6bcf 100644 --- a/visualization/motion_planning_tasks/src/meta_task_list_model.cpp +++ b/visualization/motion_planning_tasks/src/meta_task_list_model.cpp @@ -95,6 +95,13 @@ bool MetaTaskListModel::setData(const QModelIndex &index, const QVariant &value, return result; } +bool MetaTaskListModel::removeRows(int row, int count, const QModelIndex &parent) +{ + if (!parent.isValid()) // forbid removal of top-level items (displays) + return false; + TreeMergeProxyModel::removeRows(row, count, parent); +} + std::pair MetaTaskListModel::getTaskListModel(const QModelIndex &index) const { diff --git a/visualization/motion_planning_tasks/src/meta_task_list_model.h b/visualization/motion_planning_tasks/src/meta_task_list_model.h index 91188289..4ee96143 100644 --- a/visualization/motion_planning_tasks/src/meta_task_list_model.h +++ b/visualization/motion_planning_tasks/src/meta_task_list_model.h @@ -69,7 +69,7 @@ class MetaTaskListModel : public utils::TreeMergeProxyModel { // hide this, as we want to offer another API using utils::TreeMergeProxyModel::insertModel; - private Q_SLOTS: +private Q_SLOTS: void onRowsRemoved(const QModelIndex &parent, int first, int last); void onDisplayNameChanged(const QString &name); @@ -80,6 +80,7 @@ public: bool insertModel(TaskListModel* model, TaskDisplay* display); bool setData(const QModelIndex &index, const QVariant &value, int role) override; + bool removeRows(int row, int count, const QModelIndex &parent) override; /// retrieve TaskListModel and TaskDisplay corresponding to given index std::pair getTaskListModel(const QModelIndex &index) const; diff --git a/visualization/motion_planning_tasks/src/task_panel.cpp b/visualization/motion_planning_tasks/src/task_panel.cpp index 2a008bda..6fba1a6a 100644 --- a/visualization/motion_planning_tasks/src/task_panel.cpp +++ b/visualization/motion_planning_tasks/src/task_panel.cpp @@ -245,8 +245,8 @@ void TaskView::onCurrentStageChanged(const QModelIndex ¤t, const QModelInd // adding task is allowed on top-level items and sub-top-level items d_ptr->actionAddLocalTask->setEnabled(current.isValid() && (!current.parent().isValid() || !current.parent().parent().isValid())); - // removing stuff is allowed if there is any selection / any curren item - d_ptr->actionRemoveTaskTreeRows->setEnabled(current.isValid()); + // removing stuff is allowed any valid selection except top-level items + d_ptr->actionRemoveTaskTreeRows->setEnabled(current.isValid() && current.parent().isValid()); BaseTaskModel *task; QModelIndex task_index;