Browse Source

improved Quick/Widgets abstractor; Quick progress dialogs

Signed-off-by: crueter <crueter@eden-emu.dev>
pull/3016/head
crueter 2 weeks ago
parent
commit
5ea2efdeb5
No known key found for this signature in database GPG Key ID: 425ACD2D4830EBC6
  1. 2
      src/Eden/Native/CMakeLists.txt
  2. 8
      src/Eden/Native/EdenApplication.cpp
  3. 73
      src/Eden/Native/LibQtCommon.cpp
  4. 33
      src/Eden/Native/LibQtCommon.h
  5. 5
      src/qt_common/CMakeLists.txt
  6. 17
      src/qt_common/abstract/qt_progress_dialog.cpp
  7. 51
      src/qt_common/abstract/qt_progress_dialog.h
  8. 4
      src/qt_common/externals/cpmfile.json
  9. 17
      src/qt_common/qt_common.cpp
  10. 1
      src/qt_common/qt_common.h
  11. 100
      src/qt_common/util/content.cpp
  12. 1
      src/yuzu/CMakeLists.txt
  13. 77
      src/yuzu/libqt_common.cpp
  14. 33
      src/yuzu/libqt_common.h
  15. 5
      src/yuzu/main_window.cpp

2
src/Eden/Native/CMakeLists.txt

