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
					
				@ -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 New Issue
	
	Block a user