diff --git a/lang/english/css/profile_select_dialog.css b/lang/english/css/profile_select_dialog.css
new file mode 100644
index 00000000..28e0c7d0
--- /dev/null
+++ b/lang/english/css/profile_select_dialog.css
@@ -0,0 +1,86 @@
+.profile-select-body
+{
+ padding: 0.75rem 0.5rem 0.25rem;
+ min-width: 30rem;
+ min-height: 18rem;
+ color: var(--color-ui-text-primary);
+ font-family: var(--font-ui);
+ font-size: 0.9rem;
+ flow: vertical;
+ height: *;
+}
+
+.profile-select-instruction
+{
+ margin: 0 0 0.65rem 0;
+ color: var(--color-ui-text-primary);
+ font-size: 0.95rem;
+}
+
+.profile-grid
+{
+ flow: horizontal-wrap;
+ border: 1px solid #55575a;
+ border-radius: 5px;
+ background: #1e1e1e;
+ padding: 0.5rem;
+ width: 100%;
+ height: *;
+ overflow-y: auto;
+ vertical-align: top;
+}
+
+.profile-tile
+{
+ position: relative;
+ width: 96px;
+ margin: 0.35rem;
+ padding: 0.25rem;
+ border: 2px solid transparent;
+ border-radius: 5px;
+ flow: vertical;
+ horizontal-align: center;
+ cursor: pointer;
+ behavior: clickable;
+}
+
+.profile-tile:hover
+{
+ background: rgba(255, 255, 255, 0.06);
+}
+
+.profile-tile.current
+{
+ background: rgba(61, 174, 233, 0.22);
+ border: 2px solid #3daee9;
+}
+
+.profile-tile.current > .profile-tile-name
+{
+ color: #ffffff;
+ font-weight: 600;
+}
+
+.profile-tile-avatar
+{
+ width: 96px;
+ height: 96px;
+ border-radius: 4px;
+ background: #111111;
+ overflow: hidden;
+ foreground-repeat: no-repeat;
+ foreground-position: 50% 50%;
+ foreground-size: 100% 100%;
+}
+
+.profile-tile-name
+{
+ width: 90px;
+ margin-top: 0.35rem;
+ text-align: center;
+ color: var(--color-ui-text-primary);
+ font-size: 0.85rem;
+ overflow-x: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/lang/english/html/profile_select_dialog.html b/lang/english/html/profile_select_dialog.html
new file mode 100644
index 00000000..d53517cd
--- /dev/null
+++ b/lang/english/html/profile_select_dialog.html
@@ -0,0 +1,24 @@
+
+
+
+
+
+ Profile Selector
+
+
+
Profile Selector
+
+
+
+
+
+
+
+
+
diff --git a/src/nxemu-module-spec/operating_system.h b/src/nxemu-module-spec/operating_system.h
index 016a56c2..69d7c9a1 100644
--- a/src/nxemu-module-spec/operating_system.h
+++ b/src/nxemu-module-spec/operating_system.h
@@ -24,7 +24,7 @@ typedef struct CabinetParameters
typedef void (CALL *CabinetFinishedFn)(void * user_data, bool success, const char * amiibo_name_utf8);
-nxinterface ICabinetFrontendApplet
+nxinterface ICabinetApplet
{
virtual void Close() = 0;
virtual void ShowCabinetApplet(void * user_data, CabinetFinishedFn on_finished, const CabinetParameters * parameters) = 0;
@@ -52,7 +52,7 @@ typedef struct ControllerHostParameters
typedef void (CALL *ControllerReconfigureFn)(void * user_data, bool ok);
-nxinterface IControllerFrontendApplet
+nxinterface IControllerApplet
{
virtual void Close() = 0;
virtual void ReconfigureControllers(void * user_data, ControllerReconfigureFn on_complete, const ControllerHostParameters * parameters) = 0;
@@ -60,7 +60,7 @@ nxinterface IControllerFrontendApplet
typedef void (CALL *SimpleFinishedFn)(void * user_data);
-nxinterface IErrorFrontendApplet
+nxinterface IErrorApplet
{
virtual void Close() = 0;
virtual void ShowError(uint32_t result_raw, void * user_data, SimpleFinishedFn finished) const = 0;
@@ -68,7 +68,7 @@ nxinterface IErrorFrontendApplet
virtual void ShowCustomErrorText(uint32_t result_raw, const char * dialog_text_utf8, const char * fullscreen_text_utf8, void * user_data, SimpleFinishedFn finished) const = 0;
};
-nxinterface IMiiEditFrontendApplet
+nxinterface IMiiEditApplet
{
virtual void Close() = 0;
virtual void ShowMiiEdit(void * user_data, SimpleFinishedFn finished) const = 0;
@@ -76,7 +76,7 @@ nxinterface IMiiEditFrontendApplet
typedef void (CALL *BoolFinishedFn)(void * user_data, bool ok);
-nxinterface IParentalControlsFrontendApplet
+nxinterface IParentalControlsApplet
{
virtual void Close() = 0;
virtual void VerifyPIN(void * user_data, BoolFinishedFn finished, bool suspend_future_verification_temporarily) = 0;
@@ -85,7 +85,7 @@ nxinterface IParentalControlsFrontendApplet
virtual void ChangePIN(void * user_data, SimpleFinishedFn finished) = 0;
};
-nxinterface IPhotoViewerFrontendApplet
+nxinterface IPhotoViewerApplet
{
virtual void Close() = 0;
virtual void ShowPhotosForApplication(uint64_t title_id, void * user_data, SimpleFinishedFn finished) const = 0;
@@ -146,7 +146,7 @@ typedef struct ProfileSelectHostParameters
typedef void (CALL *ProfileSelectFinishedFn)(void * user_data, bool has_uuid, const uint8_t uuid_bytes[16]);
-nxinterface IProfileSelectFrontendApplet
+nxinterface IProfileSelectApplet
{
virtual void Close() = 0;
virtual void SelectProfile(void * user_data, ProfileSelectFinishedFn finished, const ProfileSelectHostParameters * parameters) const = 0;
@@ -265,7 +265,7 @@ typedef struct InlineTextHostParameters
typedef void (CALL *SwkbdSubmitNormalFn)(void * user_data, uint32_t result_raw, const uint16_t * text_utf16, uint32_t text_utf16_unit_count, bool confirmed);
typedef void (CALL *SwkbdSubmitInlineFn)(void * user_data, uint32_t reply_raw, const uint16_t * text_utf16, uint32_t text_utf16_unit_count, int32_t cursor);
-nxinterface ISoftwareKeyboardFrontendApplet
+nxinterface ISoftwareKeyboardApplet
{
virtual void Close() = 0;
virtual void InitializeKeyboard(bool is_inline, const KeyboardInitializeParameters * initialize_parameters, void * user_data_normal, SwkbdSubmitNormalFn submit_normal, void * user_data_inline, SwkbdSubmitInlineFn submit_inline) = 0;
@@ -290,7 +290,7 @@ enum class WebExitReasonHost : uint32_t
typedef void (CALL *ExtractRomFsFn)(void * user_data);
typedef void (CALL *OpenWebPageFn)(void * user_data, uint32_t exit_reason_raw, const char * last_url_utf8);
-nxinterface IWebBrowserFrontendApplet
+nxinterface IWebBrowserApplet
{
virtual void Close() = 0;
virtual void OpenLocalWebPage(const char * local_url_utf8, void * extract_user_data, ExtractRomFsFn extract_romfs, void * open_user_data, OpenWebPageFn open_callback) const = 0;
@@ -695,7 +695,7 @@ nxinterface IOperatingSystem
virtual PerfStatsResults GetAndResetPerfStats() = 0;
virtual void SetEmulationPaused(bool paused) = 0;
virtual bool IsEmulationPaused() const = 0;
- virtual void SetFrontendApplets(ICabinetFrontendApplet * cabinet, IControllerFrontendApplet * controller, IErrorFrontendApplet * error, IMiiEditFrontendApplet * mii_edit, IParentalControlsFrontendApplet * parental_controls, IPhotoViewerFrontendApplet * photo_viewer, IProfileSelectFrontendApplet * profile_select, ISoftwareKeyboardFrontendApplet * software_keyboard, IWebBrowserFrontendApplet * web_browser) = 0;
+ virtual void SetFrontendApplets(ICabinetApplet * cabinet, IControllerApplet * controller, IErrorApplet * error, IMiiEditApplet * mii_edit, IParentalControlsApplet * parental_controls, IPhotoViewerApplet * photo_viewer, IProfileSelectApplet * profile_select, ISoftwareKeyboardApplet * software_keyboard, IWebBrowserApplet * web_browser) = 0;
virtual void SetPlayerButtonState(uint32_t player_index, uint32_t button_ordinal, bool pressed) = 0;
virtual void SetPlayerAnalogState(uint32_t player_index, uint32_t stick_index, float x, float y) = 0;
virtual uint32_t GetProfileCount() const = 0;
diff --git a/src/nxemu-os/applets/cabinet.h b/src/nxemu-os/applets/cabinet.h
index 96c125dd..e1a638a2 100644
--- a/src/nxemu-os/applets/cabinet.h
+++ b/src/nxemu-os/applets/cabinet.h
@@ -6,7 +6,7 @@
#include
class DefaultCabinetApplet final :
- public ICabinetFrontendApplet
+ public ICabinetApplet
{
public:
void Close() override;
diff --git a/src/nxemu-os/applets/controller.h b/src/nxemu-os/applets/controller.h
index edcc0233..339c04bd 100644
--- a/src/nxemu-os/applets/controller.h
+++ b/src/nxemu-os/applets/controller.h
@@ -11,7 +11,7 @@ class HIDCore;
}
class DefaultControllerApplet final :
- public IControllerFrontendApplet
+ public IControllerApplet
{
public:
explicit DefaultControllerApplet(Core::HID::HIDCore & hid_core_);
diff --git a/src/nxemu-os/applets/error.h b/src/nxemu-os/applets/error.h
index 61b23d2b..26eeb8ad 100644
--- a/src/nxemu-os/applets/error.h
+++ b/src/nxemu-os/applets/error.h
@@ -22,7 +22,7 @@ public:
};
class DefaultErrorApplet final :
- public IErrorFrontendApplet
+ public IErrorApplet
{
public:
void Close() override;
diff --git a/src/nxemu-os/applets/general.h b/src/nxemu-os/applets/general.h
index d2103515..69d6901d 100644
--- a/src/nxemu-os/applets/general.h
+++ b/src/nxemu-os/applets/general.h
@@ -7,7 +7,7 @@
#include
class DefaultParentalControlsApplet final :
- public IParentalControlsFrontendApplet
+ public IParentalControlsApplet
{
public:
void Close() override;
@@ -18,7 +18,7 @@ public:
};
class DefaultPhotoViewerApplet final :
- public IPhotoViewerFrontendApplet
+ public IPhotoViewerApplet
{
public:
void Close() override;
diff --git a/src/nxemu-os/applets/mii_edit.h b/src/nxemu-os/applets/mii_edit.h
index 1f23582d..28c0bd18 100644
--- a/src/nxemu-os/applets/mii_edit.h
+++ b/src/nxemu-os/applets/mii_edit.h
@@ -5,7 +5,7 @@
#include
class DefaultMiiEditApplet final :
- public IMiiEditFrontendApplet
+ public IMiiEditApplet
{
public:
void Close() override;
diff --git a/src/nxemu-os/applets/profile_select.h b/src/nxemu-os/applets/profile_select.h
index 095c7283..187834ed 100644
--- a/src/nxemu-os/applets/profile_select.h
+++ b/src/nxemu-os/applets/profile_select.h
@@ -19,7 +19,7 @@ struct ProfileSelectParameters
};
class DefaultProfileSelectApplet final :
- public IProfileSelectFrontendApplet
+ public IProfileSelectApplet
{
public:
void Close() override;
diff --git a/src/nxemu-os/applets/software_keyboard.h b/src/nxemu-os/applets/software_keyboard.h
index ab418677..5dc45ae7 100644
--- a/src/nxemu-os/applets/software_keyboard.h
+++ b/src/nxemu-os/applets/software_keyboard.h
@@ -14,7 +14,7 @@ struct InlineTextParameters
};
class DefaultSoftwareKeyboardApplet final :
- public ISoftwareKeyboardFrontendApplet
+ public ISoftwareKeyboardApplet
{
public:
void Close() override;
diff --git a/src/nxemu-os/applets/web_browser.h b/src/nxemu-os/applets/web_browser.h
index 7ff870a5..481e1e28 100644
--- a/src/nxemu-os/applets/web_browser.h
+++ b/src/nxemu-os/applets/web_browser.h
@@ -5,7 +5,7 @@
#include
class DefaultWebBrowserApplet final :
- public IWebBrowserFrontendApplet
+ public IWebBrowserApplet
{
public:
void Close() override;
diff --git a/src/nxemu-os/core/hle/service/am/frontend/applet_controller.cpp b/src/nxemu-os/core/hle/service/am/frontend/applet_controller.cpp
index 40992eea..a3802e57 100644
--- a/src/nxemu-os/core/hle/service/am/frontend/applet_controller.cpp
+++ b/src/nxemu-os/core/hle/service/am/frontend/applet_controller.cpp
@@ -60,7 +60,7 @@ static ControllerHostParameters ConvertToFrontendParameters(
return params;
}
-Controller::Controller(Core::System & system_, std::shared_ptr