From 0081a816f4481fcd53e5f8e03028bd5ebff386ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Kera=CC=88nen?= Date: Thu, 9 Aug 2018 20:31:21 +0300 Subject: [PATCH] UI|Client|libappfw: Use native file dialog for picking folders --- .../src/ui/home/nogamescolumnwidget.cpp | 25 +++++++------------ doomsday/libs/appfw/src/baseguiapp.cpp | 8 +++--- .../src/widgets/directoryarraywidget.cpp | 23 ++++++++--------- 3 files changed, 22 insertions(+), 34 deletions(-) diff --git a/doomsday/apps/client/src/ui/home/nogamescolumnwidget.cpp b/doomsday/apps/client/src/ui/home/nogamescolumnwidget.cpp index 22cd70d462..82b92ce583 100644 --- a/doomsday/apps/client/src/ui/home/nogamescolumnwidget.cpp +++ b/doomsday/apps/client/src/ui/home/nogamescolumnwidget.cpp @@ -23,9 +23,7 @@ #include #include -//#include -#include -//#include +#include using namespace de; @@ -64,27 +62,24 @@ void NoGamesColumnWidget::browseForDataFiles() { bool reload = false; - DE_ASSERT_FAIL("Need a file picker"); -#if 0 -#if !defined (DE_MOBILE) // Use a native dialog to select the IWAD folder. ClientApp::app().beginNativeUIMode(); + auto &cfg = Config::get(); - const auto folders = Config::get().getStringList("resource.packageFolder"); + FileDialog dlg; String lastDir; if (!folders.isEmpty()) { lastDir = folders.back(); } - QFileDialog dlg(nullptr, "Select IWAD Folder", lastDir); - dlg.setFileMode(QFileDialog::Directory); - dlg.setReadOnly(true); - //dlg.setNameFilter("*.wad"); - dlg.setLabelText(QFileDialog::Accept, tr("Select")); + dlg.setTitle("Select IWAD Folder"); + dlg.setInitialLocation(cfg.gets("resource.iwadFolder", "")); + dlg.setBehavior(FileDialog::AcceptDirectories, ReplaceFlags); + dlg.setPrompt("Select"); if (dlg.exec()) { - Variable & var = Config::get("resource.packageFolder"); - const TextValue selDir{dlg.selectedFiles().at(0)}; + Variable &var = Config::get("resource.packageFolder"); + const TextValue selDir{dlg.selectedPath().toString()}; if (is(var.value())) { auto &array = var.value(); @@ -103,8 +98,6 @@ void NoGamesColumnWidget::browseForDataFiles() } ClientApp::app().endNativeUIMode(); -#endif -#endif // Reload packages and recheck for game availability. if (reload) diff --git a/doomsday/libs/appfw/src/baseguiapp.cpp b/doomsday/libs/appfw/src/baseguiapp.cpp index a5b8d363a9..69084e02a7 100644 --- a/doomsday/libs/appfw/src/baseguiapp.cpp +++ b/doomsday/libs/appfw/src/baseguiapp.cpp @@ -189,7 +189,6 @@ VRConfig &BaseGuiApp::vr() void BaseGuiApp::beginNativeUIMode() { -#if !defined (DE_MOBILE) // Switch temporarily to windowed mode. Not needed on macOS because the display mode // is never changed on that platform. #if !defined (MACOSX) @@ -203,18 +202,17 @@ void BaseGuiApp::beginNativeUIMode() win.changeAttributes(windowedMode); } #endif -#endif } void BaseGuiApp::endNativeUIMode() { -#if !defined (DE_MOBILE) + auto &win = static_cast(GLWindow::main()); # if !defined (MACOSX) { - static_cast(GLWindow::main()).restoreState(); + win.restoreState(); } # endif -#endif + win.raise(); } } // namespace de diff --git a/doomsday/libs/appfw/src/widgets/directoryarraywidget.cpp b/doomsday/libs/appfw/src/widgets/directoryarraywidget.cpp index 710effee39..fc2274027e 100644 --- a/doomsday/libs/appfw/src/widgets/directoryarraywidget.cpp +++ b/doomsday/libs/appfw/src/widgets/directoryarraywidget.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include namespace de { @@ -40,26 +41,22 @@ DirectoryArrayWidget::DirectoryArrayWidget(Variable &variable, String const &nam addButton().setText("Add Folder..."); addButton().setActionFn([this] () { - // Use a native dialog to select the IWAD folder. DE_BASE_GUI_APP->beginNativeUIMode(); - DE_ASSERT_FAIL("Need a file picker"); - -#if 0 - QFileDialog dlg(nullptr, tr("Select Folder"), - Config::get().gets(CFG_LAST_FOLDER, "."), ""); - dlg.setFileMode(QFileDialog::Directory); - dlg.setReadOnly(true); - //dlg.setNameFilter("*.wad"); - dlg.setLabelText(QFileDialog::Accept, tr("Select")); + auto &cfg = Config::get(); + FileDialog dlg; + dlg.setTitle("Select Folder"); + dlg.setInitialLocation(cfg.gets(CFG_LAST_FOLDER, NativePath::homePath())); + dlg.setPrompt("Select"); + dlg.setBehavior(FileDialog::AcceptDirectories, ReplaceFlags); + dlg.setFileTypes({"wad"}); if (dlg.exec()) { - String dir = dlg.selectedFiles().at(0); - Config::get().set(CFG_LAST_FOLDER, dir.fileNamePath()); + NativePath dir = dlg.selectedPath(); + cfg.set(CFG_LAST_FOLDER, dir.endOmitted().toString()); elementsMenu().items() << makeItem(TextValue(dir)); setVariableFromWidget(); } -#endif DE_BASE_GUI_APP->endNativeUIMode(); });