Merge pull request #7964 from german77/miiii
applet: mii: Simple implementation of mii applet
This commit is contained in:
		| @@ -122,6 +122,8 @@ add_library(core STATIC | |||||||
|     frontend/applets/error.h |     frontend/applets/error.h | ||||||
|     frontend/applets/general_frontend.cpp |     frontend/applets/general_frontend.cpp | ||||||
|     frontend/applets/general_frontend.h |     frontend/applets/general_frontend.h | ||||||
|  |     frontend/applets/mii.cpp | ||||||
|  |     frontend/applets/mii.h | ||||||
|     frontend/applets/profile_select.cpp |     frontend/applets/profile_select.cpp | ||||||
|     frontend/applets/profile_select.h |     frontend/applets/profile_select.h | ||||||
|     frontend/applets/software_keyboard.cpp |     frontend/applets/software_keyboard.cpp | ||||||
| @@ -303,6 +305,8 @@ add_library(core STATIC | |||||||
|     hle/service/am/applets/applet_error.h |     hle/service/am/applets/applet_error.h | ||||||
|     hle/service/am/applets/applet_general_backend.cpp |     hle/service/am/applets/applet_general_backend.cpp | ||||||
|     hle/service/am/applets/applet_general_backend.h |     hle/service/am/applets/applet_general_backend.h | ||||||
|  |     hle/service/am/applets/applet_mii.cpp | ||||||
|  |     hle/service/am/applets/applet_mii.h | ||||||
|     hle/service/am/applets/applet_profile_select.cpp |     hle/service/am/applets/applet_profile_select.cpp | ||||||
|     hle/service/am/applets/applet_profile_select.h |     hle/service/am/applets/applet_profile_select.h | ||||||
|     hle/service/am/applets/applet_software_keyboard.cpp |     hle/service/am/applets/applet_software_keyboard.cpp | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								src/core/frontend/applets/mii.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/core/frontend/applets/mii.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | // Copyright 2022 yuzu Emulator Project | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #include "common/logging/log.h" | ||||||
|  | #include "core/frontend/applets/mii.h" | ||||||
|  |  | ||||||
|  | namespace Core::Frontend { | ||||||
|  |  | ||||||
|  | MiiApplet::~MiiApplet() = default; | ||||||
|  |  | ||||||
|  | void DefaultMiiApplet::ShowMii( | ||||||
|  |     const MiiParameters& parameters, | ||||||
|  |     const std::function<void(const Core::Frontend::MiiParameters& parameters)> callback) const { | ||||||
|  |     LOG_INFO(Service_HID, "(STUBBED) called"); | ||||||
|  |     callback(parameters); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Core::Frontend | ||||||
							
								
								
									
										35
									
								
								src/core/frontend/applets/mii.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/core/frontend/applets/mii.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | // Copyright 2022 yuzu Emulator Project | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <functional> | ||||||
|  |  | ||||||
|  | #include "core/hle/result.h" | ||||||
|  | #include "core/hle/service/mii/mii_manager.h" | ||||||
|  |  | ||||||
|  | namespace Core::Frontend { | ||||||
|  |  | ||||||
|  | struct MiiParameters { | ||||||
|  |     bool is_editable; | ||||||
|  |     Service::Mii::MiiInfo mii_data{}; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class MiiApplet { | ||||||
|  | public: | ||||||
|  |     virtual ~MiiApplet(); | ||||||
|  |  | ||||||
|  |     virtual void ShowMii(const MiiParameters& parameters, | ||||||
|  |                          const std::function<void(const Core::Frontend::MiiParameters& parameters)> | ||||||
|  |                              callback) const = 0; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | class DefaultMiiApplet final : public MiiApplet { | ||||||
|  | public: | ||||||
|  |     void ShowMii(const MiiParameters& parameters, | ||||||
|  |                  const std::function<void(const Core::Frontend::MiiParameters& parameters)> | ||||||
|  |                      callback) const override; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace Core::Frontend | ||||||
							
								
								
									
										101
									
								
								src/core/hle/service/am/applets/applet_mii.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/core/hle/service/am/applets/applet_mii.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | |||||||
|  | // Copyright 2022 yuzu Emulator Project | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #include "common/assert.h" | ||||||
|  | #include "common/logging/log.h" | ||||||
|  | #include "core/core.h" | ||||||
|  | #include "core/frontend/applets/mii.h" | ||||||
|  | #include "core/hle/service/am/am.h" | ||||||
|  | #include "core/hle/service/am/applets/applet_mii.h" | ||||||
|  | #include "core/reporter.h" | ||||||
|  |  | ||||||
|  | namespace Service::AM::Applets { | ||||||
|  |  | ||||||
|  | Mii::Mii(Core::System& system_, LibraryAppletMode applet_mode_, | ||||||
|  |          const Core::Frontend::MiiApplet& frontend_) | ||||||
|  |     : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} | ||||||
|  |  | ||||||
|  | Mii::~Mii() = default; | ||||||
|  |  | ||||||
|  | void Mii::Initialize() { | ||||||
|  |     is_complete = false; | ||||||
|  |  | ||||||
|  |     const auto storage = broker.PopNormalDataToApplet(); | ||||||
|  |     ASSERT(storage != nullptr); | ||||||
|  |  | ||||||
|  |     const auto data = storage->GetData(); | ||||||
|  |     ASSERT(data.size() == sizeof(MiiAppletInput)); | ||||||
|  |  | ||||||
|  |     std::memcpy(&input_data, data.data(), sizeof(MiiAppletInput)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | bool Mii::TransactionComplete() const { | ||||||
|  |     return is_complete; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ResultCode Mii::GetStatus() const { | ||||||
|  |     return ResultSuccess; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void Mii::ExecuteInteractive() { | ||||||
|  |     UNREACHABLE_MSG("Unexpected interactive applet data!"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void Mii::Execute() { | ||||||
|  |     if (is_complete) { | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     const auto callback = [this](const Core::Frontend::MiiParameters& parameters) { | ||||||
|  |         DisplayCompleted(parameters); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     switch (input_data.applet_mode) { | ||||||
|  |     case MiiAppletMode::ShowMiiEdit: { | ||||||
|  |         Service::Mii::MiiManager manager; | ||||||
|  |         Core::Frontend::MiiParameters params{ | ||||||
|  |             .is_editable = false, | ||||||
|  |             .mii_data = input_data.mii_char_info.mii_data, | ||||||
|  |         }; | ||||||
|  |         frontend.ShowMii(params, callback); | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |     case MiiAppletMode::EditMii: { | ||||||
|  |         Service::Mii::MiiManager manager; | ||||||
|  |         Core::Frontend::MiiParameters params{ | ||||||
|  |             .is_editable = true, | ||||||
|  |             .mii_data = input_data.mii_char_info.mii_data, | ||||||
|  |         }; | ||||||
|  |         frontend.ShowMii(params, callback); | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |     case MiiAppletMode::CreateMii: { | ||||||
|  |         Service::Mii::MiiManager manager; | ||||||
|  |         Core::Frontend::MiiParameters params{ | ||||||
|  |             .is_editable = true, | ||||||
|  |             .mii_data = manager.BuildDefault(0), | ||||||
|  |         }; | ||||||
|  |         frontend.ShowMii(params, callback); | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |     default: | ||||||
|  |         UNIMPLEMENTED_MSG("Unimplemented LibAppletMiiEdit mode={:02X}!", input_data.applet_mode); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void Mii::DisplayCompleted(const Core::Frontend::MiiParameters& parameters) { | ||||||
|  |     is_complete = true; | ||||||
|  |  | ||||||
|  |     std::vector<u8> reply(sizeof(AppletOutputForCharInfoEditing)); | ||||||
|  |     output_data = { | ||||||
|  |         .result = ResultSuccess, | ||||||
|  |         .mii_data = parameters.mii_data, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     std::memcpy(reply.data(), &output_data, sizeof(AppletOutputForCharInfoEditing)); | ||||||
|  |     broker.PushNormalDataFromApplet(std::make_shared<IStorage>(system, std::move(reply))); | ||||||
|  |     broker.SignalStateChanged(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Service::AM::Applets | ||||||
							
								
								
									
										90
									
								
								src/core/hle/service/am/applets/applet_mii.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								src/core/hle/service/am/applets/applet_mii.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | |||||||
|  | // Copyright 2022 yuzu Emulator Project | ||||||
|  | // Licensed under GPLv2 or any later version | ||||||
|  | // Refer to the license.txt file included. | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <array> | ||||||
|  |  | ||||||
|  | #include "core/hle/result.h" | ||||||
|  | #include "core/hle/service/am/applets/applets.h" | ||||||
|  | #include "core/hle/service/mii/mii_manager.h" | ||||||
|  |  | ||||||
|  | namespace Core { | ||||||
|  | class System; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | namespace Service::AM::Applets { | ||||||
|  |  | ||||||
|  | // This is nn::mii::AppletMode | ||||||
|  | enum class MiiAppletMode : u32 { | ||||||
|  |     ShowMiiEdit = 0, | ||||||
|  |     AppendMii = 1, | ||||||
|  |     AppendMiiImage = 2, | ||||||
|  |     UpdateMiiImage = 3, | ||||||
|  |     CreateMii = 4, | ||||||
|  |     EditMii = 5, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | struct MiiCharInfo { | ||||||
|  |     Service::Mii::MiiInfo mii_data{}; | ||||||
|  |     INSERT_PADDING_BYTES(0x28); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(MiiCharInfo) == 0x80, "MiiCharInfo has incorrect size."); | ||||||
|  |  | ||||||
|  | // This is nn::mii::AppletInput | ||||||
|  | struct MiiAppletInput { | ||||||
|  |     s32 version{}; | ||||||
|  |     MiiAppletMode applet_mode{}; | ||||||
|  |     u32 special_mii_key_code{}; | ||||||
|  |     union { | ||||||
|  |         std::array<Common::UUID, 8> valid_uuid; | ||||||
|  |         MiiCharInfo mii_char_info; | ||||||
|  |     }; | ||||||
|  |     Common::UUID used_uuid; | ||||||
|  |     INSERT_PADDING_BYTES(0x64); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(MiiAppletInput) == 0x100, "MiiAppletInput has incorrect size."); | ||||||
|  |  | ||||||
|  | // This is nn::mii::AppletOutput | ||||||
|  | struct MiiAppletOutput { | ||||||
|  |     ResultCode result{ResultSuccess}; | ||||||
|  |     s32 index{}; | ||||||
|  |     INSERT_PADDING_BYTES(0x18); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(MiiAppletOutput) == 0x20, "MiiAppletOutput has incorrect size."); | ||||||
|  |  | ||||||
|  | // This is nn::mii::AppletOutputForCharInfoEditing | ||||||
|  | struct AppletOutputForCharInfoEditing { | ||||||
|  |     ResultCode result{ResultSuccess}; | ||||||
|  |     Service::Mii::MiiInfo mii_data{}; | ||||||
|  |     INSERT_PADDING_BYTES(0x24); | ||||||
|  | }; | ||||||
|  | static_assert(sizeof(AppletOutputForCharInfoEditing) == 0x80, | ||||||
|  |               "AppletOutputForCharInfoEditing has incorrect size."); | ||||||
|  |  | ||||||
|  | class Mii final : public Applet { | ||||||
|  | public: | ||||||
|  |     explicit Mii(Core::System& system_, LibraryAppletMode applet_mode_, | ||||||
|  |                  const Core::Frontend::MiiApplet& frontend_); | ||||||
|  |     ~Mii() override; | ||||||
|  |  | ||||||
|  |     void Initialize() override; | ||||||
|  |  | ||||||
|  |     bool TransactionComplete() const override; | ||||||
|  |     ResultCode GetStatus() const override; | ||||||
|  |     void ExecuteInteractive() override; | ||||||
|  |     void Execute() override; | ||||||
|  |  | ||||||
|  |     void DisplayCompleted(const Core::Frontend::MiiParameters& parameters); | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     const Core::Frontend::MiiApplet& frontend; | ||||||
|  |     MiiAppletInput input_data{}; | ||||||
|  |     AppletOutputForCharInfoEditing output_data{}; | ||||||
|  |  | ||||||
|  |     bool is_complete = false; | ||||||
|  |     Core::System& system; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | } // namespace Service::AM::Applets | ||||||
| @@ -9,6 +9,7 @@ | |||||||
| #include "core/frontend/applets/controller.h" | #include "core/frontend/applets/controller.h" | ||||||
| #include "core/frontend/applets/error.h" | #include "core/frontend/applets/error.h" | ||||||
| #include "core/frontend/applets/general_frontend.h" | #include "core/frontend/applets/general_frontend.h" | ||||||
|  | #include "core/frontend/applets/mii.h" | ||||||
| #include "core/frontend/applets/profile_select.h" | #include "core/frontend/applets/profile_select.h" | ||||||
| #include "core/frontend/applets/software_keyboard.h" | #include "core/frontend/applets/software_keyboard.h" | ||||||
| #include "core/frontend/applets/web_browser.h" | #include "core/frontend/applets/web_browser.h" | ||||||
| @@ -19,6 +20,7 @@ | |||||||
| #include "core/hle/service/am/applets/applet_controller.h" | #include "core/hle/service/am/applets/applet_controller.h" | ||||||
| #include "core/hle/service/am/applets/applet_error.h" | #include "core/hle/service/am/applets/applet_error.h" | ||||||
| #include "core/hle/service/am/applets/applet_general_backend.h" | #include "core/hle/service/am/applets/applet_general_backend.h" | ||||||
|  | #include "core/hle/service/am/applets/applet_mii.h" | ||||||
| #include "core/hle/service/am/applets/applet_profile_select.h" | #include "core/hle/service/am/applets/applet_profile_select.h" | ||||||
| #include "core/hle/service/am/applets/applet_software_keyboard.h" | #include "core/hle/service/am/applets/applet_software_keyboard.h" | ||||||
| #include "core/hle/service/am/applets/applet_web_browser.h" | #include "core/hle/service/am/applets/applet_web_browser.h" | ||||||
| @@ -172,10 +174,11 @@ AppletFrontendSet::AppletFrontendSet() = default; | |||||||
|  |  | ||||||
| AppletFrontendSet::AppletFrontendSet(ControllerApplet controller_applet, ErrorApplet error_applet, | AppletFrontendSet::AppletFrontendSet(ControllerApplet controller_applet, ErrorApplet error_applet, | ||||||
|                                      ParentalControlsApplet parental_controls_applet, |                                      ParentalControlsApplet parental_controls_applet, | ||||||
|                                      PhotoViewer photo_viewer_, ProfileSelect profile_select_, |                                      MiiApplet mii_applet, PhotoViewer photo_viewer_, | ||||||
|  |                                      ProfileSelect profile_select_, | ||||||
|                                      SoftwareKeyboard software_keyboard_, WebBrowser web_browser_) |                                      SoftwareKeyboard software_keyboard_, WebBrowser web_browser_) | ||||||
|     : controller{std::move(controller_applet)}, error{std::move(error_applet)}, |     : controller{std::move(controller_applet)}, error{std::move(error_applet)}, | ||||||
|       parental_controls{std::move(parental_controls_applet)}, |       parental_controls{std::move(parental_controls_applet)}, mii{std::move(mii_applet)}, | ||||||
|       photo_viewer{std::move(photo_viewer_)}, profile_select{std::move(profile_select_)}, |       photo_viewer{std::move(photo_viewer_)}, profile_select{std::move(profile_select_)}, | ||||||
|       software_keyboard{std::move(software_keyboard_)}, web_browser{std::move(web_browser_)} {} |       software_keyboard{std::move(software_keyboard_)}, web_browser{std::move(web_browser_)} {} | ||||||
|  |  | ||||||
| @@ -206,6 +209,10 @@ void AppletManager::SetAppletFrontendSet(AppletFrontendSet set) { | |||||||
|         frontend.parental_controls = std::move(set.parental_controls); |         frontend.parental_controls = std::move(set.parental_controls); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if (set.mii != nullptr) { | ||||||
|  |         frontend.mii = std::move(set.mii); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (set.photo_viewer != nullptr) { |     if (set.photo_viewer != nullptr) { | ||||||
|         frontend.photo_viewer = std::move(set.photo_viewer); |         frontend.photo_viewer = std::move(set.photo_viewer); | ||||||
|     } |     } | ||||||
| @@ -243,6 +250,10 @@ void AppletManager::SetDefaultAppletsIfMissing() { | |||||||
|             std::make_unique<Core::Frontend::DefaultParentalControlsApplet>(); |             std::make_unique<Core::Frontend::DefaultParentalControlsApplet>(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     if (frontend.mii == nullptr) { | ||||||
|  |         frontend.mii = std::make_unique<Core::Frontend::DefaultMiiApplet>(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (frontend.photo_viewer == nullptr) { |     if (frontend.photo_viewer == nullptr) { | ||||||
|         frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>(); |         frontend.photo_viewer = std::make_unique<Core::Frontend::DefaultPhotoViewerApplet>(); | ||||||
|     } |     } | ||||||
| @@ -277,6 +288,8 @@ std::shared_ptr<Applet> AppletManager::GetApplet(AppletId id, LibraryAppletMode | |||||||
|         return std::make_shared<ProfileSelect>(system, mode, *frontend.profile_select); |         return std::make_shared<ProfileSelect>(system, mode, *frontend.profile_select); | ||||||
|     case AppletId::SoftwareKeyboard: |     case AppletId::SoftwareKeyboard: | ||||||
|         return std::make_shared<SoftwareKeyboard>(system, mode, *frontend.software_keyboard); |         return std::make_shared<SoftwareKeyboard>(system, mode, *frontend.software_keyboard); | ||||||
|  |     case AppletId::MiiEdit: | ||||||
|  |         return std::make_shared<Mii>(system, mode, *frontend.mii); | ||||||
|     case AppletId::Web: |     case AppletId::Web: | ||||||
|     case AppletId::Shop: |     case AppletId::Shop: | ||||||
|     case AppletId::OfflineWeb: |     case AppletId::OfflineWeb: | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ class ControllerApplet; | |||||||
| class ECommerceApplet; | class ECommerceApplet; | ||||||
| class ErrorApplet; | class ErrorApplet; | ||||||
| class ParentalControlsApplet; | class ParentalControlsApplet; | ||||||
|  | class MiiApplet; | ||||||
| class PhotoViewerApplet; | class PhotoViewerApplet; | ||||||
| class ProfileSelectApplet; | class ProfileSelectApplet; | ||||||
| class SoftwareKeyboardApplet; | class SoftwareKeyboardApplet; | ||||||
| @@ -179,6 +180,7 @@ struct AppletFrontendSet { | |||||||
|     using ControllerApplet = std::unique_ptr<Core::Frontend::ControllerApplet>; |     using ControllerApplet = std::unique_ptr<Core::Frontend::ControllerApplet>; | ||||||
|     using ErrorApplet = std::unique_ptr<Core::Frontend::ErrorApplet>; |     using ErrorApplet = std::unique_ptr<Core::Frontend::ErrorApplet>; | ||||||
|     using ParentalControlsApplet = std::unique_ptr<Core::Frontend::ParentalControlsApplet>; |     using ParentalControlsApplet = std::unique_ptr<Core::Frontend::ParentalControlsApplet>; | ||||||
|  |     using MiiApplet = std::unique_ptr<Core::Frontend::MiiApplet>; | ||||||
|     using PhotoViewer = std::unique_ptr<Core::Frontend::PhotoViewerApplet>; |     using PhotoViewer = std::unique_ptr<Core::Frontend::PhotoViewerApplet>; | ||||||
|     using ProfileSelect = std::unique_ptr<Core::Frontend::ProfileSelectApplet>; |     using ProfileSelect = std::unique_ptr<Core::Frontend::ProfileSelectApplet>; | ||||||
|     using SoftwareKeyboard = std::unique_ptr<Core::Frontend::SoftwareKeyboardApplet>; |     using SoftwareKeyboard = std::unique_ptr<Core::Frontend::SoftwareKeyboardApplet>; | ||||||
| @@ -186,9 +188,9 @@ struct AppletFrontendSet { | |||||||
|  |  | ||||||
|     AppletFrontendSet(); |     AppletFrontendSet(); | ||||||
|     AppletFrontendSet(ControllerApplet controller_applet, ErrorApplet error_applet, |     AppletFrontendSet(ControllerApplet controller_applet, ErrorApplet error_applet, | ||||||
|                       ParentalControlsApplet parental_controls_applet, PhotoViewer photo_viewer_, |                       ParentalControlsApplet parental_controls_applet, MiiApplet mii_applet, | ||||||
|                       ProfileSelect profile_select_, SoftwareKeyboard software_keyboard_, |                       PhotoViewer photo_viewer_, ProfileSelect profile_select_, | ||||||
|                       WebBrowser web_browser_); |                       SoftwareKeyboard software_keyboard_, WebBrowser web_browser_); | ||||||
|     ~AppletFrontendSet(); |     ~AppletFrontendSet(); | ||||||
|  |  | ||||||
|     AppletFrontendSet(const AppletFrontendSet&) = delete; |     AppletFrontendSet(const AppletFrontendSet&) = delete; | ||||||
| @@ -200,6 +202,7 @@ struct AppletFrontendSet { | |||||||
|     ControllerApplet controller; |     ControllerApplet controller; | ||||||
|     ErrorApplet error; |     ErrorApplet error; | ||||||
|     ParentalControlsApplet parental_controls; |     ParentalControlsApplet parental_controls; | ||||||
|  |     MiiApplet mii; | ||||||
|     PhotoViewer photo_viewer; |     PhotoViewer photo_viewer; | ||||||
|     ProfileSelect profile_select; |     ProfileSelect profile_select; | ||||||
|     SoftwareKeyboard software_keyboard; |     SoftwareKeyboard software_keyboard; | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ | |||||||
| #include "core/file_sys/vfs_real.h" | #include "core/file_sys/vfs_real.h" | ||||||
| #include "core/frontend/applets/controller.h" | #include "core/frontend/applets/controller.h" | ||||||
| #include "core/frontend/applets/general_frontend.h" | #include "core/frontend/applets/general_frontend.h" | ||||||
|  | #include "core/frontend/applets/mii.h" | ||||||
| #include "core/frontend/applets/software_keyboard.h" | #include "core/frontend/applets/software_keyboard.h" | ||||||
| #include "core/hid/emulated_controller.h" | #include "core/hid/emulated_controller.h" | ||||||
| #include "core/hid/hid_core.h" | #include "core/hid/hid_core.h" | ||||||
| @@ -1285,6 +1286,7 @@ bool GMainWindow::LoadROM(const QString& filename, u64 program_id, std::size_t p | |||||||
|         std::make_unique<QtControllerSelector>(*this), // Controller Selector |         std::make_unique<QtControllerSelector>(*this), // Controller Selector | ||||||
|         std::make_unique<QtErrorDisplay>(*this),       // Error Display |         std::make_unique<QtErrorDisplay>(*this),       // Error Display | ||||||
|         nullptr,                                       // Parental Controls |         nullptr,                                       // Parental Controls | ||||||
|  |         nullptr,                                       // Mii editor | ||||||
|         nullptr,                                       // Photo Viewer |         nullptr,                                       // Photo Viewer | ||||||
|         std::make_unique<QtProfileSelector>(*this),    // Profile Selector |         std::make_unique<QtProfileSelector>(*this),    // Profile Selector | ||||||
|         std::make_unique<QtSoftwareKeyboard>(*this),   // Software Keyboard |         std::make_unique<QtSoftwareKeyboard>(*this),   // Software Keyboard | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user