summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp
diff options
context:
space:
mode:
authorskidau <skidau@gmail.com>2015-03-28 10:11:29 +1100
committerskidau <skidau@gmail.com>2015-03-28 10:11:29 +1100
commit74f25ad8ecef9315add7983f7c98b182a7771e45 (patch)
tree2f2f467c6f8bd4b27a4d9f779ef6e08ac9f265f6 /Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp
parenta2c4abcae891f02cbea2607daa2819692c159a58 (diff)
parentb459a8ec61c1c10f4484edaa02908f9ed90b1e15 (diff)
Merge pull request #2234 from lioncash/config
DolphinWX: Break up ConfigMain into separate classes.
Diffstat (limited to 'Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp')
-rw-r--r--Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp256
1 files changed, 256 insertions, 0 deletions
diff --git a/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp b/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp
new file mode 100644
index 0000000000..44412a2bba
--- /dev/null
+++ b/Source/Core/DolphinWX/Config/InterfaceConfigPane.cpp
@@ -0,0 +1,256 @@
+// Copyright 2015 Dolphin Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#include <string>
+
+#include <wx/button.h>
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/language.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+
+#include "Common/CommonPaths.h"
+#include "Common/FileSearch.h"
+#include "Common/FileUtil.h"
+#include "Core/ConfigManager.h"
+#include "Core/HotkeyManager.h"
+#include "DolphinWX/Frame.h"
+#include "DolphinWX/InputConfigDiag.h"
+#include "DolphinWX/Main.h"
+#include "DolphinWX/WxUtils.h"
+#include "DolphinWX/Config/InterfaceConfigPane.h"
+
+#if defined(HAVE_XRANDR) && HAVE_XRANDR
+#include "DolphinWX/X11Utils.h"
+#endif
+
+static const wxLanguage language_ids[] =
+{
+ wxLANGUAGE_DEFAULT,
+
+ wxLANGUAGE_CATALAN,
+ wxLANGUAGE_CZECH,
+ wxLANGUAGE_GERMAN,
+ wxLANGUAGE_ENGLISH,
+ wxLANGUAGE_SPANISH,
+ wxLANGUAGE_FRENCH,
+ wxLANGUAGE_ITALIAN,
+ wxLANGUAGE_HUNGARIAN,
+ wxLANGUAGE_DUTCH,
+ wxLANGUAGE_NORWEGIAN_BOKMAL,
+ wxLANGUAGE_POLISH,
+ wxLANGUAGE_PORTUGUESE,
+ wxLANGUAGE_PORTUGUESE_BRAZILIAN,
+ wxLANGUAGE_SERBIAN,
+ wxLANGUAGE_SWEDISH,
+ wxLANGUAGE_TURKISH,
+
+ wxLANGUAGE_GREEK,
+ wxLANGUAGE_RUSSIAN,
+ wxLANGUAGE_HEBREW,
+ wxLANGUAGE_ARABIC,
+ wxLANGUAGE_FARSI,
+ wxLANGUAGE_KOREAN,
+ wxLANGUAGE_JAPANESE,
+ wxLANGUAGE_CHINESE_SIMPLIFIED,
+ wxLANGUAGE_CHINESE_TRADITIONAL,
+};
+
+InterfaceConfigPane::InterfaceConfigPane(wxWindow* parent, wxWindowID id)
+ : wxPanel(parent, id)
+{
+ InitializeGUI();
+ LoadGUIValues();
+}
+
+void InterfaceConfigPane::InitializeGUI()
+{
+ // GUI language arrayStrings
+ // keep these in sync with the langIds array at the beginning of this file
+ m_interface_lang_strings.Add(_("<System Language>"));
+ m_interface_lang_strings.Add(L"Catal\u00E0"); // Catalan
+ m_interface_lang_strings.Add(L"\u010Ce\u0161tina"); // Czech
+ m_interface_lang_strings.Add(L"Deutsch"); // German
+ m_interface_lang_strings.Add(L"English"); // English
+ m_interface_lang_strings.Add(L"Espa\u00F1ol"); // Spanish
+ m_interface_lang_strings.Add(L"Fran\u00E7ais"); // French
+ m_interface_lang_strings.Add(L"Italiano"); // Italian
+ m_interface_lang_strings.Add(L"Magyar"); // Hungarian
+ m_interface_lang_strings.Add(L"Nederlands"); // Dutch
+ m_interface_lang_strings.Add(L"Norsk bokm\u00E5l"); // Norwegian
+ m_interface_lang_strings.Add(L"Polski"); // Polish
+ m_interface_lang_strings.Add(L"Portugu\u00EAs"); // Portuguese
+ m_interface_lang_strings.Add(L"Portugu\u00EAs (Brasil)"); // Portuguese (Brazil)
+ m_interface_lang_strings.Add(L"Srpski"); // Serbian
+ m_interface_lang_strings.Add(L"Svenska"); // Swedish
+ m_interface_lang_strings.Add(L"T\u00FCrk\u00E7e"); // Turkish
+ m_interface_lang_strings.Add(L"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"); // Greek
+ m_interface_lang_strings.Add(L"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"); // Russian
+ m_interface_lang_strings.Add(L"\u05E2\u05D1\u05E8\u05D9\u05EA"); // Hebrew
+ m_interface_lang_strings.Add(L"\u0627\u0644\u0639\u0631\u0628\u064A\u0629"); // Arabic
+ m_interface_lang_strings.Add(L"\u0641\u0627\u0631\u0633\u06CC"); // Farsi
+ m_interface_lang_strings.Add(L"\uD55C\uAD6D\uC5B4"); // Korean
+ m_interface_lang_strings.Add(L"\u65E5\u672C\u8A9E"); // Japanese
+ m_interface_lang_strings.Add(L"\u7B80\u4F53\u4E2D\u6587"); // Simplified Chinese
+ m_interface_lang_strings.Add(L"\u7E41\u9AD4\u4E2D\u6587"); // Traditional Chinese
+
+ m_confirm_stop_checkbox = new wxCheckBox(this, wxID_ANY, _("Confirm on Stop"));
+ m_panic_handlers_checkbox = new wxCheckBox(this, wxID_ANY, _("Use Panic Handlers"));
+ m_osd_messages_checkbox = new wxCheckBox(this, wxID_ANY, _("On-Screen Display Messages"));
+ m_pause_focus_lost_checkbox = new wxCheckBox(this, wxID_ANY, _("Pause on Focus Lost"));
+ m_interface_lang_choice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_interface_lang_strings);
+ m_hotkey_config_button = new wxButton(this, wxID_ANY, _("Hotkeys"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
+ m_theme_choice = new wxChoice(this, wxID_ANY);
+
+ m_confirm_stop_checkbox->Bind(wxEVT_CHECKBOX, &InterfaceConfigPane::OnConfirmStopCheckBoxChanged, this);
+ m_panic_handlers_checkbox->Bind(wxEVT_CHECKBOX, &InterfaceConfigPane::OnPanicHandlersCheckBoxChanged, this);
+ m_osd_messages_checkbox->Bind(wxEVT_CHECKBOX, &InterfaceConfigPane::OnOSDMessagesCheckBoxChanged, this);
+ m_pause_focus_lost_checkbox->Bind(wxEVT_CHECKBOX, &InterfaceConfigPane::OnPauseOnFocusLostCheckBoxChanged, this);
+ m_interface_lang_choice->Bind(wxEVT_CHOICE, &InterfaceConfigPane::OnInterfaceLanguageChoiceChanged, this);
+ m_theme_choice->Bind(wxEVT_CHOICE, &InterfaceConfigPane::OnThemeSelected, this);
+
+ m_confirm_stop_checkbox->SetToolTip(_("Show a confirmation box before stopping a game."));
+ m_panic_handlers_checkbox->SetToolTip(_("Show a message box when a potentially serious error has occurred.\nDisabling this may avoid annoying and non-fatal messages, but it may result in major crashes having no explanation at all."));
+ m_osd_messages_checkbox->SetToolTip(_("Display messages over the emulation screen area.\nThese messages include memory card writes, video backend and CPU information, and JIT cache clearing."));
+ m_pause_focus_lost_checkbox->SetToolTip(_("Pauses the emulator when focus is taken away from the emulation window."));
+ m_interface_lang_choice->SetToolTip(_("Change the language of the user interface.\nRequires restart."));
+
+ wxBoxSizer* const language_sizer = new wxBoxSizer(wxHORIZONTAL);
+ language_sizer->Add(new wxStaticText(this, wxID_ANY, _("Language:")), 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
+ language_sizer->Add(m_interface_lang_choice, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
+ language_sizer->AddStretchSpacer();
+ language_sizer->Add(m_hotkey_config_button, 0, wxALIGN_RIGHT | wxALL, 5);
+
+ wxBoxSizer* const theme_sizer = new wxBoxSizer(wxHORIZONTAL);
+ theme_sizer->Add(new wxStaticText(this, wxID_ANY, _("Theme:")), 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
+ theme_sizer->Add(m_theme_choice, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
+ theme_sizer->AddStretchSpacer();
+
+ wxStaticBoxSizer* const main_static_box_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Interface Settings"));
+ main_static_box_sizer->Add(m_confirm_stop_checkbox, 0, wxALL, 5);
+ main_static_box_sizer->Add(m_panic_handlers_checkbox, 0, wxALL, 5);
+ main_static_box_sizer->Add(m_osd_messages_checkbox, 0, wxALL, 5);
+ main_static_box_sizer->Add(m_pause_focus_lost_checkbox, 0, wxALL, 5);
+ main_static_box_sizer->Add(theme_sizer, 0, wxEXPAND | wxALL, 5);
+ main_static_box_sizer->Add(language_sizer, 0, wxEXPAND | wxALL, 5);
+
+ wxBoxSizer* const main_box_sizer = new wxBoxSizer(wxVERTICAL);
+ main_box_sizer->Add(main_static_box_sizer, 0, wxEXPAND | wxALL, 5);
+
+ SetSizer(main_box_sizer);
+}
+
+void InterfaceConfigPane::LoadGUIValues()
+{
+ const SCoreStartupParameter& startup_params = SConfig::GetInstance().m_LocalCoreStartupParameter;
+
+ m_confirm_stop_checkbox->SetValue(startup_params.bConfirmStop);
+ m_panic_handlers_checkbox->SetValue(startup_params.bUsePanicHandlers);
+ m_osd_messages_checkbox->SetValue(startup_params.bOnScreenDisplayMessages);
+ m_pause_focus_lost_checkbox->SetValue(SConfig::GetInstance().m_PauseOnFocusLost);
+
+ for (size_t i = 0; i < sizeof(language_ids) / sizeof(wxLanguage); i++)
+ {
+ if (language_ids [i] == SConfig::GetInstance().m_InterfaceLanguage)
+ {
+ m_interface_lang_choice->SetSelection(i);
+ break;
+ }
+ }
+
+ LoadThemes();
+}
+
+void InterfaceConfigPane::LoadThemes()
+{
+ CFileSearch::XStringVector theme_dirs;
+ theme_dirs.push_back(File::GetUserPath(D_THEMES_IDX));
+ theme_dirs.push_back(File::GetSysDirectory() + THEMES_DIR);
+
+ CFileSearch cfs(CFileSearch::XStringVector(1, "*"), theme_dirs);
+ auto const& sv = cfs.GetFileNames();
+ for (const std::string& filename : sv)
+ {
+ std::string name, ext;
+ SplitPath(filename, nullptr, &name, &ext);
+
+ name += ext;
+ const wxString wxname = StrToWxStr(name);
+ if (-1 == m_theme_choice->FindString(wxname))
+ m_theme_choice->Append(wxname);
+ }
+
+ m_theme_choice->SetStringSelection(StrToWxStr(SConfig::GetInstance().m_LocalCoreStartupParameter.theme_name));
+}
+
+void InterfaceConfigPane::OnHotkeyConfigButtonClicked(wxCommandEvent& event)
+{
+ bool was_init = false;
+
+ InputConfig* const hotkey_plugin = HotkeyManagerEmu::GetConfig();
+
+ // check if game is running
+ if (g_controller_interface.IsInit())
+ {
+ was_init = true;
+ }
+ else
+ {
+#if defined(HAVE_X11) && HAVE_X11
+ Window win = X11Utils::XWindowFromHandle(GetHandle());
+ HotkeyManagerEmu::Initialize(reinterpret_cast<void*>(win));
+#else
+ HotkeyManagerEmu::Initialize(reinterpret_cast<void*>(GetHandle()));
+#endif
+ }
+
+ InputConfigDialog m_ConfigFrame(this, *hotkey_plugin, _("Dolphin Hotkeys"));
+ m_ConfigFrame.ShowModal();
+
+ // if game isn't running
+ if (!was_init)
+ HotkeyManagerEmu::Shutdown();
+
+ // Update the GUI in case menu accelerators were changed
+ main_frame->UpdateGUI();
+}
+
+void InterfaceConfigPane::OnConfirmStopCheckBoxChanged(wxCommandEvent& event)
+{
+ SConfig::GetInstance().m_LocalCoreStartupParameter.bConfirmStop = m_confirm_stop_checkbox->IsChecked();
+}
+
+void InterfaceConfigPane::OnPanicHandlersCheckBoxChanged(wxCommandEvent& event)
+{
+ SConfig::GetInstance().m_LocalCoreStartupParameter.bUsePanicHandlers = m_panic_handlers_checkbox->IsChecked();
+ SetEnableAlert(m_panic_handlers_checkbox->IsChecked());
+}
+
+void InterfaceConfigPane::OnOSDMessagesCheckBoxChanged(wxCommandEvent& event)
+{
+ SConfig::GetInstance().m_LocalCoreStartupParameter.bOnScreenDisplayMessages = m_osd_messages_checkbox->IsChecked();
+}
+
+void InterfaceConfigPane::OnInterfaceLanguageChoiceChanged(wxCommandEvent& event)
+{
+ if (SConfig::GetInstance().m_InterfaceLanguage != language_ids[m_interface_lang_choice->GetSelection()])
+ SuccessAlertT("You must restart Dolphin in order for the change to take effect.");
+
+ SConfig::GetInstance().m_InterfaceLanguage = language_ids[m_interface_lang_choice->GetSelection()];
+}
+
+void InterfaceConfigPane::OnPauseOnFocusLostCheckBoxChanged(wxCommandEvent& event)
+{
+ SConfig::GetInstance().m_PauseOnFocusLost = m_pause_focus_lost_checkbox->IsChecked();
+}
+
+void InterfaceConfigPane::OnThemeSelected(wxCommandEvent& event)
+{
+ SConfig::GetInstance().m_LocalCoreStartupParameter.theme_name = WxStrToStr(m_theme_choice->GetStringSelection());
+
+ main_frame->InitBitmaps();
+ main_frame->UpdateGameList();
+}
+