From 5ea2efdeb57ad5a9d776232fddc85c9e77aa8d07 Mon Sep 17 00:00:00 2001 From: crueter Date: Mon, 8 Dec 2025 22:36:33 -0500 Subject: [PATCH] improved Quick/Widgets abstractor; Quick progress dialogs Signed-off-by: crueter --- src/Eden/Native/CMakeLists.txt | 2 + src/Eden/Native/EdenApplication.cpp | 8 +- src/Eden/Native/LibQtCommon.cpp | 73 ++++++++++++- src/Eden/Native/LibQtCommon.h | 33 ++++++ src/qt_common/CMakeLists.txt | 5 +- src/qt_common/abstract/qt_progress_dialog.cpp | 17 ++- src/qt_common/abstract/qt_progress_dialog.h | 51 ++++----- src/qt_common/externals/cpmfile.json | 4 +- src/qt_common/qt_common.cpp | 17 ++- src/qt_common/qt_common.h | 1 + src/qt_common/util/content.cpp | 100 +++++++----------- src/yuzu/CMakeLists.txt | 1 + src/yuzu/libqt_common.cpp | 77 ++++++++++++++ src/yuzu/libqt_common.h | 33 ++++++ src/yuzu/main_window.cpp | 5 + 15 files changed, 324 insertions(+), 103 deletions(-) create mode 100644 src/Eden/Native/LibQtCommon.h create mode 100644 src/yuzu/libqt_common.h diff --git a/src/Eden/Native/CMakeLists.txt b/src/Eden/Native/CMakeLists.txt index 37e4066560..04df283a0e 100644 --- a/src/Eden/Native/CMakeLists.txt +++ b/src/Eden/Native/CMakeLists.txt @@ -8,7 +8,9 @@ qt_add_executable(eden main.cpp icons.qrc EdenApplication.h EdenApplication.cpp + LibQtCommon.cpp + LibQtCommon.h ) set(MODULES diff --git a/src/Eden/Native/EdenApplication.cpp b/src/Eden/Native/EdenApplication.cpp index bd5f7a1379..cbabd01d63 100644 --- a/src/Eden/Native/EdenApplication.cpp +++ b/src/Eden/Native/EdenApplication.cpp @@ -15,6 +15,7 @@ #include "common/settings_enums.h" #include "qt_common/config/uisettings.h" #include "qt_common/qt_common.h" +#include "qt_common/util/content.h" #include #include @@ -32,13 +33,18 @@ EdenApplication::EdenApplication(int &argc, char *argv[]) /// QtCommon QtCommon::Init(new QWidget); + QtCommon::SetupContentProviders(); + + // Check for orphaned profiles and reset profile data if necessary + QtCommon::Content::FixProfiles(); + /// Settings, etc Settings::SetConfiguringGlobal(true); config = new QMLConfig; // TODO: Save all values on launch and per game etc connect(this, &QCoreApplication::aboutToQuit, this, [this]() { config->save(); }); - } +} void EdenApplication::reload() { diff --git a/src/Eden/Native/LibQtCommon.cpp b/src/Eden/Native/LibQtCommon.cpp index 8b629bc941..62f609cbf5 100644 --- a/src/Eden/Native/LibQtCommon.cpp +++ b/src/Eden/Native/LibQtCommon.cpp @@ -1,10 +1,13 @@ // SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later -#include "CarboxylQuickInterface.h" -#include "CarboxylApplication.h" +#include +#include + #include "qt_common/abstract/frontend.h" +#include "LibQtCommon.h" + namespace QtCommon::Frontend { StandardButton ShowMessage(Icon icon, const QString& title, const QString& text, @@ -37,4 +40,70 @@ const QString GetExistingDirectory(const QString& caption, const QString& dir, O return QString(); } +QuickProgressDialog::QuickProgressDialog(const QString& labelText, + const QString& cancelButtonText, int minimum, + int maximum, QObject* parent, Qt::WindowFlags f) + : QtProgressDialog(labelText, cancelButtonText, minimum, maximum, parent, f), + m_dialog(new CarboxylProgressDialog(labelText, cancelButtonText, minimum, maximum, parent)) {} + +bool QuickProgressDialog::wasCanceled() const { + return m_dialog->wasCanceled(); +} + +void QuickProgressDialog::setWindowModality(Qt::WindowModality modality) {} + +void QuickProgressDialog::setMinimumDuration(int durationMs) { + m_dialog->setMinimumDuration(durationMs); +} + +void QuickProgressDialog::setAutoClose(bool autoClose) { + m_dialog->setAutoClose(autoClose); +} + +void QuickProgressDialog::setAutoReset(bool autoReset) { + m_dialog->setAutoReset(autoReset); +} + +void QuickProgressDialog::setTitle(QString title) { + m_dialog->setTitle(title); +} + +void QuickProgressDialog::setLabelText(QString text) { + m_dialog->setLabelText(text); +} + +void QuickProgressDialog::setMinimum(int min) { + m_dialog->setMinimum(min); +} + +void QuickProgressDialog::setMaximum(int max) { + m_dialog->setMaximum(max); +} + +void QuickProgressDialog::setValue(int value) { + m_dialog->setValue(value); +} + +bool QuickProgressDialog::close() { + m_dialog->close(); + return true; +} + +void QuickProgressDialog::show() { + m_dialog->show(); +} + +std::unique_ptr newProgressDialog(const QString& labelText, + const QString& cancelButtonText, int minimum, + int maximum, Qt::WindowFlags f) { + return std::make_unique(labelText, cancelButtonText, minimum, maximum, rootObject); +} + +QtProgressDialog* newProgressDialogPtr(const QString& labelText, const QString& cancelButtonText, + int minimum, int maximum, + Qt::WindowFlags f) { + return new QuickProgressDialog(labelText, cancelButtonText, minimum, maximum, rootObject); +} + + } // namespace QtCommon::Frontend diff --git a/src/Eden/Native/LibQtCommon.h b/src/Eden/Native/LibQtCommon.h new file mode 100644 index 0000000000..321e624f32 --- /dev/null +++ b/src/Eden/Native/LibQtCommon.h @@ -0,0 +1,33 @@ +#pragma once + +#include "qt_common/abstract/qt_progress_dialog.h" + +#include + +namespace QtCommon::Frontend { +class QuickProgressDialog : public QtProgressDialog { + Q_OBJECT +public: + QuickProgressDialog(const QString& labelText, const QString& cancelButtonText, int minimum, + int maximum, QObject* parent = nullptr, Qt::WindowFlags f = {}); + + bool wasCanceled() const override; + void setWindowModality(Qt::WindowModality modality) override; + void setMinimumDuration(int durationMs) override; + void setAutoClose(bool autoClose) override; + void setAutoReset(bool autoReset) override; + +public slots: + void setTitle(QString title) override; + void setLabelText(QString text) override; + void setMinimum(int min) override; + void setMaximum(int max) override; + void setValue(int value) override; + bool close() override; + void show() override; + +private: + CarboxylProgressDialog* m_dialog; +}; + +} diff --git a/src/qt_common/CMakeLists.txt b/src/qt_common/CMakeLists.txt index 74118657a9..4c7b86fc0b 100644 --- a/src/qt_common/CMakeLists.txt +++ b/src/qt_common/CMakeLists.txt @@ -1,6 +1,8 @@ # SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project # SPDX-License-Identifier: GPL-3.0-or-later +set(CMAKE_AUTOMOC ON) + add_library(qt_common STATIC qt_common.h qt_common.cpp @@ -24,7 +26,8 @@ add_library(qt_common STATIC util/compress.h util/compress.cpp abstract/frontend.h - abstract/qt_progress_dialog.h abstract/qt_progress_dialog.cpp + abstract/qt_progress_dialog.h + abstract/qt_progress_dialog.cpp qt_string_lookup.h qt_compat.h diff --git a/src/qt_common/abstract/qt_progress_dialog.cpp b/src/qt_common/abstract/qt_progress_dialog.cpp index b4bf74c8bd..d28bbb55ae 100644 --- a/src/qt_common/abstract/qt_progress_dialog.cpp +++ b/src/qt_common/abstract/qt_progress_dialog.cpp @@ -1,4 +1,15 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project -// SPDX-License-Identifier: GPL-3.0-or-later - #include "qt_progress_dialog.h" + +namespace QtCommon::Frontend { + +QtProgressDialog::QtProgressDialog(const QString&, + const QString&, + int, + int, + QObject* parent, + Qt::WindowFlags) + : QObject(parent) +{} + +QtProgressDialog::~QtProgressDialog() {} +} diff --git a/src/qt_common/abstract/qt_progress_dialog.h b/src/qt_common/abstract/qt_progress_dialog.h index 17f6817ffa..9d6a239067 100644 --- a/src/qt_common/abstract/qt_progress_dialog.h +++ b/src/qt_common/abstract/qt_progress_dialog.h @@ -4,21 +4,13 @@ #ifndef QT_PROGRESS_DIALOG_H #define QT_PROGRESS_DIALOG_H -#include - -#ifdef YUZU_QT_WIDGETS -#include -#endif +#include +#include namespace QtCommon::Frontend { -#ifdef YUZU_QT_WIDGETS - -using QtProgressDialog = QProgressDialog; - -// TODO(crueter): QML impl -#else -class QtProgressDialog +class QtProgressDialog : public QObject { + Q_OBJECT public: QtProgressDialog(const QString &labelText, const QString &cancelButtonText, @@ -27,21 +19,32 @@ public: QObject *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); - bool wasCanceled() const; - void setWindowModality(Qt::WindowModality modality); - void setMinimumDuration(int durationMs); - void setAutoClose(bool autoClose); - void setAutoReset(bool autoReset); + virtual ~QtProgressDialog() override; -public slots: - void setLabelText(QString &text); - void setRange(int min, int max); - void setValue(int progress); - bool close(); + virtual bool wasCanceled() const = 0; + virtual void setWindowModality(Qt::WindowModality modality) = 0; + virtual void setMinimumDuration(int durationMs) = 0; + virtual void setAutoClose(bool autoClose) = 0; + virtual void setAutoReset(bool autoReset) = 0; - void show(); +public slots: + virtual void setTitle(QString title) = 0; + virtual void setLabelText(QString text) = 0; + virtual void setMinimum(int min) = 0; + virtual void setMaximum(int max) = 0; + virtual void setValue(int value) = 0; + + virtual bool close() = 0; + virtual void show() = 0; }; -#endif // YUZU_QT_WIDGETS +std::unique_ptr newProgressDialog(const QString& labelText, + const QString& cancelButtonText, int minimum, + int maximum, + Qt::WindowFlags f = Qt::WindowFlags()); + +QtProgressDialog* newProgressDialogPtr(const QString& labelText, const QString& cancelButtonText, + int minimum, int maximum, + Qt::WindowFlags f = Qt::WindowFlags()); } #endif // QT_PROGRESS_DIALOG_H diff --git a/src/qt_common/externals/cpmfile.json b/src/qt_common/externals/cpmfile.json index f65e136030..820ec3fb46 100644 --- a/src/qt_common/externals/cpmfile.json +++ b/src/qt_common/externals/cpmfile.json @@ -19,8 +19,8 @@ "package": "Carboxyl", "repo": "crueter/Carboxyl", "git_host": "git.crueter.xyz", - "sha": "ea2f2fa4bc", - "hash": "4b2102379c1e5de68263cd68b705c2524fd220c6707964cb586f4b6c3e221083348c022128f6c61682d7e12c8cfd67a3723ccb7023d28b7560ce3542d6b75545", + "sha": "ad4a5743dc", + "hash": "68f1da395c3628f8e82a8f160f5cd0e1d6503606f68d9fc51e0d8fde91514b178afb722fb498394b3ab17a2725f39af6cc48b5bd076d546bb9cfb6718f47345a", "bundled": "true", "options": [ "CARBOXYL_DEMO OFF" diff --git a/src/qt_common/qt_common.cpp b/src/qt_common/qt_common.cpp index 2a52b6fd8a..3172e31174 100644 --- a/src/qt_common/qt_common.cpp +++ b/src/qt_common/qt_common.cpp @@ -255,17 +255,8 @@ void Init(QObject* root) QtCommon::system->CoreTiming().SetTimerResolutionNs(Common::Windows::GetCurrentTimerResolution()); #endif - // content providers - system->SetContentProvider(std::make_unique()); - system->RegisterContentProvider(FileSys::ContentProviderUnionSlot::FrontendManual, - provider.get()); - system->GetFileSystemController().CreateFactories(*vfs); - // Remove cached contents generated during the previous session RemoveCachedContents(); - - // Check for orphaned profiles and reset profile data if necessary - QtCommon::Content::FixProfiles(); } std::filesystem::path GetEdenCommand() @@ -289,4 +280,12 @@ std::filesystem::path GetEdenCommand() return command; } +void SetupContentProviders() { + system->SetContentProvider(std::make_unique()); + system->RegisterContentProvider(FileSys::ContentProviderUnionSlot::FrontendManual, + provider.get()); + system->GetFileSystemController().CreateFactories(*vfs); + +} + } // namespace QtCommon diff --git a/src/qt_common/qt_common.h b/src/qt_common/qt_common.h index 781c6095af..6d3f7a6ca2 100644 --- a/src/qt_common/qt_common.h +++ b/src/qt_common/qt_common.h @@ -28,6 +28,7 @@ Core::Frontend::WindowSystemType GetWindowSystemType(); Core::Frontend::EmuWindow::WindowSystemInfo GetWindowSystemInfo(QWindow *window); void Init(QObject *root); +void SetupContentProviders(); const QString tr(const char *str); const QString tr(const std::string &str); diff --git a/src/qt_common/util/content.cpp b/src/qt_common/util/content.cpp index 081052b6ed..25952d3f7a 100644 --- a/src/qt_common/util/content.cpp +++ b/src/qt_common/util/content.cpp @@ -41,23 +41,19 @@ bool CheckGameFirmware(u64 program_id, QObject* parent) void InstallFirmware(const QString& location, bool recursive) { - QtCommon::Frontend::QtProgressDialog progress(tr("Installing Firmware..."), - tr("Cancel"), - 0, - 100, - (QWidget *)rootObject); - progress.setWindowModality(Qt::WindowModal); - progress.setMinimumDuration(100); - progress.setAutoClose(false); - progress.setAutoReset(false); - progress.show(); + // Initialize a progress dialog. + auto progress = QtCommon::Frontend::newProgressDialog(tr("Installing Firmware..."), + tr("Cancel"), 0, 100); + progress->show(); // Declare progress callback. auto callback = [&](size_t total_size, size_t processed_size) { - progress.setValue(static_cast((processed_size * 100) / total_size)); - return progress.wasCanceled(); + progress->setValue(static_cast((processed_size * 100) / total_size)); + return progress->wasCanceled(); }; + callback(100, 0); + QString failedTitle = tr("Firmware Install Failed"); QString successTitle = tr("Firmware Install Succeeded"); QtCommon::Frontend::Icon icon; @@ -160,8 +156,8 @@ void InstallFirmware(const QString& location, bool recursive) system->GetFileSystemController().CreateFactories(*vfs); auto VerifyFirmwareCallback = [&](size_t total_size, size_t processed_size) { - progress.setValue(90 + static_cast((processed_size * 10) / total_size)); - return progress.wasCanceled(); + progress->setValue(90 + static_cast((processed_size * 10) / total_size)); + return progress->wasCanceled(); }; auto results = ContentManager::VerifyInstalledContents(*QtCommon::system, @@ -172,14 +168,14 @@ void InstallFirmware(const QString& location, bool recursive) if (results.size() > 0) { const auto failed_names = QString::fromStdString( fmt::format("{}", fmt::join(results, "\n"))); - progress.close(); + progress->close(); QtCommon::Frontend::Critical( tr("Firmware integrity verification failed!"), tr("Verification failed for the following files:\n\n%1").arg(failed_names)); return; } - progress.close(); + progress->close(); const auto pair = FirmwareManager::GetFirmwareVersion(*system); const auto firmware_data = pair.first; @@ -219,19 +215,13 @@ QString UnzipFirmwareToTmp(const QString& location) // Content // void VerifyGameContents(const std::string& game_path) { - QtCommon::Frontend::QtProgressDialog progress(tr("Verifying integrity..."), - tr("Cancel"), - 0, - 100, - (QWidget *)rootObject); - progress.setWindowModality(Qt::WindowModal); - progress.setMinimumDuration(100); - progress.setAutoClose(false); - progress.setAutoReset(false); + auto progress = + QtCommon::Frontend::newProgressDialog(tr("Verifying integrity..."), tr("Cancel"), 0, 100); + progress->show(); const auto callback = [&](size_t total_size, size_t processed_size) { - progress.setValue(static_cast((processed_size * 100) / total_size)); - return progress.wasCanceled(); + progress->setValue(static_cast((processed_size * 100) / total_size)); + return progress->wasCanceled(); }; const auto result = ContentManager::VerifyGameContents(*system, game_path, callback); @@ -288,27 +278,21 @@ void InstallKeys() void VerifyInstalledContents() { // Initialize a progress dialog. - QtCommon::Frontend::QtProgressDialog progress(tr("Verifying integrity..."), - tr("Cancel"), - 0, - 100, - (QWidget *)rootObject); - progress.setWindowModality(Qt::WindowModal); - progress.setMinimumDuration(100); - progress.setAutoClose(false); - progress.setAutoReset(false); + auto progress = QtCommon::Frontend::newProgressDialog(tr("Verifying integrity..."), + tr("Cancel"), 0, 100); + progress->show(); // Declare progress callback. auto QtProgressCallback = [&](size_t total_size, size_t processed_size) { - progress.setValue(static_cast((processed_size * 100) / total_size)); - return progress.wasCanceled(); + progress->setValue(static_cast((processed_size * 100) / total_size)); + return progress->wasCanceled(); }; const std::vector result = ContentManager::VerifyInstalledContents(*QtCommon::system, *QtCommon::provider, QtProgressCallback); - progress.close(); + progress->close(); if (result.empty()) { QtCommon::Frontend::Information(tr("Integrity verification succeeded!"), @@ -373,28 +357,29 @@ void FixProfiles() void ClearDataDir(FrontendCommon::DataManager::DataDir dir, const std::string& user_id) { - auto result = QtCommon::Frontend::Warning(tr("Really clear data?"), + using namespace QtCommon::Frontend; + auto result = Warning(tr("Really clear data?"), tr("Important data may be lost!"), - QtCommon::Frontend::Yes | QtCommon::Frontend::No); + Yes | No); - if (result != QtCommon::Frontend::Yes) + if (result != Yes) return; - result = QtCommon::Frontend::Warning( + result = Warning( tr("Are you REALLY sure?"), tr("Once deleted, your data will NOT come back!\n" "Only do this if you're 100% sure you want to delete this data."), - QtCommon::Frontend::Yes | QtCommon::Frontend::No); + Yes | No); - if (result != QtCommon::Frontend::Yes) + if (result != Yes) return; - QtCommon::Frontend::QtProgressDialog dialog(tr("Clearing..."), QString(), 0, 0); - dialog.show(); + auto dialog = newProgressDialog(tr("Clearing..."), QString(), 0, 0); + dialog->show(); FrontendCommon::DataManager::ClearDir(dir, user_id); - dialog.close(); + dialog->close(); } void ExportDataDir(FrontendCommon::DataManager::DataDir data_dir, @@ -412,14 +397,11 @@ void ExportDataDir(FrontendCommon::DataManager::DataDir data_dir, if (zip_dump_location.isEmpty()) return; - QtProgressDialog* progress = new QtProgressDialog( - tr("Exporting data. This may take a while..."), tr("Cancel"), 0, 100, (QWidget*)rootObject); + auto progress = QtCommon::Frontend::newProgressDialogPtr( + tr("Exporting data. This may take a while..."), tr("Cancel"), 0, 100); - progress->setWindowTitle(tr("Exporting")); + progress->setTitle(tr("Exporting")); progress->setWindowModality(Qt::WindowModal); - progress->setMinimumDuration(100); - progress->setAutoClose(false); - progress->setAutoReset(false); progress->show(); QGuiApplication::processEvents(); @@ -487,16 +469,12 @@ void ImportDataDir(FrontendCommon::DataManager::DataDir data_dir, if (button != QtCommon::Frontend::Yes) return; - QtProgressDialog* progress = new QtProgressDialog( - tr("Importing data. This may take a while..."), tr("Cancel"), 0, 100, (QWidget *)rootObject); + QtProgressDialog* progress = newProgressDialogPtr( + tr("Importing data. This may take a while..."), tr("Cancel"), 0, 100); - progress->setWindowTitle(tr("Importing")); + progress->setTitle(tr("Importing")); progress->setWindowModality(Qt::WindowModal); - progress->setMinimumDuration(100); - progress->setAutoClose(false); - progress->setAutoReset(false); progress->show(); - progress->setValue(0); QGuiApplication::processEvents(); diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index b7c6520dac..3a4df096be 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -234,6 +234,7 @@ add_executable(yuzu ryujinx_dialog.h ryujinx_dialog.cpp ryujinx_dialog.ui main_window.h main_window.cpp libqt_common.cpp + libqt_common.h ) set_target_properties(yuzu PROPERTIES OUTPUT_NAME "eden") diff --git a/src/yuzu/libqt_common.cpp b/src/yuzu/libqt_common.cpp index 5eaad8ad92..825084d915 100644 --- a/src/yuzu/libqt_common.cpp +++ b/src/yuzu/libqt_common.cpp @@ -3,8 +3,12 @@ #include #include +#include +#include +#include "libqt_common.h" #include "qt_common/abstract/frontend.h" +#include "qt_common/abstract/qt_progress_dialog.h" #include "qt_common/qt_common.h" namespace QtCommon::Frontend { @@ -39,4 +43,77 @@ const QString GetExistingDirectory(const QString& caption, const QString& dir, return QFileDialog::getExistingDirectory((QWidget *) rootObject, caption, dir, QFileDialog::Options(int(options))); } +WidgetsProgressDialog::WidgetsProgressDialog(const QString& labelText, + const QString& cancelButtonText, int minimum, + int maximum, QWidget* parent, Qt::WindowFlags f) + : QtProgressDialog(labelText, cancelButtonText, minimum, maximum, parent, f), + m_dialog(new QProgressDialog(labelText, cancelButtonText, minimum, maximum, parent, f)) { + m_dialog->setAutoClose(false); + m_dialog->setAutoReset(false); + m_dialog->setMinimumDuration(100); + m_dialog->setWindowModality(Qt::WindowModal); +} + +bool WidgetsProgressDialog::wasCanceled() const { + return m_dialog->wasCanceled(); +} + +void WidgetsProgressDialog::setWindowModality(Qt::WindowModality modality) { + m_dialog->setWindowModality(modality); +} + +void WidgetsProgressDialog::setMinimumDuration(int durationMs) { + m_dialog->setMinimumDuration(durationMs); +} + +void WidgetsProgressDialog::setAutoClose(bool autoClose) { + m_dialog->setAutoClose(autoClose); +} + +void WidgetsProgressDialog::setAutoReset(bool autoReset) { + m_dialog->setAutoReset(autoReset); +} + +void WidgetsProgressDialog::setTitle(QString title) { + m_dialog->setWindowTitle(title); +} + +void WidgetsProgressDialog::setLabelText(QString text) { + m_dialog->setLabelText(text); +} + +void WidgetsProgressDialog::setMinimum(int min) { + m_dialog->setMinimum(min); +} + +void WidgetsProgressDialog::setMaximum(int max) { + m_dialog->setMaximum(max); +} + +void WidgetsProgressDialog::setValue(int value) { + m_dialog->setValue(value); +} + +bool WidgetsProgressDialog::close() { + m_dialog->close(); + return true; +} + +void WidgetsProgressDialog::show() { + m_dialog->show(); +} + +std::unique_ptr newProgressDialog(const QString& labelText, const QString& cancelButtonText, + int minimum, int maximum, Qt::WindowFlags f) { + return std::make_unique(labelText, cancelButtonText, minimum, maximum, + (QWidget*)rootObject, f); +} + +QtProgressDialog* newProgressDialogPtr(const QString& labelText, const QString& cancelButtonText, + int minimum, int maximum, + Qt::WindowFlags f) { + return new WidgetsProgressDialog(labelText, cancelButtonText, minimum, maximum, + (QWidget*)rootObject, f); +} + } // namespace QtCommon::Frontend diff --git a/src/yuzu/libqt_common.h b/src/yuzu/libqt_common.h new file mode 100644 index 0000000000..5151ef5030 --- /dev/null +++ b/src/yuzu/libqt_common.h @@ -0,0 +1,33 @@ +#pragma once + +#include "qt_common/abstract/qt_progress_dialog.h" + +#include + +namespace QtCommon::Frontend { +class WidgetsProgressDialog : public QtProgressDialog { + Q_OBJECT +public: + WidgetsProgressDialog(const QString& labelText, const QString& cancelButtonText, int minimum, + int maximum, QWidget* parent = nullptr, Qt::WindowFlags f = {}); + + bool wasCanceled() const override; + void setWindowModality(Qt::WindowModality modality) override; + void setMinimumDuration(int durationMs) override; + void setAutoClose(bool autoClose) override; + void setAutoReset(bool autoReset) override; + +public slots: + void setTitle(QString title) override; + void setLabelText(QString text) override; + void setMinimum(int min) override; + void setMaximum(int max) override; + void setValue(int value) override; + bool close() override; + void show() override; + +private: + QProgressDialog* m_dialog; +}; + +} diff --git a/src/yuzu/main_window.cpp b/src/yuzu/main_window.cpp index 1ebeb46daf..01cf1ff854 100644 --- a/src/yuzu/main_window.cpp +++ b/src/yuzu/main_window.cpp @@ -413,6 +413,8 @@ MainWindow::MainWindow(bool has_broken_vulkan) } #endif + QtCommon::SetupContentProviders(); + // Gen keys if necessary OnCheckFirmwareDecryption(); @@ -420,6 +422,9 @@ MainWindow::MainWindow(bool has_broken_vulkan) OnCheckGraphicsBackend(); #endif + // Check for orphaned profiles and reset profile data if necessary + QtCommon::Content::FixProfiles(); + game_list->LoadCompatibilityList(); game_list->PopulateAsync(UISettings::values.game_dirs);