Qt: move Render_Info to emu_settings.h

This commit is contained in:
Megamouse 2017-09-19 20:07:04 +02:00 committed by Ivan
parent cc594ad353
commit a84cc1d3bb
14 changed files with 113 additions and 95 deletions

View File

@ -63,9 +63,10 @@ void rpcs3_app::Init()
Emu.Init();
guiSettings.reset(new gui_settings());
emuSettings.reset(new emu_settings());
// Create the main window
RPCS3MainWin = new main_window(guiSettings, nullptr);
RPCS3MainWin = new main_window(guiSettings, emuSettings, nullptr);
// Create callbacks from the emulator, which reference the handlers.
InitializeCallbacks();

View File

@ -16,6 +16,7 @@
#include "rpcs3qt/msg_dialog_frame.h"
#include "rpcs3qt/main_window.h"
#include "rpcs3qt/gui_settings.h"
#include "rpcs3qt/emu_settings.h"
#include <QApplication>
@ -48,5 +49,6 @@ private:
main_window* RPCS3MainWin;
std::shared_ptr<gui_settings> guiSettings;
std::shared_ptr<emu_settings> emuSettings;
QWindow* gameWindow = nullptr; //! (Currently) only needed so that pad handlers have a valid target for event filtering.
};

View File

@ -111,7 +111,7 @@ static QStringList getOptions(cfg_location location)
return values;
}
Render_Creator::Render_Creator()
emu_settings::Render_Creator::Render_Creator()
{
// check for dx12 adapters
#ifdef _MSC_VER
@ -165,9 +165,25 @@ Render_Creator::Render_Creator()
}
}
#endif
// Graphics Adapter
D3D12 = Render_Info(name_D3D12, D3D12Adapters, supportsD3D12, emu_settings::D3D12Adapter);
Vulkan = Render_Info(name_Vulkan, vulkanAdapters, supportsVulkan, emu_settings::VulkanAdapter);
OpenGL = Render_Info(name_OpenGL);
NullRender = Render_Info(name_Null);
renderers = { &D3D12, &Vulkan, &OpenGL, &NullRender };
}
emu_settings::emu_settings(const std::string& path) : QObject()
emu_settings::emu_settings() : QObject()
{
}
emu_settings::~emu_settings()
{
}
void emu_settings::LoadSettings(const std::string& path)
{
m_path = path;
@ -189,10 +205,6 @@ emu_settings::emu_settings(const std::string& path) : QObject()
}
}
emu_settings::~emu_settings()
{
}
void emu_settings::SaveSettings()
{
YAML::Emitter out;

View File

@ -13,20 +13,6 @@
constexpr auto qstr = QString::fromStdString;
struct Render_Creator
{
bool supportsD3D12 = false;
bool supportsVulkan = false;
QStringList D3D12Adapters;
QStringList vulkanAdapters;
QString render_Null = QObject::tr("Null");
QString render_Vulkan = QObject::tr("Vulkan");
QString render_D3D12 = QObject::tr("D3D12[DO NOT USE]");
QString render_OpenGL = QObject::tr("OpenGL");
Render_Creator();
};
// Node location
using cfg_location = std::vector<const char*>;
@ -108,10 +94,44 @@ public:
dev_usb000Location,
};
struct Render_Info
{
QString name;
QString old_adapter;
QStringList adapters;
SettingsType type;
bool supported = true;
bool has_adapters = true;
Render_Info() {};
Render_Info(const QString& name) : name(name), has_adapters(false) {};
Render_Info(const QString& name, const QStringList& adapters, bool supported, SettingsType type)
: name(name), adapters(adapters), supported(supported), type(type) {};
};
struct Render_Creator
{
bool supportsD3D12 = false;
bool supportsVulkan = false;
QStringList D3D12Adapters;
QStringList vulkanAdapters;
QString name_Null = tr("Null");
QString name_Vulkan = tr("Vulkan");
QString name_D3D12 = tr("D3D12[DO NOT USE]");
QString name_OpenGL = tr("OpenGL");
Render_Info D3D12;
Render_Info Vulkan;
Render_Info OpenGL;
Render_Info NullRender;
std::vector<Render_Info*> renderers;
Render_Creator();
};
/** Creates a settings object which reads in the config.yml file at rpcs3/bin/%path%/config.yml
* Settings are only written when SaveSettings is called.
*/
emu_settings(const std::string& path);
emu_settings();
~emu_settings();
/** Connects a combo box with the target settings type*/
@ -131,8 +151,15 @@ public:
/** Sets the setting type to a given value.*/
void SetSetting(SettingsType type, const std::string& val);
/** Gets all the renderer info for gpu settings.*/
Render_Creator m_render_creator;
/** Loads the settings from path.*/
void LoadSettings(const std::string& path = "");
public Q_SLOTS:
/** Writes the unsaved settings to file. Used in settings dialog on accept.*/
/** Writes the unsaved settings to file. Used in settings dialog on accept.*/
void SaveSettings();
private:
/** A helper map that keeps track of where a given setting type is located*/

