mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-12-25 10:52:48 -06:00
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:
parent
2b601e8636
commit
9f972b7d01
3 changed files with 46 additions and 20 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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/>
|
||||||
|
|
Loading…
Reference in a new issue