main: Add an option to modify the currrent game's configuration

Creates a new entry in the Emulation menu called "Configure Current Game..." that is only available if a game is currently being executed in yuzu. When selected, it opens the game properties dialog for the current game.

Thanks to @BSoDGamingYT for reminding me to do this.
This commit is contained in:
lat9nq 2020-08-11 14:57:29 -04:00
parent 2b601e8636
commit 9f972b7d01
3 changed files with 46 additions and 20 deletions

View File

@ -894,6 +894,8 @@ void GMainWindow::ConnectMenuEvents() {
connect(ui.action_Open_FAQ, &QAction::triggered, this, &GMainWindow::OnOpenFAQ); connect(ui.action_Open_FAQ, &QAction::triggered, this, &GMainWindow::OnOpenFAQ);
connect(ui.action_Restart, &QAction::triggered, this, [this] { BootGame(QString(game_path)); }); connect(ui.action_Restart, &QAction::triggered, this, [this] { BootGame(QString(game_path)); });
connect(ui.action_Configure, &QAction::triggered, this, &GMainWindow::OnConfigure); connect(ui.action_Configure, &QAction::triggered, this, &GMainWindow::OnConfigure);
connect(ui.action_Configure_Current_Game, &QAction::triggered, this,
&GMainWindow::OnConfigurePerGame);
// View // View
connect(ui.action_Single_Window_Mode, &QAction::triggered, this, connect(ui.action_Single_Window_Mode, &QAction::triggered, this,
@ -1167,6 +1169,7 @@ void GMainWindow::ShutdownGame() {
ui.action_Pause->setEnabled(false); ui.action_Pause->setEnabled(false);
ui.action_Stop->setEnabled(false); ui.action_Stop->setEnabled(false);
ui.action_Restart->setEnabled(false); ui.action_Restart->setEnabled(false);
ui.action_Configure_Current_Game->setEnabled(false);
ui.action_Report_Compatibility->setEnabled(false); ui.action_Report_Compatibility->setEnabled(false);
ui.action_Load_Amiibo->setEnabled(false); ui.action_Load_Amiibo->setEnabled(false);
ui.action_Capture_Screenshot->setEnabled(false); ui.action_Capture_Screenshot->setEnabled(false);
@ -1718,26 +1721,7 @@ void GMainWindow::OnGameListOpenPerGameProperties(const std::string& file) {
return; return;
} }
ConfigurePerGame dialog(this, title_id); OpenPerGameConfiguration(title_id, file);
dialog.LoadFromFile(v_file);
auto result = dialog.exec();
if (result == QDialog::Accepted) {
dialog.ApplyConfiguration();
const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false);
if (reload) {
game_list->PopulateAsync(UISettings::values.game_dirs);
}
// Do not cause the global config to write local settings into the config file
Settings::RestoreGlobalState();
if (!Core::System::GetInstance().IsPoweredOn()) {
config->Save();
}
} else {
Settings::RestoreGlobalState();
}
} }
void GMainWindow::OnMenuLoadFile() { void GMainWindow::OnMenuLoadFile() {
@ -2066,6 +2050,7 @@ void GMainWindow::OnStartGame() {
ui.action_Pause->setEnabled(true); ui.action_Pause->setEnabled(true);
ui.action_Stop->setEnabled(true); ui.action_Stop->setEnabled(true);
ui.action_Restart->setEnabled(true); ui.action_Restart->setEnabled(true);
ui.action_Configure_Current_Game->setEnabled(true);
ui.action_Report_Compatibility->setEnabled(true); ui.action_Report_Compatibility->setEnabled(true);
discord_rpc->Update(); discord_rpc->Update();
@ -2255,6 +2240,36 @@ void GMainWindow::OnConfigure() {
UpdateStatusButtons(); UpdateStatusButtons();
} }
void GMainWindow::OnConfigurePerGame() {
const u64 title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID();
OpenPerGameConfiguration(title_id, game_path.toStdString());
}
void GMainWindow::OpenPerGameConfiguration(u64 title_id, const std::string& file_name) {
const auto v_file = Core::GetGameFileFromPath(vfs, file_name);
ConfigurePerGame dialog(this, title_id);
dialog.LoadFromFile(v_file);
auto result = dialog.exec();
if (result == QDialog::Accepted) {
dialog.ApplyConfiguration();
const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false);
if (reload) {
game_list->PopulateAsync(UISettings::values.game_dirs);
}
// Do not cause the global config to write local settings into the config file
Settings::RestoreGlobalState();
if (!Core::System::GetInstance().IsPoweredOn()) {
config->Save();
}
} else {
Settings::RestoreGlobalState();
}
}
void GMainWindow::OnLoadAmiibo() { void GMainWindow::OnLoadAmiibo() {
const QString extensions{QStringLiteral("*.bin")}; const QString extensions{QStringLiteral("*.bin")};
const QString file_filter = tr("Amiibo File (%1);; All Files (*.*)").arg(extensions); const QString file_filter = tr("Amiibo File (%1);; All Files (*.*)").arg(extensions);

View File

@ -216,6 +216,7 @@ private slots:
void OnMenuInstallToNAND(); void OnMenuInstallToNAND();
void OnMenuRecentFile(); void OnMenuRecentFile();
void OnConfigure(); void OnConfigure();
void OnConfigurePerGame();
void OnLoadAmiibo(); void OnLoadAmiibo();
void OnOpenYuzuFolder(); void OnOpenYuzuFolder();
void OnAbout(); void OnAbout();
@ -249,6 +250,7 @@ private:
void ShowMouseCursor(); void ShowMouseCursor();
void OpenURL(const QUrl& url); void OpenURL(const QUrl& url);
void LoadTranslation(); void LoadTranslation();
void OpenPerGameConfiguration(u64 title_id, const std::string& file_name);
Ui::MainWindow ui; Ui::MainWindow ui;

View File

@ -81,6 +81,7 @@
<addaction name="action_Restart"/> <addaction name="action_Restart"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="action_Configure"/> <addaction name="action_Configure"/>
<addaction name="action_Configure_Current_Game"/>
</widget> </widget>
<widget class="QMenu" name="menu_View"> <widget class="QMenu" name="menu_View">
<property name="title"> <property name="title">
@ -287,6 +288,14 @@
<string>Capture Screenshot</string> <string>Capture Screenshot</string>
</property> </property>
</action> </action>
<action name="action_Configure_Current_Game">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Configure Current Game..</string>
</property>
</action>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>