View File

@ -30,8 +30,8 @@ static const std::string m_class_name = "GameViewer";
inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); }
inline QSize sizeFromSlider(const int& pos) { return GUI::gl_icon_size_min + (GUI::gl_icon_size_max - GUI::gl_icon_size_min) * (pos / (float)GUI::gl_max_slider_pos); }
game_list_frame::game_list_frame(std::shared_ptr<gui_settings> settings, const Render_Creator& r_Creator, QWidget *parent)
: QDockWidget(tr("Game List"), parent), xgui_settings(settings), m_Render_Creator(r_Creator)
game_list_frame::game_list_frame(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent)
: QDockWidget(tr("Game List"), parent), xgui_settings(guiSettings), xemu_settings(emuSettings)
{
setAcceptDrops(true);
@ -663,7 +663,7 @@ void game_list_frame::ShowSpecifiedContextMenu(const QPoint &pos, int row)
});
connect(configure, &QAction::triggered, [=]
{
settings_dialog dlg(xgui_settings, m_Render_Creator, 0, this, &currGame);
settings_dialog dlg(xgui_settings, xemu_settings, 0, this, &currGame);
connect(&dlg, &QDialog::accepted, [this]
{
Refresh(true, false);

View File

@ -193,7 +193,7 @@ class game_list_frame : public QDockWidget
Q_OBJECT
public:
explicit game_list_frame(std::shared_ptr<gui_settings> settings, const Render_Creator& r_Creator, QWidget *parent = nullptr);
explicit game_list_frame(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent = nullptr);
~game_list_frame();
/** Refresh the gamelist with/without loading game data from files. Public so that main frame can refresh after vfs or install */
@ -298,6 +298,7 @@ private:
// TODO: Reorganize this into a sensible order for private variables.
std::shared_ptr<gui_settings> xgui_settings;
std::shared_ptr<emu_settings> xemu_settings;
int m_sortColumn;
Qt::SortOrder m_colSortOrder;
@ -312,7 +313,6 @@ private:
qreal m_Text_Factor;
QStringList m_categoryFilters;
QString m_searchText;
Render_Creator m_Render_Creator;
uint m_games_per_row = 0;
};

View File

@ -47,7 +47,8 @@
inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); }
main_window::main_window(std::shared_ptr<gui_settings> guiSettings, QWidget *parent) : QMainWindow(parent), guiSettings(guiSettings), m_sys_menu_opened(false), ui(new Ui::main_window)
main_window::main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent)
: QMainWindow(parent), guiSettings(guiSettings), emuSettings(emuSettings), m_sys_menu_opened(false), ui(new Ui::main_window)
{
}
@ -1207,7 +1208,7 @@ void main_window::CreateConnects()
auto openSettings = [=](int tabIndex)
{
settings_dialog dlg(guiSettings, m_Render_Creator, tabIndex, this);
settings_dialog dlg(guiSettings, emuSettings, tabIndex, this);
connect(&dlg, &settings_dialog::GuiSettingsSaveRequest, this, &main_window::SaveWindowState);
connect(&dlg, &settings_dialog::GuiSettingsSyncRequest, [=]() {ConfigureGuiFromSettings(true); });
connect(&dlg, &settings_dialog::GuiStylesheetRequest, this, &main_window::RequestGlobalStylesheetChange);
@ -1235,7 +1236,7 @@ void main_window::CreateConnects()
connect(ui->confVFSDialogAct, &QAction::triggered, [=]
{
vfs_dialog dlg(this);
vfs_dialog dlg(guiSettings, emuSettings, this);
dlg.exec();
m_gameListFrame->Refresh(true); // dev-hdd0 may have changed. Refresh just in case.
});
@ -1445,7 +1446,7 @@ void main_window::CreateDockWindows()
// new mainwindow widget because existing seems to be bugged for now
m_mw = new QMainWindow();
m_gameListFrame = new game_list_frame(guiSettings, m_Render_Creator, m_mw);
m_gameListFrame = new game_list_frame(guiSettings, emuSettings, m_mw);
m_gameListFrame->setObjectName("gamelist");
m_debuggerFrame = new debugger_frame(guiSettings, m_mw);
m_debuggerFrame->setObjectName("debugger");

View File

@ -32,8 +32,6 @@ class main_window : public QMainWindow
bool m_sys_menu_opened;
bool m_save_slider_pos = false;
Render_Creator m_Render_Creator;
QIcon m_appIcon;
QIcon m_icon_play;
QIcon m_icon_pause;
@ -58,7 +56,7 @@ class main_window : public QMainWindow
#endif
public:
explicit main_window(std::shared_ptr<gui_settings> guiSettings, QWidget *parent = 0);
explicit main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent = 0);
void Init();
~main_window();
void CreateThumbnailToolbar();
@ -117,4 +115,5 @@ private:
debugger_frame *m_debuggerFrame;
game_list_frame *m_gameListFrame;
std::shared_ptr<gui_settings> guiSettings;
std::shared_ptr<emu_settings> emuSettings;
};

