diff options
| -rw-r--r-- | src/yuzu/main.cpp | 42 | ||||
| -rw-r--r-- | src/yuzu/main.h | 2 | ||||
| -rw-r--r-- | src/yuzu/main.ui | 9 | 
3 files changed, 52 insertions, 1 deletions
| diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index d32aa9615..b1b6b9354 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -1551,6 +1551,7 @@ void GMainWindow::ConnectMenuEvents() {      // Tools      connect_menu(ui->action_Rederive, std::bind(&GMainWindow::OnReinitializeKeys, this,                                                  ReinitializeKeyBehavior::Warning)); +    connect_menu(ui->action_Load_Mii_Edit, &GMainWindow::OnMiiEdit);      connect_menu(ui->action_Capture_Screenshot, &GMainWindow::OnCaptureScreenshot);      // TAS @@ -1590,6 +1591,8 @@ void GMainWindow::UpdateMenuState() {      }      multiplayer_state->UpdateNotificationStatus(); + +    ui->action_Load_Mii_Edit->setEnabled(CheckFirmwarePresence());  }  void GMainWindow::OnDisplayTitleBars(bool show) { @@ -4134,6 +4137,27 @@ void GMainWindow::OnToggleStatusBar() {      statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked());  } +void GMainWindow::OnMiiEdit() { +    constexpr u64 MiiEditId = 0x0100000000001009ull; +    auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); +    if (!bis_system) { +        QMessageBox::warning(this, tr("No firmware available"), +                             tr("Please install the firmware to use the Mii editor.")); +        return; +    } + +    auto mii_applet_nca = bis_system->GetEntry(MiiEditId, FileSys::ContentRecordType::Program); +    if (!mii_applet_nca) { +        QMessageBox::warning(this, tr("Mii Edit Applet"), +                             tr("Mii editor is not available. Please reinstall firmware.")); +        return; +    } + +    const auto filename = QString::fromStdString((mii_applet_nca->GetFullPath())); +    UISettings::values.roms_path = QFileInfo(filename).path(); +    BootGame(filename); +} +  void GMainWindow::OnCaptureScreenshot() {      if (emu_thread == nullptr || !emu_thread->IsRunning()) {          return; @@ -4540,6 +4564,8 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {      if (behavior == ReinitializeKeyBehavior::Warning) {          game_list->PopulateAsync(UISettings::values.game_dirs);      } + +    UpdateMenuState();  }  bool GMainWindow::CheckSystemArchiveDecryption() { @@ -4561,6 +4587,22 @@ bool GMainWindow::CheckSystemArchiveDecryption() {      return mii_nca->GetRomFS().get() != nullptr;  } +bool GMainWindow::CheckFirmwarePresence() { +    constexpr u64 MiiEditId = 0x0100000000001009ull; + +    auto bis_system = system->GetFileSystemController().GetSystemNANDContents(); +    if (!bis_system) { +        return false; +    } + +    auto mii_applet_nca = bis_system->GetEntry(MiiEditId, FileSys::ContentRecordType::Program); +    if (!mii_applet_nca) { +        return false; +    } + +    return true; +} +  bool GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installed, u64 program_id,                                          u64* selected_title_id, u8* selected_content_record_type) {      using ContentInfo = std::pair<FileSys::TitleType, FileSys::ContentRecordType>; diff --git a/src/yuzu/main.h b/src/yuzu/main.h index cf191f698..53bedfab3 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -365,6 +365,7 @@ private slots:      void ResetWindowSize720();      void ResetWindowSize900();      void ResetWindowSize1080(); +    void OnMiiEdit();      void OnCaptureScreenshot();      void OnReinitializeKeys(ReinitializeKeyBehavior behavior);      void OnLanguageChanged(const QString& locale); @@ -409,6 +410,7 @@ private:      void OpenPerGameConfiguration(u64 title_id, const std::string& file_name);      bool CheckDarkMode();      bool CheckSystemArchiveDecryption(); +    bool CheckFirmwarePresence();      void ConfigureFilesystemProvider(const std::string& filepath);      QString GetTasStateDescription() const; diff --git a/src/yuzu/main.ui b/src/yuzu/main.ui index e54d7d75d..91d6c5ef3 100644 --- a/src/yuzu/main.ui +++ b/src/yuzu/main.ui @@ -150,6 +150,8 @@      <addaction name="action_Rederive"/>      <addaction name="action_Verify_installed_contents"/>      <addaction name="separator"/> +    <addaction name="action_Load_Mii_Edit"/> +    <addaction name="separator"/>      <addaction name="action_Capture_Screenshot"/>      <addaction name="menuTAS"/>     </widget> @@ -217,7 +219,7 @@    </action>    <action name="action_Verify_installed_contents">     <property name="text"> -    <string>Verify installed contents</string> +    <string>&Verify Installed Contents</string>     </property>    </action>    <action name="action_About"> @@ -368,6 +370,11 @@      <string>&Capture Screenshot</string>     </property>    </action> +  <action name="action_Load_Mii_Edit"> +    <property name="text"> +      <string>Open &Mii Editor</string> +    </property> +  </action>    <action name="action_Configure_Tas">     <property name="text">      <string>&Configure TAS...</string> | 
