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)
{