View File

@ -26,8 +26,8 @@
inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); }
inline std::string sstr(const QVariant& _in) { return sstr(_in.toString()); }
settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const Render_Creator& r_Creator, const int& tabIndex, QWidget *parent, const GameInfo* game)
: QDialog(parent), xgui_settings(xSettings), ui(new Ui::settings_dialog), m_tab_Index(tabIndex)
settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, const int& tabIndex, QWidget *parent, const GameInfo* game)
: QDialog(parent), xgui_settings(guiSettings), xemu_settings(emuSettings), ui(new Ui::settings_dialog), m_tab_Index(tabIndex)
{
ui->setupUi(this);
ui->cancelButton->setDefault(true);
@ -69,15 +69,14 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
QJsonObject json_debug = json_obj.value("debug").toObject();
std::shared_ptr<emu_settings> xemu_settings;
if (game)
{
xemu_settings.reset(new emu_settings("data/" + game->serial));
xemu_settings->LoadSettings("data/" + game->serial);
setWindowTitle(tr("Settings: [") + qstr(game->serial) + "] " + qstr(game->name));
}
else
{
xemu_settings.reset(new emu_settings(""));
xemu_settings->LoadSettings();
setWindowTitle(tr("Settings"));
}
@ -333,6 +332,8 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
// | |__| | | | |__| | | | (_| | |_) |
// \_____|_| \____/ |_|\__,_|_.__/
emu_settings::Render_Creator render_creator = xemu_settings.get()->m_render_creator;
// Comboboxes
ui->graphicsAdapterBox->setToolTip(json_gpu_cbo["graphicsAdapterBox"].toString());
@ -343,7 +344,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
{
if (ui->renderBox->itemText(i) == "D3D12")
{
ui->renderBox->setItemText(i, r_Creator.render_D3D12);
ui->renderBox->setItemText(i, render_creator.name_D3D12);
break;
}
}
@ -376,16 +377,8 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
xemu_settings->EnhanceCheckBox(ui->scrictModeRendering, emu_settings::StrictRenderingMode);
ui->scrictModeRendering->setToolTip(json_gpu_main["scrictModeRendering"].toString());
// Graphics Adapter
m_D3D12 = Render_Info(r_Creator.render_D3D12, r_Creator.D3D12Adapters, r_Creator.supportsD3D12, emu_settings::D3D12Adapter);
m_Vulkan = Render_Info(r_Creator.render_Vulkan, r_Creator.vulkanAdapters, r_Creator.supportsVulkan, emu_settings::VulkanAdapter);
m_OpenGL = Render_Info(r_Creator.render_OpenGL);
m_NullRender = Render_Info(r_Creator.render_Null);
std::vector<Render_Info*> Render_List = { &m_D3D12, &m_Vulkan, &m_OpenGL, &m_NullRender };
// Remove renderers from the renderer Combobox if not supported
for (auto renderer : Render_List)
for (const auto& renderer : render_creator.renderers)
{
if (renderer->supported)
{
@ -412,10 +405,10 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
{
if (text.isEmpty()) return;
auto switchTo = [=](Render_Info renderer)
auto switchTo = [=](emu_settings::Render_Info renderer)
{
// Reset other adapters to old config
for (const auto& render : Render_List)
for (const auto& render : render_creator.renderers)
{
if (renderer.name != render->name && render->has_adapters && render->supported)
{
@ -453,12 +446,12 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
xemu_settings->SetSetting(renderer.type, sstr(ui->graphicsAdapterBox->currentText()));
};
for (auto render : Render_List)
for (const auto& renderer : render_creator.renderers)
{
if (render->name == text)
if (renderer->name == text)
{
switchTo(*render);
ui->graphicsAdapterBox->setEnabled(render->has_adapters);
switchTo(*renderer);
ui->graphicsAdapterBox->setEnabled(renderer->has_adapters);
}
}
};
@ -474,7 +467,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
m_oldRender = newRender;
return;
}
for (const auto& render : Render_List)
for (const auto& render : render_creator.renderers)
{
if (render->name == newRender && render->has_adapters && render->adapters.contains(text))
{
@ -494,7 +487,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> xSettings, const
auto fixGLLegacy = [=](const QString& text)
{
ui->glLegacyBuffers->setEnabled(text == m_OpenGL.name);
ui->glLegacyBuffers->setEnabled(text == render_creator.name_OpenGL);
};
// Handle connects to disable specific checkboxes that depend on GUI state.

View File

@ -15,27 +15,12 @@ namespace Ui
class settings_dialog;
}
struct Render_Info
{
QString name;
QString old_adapter;
QStringList adapters;
emu_settings::SettingsType type;
bool supported = true;
bool has_adapters = true;
Render_Info(){};
Render_Info(const QString& name) : name(name), has_adapters(false){};
Render_Info(const QString& name, const QStringList& adapters, bool supported, const emu_settings::SettingsType& type)
: name(name), adapters(adapters), supported(supported), type(type) {};
};
class settings_dialog : public QDialog
{
Q_OBJECT
public:
explicit settings_dialog(std::shared_ptr<gui_settings> xSettings, const Render_Creator& r_Creator, const int& tabIndex = 0, QWidget *parent = 0, const GameInfo *game = nullptr);
explicit settings_dialog(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, const int& tabIndex = 0, QWidget *parent = 0, const GameInfo *game = nullptr);
~settings_dialog();
int exec();
Q_SIGNALS:
@ -56,12 +41,8 @@ private:
//gpu tab
QString m_oldRender = "";
Render_Info m_D3D12;
Render_Info m_Vulkan;
Render_Info m_OpenGL;
Render_Info m_NullRender;
int m_tab_Index;
Ui::settings_dialog *ui;
std::shared_ptr<gui_settings> xgui_settings;
std::shared_ptr<emu_settings> xemu_settings;
};

View File

@ -9,27 +9,29 @@
inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); }
vfs_dialog::vfs_dialog(QWidget* parent) : QDialog(parent),
m_gui_settings(), m_emu_settings("")
vfs_dialog::vfs_dialog(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget* parent)
: QDialog(parent), m_gui_settings(guiSettings), m_emu_settings(emuSettings)
{
QTabWidget* tabs = new QTabWidget();
tabs->setUsesScrollButtons(false);
m_emu_settings->LoadSettings();
// Create tabs
vfs_dialog_tab* emulator_tab = new vfs_dialog_tab({ "$(EmulatorDir)", emu_settings::emulatorLocation, GUI::fs_emulator_dir_list, &g_cfg.vfs.emulator_dir },
&m_gui_settings, &m_emu_settings, this);
m_gui_settings, m_emu_settings, this);
vfs_dialog_tab* dev_hdd0_tab = new vfs_dialog_tab({ "dev_hdd0", emu_settings::dev_hdd0Location, GUI::fs_dev_hdd0_list, &g_cfg.vfs.dev_hdd0 },
&m_gui_settings, &m_emu_settings, this);
m_gui_settings, m_emu_settings, this);
vfs_dialog_tab* dev_hdd1_tab = new vfs_dialog_tab({ "dev_hdd1", emu_settings::dev_hdd1Location, GUI::fs_dev_hdd1_list, &g_cfg.vfs.dev_hdd1 },
&m_gui_settings, &m_emu_settings, this);
m_gui_settings, m_emu_settings, this);
vfs_dialog_tab* dev_flash_tab = new vfs_dialog_tab({ "dev_flash", emu_settings::dev_flashLocation, GUI::fs_dev_flash_list, &g_cfg.vfs.dev_flash },
&m_gui_settings, &m_emu_settings, this);
m_gui_settings, m_emu_settings, this);
vfs_dialog_tab* dev_usb000_tab = new vfs_dialog_tab({ "dev_usb000", emu_settings::dev_usb000Location, GUI::fs_dev_usb000_list, &g_cfg.vfs.dev_usb000 },
&m_gui_settings, &m_emu_settings, this);
m_gui_settings, m_emu_settings, this);
tabs->addTab(emulator_tab, "$(EmulatorDir)");
tabs->addTab(dev_hdd0_tab, "dev_hdd0");

