diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index 7d14043a..244f1b29 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -79,6 +79,31 @@ 3 + + + + <html><head/><body><p>Toggle hide all empty map folders</p></body></html> + + + + + + + :/icons/folder_eye_closed.ico + :/icons/folder_eye_open.ico + + + + QToolButton::InstantPopup + + + true + + + true + + + @@ -214,6 +239,31 @@ 3 + + + + <html><head/><body><p>Toggle hide all empty mapsection folders</p></body></html> + + + + + + + :/icons/folder_eye_closed.ico + :/icons/folder_eye_open.ico + + + + QToolButton::InstantPopup + + + true + + + true + + + @@ -349,6 +399,31 @@ 3 + + + + <html><head/><body><p>Toggle hide all unused layouts</p></body></html> + + + + + + + :/icons/folder_eye_closed.ico + :/icons/folder_eye_open.ico + + + + QToolButton::InstantPopup + + + true + + + true + + + diff --git a/include/mainwindow.h b/include/mainwindow.h index 1e496139..4a5d5777 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -279,10 +279,13 @@ private slots: void on_horizontalSlider_CollisionTransparency_valueChanged(int value); + void on_toolButton_HideShow_Groups_clicked(); void on_toolButton_ExpandAll_Groups_clicked(); void on_toolButton_CollapseAll_Groups_clicked(); + void on_toolButton_HideShow_Areas_clicked(); void on_toolButton_ExpandAll_Areas_clicked(); void on_toolButton_CollapseAll_Areas_clicked(); + void on_toolButton_HideShow_Layouts_clicked(); void on_toolButton_ExpandAll_Layouts_clicked(); void on_toolButton_CollapseAll_Layouts_clicked(); diff --git a/include/ui/filterchildrenproxymodel.h b/include/ui/filterchildrenproxymodel.h index b73cbd62..5853d625 100644 --- a/include/ui/filterchildrenproxymodel.h +++ b/include/ui/filterchildrenproxymodel.h @@ -9,9 +9,11 @@ class FilterChildrenProxyModel : public QSortFilterProxyModel public: explicit FilterChildrenProxyModel(QObject *parent = nullptr); + void toggleHideEmpty() { this->hideEmpty = !this->hideEmpty; } protected: bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const; - +private: + bool hideEmpty = false; }; #endif // FILTERCHILDRENPROXYMODEL_H diff --git a/resources/icons/folder_eye_closed.ico b/resources/icons/folder_eye_closed.ico new file mode 100644 index 00000000..354abadb Binary files /dev/null and b/resources/icons/folder_eye_closed.ico differ diff --git a/resources/icons/folder_eye_open.ico b/resources/icons/folder_eye_open.ico new file mode 100644 index 00000000..15e7175f Binary files /dev/null and b/resources/icons/folder_eye_open.ico differ diff --git a/resources/images.qrc b/resources/images.qrc index cb50a4ba..8131040a 100644 --- a/resources/images.qrc +++ b/resources/images.qrc @@ -12,6 +12,8 @@ icons/fill_color.ico icons/folder_closed_map.ico icons/folder_closed.ico + icons/folder_eye_closed.ico + icons/folder_eye_open.ico icons/folder_map_edited.ico icons/folder_map_opened.ico icons/folder_map.ico diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 08b18d43..d9e23785 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2821,6 +2821,13 @@ void MainWindow::initTilesetEditor() { connect(this->tilesetEditor, &TilesetEditor::tilesetsSaved, this, &MainWindow::onTilesetsSaved); } +void MainWindow::on_toolButton_HideShow_Groups_clicked() { + if (ui->mapList) { + this->groupListProxyModel->toggleHideEmpty(); + this->groupListProxyModel->setFilterRegularExpression(this->ui->lineEdit_filterBox->text()); + } +} + void MainWindow::on_toolButton_ExpandAll_Groups_clicked() { if (ui->mapList) { ui->mapList->expandToDepth(0); @@ -2833,6 +2840,13 @@ void MainWindow::on_toolButton_CollapseAll_Groups_clicked() { } } +void MainWindow::on_toolButton_HideShow_Areas_clicked() { + if (ui->areaList) { + this->areaListProxyModel->toggleHideEmpty(); + this->areaListProxyModel->setFilterRegularExpression(this->ui->lineEdit_filterBox->text()); + } +} + void MainWindow::on_toolButton_ExpandAll_Areas_clicked() { if (ui->areaList) { ui->areaList->expandToDepth(0); @@ -2845,6 +2859,13 @@ void MainWindow::on_toolButton_CollapseAll_Areas_clicked() { } } +void MainWindow::on_toolButton_HideShow_Layouts_clicked() { + if (ui->layoutList) { + this->layoutListProxyModel->toggleHideEmpty(); + this->layoutListProxyModel->setFilterRegularExpression(this->ui->lineEdit_filterBox->text()); + } +} + void MainWindow::on_toolButton_ExpandAll_Layouts_clicked() { if (ui->layoutList) { ui->layoutList->expandToDepth(0); diff --git a/src/ui/filterchildrenproxymodel.cpp b/src/ui/filterchildrenproxymodel.cpp index a08c150c..99464ae6 100644 --- a/src/ui/filterchildrenproxymodel.cpp +++ b/src/ui/filterchildrenproxymodel.cpp @@ -8,6 +8,15 @@ FilterChildrenProxyModel::FilterChildrenProxyModel(QObject *parent) : bool FilterChildrenProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + if (this->hideEmpty && source_parent.row() < 0) // want to hide children + { + QModelIndex source_index = sourceModel()->index(source_row, this->filterKeyColumn(), source_parent) ; + if(source_index.isValid()) + { + if (!sourceModel()->hasChildren(source_index)) + return false; + } + } // custom behaviour : if(filterRegularExpression().pattern().isEmpty() == false) {