diff --git a/src/gui/transferlistfilters/categoryfilterwidget.cpp b/src/gui/transferlistfilters/categoryfilterwidget.cpp index 215e124f7..230cfa4a7 100644 --- a/src/gui/transferlistfilters/categoryfilterwidget.cpp +++ b/src/gui/transferlistfilters/categoryfilterwidget.cpp @@ -81,7 +81,18 @@ CategoryFilterWidget::CategoryFilterWidget(QWidget *parent) connect(this, &QWidget::customContextMenuRequested, this, &CategoryFilterWidget::showMenu); connect(selectionModel(), &QItemSelectionModel::currentRowChanged , this, &CategoryFilterWidget::onCurrentRowChanged); - connect(model(), &QAbstractItemModel::modelReset, this, &CategoryFilterWidget::callUpdateGeometry); + connect(model(), &QAbstractItemModel::rowsRemoved, this, [this] + { + adjustIndentation(); + updateGeometry(); + }); + connect(model(), &QAbstractItemModel::modelReset, this, [this] + { + adjustIndentation(); + updateGeometry(); + }); + + adjustIndentation(); } QString CategoryFilterWidget::currentCategory() const @@ -156,10 +167,13 @@ QSize CategoryFilterWidget::minimumSizeHint() const return size; } -void CategoryFilterWidget::rowsInserted(const QModelIndex &parent, int start, int end) +void CategoryFilterWidget::rowsInserted(const QModelIndex &parent, const int start, const int end) { QTreeView::rowsInserted(parent, start, end); + if (parent.isValid()) + adjustIndentation(); + // Expand all parents if the parent(s) of the node are not expanded. QModelIndex p = parent; while (p.isValid()) @@ -172,6 +186,26 @@ void CategoryFilterWidget::rowsInserted(const QModelIndex &parent, int start, in updateGeometry(); } +bool CategoryFilterWidget::hasAnySubcategory() const +{ + const int rowCount = model()->rowCount(); + for (int row = 0; row < rowCount; ++row) + { + if (model()->hasChildren(model()->index(row, 0))) + return true; + } + + return false; +} + +void CategoryFilterWidget::adjustIndentation() +{ + if (hasAnySubcategory()) + resetIndentation(); + else + setIndentation(0); +} + void CategoryFilterWidget::addCategory() { TorrentCategoryDialog::createCategory(this); diff --git a/src/gui/transferlistfilters/categoryfilterwidget.h b/src/gui/transferlistfilters/categoryfilterwidget.h index 93ef02182..932f9c17d 100644 --- a/src/gui/transferlistfilters/categoryfilterwidget.h +++ b/src/gui/transferlistfilters/categoryfilterwidget.h @@ -60,4 +60,6 @@ private: QSize sizeHint() const override; QSize minimumSizeHint() const override; void rowsInserted(const QModelIndex &parent, int start, int end) override; + bool hasAnySubcategory() const; + void adjustIndentation(); };