diff --git a/external/sciterui b/external/sciterui
index d1620cd8..4caaf3d3 160000
--- a/external/sciterui
+++ b/external/sciterui
@@ -1 +1 @@
-Subproject commit d1620cd8727048b2ce2b9e2041283504b2318bf2
+Subproject commit 4caaf3d3bbfe54f832b3f95fc01e15996fbbf002
diff --git a/lang/english/css/main_window.css b/lang/english/css/main_window.css
index 869edd25..27ac2de1 100644
--- a/lang/english/css/main_window.css
+++ b/lang/english/css/main_window.css
@@ -110,10 +110,6 @@ ul#menu-bar
font-family: 'Segoe UI', Arial, sans-serif;
font-size: 0.9em;
font-weight: 100;
-}
-
-ul#menu-bar
-{
behavior:menu-bar;
flow: horizontal;
padding: 0;
@@ -122,7 +118,7 @@ ul#menu-bar
ul#menu-bar > li
{
- padding: 0.5em 0.5em 0.1em 0.5em;
+ padding: 0.25em 0.5em 0.1em 0.5em;
border: 1px solid transparent;
margin:0;
white-space:nowrap;
@@ -147,10 +143,11 @@ menu
flow: vertical;
display:none;
margin:0;
- padding:0;
+ padding: 0.2em;
max-width:max-content;
background: #31363b;
color: #eff0f1;
+ border: 1px solid #434242;
}
@media (menu-animation-supported) {
@@ -172,7 +169,7 @@ menu li
vertical-align:middle;
foreground-repeat: no-repeat;
foreground-position: left 2px top 50%;
- padding: 0.7em 1.8em 0.7em 1.3em;
+ padding: 0.2em 1.8em 0.2em 1.3em;
margin: 0;
}
@@ -200,6 +197,12 @@ menu li:has-child-of-type(menu):rtl
foreground-position: top 50% left 2px;
}
+hr
+{
+ padding: 0;
+ margin: 0.2em 0;
+}
+
#MainContents
{
width: 100%%;
diff --git a/lang/english/html/system_config.html b/lang/english/html/system_config.html
new file mode 100644
index 00000000..b55dca3f
--- /dev/null
+++ b/lang/english/html/system_config.html
@@ -0,0 +1,176 @@
+
+
+
+
+ NxEmu Configuration
+
+
+
+ NxEmu Configuration
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lang/english/html/system_config_audio.html b/lang/english/html/system_config_audio.html
new file mode 100644
index 00000000..bd24f38d
--- /dev/null
+++ b/lang/english/html/system_config_audio.html
@@ -0,0 +1,30 @@
+
+
diff --git a/src/nxemu/main.cpp b/src/nxemu/main.cpp
index e70e1ff3..2ca5508f 100644
--- a/src/nxemu/main.cpp
+++ b/src/nxemu/main.cpp
@@ -7,11 +7,13 @@
#include
#include
#include
+#include
#include
void RegisterWidgets(ISciterUI & sciterUI)
{
- WidgetMenuBar::Register(sciterUI);
+ Register_WidgetMenuBar(sciterUI);
+ Register_WidgetPageNav(sciterUI);
}
int WINAPI WinMain(_In_ HINSTANCE /*hInstance*/, _In_opt_ HINSTANCE /*hPrevInstance*/, _In_ LPSTR /*lpszArgs*/, _In_ int /*nWinMode*/)
diff --git a/src/nxemu/nxemu.vcxproj b/src/nxemu/nxemu.vcxproj
index eb7dc553..f9a0c81f 100644
--- a/src/nxemu/nxemu.vcxproj
+++ b/src/nxemu/nxemu.vcxproj
@@ -40,8 +40,9 @@
-
+
+
@@ -49,8 +50,9 @@
-
+
+
diff --git a/src/nxemu/nxemu.vcxproj.filters b/src/nxemu/nxemu.vcxproj.filters
index b2410196..2869042f 100644
--- a/src/nxemu/nxemu.vcxproj.filters
+++ b/src/nxemu/nxemu.vcxproj.filters
@@ -45,15 +45,18 @@
Source Files\user_interface
-
- Source Files\user_interface\settings
-
Source Files\user_interface
Source Files\user_interface\settings
+
+ Source Files\user_interface\settings
+
+
+ Source Files\user_interface\settings
+
@@ -68,15 +71,18 @@
Header Files\user_interface
-
- Header Files\user_interface\settings
-
Header Files\user_interface
Header Files\user_interface\settings
+
+ Header Files\user_interface\settings
+
+
+ Header Files\user_interface\settings
+
diff --git a/src/nxemu/user_interface/sciter_main_window.cpp b/src/nxemu/user_interface/sciter_main_window.cpp
index 2233a826..12235715 100644
--- a/src/nxemu/user_interface/sciter_main_window.cpp
+++ b/src/nxemu/user_interface/sciter_main_window.cpp
@@ -1,5 +1,6 @@
#include "sciter_main_window.h"
#include "settings/input_config.h"
+#include "settings/system_config.h"
#include "settings/ui_settings.h"
#include
#include
@@ -11,11 +12,12 @@
#include
#include
-SciterMainWindow::SciterMainWindow(ISciterUI & SciterUI, const char * windowTitle) :
- m_sciterUI(SciterUI),
+SciterMainWindow::SciterMainWindow(ISciterUI & sciterUI, const char * windowTitle) :
+ m_sciterUI(sciterUI),
m_window(nullptr),
m_renderWindow(nullptr),
- m_windowTitle(windowTitle)
+ m_windowTitle(windowTitle),
+ m_systemConfig(sciterUI)
{
Settings & settings = Settings::GetInstance();
settings.RegisterCallback(NXCoreSetting::GameFile, std::bind(&SciterMainWindow::GameFileChanged, this));
@@ -31,7 +33,8 @@ void SciterMainWindow::ResetMenu()
return;
}
MenuBarItemList fileMenu;
- fileMenu.push_back(MenuBarItem(ID_FILE_OPEN_GAME, "Open Game..."));
+ fileMenu.push_back(MenuBarItem(ID_FILE_LOAD_FILE, "Load File..."));
+ fileMenu.push_back(MenuBarItem(MenuBarItem::SPLITER));
Stringlist & recentFiles = uiSettings.recentFiles;
MenuBarItemList RecentGameMenu;
@@ -49,12 +52,13 @@ void SciterMainWindow::ResetMenu()
fileMenu.push_back(MenuBarItem(MenuBarItem::SPLITER));
fileMenu.push_back(MenuBarItem(ID_FILE_EXIT, "Exit"));
- MenuBarItemList OptionsMenu;
- OptionsMenu.push_back(MenuBarItem(ID_OPTIONS_INPUT, "Configure Input..."));
+ MenuBarItemList emulationMenu;
+ emulationMenu.push_back(MenuBarItem(ID_EMULATION_CONTROLLERS, "Controllers..."));
+ emulationMenu.push_back(MenuBarItem(ID_EMULATION_CONFIGURE, "Configure..."));
MenuBarItemList mainTitleMenu;
mainTitleMenu.push_back(MenuBarItem(MenuBarItem::SUB_MENU, "File", &fileMenu));
- mainTitleMenu.push_back(MenuBarItem(MenuBarItem::SUB_MENU, "Options", &OptionsMenu));
+ mainTitleMenu.push_back(MenuBarItem(MenuBarItem::SUB_MENU, "Emulation", &emulationMenu));
m_menuBar->AddSink(this);
m_menuBar->SetMenuContent(mainTitleMenu);
@@ -351,7 +355,7 @@ void SciterMainWindow::DisplayedFramesChanged(void)
ShowWindow((HWND)m_renderWindow, SW_SHOW);
}
-void SciterMainWindow::OnOpenGame(void)
+void SciterMainWindow::OnOpenFile(void)
{
SwitchSystem * system = SwitchSystem::GetInstance();
system->Systemloader().SelectAndLoad((void *)m_window->GetHandle());
@@ -362,6 +366,11 @@ void SciterMainWindow::OnFileExit(void)
m_sciterUI.Stop();
}
+void SciterMainWindow::OnSystemConfig(void)
+{
+ m_systemConfig.Display((void*)m_window->GetHandle());
+}
+
void SciterMainWindow::OnInputConfig(void)
{
InputConfig(m_sciterUI).Display((void *)m_window->GetHandle());
@@ -386,9 +395,10 @@ void SciterMainWindow::OnMenuItem(int32_t id, SCITER_ELEMENT /*item*/)
{
switch (id)
{
- case ID_FILE_OPEN_GAME: OnOpenGame(); break;
+ case ID_FILE_LOAD_FILE: OnOpenFile(); break;
case ID_FILE_EXIT: OnFileExit(); break;
- case ID_OPTIONS_INPUT: OnInputConfig(); break;
+ case ID_EMULATION_CONTROLLERS: OnInputConfig(); break;
+ case ID_EMULATION_CONFIGURE: OnSystemConfig(); break;
default:
if (id >= ID_RECENT_FILE_START && id <= ID_RECENT_FILE_END)
{
diff --git a/src/nxemu/user_interface/sciter_main_window.h b/src/nxemu/user_interface/sciter_main_window.h
index c8d08eed..32c2d279 100644
--- a/src/nxemu/user_interface/sciter_main_window.h
+++ b/src/nxemu/user_interface/sciter_main_window.h
@@ -3,6 +3,7 @@
#include
#include
#include
+#include "user_interface/settings/system_config.h"
class SciterMainWindow :
public IWindowDestroySink,
@@ -14,11 +15,12 @@ class SciterMainWindow :
enum MainMenuID
{
// File Menu
- ID_FILE_OPEN_GAME = 1,
+ ID_FILE_LOAD_FILE = 1,
ID_FILE_EXIT,
- // Options Menu
- ID_OPTIONS_INPUT,
+ // Emulation Menu
+ ID_EMULATION_CONTROLLERS,
+ ID_EMULATION_CONFIGURE,
// Recent files
ID_RECENT_FILE_START,
@@ -26,7 +28,7 @@ class SciterMainWindow :
};
public:
- SciterMainWindow(ISciterUI & SciterUI, const char * windowTitle);
+ SciterMainWindow(ISciterUI & sciterUI, const char * windowTitle);
void ResetMenu();
bool Show(void);
@@ -45,8 +47,9 @@ private:
int32_t SciterKeyToSwitchKey(SciterKeys key);
int32_t SciterKeyToVKCode(SciterKeys vkcode);
- void OnOpenGame(void);
+ void OnOpenFile(void);
void OnFileExit(void);
+ void OnSystemConfig(void);
void OnInputConfig(void);
void OnRecetGame(uint32_t fileIndex);
@@ -73,4 +76,5 @@ private:
std::shared_ptr m_menuBar;
void * m_renderWindow;
std::string m_windowTitle;
+ SystemConfig m_systemConfig;
};
diff --git a/src/nxemu/user_interface/settings/config_setting_section.cpp b/src/nxemu/user_interface/settings/config_setting_section.cpp
deleted file mode 100644
index bb03fd95..00000000
--- a/src/nxemu/user_interface/settings/config_setting_section.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "config_setting_section.h"
-
-ConfigSettingSection::ConfigSettingSection(const wchar_t * pageTitle) :
- m_pageTitle(pageTitle)
-{
-}
-
-void ConfigSettingSection::AddPage(std::shared_ptr page)
-{
- m_pages.push_back(page);
-}
-
-SettingsPage * ConfigSettingSection::GetPage(uint32_t pageNo)
-{
- if (pageNo < 0 || pageNo >= (uint32_t)m_pages.size())
- {
- return NULL;
- }
- return m_pages[pageNo].get();
-}
-
-const wchar_t * ConfigSettingSection::GetPageTitle(void) const
-{
- return m_pageTitle.c_str();
-}
-
-size_t ConfigSettingSection::GetPageCount(void) const
-{
- return m_pages.size();
-}
\ No newline at end of file
diff --git a/src/nxemu/user_interface/settings/config_setting_section.h b/src/nxemu/user_interface/settings/config_setting_section.h
deleted file mode 100644
index 386bdeb3..00000000
--- a/src/nxemu/user_interface/settings/config_setting_section.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-#include
-#include
-#include
-
-class SettingsPage;
-
-class ConfigSettingSection
-{
-public:
- ConfigSettingSection(const wchar_t * pageTitle);
-
- void AddPage(std::shared_ptr page);
- SettingsPage * GetPage(uint32_t pageNo);
-
- const wchar_t * GetPageTitle(void) const;
- size_t GetPageCount(void) const;
-
-private:
- ConfigSettingSection() = delete;
- ConfigSettingSection(const ConfigSettingSection &) = delete;
- ConfigSettingSection & operator=(const ConfigSettingSection &) = delete;
-
- typedef std::vector> SETTING_PAGES;
-
- SETTING_PAGES m_pages;
- std::wstring m_pageTitle;
-};
diff --git a/src/nxemu/user_interface/settings/system_config.cpp b/src/nxemu/user_interface/settings/system_config.cpp
new file mode 100644
index 00000000..82289151
--- /dev/null
+++ b/src/nxemu/user_interface/settings/system_config.cpp
@@ -0,0 +1,66 @@
+#include "system_config.h"
+#include "system_config_audio.h"
+#include
+#include
+#include
+
+SystemConfig::SystemConfig(ISciterUI & SciterUI) :
+ m_sciterUI(SciterUI),
+ m_window(nullptr)
+{
+}
+
+SystemConfig::~SystemConfig()
+{
+}
+
+void SystemConfig::Display(void * parentWindow)
+{
+ enum
+ {
+ WINDOW_HEIGHT = 300,
+ WINDOW_WIDTH = 300,
+ };
+
+ if (!m_sciterUI.WindowCreate(parentWindow, "system_config.html", 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, SUIW_CHILD, m_window))
+ {
+ return;
+ }
+ SciterElement root(m_window->GetRootElement());
+ if (root.IsValid())
+ {
+ SciterElement pageNav = root.GetElementByID("MainTabNav");
+ if (pageNav.IsValid())
+ {
+ void * interfacePtr = nullptr;
+ if (m_sciterUI.GetElementInterface(pageNav, IID_IPAGENAV, &interfacePtr))
+ {
+ m_pageNav = std::shared_ptr(reinterpret_cast(interfacePtr), [](IPageNav*) {});
+ m_pageNav->AddSink(this);
+ }
+ }
+ }
+}
+
+bool SystemConfig::PageNavChangeFrom(const std::string& PageName, SCITER_ELEMENT PageNav)
+{
+ return true;
+}
+
+bool SystemConfig::PageNavChangeTo(const std::string& PageName, SCITER_ELEMENT PageNav)
+{
+ return true;
+}
+
+void SystemConfig::PageNavCreatedPage(const std::string& PageName, SCITER_ELEMENT Page)
+{
+ if (PageName == "Audio")
+ {
+ m_systemConfigAudio.reset(new SystemConfigAudio(m_sciterUI, m_window->GetHandle(), Page));
+ }
+}
+
+void SystemConfig::PageNavPageChanged(const std::string& PageName, SCITER_ELEMENT PageNav)
+{
+}
+
diff --git a/src/nxemu/user_interface/settings/system_config.h b/src/nxemu/user_interface/settings/system_config.h
new file mode 100644
index 00000000..269216a9
--- /dev/null
+++ b/src/nxemu/user_interface/settings/system_config.h
@@ -0,0 +1,32 @@
+#pragma once
+#include
+
+__interface ISciterUI;
+__interface ISciterWindow;
+class SystemConfigAudio;
+
+class SystemConfig :
+ public IPagesSink
+{
+public:
+ SystemConfig(ISciterUI& SciterUI);
+ ~SystemConfig();
+
+ void Display(void* parentWindow);
+
+ // IPagesSink
+ bool PageNavChangeFrom(const std::string& PageName, SCITER_ELEMENT PageNav) override;
+ bool PageNavChangeTo(const std::string& PageName, SCITER_ELEMENT PageNav) override;
+ void PageNavCreatedPage(const std::string& PageName, SCITER_ELEMENT Page) override;
+ void PageNavPageChanged(const std::string& PageName, SCITER_ELEMENT PageNav) override;
+
+private:
+ SystemConfig() = delete;
+ SystemConfig(const SystemConfig &) = delete;
+ SystemConfig & operator=(const SystemConfig &) = delete;
+
+ ISciterUI & m_sciterUI;
+ ISciterWindow * m_window;
+ std::shared_ptr m_pageNav;
+ std::unique_ptr m_systemConfigAudio;
+};
diff --git a/src/nxemu/user_interface/settings/system_config_audio.cpp b/src/nxemu/user_interface/settings/system_config_audio.cpp
new file mode 100644
index 00000000..d668258e
--- /dev/null
+++ b/src/nxemu/user_interface/settings/system_config_audio.cpp
@@ -0,0 +1,8 @@
+#include "system_config_audio.h"
+
+SystemConfigAudio::SystemConfigAudio(ISciterUI & sciterUI, HWINDOW parent, SciterElement page) :
+ m_sciterUI(sciterUI),
+ m_parent(parent),
+ m_page(page)
+{
+}
diff --git a/src/nxemu/user_interface/settings/system_config_audio.h b/src/nxemu/user_interface/settings/system_config_audio.h
new file mode 100644
index 00000000..3912e8df
--- /dev/null
+++ b/src/nxemu/user_interface/settings/system_config_audio.h
@@ -0,0 +1,19 @@
+#pragma once
+#include
+#include
+
+class SystemConfigAudio
+{
+public:
+ SystemConfigAudio(ISciterUI & sciterUI, HWINDOW parent, SciterElement page);
+ ~SystemConfigAudio() = default;
+
+private:
+ SystemConfigAudio() = delete;
+ SystemConfigAudio(const SystemConfigAudio &) = delete;
+ SystemConfigAudio & operator=(const SystemConfigAudio &) = delete;
+
+ ISciterUI & m_sciterUI;
+ HWINDOW m_parent;
+ SciterElement m_page;
+};
\ No newline at end of file