@ -8,7 +8,9 @@ qt_add_executable(eden
main.cpp main.cpp
icons.qrc icons.qrc
EdenApplication.h EdenApplication.cpp EdenApplication.h EdenApplication.cpp
LibQtCommon.cpp LibQtCommon.cpp
LibQtCommon.h
) )
set(MODULES set(MODULES

8
src/Eden/Native/EdenApplication.cpp

@ -15,6 +15,7 @@
#include "common/settings_enums.h" #include "common/settings_enums.h"
#include "qt_common/config/uisettings.h" #include "qt_common/config/uisettings.h"
#include "qt_common/qt_common.h" #include "qt_common/qt_common.h"
#include "qt_common/util/content.h"
#include <QQuickStyle> #include <QQuickStyle>
#include <QWidget> #include <QWidget>
@ -32,13 +33,18 @@ EdenApplication::EdenApplication(int &argc, char *argv[])
/// QtCommon /// QtCommon
QtCommon::Init(new QWidget); QtCommon::Init(new QWidget);
QtCommon::SetupContentProviders();
// Check for orphaned profiles and reset profile data if necessary
QtCommon::Content::FixProfiles();
/// Settings, etc /// Settings, etc
Settings::SetConfiguringGlobal(true); Settings::SetConfiguringGlobal(true);
config = new QMLConfig; config = new QMLConfig;
// TODO: Save all values on launch and per game etc // TODO: Save all values on launch and per game etc
connect(this, &QCoreApplication::aboutToQuit, this, [this]() { config->save(); }); connect(this, &QCoreApplication::aboutToQuit, this, [this]() { config->save(); });
}
}
void EdenApplication::reload() void EdenApplication::reload()
{ {

73
src/Eden/Native/LibQtCommon.cpp

@ -1,10 +1,13 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-License-Identifier: GPL-3.0-or-later
#include "CarboxylQuickInterface.h"
#include "CarboxylApplication.h"
#include <CarboxylApplication.h>
#include <CarboxylQuickInterface.h>
#include "qt_common/abstract/frontend.h" #include "qt_common/abstract/frontend.h"
#include "LibQtCommon.h"
namespace QtCommon::Frontend { namespace QtCommon::Frontend {
StandardButton ShowMessage(Icon icon, const QString& title, const QString& text, 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(); 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<QtProgressDialog> newProgressDialog(const QString& labelText,
const QString& cancelButtonText, int minimum,
int maximum, Qt::WindowFlags f) {
return std::make_unique<QuickProgressDialog>(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 } // namespace QtCommon::Frontend

33
src/Eden/Native/LibQtCommon.h

@ -0,0 +1,33 @@
#pragma once
#include "qt_common/abstract/qt_progress_dialog.h"
#include <CarboxylProgressDialog.h>
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;
};
}

5
src/qt_common/CMakeLists.txt

@ -1,6 +1,8 @@
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project # SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
set(CMAKE_AUTOMOC ON)
add_library(qt_common STATIC add_library(qt_common STATIC
qt_common.h qt_common.h
qt_common.cpp qt_common.cpp
@ -24,7 +26,8 @@ add_library(qt_common STATIC
util/compress.h util/compress.cpp util/compress.h util/compress.cpp
abstract/frontend.h 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_string_lookup.h
qt_compat.h qt_compat.h

17
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" #include "qt_progress_dialog.h"
namespace QtCommon::Frontend {
QtProgressDialog::QtProgressDialog(const QString&,
const QString&,
int,
int,
QObject* parent,
Qt::WindowFlags)
: QObject(parent)
{}
QtProgressDialog::~QtProgressDialog() {}
}

51
src/qt_common/abstract/qt_progress_dialog.h

@ -4,21 +4,13 @@
#ifndef QT_PROGRESS_DIALOG_H #ifndef QT_PROGRESS_DIALOG_H
#define QT_PROGRESS_DIALOG_H #define QT_PROGRESS_DIALOG_H
#include <QWindow>
#ifdef YUZU_QT_WIDGETS
#include <QProgressDialog>
#endif
#include <QObject>
#include <memory>
namespace QtCommon::Frontend { namespace QtCommon::Frontend {
#ifdef YUZU_QT_WIDGETS
using QtProgressDialog = QProgressDialog;
// TODO(crueter): QML impl
#else
class QtProgressDialog
class QtProgressDialog : public QObject
{ {
Q_OBJECT
public: public:
QtProgressDialog(const QString &labelText, QtProgressDialog(const QString &labelText,
const QString &cancelButtonText, const QString &cancelButtonText,
@ -27,21 +19,32 @@ public:
QObject *parent = nullptr, QObject *parent = nullptr,
Qt::WindowFlags f = Qt::WindowFlags()); 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<QtProgressDialog> 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 #endif // QT_PROGRESS_DIALOG_H

4
src/qt_common/externals/cpmfile.json

@ -19,8 +19,8 @@
"package": "Carboxyl", "package": "Carboxyl",
"repo": "crueter/Carboxyl", "repo": "crueter/Carboxyl",
"git_host": "git.crueter.xyz", "git_host": "git.crueter.xyz",
"sha": "ea2f2fa4bc",
"hash": "4b2102379c1e5de68263cd68b705c2524fd220c6707964cb586f4b6c3e221083348c022128f6c61682d7e12c8cfd67a3723ccb7023d28b7560ce3542d6b75545",
"sha": "ad4a5743dc",
"hash": "68f1da395c3628f8e82a8f160f5cd0e1d6503606f68d9fc51e0d8fde91514b178afb722fb498394b3ab17a2725f39af6cc48b5bd076d546bb9cfb6718f47345a",
"bundled": "true", "bundled": "true",
"options": [ "options": [
"CARBOXYL_DEMO OFF" "CARBOXYL_DEMO OFF"

17
src/qt_common/qt_common.cpp

@ -255,17 +255,8 @@ void Init(QObject* root)
QtCommon::system->CoreTiming().SetTimerResolutionNs(Common::Windows::GetCurrentTimerResolution()); QtCommon::system->CoreTiming().SetTimerResolutionNs(Common::Windows::GetCurrentTimerResolution());
#endif #endif
// content providers
system->SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
system->RegisterContentProvider(FileSys::ContentProviderUnionSlot::FrontendManual,
provider.get());
system->GetFileSystemController().CreateFactories(*vfs);
// Remove cached contents generated during the previous session // Remove cached contents generated during the previous session
RemoveCachedContents(); RemoveCachedContents();
// Check for orphaned profiles and reset profile data if necessary
QtCommon::Content::FixProfiles();
} }
std::filesystem::path GetEdenCommand() std::filesystem::path GetEdenCommand()
@ -289,4 +280,12 @@ std::filesystem::path GetEdenCommand()
return command; return command;
} }
void SetupContentProviders() {
system->SetContentProvider(std::make_unique<FileSys::ContentProviderUnion>());
system->RegisterContentProvider(FileSys::ContentProviderUnionSlot::FrontendManual,
provider.get());
system->GetFileSystemController().CreateFactories(*vfs);
}
} // namespace QtCommon } // namespace QtCommon

1
src/qt_common/qt_common.h

@ -28,6 +28,7 @@ Core::Frontend::WindowSystemType GetWindowSystemType();
Core::Frontend::EmuWindow::WindowSystemInfo GetWindowSystemInfo(QWindow *window); Core::Frontend::EmuWindow::WindowSystemInfo GetWindowSystemInfo(QWindow *window);
void Init(QObject *root); void Init(QObject *root);
void SetupContentProviders();
const QString tr(const char *str); const QString tr(const char *str);
const QString tr(const std::string &str); const QString tr(const std::string &str);

100
src/qt_common/util/content.cpp

@ -41,23 +41,19 @@ bool CheckGameFirmware(u64 program_id, QObject* parent)
void InstallFirmware(const QString& location, bool recursive) 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. // Declare progress callback.
auto callback = [&](size_t total_size, size_t processed_size) { auto callback = [&](size_t total_size, size_t processed_size) {
progress.setValue(static_cast<int>((processed_size * 100) / total_size));
return progress.wasCanceled();
progress->setValue(static_cast<int>((processed_size * 100) / total_size));
return progress->wasCanceled();
}; };
callback(100, 0);
QString failedTitle = tr("Firmware Install Failed"); QString failedTitle = tr("Firmware Install Failed");
QString successTitle = tr("Firmware Install Succeeded"); QString successTitle = tr("Firmware Install Succeeded");
QtCommon::Frontend::Icon icon; QtCommon::Frontend::Icon icon;
@ -160,8 +156,8 @@ void InstallFirmware(const QString& location, bool recursive)
system->GetFileSystemController().CreateFactories(*vfs); system->GetFileSystemController().CreateFactories(*vfs);
auto VerifyFirmwareCallback = [&](size_t total_size, size_t processed_size) { auto VerifyFirmwareCallback = [&](size_t total_size, size_t processed_size) {
progress.setValue(90 + static_cast<int>((processed_size * 10) / total_size));
return progress.wasCanceled();
progress->setValue(90 + static_cast<int>((processed_size * 10) / total_size));
return progress->wasCanceled();
}; };
auto results = ContentManager::VerifyInstalledContents(*QtCommon::system, auto results = ContentManager::VerifyInstalledContents(*QtCommon::system,
@ -172,14 +168,14 @@ void InstallFirmware(const QString& location, bool recursive)
if (results.size() > 0) { if (results.size() > 0) {
const auto failed_names = QString::fromStdString( const auto failed_names = QString::fromStdString(
fmt::format("{}", fmt::join(results, "\n"))); fmt::format("{}", fmt::join(results, "\n")));
progress.close();
progress->close();
QtCommon::Frontend::Critical( QtCommon::Frontend::Critical(
tr("Firmware integrity verification failed!"), tr("Firmware integrity verification failed!"),
tr("Verification failed for the following files:\n\n%1").arg(failed_names)); tr("Verification failed for the following files:\n\n%1").arg(failed_names));
return; return;
} }
progress.close();
progress->close();
const auto pair = FirmwareManager::GetFirmwareVersion(*system); const auto pair = FirmwareManager::GetFirmwareVersion(*system);
const auto firmware_data = pair.first; const auto firmware_data = pair.first;
@ -219,19 +215,13 @@ QString UnzipFirmwareToTmp(const QString& location)
// Content // // Content //
void VerifyGameContents(const std::string& game_path) 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) { const auto callback = [&](size_t total_size, size_t processed_size) {
progress.setValue(static_cast<int>((processed_size * 100) / total_size));
return progress.wasCanceled();
progress->setValue(static_cast<int>((processed_size * 100) / total_size));
return progress->wasCanceled();
}; };
const auto result = ContentManager::VerifyGameContents(*system, game_path, callback); const auto result = ContentManager::VerifyGameContents(*system, game_path, callback);
@ -288,27 +278,21 @@ void InstallKeys()
void VerifyInstalledContents() void VerifyInstalledContents()
{ {
// Initialize a progress dialog. // 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. // Declare progress callback.
auto QtProgressCallback = [&](size_t total_size, size_t processed_size) { auto QtProgressCallback = [&](size_t total_size, size_t processed_size) {
progress.setValue(static_cast<int>((processed_size * 100) / total_size));
return progress.wasCanceled();
progress->setValue(static_cast<int>((processed_size * 100) / total_size));
return progress->wasCanceled();
}; };
const std::vector<std::string> result const std::vector<std::string> result
= ContentManager::VerifyInstalledContents(*QtCommon::system, = ContentManager::VerifyInstalledContents(*QtCommon::system,
*QtCommon::provider, *QtCommon::provider,
QtProgressCallback); QtProgressCallback);
progress.close();
progress->close();
if (result.empty()) { if (result.empty()) {
QtCommon::Frontend::Information(tr("Integrity verification succeeded!"), QtCommon::Frontend::Information(tr("Integrity verification succeeded!"),
@ -373,28 +357,29 @@ void FixProfiles()
void ClearDataDir(FrontendCommon::DataManager::DataDir dir, const std::string& user_id) 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!"), tr("Important data may be lost!"),
QtCommon::Frontend::Yes | QtCommon::Frontend::No);
Yes | No);
if (result != QtCommon::Frontend::Yes)
if (result != Yes)
return; return;
result = QtCommon::Frontend::Warning(
result = Warning(
tr("Are you REALLY sure?"), tr("Are you REALLY sure?"),
tr("Once deleted, your data will NOT come back!\n" tr("Once deleted, your data will NOT come back!\n"
"Only do this if you're 100% sure you want to delete this data."), "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; 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); FrontendCommon::DataManager::ClearDir(dir, user_id);
dialog.close();
dialog->close();
} }
void ExportDataDir(FrontendCommon::DataManager::DataDir data_dir, void ExportDataDir(FrontendCommon::DataManager::DataDir data_dir,
@ -412,14 +397,11 @@ void ExportDataDir(FrontendCommon::DataManager::DataDir data_dir,
if (zip_dump_location.isEmpty()) if (zip_dump_location.isEmpty())
return; 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->setWindowModality(Qt::WindowModal);
progress->setMinimumDuration(100);
progress->setAutoClose(false);
progress->setAutoReset(false);
progress->show(); progress->show();
QGuiApplication::processEvents(); QGuiApplication::processEvents();
@ -487,16 +469,12 @@ void ImportDataDir(FrontendCommon::DataManager::DataDir data_dir,
if (button != QtCommon::Frontend::Yes) if (button != QtCommon::Frontend::Yes)
return; 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->setWindowModality(Qt::WindowModal);
progress->setMinimumDuration(100);
progress->setAutoClose(false);
progress->setAutoReset(false);
progress->show(); progress->show();
progress->setValue(0);
QGuiApplication::processEvents(); QGuiApplication::processEvents();

1
src/yuzu/CMakeLists.txt

@ -234,6 +234,7 @@ add_executable(yuzu
ryujinx_dialog.h ryujinx_dialog.cpp ryujinx_dialog.ui ryujinx_dialog.h ryujinx_dialog.cpp ryujinx_dialog.ui
main_window.h main_window.cpp main_window.h main_window.cpp
libqt_common.cpp libqt_common.cpp
libqt_common.h
) )
set_target_properties(yuzu PROPERTIES OUTPUT_NAME "eden") set_target_properties(yuzu PROPERTIES OUTPUT_NAME "eden")

77
src/yuzu/libqt_common.cpp

@ -3,8 +3,12 @@
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
#include <QProgressDialog>
#include <qnamespace.h>
#include "libqt_common.h"
#include "qt_common/abstract/frontend.h" #include "qt_common/abstract/frontend.h"
#include "qt_common/abstract/qt_progress_dialog.h"
#include "qt_common/qt_common.h" #include "qt_common/qt_common.h"
namespace QtCommon::Frontend { 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))); 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<QtProgressDialog> newProgressDialog(const QString& labelText, const QString& cancelButtonText,
int minimum, int maximum, Qt::WindowFlags f) {
return std::make_unique<WidgetsProgressDialog>(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 } // namespace QtCommon::Frontend

33
src/yuzu/libqt_common.h

@ -0,0 +1,33 @@
#pragma once
#include "qt_common/abstract/qt_progress_dialog.h"
#include <QProgressDialog>
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;
};
}

5
src/yuzu/main_window.cpp

@ -413,6 +413,8 @@ MainWindow::MainWindow(bool has_broken_vulkan)
} }
#endif #endif
QtCommon::SetupContentProviders();
// Gen keys if necessary // Gen keys if necessary
OnCheckFirmwareDecryption(); OnCheckFirmwareDecryption();
@ -420,6 +422,9 @@ MainWindow::MainWindow(bool has_broken_vulkan)
OnCheckGraphicsBackend(); OnCheckGraphicsBackend();
#endif #endif
// Check for orphaned profiles and reset profile data if necessary
QtCommon::Content::FixProfiles();
game_list->LoadCompatibilityList(); game_list->LoadCompatibilityList();
game_list->PopulateAsync(UISettings::values.game_dirs); game_list->PopulateAsync(UISettings::values.game_dirs);

Loading…
Cancel
Save