From c5f497ec1df6d1d0096e3d9876f29f574e7fb132 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 12 Dec 2013 21:47:42 -0700 Subject: [PATCH] add settings data for general page, query available languages --- obs/obs-app.cpp | 2 +- obs/obs-app.hpp | 4 ++ obs/platform-windows.cpp | 7 +++- obs/settings-basic-general.cpp | 74 +++++++++++++++++++++++++++++++--- obs/settings-basic.hpp | 5 ++- obs/window-settings-basic.cpp | 2 + obs/window-settings-basic.hpp | 5 +++ obs/wx-subclass.hpp | 2 +- 8 files changed, 91 insertions(+), 10 deletions(-) diff --git a/obs/obs-app.cpp b/obs/obs-app.cpp index 00dcd9965..5af5584b8 100644 --- a/obs/obs-app.cpp +++ b/obs/obs-app.cpp @@ -51,7 +51,7 @@ static void do_log(enum log_type type, const char *msg, va_list args) void OBSApp::InitGlobalConfigDefaults() { - config_set_default_string(globalConfig, "General", "Language", "en-US"); + config_set_default_string(globalConfig, "General", "Language", "en"); config_set_default_int(globalConfig, "Window", "PosX", -1); config_set_default_int(globalConfig, "Window", "PosY", -1); config_set_default_int(globalConfig, "Window", "SizeX", -1); diff --git a/obs/obs-app.hpp b/obs/obs-app.hpp index 01f4cdb59..966e78d52 100644 --- a/obs/obs-app.hpp +++ b/obs/obs-app.hpp @@ -41,6 +41,8 @@ public: virtual int OnExit(); virtual void CleanUp(); + inline config_t GlobalConfig() {return globalConfig;} + inline const char *GetString(const char *lookupVal) { return textLookup.GetString(lookupVal); @@ -49,4 +51,6 @@ public: wxDECLARE_APP(OBSApp); +inline config_t GetGlobalConfig() {return wxGetApp().GlobalConfig();} + #define Str(lookupVal) wxGetApp().GetString(lookupVal) diff --git a/obs/platform-windows.cpp b/obs/platform-windows.cpp index ea388bc25..85f2a3854 100644 --- a/obs/platform-windows.cpp +++ b/obs/platform-windows.cpp @@ -18,10 +18,15 @@ #include #include "platform.hpp" +#include + +#define WIN32_LEAN_AND_MEAN +#include + bool GetDataFilePath(const char *data, string &output) { stringstream str; str << "../../data/obs-studio/" << data; output = str.str(); - return true; + return os_file_exists(output.c_str()); } diff --git a/obs/settings-basic-general.cpp b/obs/settings-basic-general.cpp index ec74df76a..aa6f3a73a 100644 --- a/obs/settings-basic-general.cpp +++ b/obs/settings-basic-general.cpp @@ -15,25 +15,87 @@ along with this program. If not, see . ******************************************************************************/ -#include "settings-basic.hpp" #include "obs-app.hpp" - -#include -using namespace std; +#include "settings-basic.hpp" +#include "window-settings-basic.hpp" +#include "platform.hpp" class GeneralSettings : public BasicSettingsData { + ConfigFile localeIni; + + int AddLanguage(const char *tag); + void FillLanguageList(const char *currentLang); + public: GeneralSettings(OBSBasicSettings *window); virtual void Apply(); }; -GeneralSettings::GeneralSettings(OBSBasicSettings *window) - : BasicSettingsData(window) +class LanguageInfo : public wxClientData { +public: + const char *tag; + const char *name; + const char *subLang; + bool isDefault; + + inline LanguageInfo(config_t config, const char *tag) + : wxClientData (), + tag (tag), + name (config_get_string(config, tag, "Name")), + subLang (config_get_string(config, tag, "SubLang")), + isDefault (config_get_bool(config, tag, "DefaultSubLang")) + { + } +}; + +int GeneralSettings::AddLanguage(const char *tag) { + LanguageInfo *info = new LanguageInfo(localeIni, tag); + return window->languageList->Append(wxString(info->name, wxConvUTF8), + info); +} + +void GeneralSettings::FillLanguageList(const char *currentLang) +{ + size_t numSections = config_num_sections(localeIni); + for (size_t i = 0; i < numSections; i++) { + const char *lang = config_get_section(localeIni, i); + int idx = AddLanguage(lang); + + if (strcmp(lang, currentLang) == 0) + window->languageList->SetSelection(idx); + } +} + +GeneralSettings::GeneralSettings(OBSBasicSettings *window) + : BasicSettingsData (window) +{ + string path; + if (!GetDataFilePath("locale/locale.ini", path)) + throw "Could not find locale/locale.ini path"; + if (localeIni.Open(path.c_str(), CONFIG_OPEN_EXISTING) != 0) + throw "Could not open locale.ini"; + + const char *currentLang = config_get_string(GetGlobalConfig(), + "General", "Language"); + FillLanguageList(currentLang); } void GeneralSettings::Apply() { } + +BasicSettingsData *CreateBasicGeneralSettings(OBSBasicSettings *window) +{ + BasicSettingsData *data = NULL; + + try { + data = new GeneralSettings(window); + } catch (const char *error) { + blog(LOG_ERROR, "CreateBasicGeneralSettings failed: %s", error); + } + + return data; +} diff --git a/obs/settings-basic.hpp b/obs/settings-basic.hpp index 5274b7062..97bab9926 100644 --- a/obs/settings-basic.hpp +++ b/obs/settings-basic.hpp @@ -18,7 +18,8 @@ #pragma once #include "settings.hpp" -#include "window-settings-basic.hpp" + +class OBSBasicSettings; class BasicSettingsData : public SettingsData { protected: @@ -27,3 +28,5 @@ protected: public: inline BasicSettingsData(OBSBasicSettings *window) : window(window) {} }; + +BasicSettingsData *CreateBasicGeneralSettings(OBSBasicSettings *window); diff --git a/obs/window-settings-basic.cpp b/obs/window-settings-basic.cpp index 704981fac..839802965 100644 --- a/obs/window-settings-basic.cpp +++ b/obs/window-settings-basic.cpp @@ -20,6 +20,8 @@ OBSBasicSettings::OBSBasicSettings(wxWindow *parent) : OBSBasicSettingsBase(parent) { + unique_ptr data(CreateBasicGeneralSettings(this)); + settings = move(data); } void OBSBasicSettings::PageChanged(wxListbookEvent &event) diff --git a/obs/window-settings-basic.hpp b/obs/window-settings-basic.hpp index 3d8bb3aef..9a81295b1 100644 --- a/obs/window-settings-basic.hpp +++ b/obs/window-settings-basic.hpp @@ -18,9 +18,14 @@ #pragma once #include "forms/OBSWindows.h" +#include "settings-basic.hpp" + +#include +using namespace std; class OBSBasicSettings : public OBSBasicSettingsBase { protected: + unique_ptr settings; virtual void PageChanged(wxListbookEvent &event); virtual void PageChanging(wxListbookEvent &event); diff --git a/obs/wx-subclass.hpp b/obs/wx-subclass.hpp index 15ab3f4ce..67a907285 100644 --- a/obs/wx-subclass.hpp +++ b/obs/wx-subclass.hpp @@ -29,7 +29,7 @@ #ifdef _ #undef _ -#define _(str) Str(str) +#define _(str) wxString(Str(str), wxConvUTF8) #endif class DialogSubclass : public wxDialog {