mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-05 04:16:29 +01:00
e63b07f73b
The ControllerConfigDiag design was getting confusing, so more significant changes needed to be done. Firstly, the GC controller and the Wiimote section layouts have been aligned for consistency. The Balance Board source chooser is a checkbox. The "general settings" that affect the SYSCONF have been moved to the Wii pane in the Config dialog. It makes more sense because those affect the Wii's settings in the NAND, unlike the other options. Another reason for moving it is that the Controller Config Dialog was getting pretty crowded, and the whole section is disabled when emulation is running, which is wasted space. The Wiimotes section is now organised by two radio buttons. One is for the Passthrough Mode, with sync/reset buttons under it; the other is the emulated Bluetooth mode, which still has the regular Wiimote source choosers, the Continuous Scanning controls and the Enable Speaker Data option (which only applies to the emulated BT mode). Hopefully this should make things a bit clearer and look cleaner. (This is a monolithic commit because separating UI changes is hard)
269 lines
12 KiB
C++
269 lines
12 KiB
C++
// Copyright 2015 Dolphin Emulator Project
|
|
// Licensed under GPLv2+
|
|
// Refer to the license.txt file included.
|
|
|
|
#include <wx/checkbox.h>
|
|
#include <wx/choice.h>
|
|
#include <wx/gbsizer.h>
|
|
#include <wx/sizer.h>
|
|
#include <wx/slider.h>
|
|
#include <wx/stattext.h>
|
|
|
|
#include "Core/ConfigManager.h"
|
|
#include "Core/Core.h"
|
|
#include "Core/IPC_HLE/WII_IPC_HLE.h"
|
|
#include "DiscIO/Enums.h"
|
|
#include "DolphinWX/Config/WiiConfigPane.h"
|
|
#include "DolphinWX/WxUtils.h"
|
|
|
|
WiiConfigPane::WiiConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id)
|
|
{
|
|
InitializeGUI();
|
|
LoadGUIValues();
|
|
RefreshGUI();
|
|
}
|
|
|
|
void WiiConfigPane::InitializeGUI()
|
|
{
|
|
m_aspect_ratio_strings.Add("4:3");
|
|
m_aspect_ratio_strings.Add("16:9");
|
|
|
|
m_system_language_strings.Add(_("Japanese"));
|
|
m_system_language_strings.Add(_("English"));
|
|
m_system_language_strings.Add(_("German"));
|
|
m_system_language_strings.Add(_("French"));
|
|
m_system_language_strings.Add(_("Spanish"));
|
|
m_system_language_strings.Add(_("Italian"));
|
|
m_system_language_strings.Add(_("Dutch"));
|
|
m_system_language_strings.Add(_("Simplified Chinese"));
|
|
m_system_language_strings.Add(_("Traditional Chinese"));
|
|
m_system_language_strings.Add(_("Korean"));
|
|
|
|
m_bt_sensor_bar_pos_strings.Add(_("Bottom"));
|
|
m_bt_sensor_bar_pos_strings.Add(_("Top"));
|
|
|
|
m_screensaver_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Screen Saver"));
|
|
m_pal60_mode_checkbox = new wxCheckBox(this, wxID_ANY, _("Use PAL60 Mode (EuRGB60)"));
|
|
m_aspect_ratio_choice =
|
|
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_aspect_ratio_strings);
|
|
m_system_language_choice =
|
|
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_system_language_strings);
|
|
m_sd_card_checkbox = new wxCheckBox(this, wxID_ANY, _("Insert SD Card"));
|
|
m_connect_keyboard_checkbox = new wxCheckBox(this, wxID_ANY, _("Connect USB Keyboard"));
|
|
m_bt_sensor_bar_pos =
|
|
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_bt_sensor_bar_pos_strings);
|
|
m_bt_sensor_bar_sens = new wxSlider(this, wxID_ANY, 0, 0, 4);
|
|
m_bt_speaker_volume = new wxSlider(this, wxID_ANY, 0, 0, 127);
|
|
m_bt_wiimote_motor = new wxCheckBox(this, wxID_ANY, _("Wiimote Motor"));
|
|
|
|
// With some GTK themes, no minimum size will be applied - so do this manually here
|
|
m_bt_sensor_bar_sens->SetMinSize(wxSize(100, -1));
|
|
m_bt_speaker_volume->SetMinSize(wxSize(100, -1));
|
|
|
|
m_screensaver_checkbox->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnScreenSaverCheckBoxChanged, this);
|
|
m_pal60_mode_checkbox->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnPAL60CheckBoxChanged, this);
|
|
m_aspect_ratio_choice->Bind(wxEVT_CHOICE, &WiiConfigPane::OnAspectRatioChoiceChanged, this);
|
|
m_system_language_choice->Bind(wxEVT_CHOICE, &WiiConfigPane::OnSystemLanguageChoiceChanged, this);
|
|
m_sd_card_checkbox->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnSDCardCheckBoxChanged, this);
|
|
m_connect_keyboard_checkbox->Bind(wxEVT_CHECKBOX,
|
|
&WiiConfigPane::OnConnectKeyboardCheckBoxChanged, this);
|
|
m_bt_sensor_bar_pos->Bind(wxEVT_CHOICE, &WiiConfigPane::OnSensorBarPosChanged, this);
|
|
m_bt_sensor_bar_sens->Bind(wxEVT_SLIDER, &WiiConfigPane::OnSensorBarSensChanged, this);
|
|
m_bt_speaker_volume->Bind(wxEVT_SLIDER, &WiiConfigPane::OnSpeakerVolumeChanged, this);
|
|
m_bt_wiimote_motor->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnWiimoteMotorChanged, this);
|
|
|
|
m_screensaver_checkbox->SetToolTip(_("Dims the screen after five minutes of inactivity."));
|
|
m_pal60_mode_checkbox->SetToolTip(_("Sets the Wii display mode to 60Hz (480i) instead of 50Hz "
|
|
"(576i) for PAL games.\nMay not work for all games."));
|
|
m_system_language_choice->SetToolTip(_("Sets the Wii system language."));
|
|
m_sd_card_checkbox->SetToolTip(_("Saved to /Wii/sd.raw (default size is 128mb)"));
|
|
m_connect_keyboard_checkbox->SetToolTip(_("May cause slow down in Wii Menu and some games."));
|
|
|
|
wxGridBagSizer* const misc_settings_grid_sizer = new wxGridBagSizer();
|
|
misc_settings_grid_sizer->Add(m_screensaver_checkbox, wxGBPosition(0, 0), wxGBSpan(1, 2), wxALL,
|
|
5);
|
|
misc_settings_grid_sizer->Add(m_pal60_mode_checkbox, wxGBPosition(1, 0), wxGBSpan(1, 2), wxALL,
|
|
5);
|
|
misc_settings_grid_sizer->Add(new wxStaticText(this, wxID_ANY, _("Aspect Ratio:")),
|
|
wxGBPosition(2, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxALL,
|
|
5);
|
|
misc_settings_grid_sizer->Add(m_aspect_ratio_choice, wxGBPosition(2, 1), wxDefaultSpan, wxALL, 5);
|
|
misc_settings_grid_sizer->Add(new wxStaticText(this, wxID_ANY, _("System Language:")),
|
|
wxGBPosition(3, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxALL,
|
|
5);
|
|
misc_settings_grid_sizer->Add(m_system_language_choice, wxGBPosition(3, 1), wxDefaultSpan, wxALL,
|
|
5);
|
|
|
|
auto* const bt_sensor_bar_pos_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
bt_sensor_bar_pos_sizer->Add(new wxStaticText(this, wxID_ANY, _("Min")), 0,
|
|
wxALIGN_CENTER_VERTICAL);
|
|
bt_sensor_bar_pos_sizer->Add(m_bt_sensor_bar_sens);
|
|
bt_sensor_bar_pos_sizer->Add(new wxStaticText(this, wxID_ANY, _("Max")), 0,
|
|
wxALIGN_CENTER_VERTICAL);
|
|
|
|
auto* const bt_speaker_volume_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
bt_speaker_volume_sizer->Add(new wxStaticText(this, wxID_ANY, _("Min")), 0,
|
|
wxALIGN_CENTER_VERTICAL);
|
|
bt_speaker_volume_sizer->Add(m_bt_speaker_volume);
|
|
bt_speaker_volume_sizer->Add(new wxStaticText(this, wxID_ANY, _("Max")), 0,
|
|
wxALIGN_CENTER_VERTICAL);
|
|
|
|
wxGridBagSizer* const bt_settings_grid_sizer = new wxGridBagSizer();
|
|
bt_settings_grid_sizer->Add(new wxStaticText(this, wxID_ANY, _("Sensor Bar Position:")),
|
|
wxGBPosition(0, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxALL,
|
|
5);
|
|
bt_settings_grid_sizer->Add(m_bt_sensor_bar_pos, wxGBPosition(0, 1), wxDefaultSpan, wxALL, 5);
|
|
bt_settings_grid_sizer->Add(new wxStaticText(this, wxID_ANY, _("IR Sensitivity:")),
|
|
wxGBPosition(1, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxALL,
|
|
5);
|
|
bt_settings_grid_sizer->Add(bt_sensor_bar_pos_sizer, wxGBPosition(1, 1), wxDefaultSpan, wxALL, 5);
|
|
bt_settings_grid_sizer->Add(new wxStaticText(this, wxID_ANY, _("Speaker Volume:")),
|
|
wxGBPosition(2, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxALL,
|
|
5);
|
|
bt_settings_grid_sizer->Add(bt_speaker_volume_sizer, wxGBPosition(2, 1), wxDefaultSpan, wxALL, 5);
|
|
bt_settings_grid_sizer->Add(m_bt_wiimote_motor, wxGBPosition(3, 0), wxGBSpan(1, 2), wxALL, 5);
|
|
|
|
wxStaticBoxSizer* const misc_settings_static_sizer =
|
|
new wxStaticBoxSizer(wxVERTICAL, this, _("Misc Settings"));
|
|
misc_settings_static_sizer->Add(misc_settings_grid_sizer);
|
|
|
|
wxStaticBoxSizer* const device_settings_sizer =
|
|
new wxStaticBoxSizer(wxVERTICAL, this, _("Device Settings"));
|
|
device_settings_sizer->Add(m_sd_card_checkbox, 0, wxALL, 5);
|
|
device_settings_sizer->Add(m_connect_keyboard_checkbox, 0, wxALL, 5);
|
|
|
|
auto* const bt_settings_static_sizer =
|
|
new wxStaticBoxSizer(wxVERTICAL, this, _("Wii Remote Settings"));
|
|
bt_settings_static_sizer->Add(bt_settings_grid_sizer);
|
|
|
|
wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL);
|
|
main_sizer->Add(misc_settings_static_sizer, 0, wxEXPAND | wxALL, 5);
|
|
main_sizer->Add(device_settings_sizer, 0, wxEXPAND | wxALL, 5);
|
|
main_sizer->Add(bt_settings_static_sizer, 0, wxEXPAND | wxALL, 5);
|
|
|
|
SetSizer(main_sizer);
|
|
}
|
|
|
|
void WiiConfigPane::LoadGUIValues()
|
|
{
|
|
m_screensaver_checkbox->SetValue(!!SConfig::GetInstance().m_SYSCONF->GetData<u8>("IPL.SSV"));
|
|
m_pal60_mode_checkbox->SetValue(SConfig::GetInstance().bPAL60);
|
|
m_aspect_ratio_choice->SetSelection(SConfig::GetInstance().m_SYSCONF->GetData<u8>("IPL.AR"));
|
|
m_system_language_choice->SetSelection(SConfig::GetInstance().m_SYSCONF->GetData<u8>("IPL.LNG"));
|
|
|
|
m_sd_card_checkbox->SetValue(SConfig::GetInstance().m_WiiSDCard);
|
|
m_connect_keyboard_checkbox->SetValue(SConfig::GetInstance().m_WiiKeyboard);
|
|
|
|
m_bt_sensor_bar_pos->SetSelection(SConfig::GetInstance().m_SYSCONF->GetData<u8>("BT.BAR"));
|
|
m_bt_sensor_bar_sens->SetValue(SConfig::GetInstance().m_SYSCONF->GetData<u32>("BT.SENS"));
|
|
m_bt_speaker_volume->SetValue(SConfig::GetInstance().m_SYSCONF->GetData<u8>("BT.SPKV"));
|
|
m_bt_wiimote_motor->SetValue(SConfig::GetInstance().m_SYSCONF->GetData<bool>("BT.MOT"));
|
|
}
|
|
|
|
void WiiConfigPane::RefreshGUI()
|
|
{
|
|
if (Core::IsRunning())
|
|
{
|
|
m_screensaver_checkbox->Disable();
|
|
m_pal60_mode_checkbox->Disable();
|
|
m_aspect_ratio_choice->Disable();
|
|
m_system_language_choice->Disable();
|
|
|
|
m_bt_sensor_bar_pos->Disable();
|
|
m_bt_sensor_bar_sens->Disable();
|
|
m_bt_speaker_volume->Disable();
|
|
m_bt_wiimote_motor->Disable();
|
|
}
|
|
}
|
|
|
|
void WiiConfigPane::OnScreenSaverCheckBoxChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_SYSCONF->SetData("IPL.SSV", m_screensaver_checkbox->IsChecked());
|
|
}
|
|
|
|
void WiiConfigPane::OnPAL60CheckBoxChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().bPAL60 = m_pal60_mode_checkbox->IsChecked();
|
|
SConfig::GetInstance().m_SYSCONF->SetData("IPL.E60", m_pal60_mode_checkbox->IsChecked());
|
|
}
|
|
|
|
void WiiConfigPane::OnSDCardCheckBoxChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_WiiSDCard = m_sd_card_checkbox->IsChecked();
|
|
WII_IPC_HLE_Interface::SDIO_EventNotify();
|
|
}
|
|
|
|
void WiiConfigPane::OnConnectKeyboardCheckBoxChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_WiiKeyboard = m_connect_keyboard_checkbox->IsChecked();
|
|
}
|
|
|
|
void WiiConfigPane::OnSystemLanguageChoiceChanged(wxCommandEvent& event)
|
|
{
|
|
DiscIO::Language wii_system_lang =
|
|
static_cast<DiscIO::Language>(m_system_language_choice->GetSelection());
|
|
SConfig::GetInstance().m_SYSCONF->SetData("IPL.LNG", wii_system_lang);
|
|
u8 country_code = GetSADRCountryCode(wii_system_lang);
|
|
|
|
if (!SConfig::GetInstance().m_SYSCONF->SetArrayData("IPL.SADR", &country_code, 1))
|
|
WxUtils::ShowErrorDialog(_("Failed to update country code in SYSCONF"));
|
|
}
|
|
|
|
void WiiConfigPane::OnAspectRatioChoiceChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_SYSCONF->SetData("IPL.AR", m_aspect_ratio_choice->GetSelection());
|
|
}
|
|
|
|
void WiiConfigPane::OnSensorBarPosChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_SYSCONF->SetData("BT.BAR", event.GetInt());
|
|
}
|
|
|
|
void WiiConfigPane::OnSensorBarSensChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_SYSCONF->SetData("BT.SENS", event.GetInt());
|
|
}
|
|
|
|
void WiiConfigPane::OnSpeakerVolumeChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_SYSCONF->SetData("BT.SPKV", event.GetInt());
|
|
}
|
|
|
|
void WiiConfigPane::OnWiimoteMotorChanged(wxCommandEvent& event)
|
|
{
|
|
SConfig::GetInstance().m_SYSCONF->SetData("BT.MOT", event.GetInt());
|
|
}
|
|
|
|
// Change from IPL.LNG value to IPL.SADR country code.
|
|
// http://wiibrew.org/wiki/Country_Codes
|
|
u8 WiiConfigPane::GetSADRCountryCode(DiscIO::Language language)
|
|
{
|
|
switch (language)
|
|
{
|
|
case DiscIO::Language::LANGUAGE_JAPANESE:
|
|
return 1; // Japan
|
|
case DiscIO::Language::LANGUAGE_ENGLISH:
|
|
return 49; // USA
|
|
case DiscIO::Language::LANGUAGE_GERMAN:
|
|
return 78; // Germany
|
|
case DiscIO::Language::LANGUAGE_FRENCH:
|
|
return 77; // France
|
|
case DiscIO::Language::LANGUAGE_SPANISH:
|
|
return 105; // Spain
|
|
case DiscIO::Language::LANGUAGE_ITALIAN:
|
|
return 83; // Italy
|
|
case DiscIO::Language::LANGUAGE_DUTCH:
|
|
return 94; // Netherlands
|
|
case DiscIO::Language::LANGUAGE_SIMPLIFIED_CHINESE:
|
|
case DiscIO::Language::LANGUAGE_TRADITIONAL_CHINESE:
|
|
return 157; // China
|
|
case DiscIO::Language::LANGUAGE_KOREAN:
|
|
return 136; // Korea
|
|
case DiscIO::Language::LANGUAGE_UNKNOWN:
|
|
break;
|
|
}
|
|
|
|
PanicAlert("Invalid language. Defaulting to Japanese.");
|
|
return 1;
|
|
}
|