mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-24 23:31:36 +08:00
add settings data for general page, query available languages
This commit is contained in:
@@ -15,25 +15,87 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
******************************************************************************/
|
||||
|
||||
#include "settings-basic.hpp"
|
||||
#include "obs-app.hpp"
|
||||
|
||||
#include <string>
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user