View File

@ -11,8 +11,8 @@ class vfs_dialog : public QDialog
Q_OBJECT
public:
explicit vfs_dialog(QWidget* parent = nullptr);
explicit vfs_dialog(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget* parent = nullptr);
private:
gui_settings m_gui_settings;
emu_settings m_emu_settings;
std::shared_ptr<gui_settings> m_gui_settings;
std::shared_ptr<emu_settings> m_emu_settings;
};

View File

@ -7,8 +7,8 @@
inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); }
vfs_dialog_tab::vfs_dialog_tab(const vfs_settings_info& settingsInfo, gui_settings* guiSettings, emu_settings* emuSettings, QWidget* parent) : QWidget(parent),
m_info(settingsInfo), m_gui_settings(guiSettings), m_emu_settings(emuSettings)
vfs_dialog_tab::vfs_dialog_tab(const vfs_settings_info& settingsInfo, std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget* parent)
: QWidget(parent), m_info(settingsInfo), m_gui_settings(guiSettings), m_emu_settings(emuSettings)
{
m_dirList = new QListWidget(this);
@ -19,7 +19,7 @@ m_info(settingsInfo), m_gui_settings(guiSettings), m_emu_settings(emuSettings)
{
new QListWidgetItem(EmuConfigDir(), m_dirList);
}
for (QString dir : alldirs)
for (const QString& dir : alldirs)
{
new QListWidgetItem(dir, m_dirList);
}

View File

@ -23,7 +23,7 @@ class vfs_dialog_tab : public QWidget
Q_OBJECT
public:
explicit vfs_dialog_tab(const vfs_settings_info& info, gui_settings* guiSettings, emu_settings* emuSettings, QWidget* parent = nullptr);
explicit vfs_dialog_tab(const vfs_settings_info& info, std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget* parent = nullptr);
void SaveSettings();
void AddNewDirectory();
@ -34,8 +34,8 @@ private:
const QString EmptyPath = "Empty Path";
vfs_settings_info m_info;
gui_settings* m_gui_settings;
emu_settings* m_emu_settings;
std::shared_ptr<gui_settings> m_gui_settings;
std::shared_ptr<emu_settings> m_emu_settings;
// UI variables needed in higher scope
QListWidget* m_dirList;