From e84767c22b209d8d70075aa5a2413f6a698ec104 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 4 May 2026 07:14:52 +1000 Subject: [PATCH] ifcviewer-full: multi-select directories in Add Database dialog Co-Authored-By: Claude Opus 4.7 --- src/ifcviewer-full/MainWindow.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/ifcviewer-full/MainWindow.cpp b/src/ifcviewer-full/MainWindow.cpp index 616ca0bb68..84f13ea908 100644 --- a/src/ifcviewer-full/MainWindow.cpp +++ b/src/ifcviewer-full/MainWindow.cpp @@ -36,6 +36,9 @@ #include #include #include +#include +#include +#include #include MainWindow::MainWindow(QWidget* parent) @@ -228,11 +231,23 @@ void MainWindow::onFileOpen() { } void MainWindow::onDatabaseOpen() { - QString path = QFileDialog::getExistingDirectory( - this, "Add IFC Database", QString(), - QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); - if (!path.isEmpty()) { - addFiles({ path }); + QFileDialog dialog(this, "Add IFC Databases"); + dialog.setFileMode(QFileDialog::Directory); + dialog.setOption(QFileDialog::ShowDirsOnly, true); + dialog.setOption(QFileDialog::DontResolveSymlinks, true); + // Native dialogs only support single-directory selection — use Qt's + // dialog so we can flip the inner views into ExtendedSelection. + dialog.setOption(QFileDialog::DontUseNativeDialog, true); + if (auto* list = dialog.findChild("listView")) { + list->setSelectionMode(QAbstractItemView::ExtendedSelection); + } + if (auto* tree = dialog.findChild()) { + tree->setSelectionMode(QAbstractItemView::ExtendedSelection); + } + if (dialog.exec() != QDialog::Accepted) return; + QStringList paths = dialog.selectedFiles(); + if (!paths.isEmpty()) { + addFiles(paths); } }