DolphinWX: Add USB passthrough settings
Allows adding/removing devices from USB passthrough.
This commit is contained in:
parent
69a13a12e2
commit
b7cc25535f
|
@ -7,6 +7,7 @@ set(GUI_SRCS
|
||||||
Cheats/CheatsWindow.cpp
|
Cheats/CheatsWindow.cpp
|
||||||
Cheats/CreateCodeDialog.cpp
|
Cheats/CreateCodeDialog.cpp
|
||||||
Cheats/GeckoCodeDiag.cpp
|
Cheats/GeckoCodeDiag.cpp
|
||||||
|
Config/AddUSBDeviceDiag.cpp
|
||||||
Config/AdvancedConfigPane.cpp
|
Config/AdvancedConfigPane.cpp
|
||||||
Config/AudioConfigPane.cpp
|
Config/AudioConfigPane.cpp
|
||||||
Config/ConfigMain.cpp
|
Config/ConfigMain.cpp
|
||||||
|
|
|
@ -0,0 +1,164 @@
|
||||||
|
// Copyright 2016 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2+
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
#include <wx/listbox.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/window.h>
|
||||||
|
|
||||||
|
#include "Common/StringUtil.h"
|
||||||
|
#include "Core/ConfigManager.h"
|
||||||
|
#include "DolphinWX/Config/AddUSBDeviceDiag.h"
|
||||||
|
#include "DolphinWX/WxUtils.h"
|
||||||
|
#include "UICommon/USBUtils.h"
|
||||||
|
|
||||||
|
AddUSBDeviceDiag::AddUSBDeviceDiag(wxWindow* const parent)
|
||||||
|
: wxDialog(parent, wxID_ANY, _("Add New USB Device"))
|
||||||
|
{
|
||||||
|
InitControls();
|
||||||
|
|
||||||
|
RefreshDeviceList();
|
||||||
|
Bind(wxEVT_TIMER, &AddUSBDeviceDiag::OnRefreshDevicesTimer, this,
|
||||||
|
m_refresh_devices_timer.GetId());
|
||||||
|
m_refresh_devices_timer.Start(DEVICE_REFRESH_INTERVAL_MS, wxTIMER_CONTINUOUS);
|
||||||
|
|
||||||
|
auto* const btn_sizer = CreateStdDialogButtonSizer(wxOK | wxCANCEL);
|
||||||
|
btn_sizer->GetAffirmativeButton()->SetLabel(_("Add"));
|
||||||
|
Bind(wxEVT_BUTTON, &AddUSBDeviceDiag::OnSave, this, wxID_OK);
|
||||||
|
|
||||||
|
auto* const sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
const int space5 = FromDIP(5);
|
||||||
|
sizer->AddSpacer(FromDIP(10));
|
||||||
|
sizer->Add(new wxStaticText(this, wxID_ANY, _("Enter USB device ID"), wxDefaultPosition,
|
||||||
|
wxDefaultSize, wxALIGN_CENTRE_HORIZONTAL),
|
||||||
|
0, wxEXPAND | wxBOTTOM, FromDIP(10));
|
||||||
|
sizer->Add(CreateManualControlsSizer(), 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
|
sizer->Add(new wxStaticText(this, wxID_ANY, _("or select a device"), wxDefaultPosition,
|
||||||
|
wxDefaultSize, wxALIGN_CENTRE_HORIZONTAL),
|
||||||
|
0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(10));
|
||||||
|
auto* const device_list_sizer = CreateDeviceListSizer();
|
||||||
|
sizer->Add(device_list_sizer, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, space5);
|
||||||
|
sizer->SetItemMinSize(device_list_sizer, FromDIP(350), FromDIP(150));
|
||||||
|
sizer->Add(btn_sizer, 0, wxEXPAND);
|
||||||
|
sizer->AddSpacer(space5);
|
||||||
|
|
||||||
|
SetSizerAndFit(sizer);
|
||||||
|
Center();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddUSBDeviceDiag::InitControls()
|
||||||
|
{
|
||||||
|
m_new_device_vid_ctrl = new wxTextCtrl(this, wxID_ANY);
|
||||||
|
m_new_device_pid_ctrl = new wxTextCtrl(this, wxID_ANY);
|
||||||
|
// i18n: VID means Vendor ID (in the context of a USB device)
|
||||||
|
m_new_device_vid_ctrl->SetHint(_("Device VID (e.g., 057e)"));
|
||||||
|
// i18n: PID means Product ID (in the context of a USB device), not Process ID
|
||||||
|
m_new_device_pid_ctrl->SetHint(_("Device PID (e.g., 0305)"));
|
||||||
|
|
||||||
|
m_inserted_devices_listbox = new wxListBox(this, wxID_ANY);
|
||||||
|
m_inserted_devices_listbox->Bind(wxEVT_LISTBOX, &AddUSBDeviceDiag::OnDeviceSelection, this);
|
||||||
|
m_inserted_devices_listbox->Bind(wxEVT_LISTBOX_DCLICK, &AddUSBDeviceDiag::OnSave, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddUSBDeviceDiag::RefreshDeviceList()
|
||||||
|
{
|
||||||
|
const auto& current_devices = USBUtils::GetInsertedDevices();
|
||||||
|
if (current_devices == m_shown_devices)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_inserted_devices_listbox->Freeze();
|
||||||
|
const auto selection_string = m_inserted_devices_listbox->GetStringSelection();
|
||||||
|
m_inserted_devices_listbox->Clear();
|
||||||
|
for (const auto& device : current_devices)
|
||||||
|
{
|
||||||
|
if (SConfig::GetInstance().IsUSBDeviceWhitelisted(device.first))
|
||||||
|
continue;
|
||||||
|
m_inserted_devices_listbox->Append(device.second, new USBPassthroughDeviceEntry(device.first));
|
||||||
|
}
|
||||||
|
if (!selection_string.empty())
|
||||||
|
m_inserted_devices_listbox->SetStringSelection(selection_string);
|
||||||
|
m_inserted_devices_listbox->Thaw();
|
||||||
|
|
||||||
|
m_shown_devices = current_devices;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSizer* AddUSBDeviceDiag::CreateManualControlsSizer()
|
||||||
|
{
|
||||||
|
const int space5 = FromDIP(5);
|
||||||
|
auto* const sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
|
sizer->Add(m_new_device_vid_ctrl, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
|
sizer->Add(m_new_device_pid_ctrl, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
|
|
||||||
|
return sizer;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSizer* AddUSBDeviceDiag::CreateDeviceListSizer()
|
||||||
|
{
|
||||||
|
const int space5 = FromDIP(5);
|
||||||
|
auto* const sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
sizer->Add(m_inserted_devices_listbox, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
|
|
||||||
|
return sizer;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IsValidUSBIDString(const std::string& string)
|
||||||
|
{
|
||||||
|
if (string.empty() || string.length() > 4)
|
||||||
|
return false;
|
||||||
|
return std::all_of(string.begin(), string.end(),
|
||||||
|
[](const auto character) { return std::isxdigit(character) != 0; });
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddUSBDeviceDiag::OnRefreshDevicesTimer(wxTimerEvent&)
|
||||||
|
{
|
||||||
|
RefreshDeviceList();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddUSBDeviceDiag::OnDeviceSelection(wxCommandEvent&)
|
||||||
|
{
|
||||||
|
const int index = m_inserted_devices_listbox->GetSelection();
|
||||||
|
if (index == wxNOT_FOUND)
|
||||||
|
return;
|
||||||
|
auto* const entry = static_cast<const USBPassthroughDeviceEntry*>(
|
||||||
|
m_inserted_devices_listbox->GetClientObject(index));
|
||||||
|
m_new_device_vid_ctrl->SetValue(StringFromFormat("%04x", entry->m_vid));
|
||||||
|
m_new_device_pid_ctrl->SetValue(StringFromFormat("%04x", entry->m_pid));
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddUSBDeviceDiag::OnSave(wxCommandEvent&)
|
||||||
|
{
|
||||||
|
const std::string vid_string = StripSpaces(WxStrToStr(m_new_device_vid_ctrl->GetValue()));
|
||||||
|
const std::string pid_string = StripSpaces(WxStrToStr(m_new_device_pid_ctrl->GetValue()));
|
||||||
|
if (!IsValidUSBIDString(vid_string))
|
||||||
|
{
|
||||||
|
// i18n: Here, VID means Vendor ID (for a USB device).
|
||||||
|
WxUtils::ShowErrorDialog(_("The entered VID is invalid."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!IsValidUSBIDString(pid_string))
|
||||||
|
{
|
||||||
|
// i18n: Here, PID means Product ID (for a USB device).
|
||||||
|
WxUtils::ShowErrorDialog(_("The entered PID is invalid."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const u16 vid = static_cast<u16>(std::stoul(vid_string, nullptr, 16));
|
||||||
|
const u16 pid = static_cast<u16>(std::stoul(pid_string, nullptr, 16));
|
||||||
|
|
||||||
|
if (SConfig::GetInstance().IsUSBDeviceWhitelisted({vid, pid}))
|
||||||
|
{
|
||||||
|
WxUtils::ShowErrorDialog(_("This USB device is already whitelisted."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SConfig::GetInstance().m_usb_passthrough_devices.emplace(vid, pid);
|
||||||
|
AcceptAndClose();
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
// Copyright 2016 Dolphin Emulator Project
|
||||||
|
// Licensed under GPLv2+
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
#include <wx/clntdata.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
#include <wx/timer.h>
|
||||||
|
|
||||||
|
#include "Common/CommonTypes.h"
|
||||||
|
|
||||||
|
class wxListBox;
|
||||||
|
class wxSizer;
|
||||||
|
class wxTextCtrl;
|
||||||
|
|
||||||
|
class USBPassthroughDeviceEntry final : public wxClientData
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit USBPassthroughDeviceEntry(const std::pair<u16, u16> pair)
|
||||||
|
: m_vid(pair.first), m_pid(pair.second)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
const u16 m_vid;
|
||||||
|
const u16 m_pid;
|
||||||
|
};
|
||||||
|
|
||||||
|
// This dialog is used to add a new USB device to the USB passthrough whitelist,
|
||||||
|
// either by selecting a connected USB device or by entering the PID/VID manually.
|
||||||
|
class AddUSBDeviceDiag final : public wxDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit AddUSBDeviceDiag(wxWindow* parent);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static constexpr int DEVICE_REFRESH_INTERVAL_MS = 100;
|
||||||
|
|
||||||
|
void InitControls();
|
||||||
|
void RefreshDeviceList();
|
||||||
|
wxSizer* CreateManualControlsSizer();
|
||||||
|
wxSizer* CreateDeviceListSizer();
|
||||||
|
|
||||||
|
void OnRefreshDevicesTimer(wxTimerEvent&);
|
||||||
|
void OnDeviceSelection(wxCommandEvent&);
|
||||||
|
void OnSave(wxCommandEvent&);
|
||||||
|
|
||||||
|
std::map<std::pair<u16, u16>, std::string> m_shown_devices;
|
||||||
|
wxTimer m_refresh_devices_timer{this};
|
||||||
|
|
||||||
|
wxTextCtrl* m_new_device_vid_ctrl;
|
||||||
|
wxTextCtrl* m_new_device_pid_ctrl;
|
||||||
|
wxListBox* m_inserted_devices_listbox;
|
||||||
|
};
|
|
@ -2,11 +2,11 @@
|
||||||
// Licensed under GPLv2+
|
// Licensed under GPLv2+
|
||||||
// Refer to the license.txt file included.
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
#include "DolphinWX/Config/WiiConfigPane.h"
|
#include <wx/button.h>
|
||||||
|
|
||||||
#include <wx/checkbox.h>
|
#include <wx/checkbox.h>
|
||||||
#include <wx/choice.h>
|
#include <wx/choice.h>
|
||||||
#include <wx/gbsizer.h>
|
#include <wx/gbsizer.h>
|
||||||
|
#include <wx/listbox.h>
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/slider.h>
|
#include <wx/slider.h>
|
||||||
#include <wx/stattext.h>
|
#include <wx/stattext.h>
|
||||||
|
@ -14,9 +14,12 @@
|
||||||
#include "Core/ConfigManager.h"
|
#include "Core/ConfigManager.h"
|
||||||
#include "Core/Core.h"
|
#include "Core/Core.h"
|
||||||
#include "Core/IOS/IPC.h"
|
#include "Core/IOS/IPC.h"
|
||||||
|
#include "DolphinWX/Config/AddUSBDeviceDiag.h"
|
||||||
|
#include "DolphinWX/Config/WiiConfigPane.h"
|
||||||
#include "DolphinWX/DolphinSlider.h"
|
#include "DolphinWX/DolphinSlider.h"
|
||||||
#include "DolphinWX/WxEventUtils.h"
|
#include "DolphinWX/WxEventUtils.h"
|
||||||
#include "DolphinWX/WxUtils.h"
|
#include "DolphinWX/WxUtils.h"
|
||||||
|
#include "UICommon/USBUtils.h"
|
||||||
|
|
||||||
WiiConfigPane::WiiConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id)
|
WiiConfigPane::WiiConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id)
|
||||||
{
|
{
|
||||||
|
@ -52,6 +55,10 @@ void WiiConfigPane::InitializeGUI()
|
||||||
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_system_language_strings);
|
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_system_language_strings);
|
||||||
m_sd_card_checkbox = new wxCheckBox(this, wxID_ANY, _("Insert SD Card"));
|
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_connect_keyboard_checkbox = new wxCheckBox(this, wxID_ANY, _("Connect USB Keyboard"));
|
||||||
|
m_usb_passthrough_devices_listbox =
|
||||||
|
new wxListBox(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 100));
|
||||||
|
m_usb_passthrough_add_device_btn = new wxButton(this, wxID_ANY, _("Add..."));
|
||||||
|
m_usb_passthrough_rem_device_btn = new wxButton(this, wxID_ANY, _("Remove"));
|
||||||
m_bt_sensor_bar_pos =
|
m_bt_sensor_bar_pos =
|
||||||
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_bt_sensor_bar_pos_strings);
|
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_bt_sensor_bar_pos_strings);
|
||||||
m_bt_sensor_bar_sens = new DolphinSlider(this, wxID_ANY, 0, 0, 4);
|
m_bt_sensor_bar_sens = new DolphinSlider(this, wxID_ANY, 0, 0, 4);
|
||||||
|
@ -79,6 +86,12 @@ void WiiConfigPane::InitializeGUI()
|
||||||
misc_settings_grid_sizer->Add(m_system_language_choice, wxGBPosition(3, 1), wxDefaultSpan,
|
misc_settings_grid_sizer->Add(m_system_language_choice, wxGBPosition(3, 1), wxDefaultSpan,
|
||||||
wxALIGN_CENTER_VERTICAL);
|
wxALIGN_CENTER_VERTICAL);
|
||||||
|
|
||||||
|
auto* const usb_passthrough_btn_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
usb_passthrough_btn_sizer->AddStretchSpacer();
|
||||||
|
usb_passthrough_btn_sizer->Add(m_usb_passthrough_add_device_btn, 0,
|
||||||
|
wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, space5);
|
||||||
|
usb_passthrough_btn_sizer->Add(m_usb_passthrough_rem_device_btn, 0, wxALIGN_CENTER_VERTICAL);
|
||||||
|
|
||||||
auto* const bt_sensor_bar_pos_sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto* const bt_sensor_bar_pos_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
bt_sensor_bar_pos_sizer->Add(new wxStaticText(this, wxID_ANY, _("Min")), 0,
|
bt_sensor_bar_pos_sizer->Add(new wxStaticText(this, wxID_ANY, _("Min")), 0,
|
||||||
wxALIGN_CENTER_VERTICAL);
|
wxALIGN_CENTER_VERTICAL);
|
||||||
|
@ -123,6 +136,15 @@ void WiiConfigPane::InitializeGUI()
|
||||||
device_settings_sizer->Add(m_connect_keyboard_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
device_settings_sizer->Add(m_connect_keyboard_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||||
device_settings_sizer->AddSpacer(space5);
|
device_settings_sizer->AddSpacer(space5);
|
||||||
|
|
||||||
|
auto* const usb_passthrough_sizer =
|
||||||
|
new wxStaticBoxSizer(wxVERTICAL, this, _("Whitelisted USB Passthrough Devices"));
|
||||||
|
usb_passthrough_sizer->AddSpacer(space5);
|
||||||
|
usb_passthrough_sizer->Add(m_usb_passthrough_devices_listbox, 0, wxEXPAND | wxLEFT | wxRIGHT,
|
||||||
|
space5);
|
||||||
|
usb_passthrough_sizer->AddSpacer(space5);
|
||||||
|
usb_passthrough_sizer->Add(usb_passthrough_btn_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
|
usb_passthrough_sizer->AddSpacer(space5);
|
||||||
|
|
||||||
auto* const bt_settings_static_sizer =
|
auto* const bt_settings_static_sizer =
|
||||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Wii Remote Settings"));
|
new wxStaticBoxSizer(wxVERTICAL, this, _("Wii Remote Settings"));
|
||||||
bt_settings_static_sizer->AddSpacer(space5);
|
bt_settings_static_sizer->AddSpacer(space5);
|
||||||
|
@ -135,6 +157,8 @@ void WiiConfigPane::InitializeGUI()
|
||||||
main_sizer->AddSpacer(space5);
|
main_sizer->AddSpacer(space5);
|
||||||
main_sizer->Add(device_settings_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
main_sizer->Add(device_settings_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
main_sizer->AddSpacer(space5);
|
main_sizer->AddSpacer(space5);
|
||||||
|
main_sizer->Add(usb_passthrough_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
|
main_sizer->AddSpacer(space5);
|
||||||
main_sizer->Add(bt_settings_static_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
main_sizer->Add(bt_settings_static_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||||
main_sizer->AddSpacer(space5);
|
main_sizer->AddSpacer(space5);
|
||||||
|
|
||||||
|
@ -151,12 +175,26 @@ void WiiConfigPane::LoadGUIValues()
|
||||||
m_sd_card_checkbox->SetValue(SConfig::GetInstance().m_WiiSDCard);
|
m_sd_card_checkbox->SetValue(SConfig::GetInstance().m_WiiSDCard);
|
||||||
m_connect_keyboard_checkbox->SetValue(SConfig::GetInstance().m_WiiKeyboard);
|
m_connect_keyboard_checkbox->SetValue(SConfig::GetInstance().m_WiiKeyboard);
|
||||||
|
|
||||||
|
PopulateUSBPassthroughListbox();
|
||||||
|
|
||||||
m_bt_sensor_bar_pos->SetSelection(SConfig::GetInstance().m_sensor_bar_position);
|
m_bt_sensor_bar_pos->SetSelection(SConfig::GetInstance().m_sensor_bar_position);
|
||||||
m_bt_sensor_bar_sens->SetValue(SConfig::GetInstance().m_sensor_bar_sensitivity);
|
m_bt_sensor_bar_sens->SetValue(SConfig::GetInstance().m_sensor_bar_sensitivity);
|
||||||
m_bt_speaker_volume->SetValue(SConfig::GetInstance().m_speaker_volume);
|
m_bt_speaker_volume->SetValue(SConfig::GetInstance().m_speaker_volume);
|
||||||
m_bt_wiimote_motor->SetValue(SConfig::GetInstance().m_wiimote_motor);
|
m_bt_wiimote_motor->SetValue(SConfig::GetInstance().m_wiimote_motor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WiiConfigPane::PopulateUSBPassthroughListbox()
|
||||||
|
{
|
||||||
|
m_usb_passthrough_devices_listbox->Freeze();
|
||||||
|
m_usb_passthrough_devices_listbox->Clear();
|
||||||
|
for (const auto& device : SConfig::GetInstance().m_usb_passthrough_devices)
|
||||||
|
{
|
||||||
|
m_usb_passthrough_devices_listbox->Append(USBUtils::GetDeviceName(device),
|
||||||
|
new USBPassthroughDeviceEntry(device));
|
||||||
|
}
|
||||||
|
m_usb_passthrough_devices_listbox->Thaw();
|
||||||
|
}
|
||||||
|
|
||||||
void WiiConfigPane::BindEvents()
|
void WiiConfigPane::BindEvents()
|
||||||
{
|
{
|
||||||
m_screensaver_checkbox->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnScreenSaverCheckBoxChanged, this);
|
m_screensaver_checkbox->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnScreenSaverCheckBoxChanged, this);
|
||||||
|
@ -186,6 +224,38 @@ void WiiConfigPane::BindEvents()
|
||||||
|
|
||||||
m_bt_wiimote_motor->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnWiimoteMotorChanged, this);
|
m_bt_wiimote_motor->Bind(wxEVT_CHECKBOX, &WiiConfigPane::OnWiimoteMotorChanged, this);
|
||||||
m_bt_wiimote_motor->Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreNotRunning);
|
m_bt_wiimote_motor->Bind(wxEVT_UPDATE_UI, &WxEventUtils::OnEnableIfCoreNotRunning);
|
||||||
|
|
||||||
|
m_usb_passthrough_add_device_btn->Bind(wxEVT_BUTTON, &WiiConfigPane::OnUSBWhitelistAddButton,
|
||||||
|
this);
|
||||||
|
|
||||||
|
m_usb_passthrough_rem_device_btn->Bind(wxEVT_BUTTON, &WiiConfigPane::OnUSBWhitelistRemoveButton,
|
||||||
|
this);
|
||||||
|
m_usb_passthrough_rem_device_btn->Bind(wxEVT_UPDATE_UI,
|
||||||
|
&WiiConfigPane::OnUSBWhitelistRemoveButtonUpdate, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WiiConfigPane::OnUSBWhitelistAddButton(wxCommandEvent&)
|
||||||
|
{
|
||||||
|
AddUSBDeviceDiag add_dialog{this};
|
||||||
|
// Reload the USB device whitelist
|
||||||
|
if (add_dialog.ShowModal() == wxID_OK)
|
||||||
|
PopulateUSBPassthroughListbox();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WiiConfigPane::OnUSBWhitelistRemoveButton(wxCommandEvent&)
|
||||||
|
{
|
||||||
|
const int index = m_usb_passthrough_devices_listbox->GetSelection();
|
||||||
|
if (index == wxNOT_FOUND)
|
||||||
|
return;
|
||||||
|
auto* const entry = static_cast<const USBPassthroughDeviceEntry*>(
|
||||||
|
m_usb_passthrough_devices_listbox->GetClientObject(index));
|
||||||
|
SConfig::GetInstance().m_usb_passthrough_devices.erase({entry->m_vid, entry->m_pid});
|
||||||
|
m_usb_passthrough_devices_listbox->Delete(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WiiConfigPane::OnUSBWhitelistRemoveButtonUpdate(wxUpdateUIEvent& event)
|
||||||
|
{
|
||||||
|
event.Enable(m_usb_passthrough_devices_listbox->GetSelection() != wxNOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WiiConfigPane::OnScreenSaverCheckBoxChanged(wxCommandEvent& event)
|
void WiiConfigPane::OnScreenSaverCheckBoxChanged(wxCommandEvent& event)
|
||||||
|
|
|
@ -6,11 +6,12 @@
|
||||||
|
|
||||||
#include <wx/arrstr.h>
|
#include <wx/arrstr.h>
|
||||||
#include <wx/panel.h>
|
#include <wx/panel.h>
|
||||||
#include "Common/CommonTypes.h"
|
|
||||||
|
|
||||||
class DolphinSlider;
|
class DolphinSlider;
|
||||||
|
class wxButton;
|
||||||
class wxCheckBox;
|
class wxCheckBox;
|
||||||
class wxChoice;
|
class wxChoice;
|
||||||
|
class wxListBox;
|
||||||
class wxSlider;
|
class wxSlider;
|
||||||
|
|
||||||
class WiiConfigPane final : public wxPanel
|
class WiiConfigPane final : public wxPanel
|
||||||
|
@ -23,6 +24,8 @@ private:
|
||||||
void LoadGUIValues();
|
void LoadGUIValues();
|
||||||
void BindEvents();
|
void BindEvents();
|
||||||
|
|
||||||
|
void PopulateUSBPassthroughListbox();
|
||||||
|
|
||||||
void OnScreenSaverCheckBoxChanged(wxCommandEvent&);
|
void OnScreenSaverCheckBoxChanged(wxCommandEvent&);
|
||||||
void OnPAL60CheckBoxChanged(wxCommandEvent&);
|
void OnPAL60CheckBoxChanged(wxCommandEvent&);
|
||||||
void OnSDCardCheckBoxChanged(wxCommandEvent&);
|
void OnSDCardCheckBoxChanged(wxCommandEvent&);
|
||||||
|
@ -30,6 +33,10 @@ private:
|
||||||
void OnSystemLanguageChoiceChanged(wxCommandEvent&);
|
void OnSystemLanguageChoiceChanged(wxCommandEvent&);
|
||||||
void OnAspectRatioChoiceChanged(wxCommandEvent&);
|
void OnAspectRatioChoiceChanged(wxCommandEvent&);
|
||||||
|
|
||||||
|
void OnUSBWhitelistAddButton(wxCommandEvent&);
|
||||||
|
void OnUSBWhitelistRemoveButton(wxCommandEvent&);
|
||||||
|
void OnUSBWhitelistRemoveButtonUpdate(wxUpdateUIEvent&);
|
||||||
|
|
||||||
void OnSensorBarPosChanged(wxCommandEvent&);
|
void OnSensorBarPosChanged(wxCommandEvent&);
|
||||||
void OnSensorBarSensChanged(wxCommandEvent&);
|
void OnSensorBarSensChanged(wxCommandEvent&);
|
||||||
void OnSpeakerVolumeChanged(wxCommandEvent&);
|
void OnSpeakerVolumeChanged(wxCommandEvent&);
|
||||||
|
@ -46,6 +53,10 @@ private:
|
||||||
wxChoice* m_system_language_choice;
|
wxChoice* m_system_language_choice;
|
||||||
wxChoice* m_aspect_ratio_choice;
|
wxChoice* m_aspect_ratio_choice;
|
||||||
|
|
||||||
|
wxListBox* m_usb_passthrough_devices_listbox;
|
||||||
|
wxButton* m_usb_passthrough_add_device_btn;
|
||||||
|
wxButton* m_usb_passthrough_rem_device_btn;
|
||||||
|
|
||||||
wxChoice* m_bt_sensor_bar_pos;
|
wxChoice* m_bt_sensor_bar_pos;
|
||||||
DolphinSlider* m_bt_sensor_bar_sens;
|
DolphinSlider* m_bt_sensor_bar_sens;
|
||||||
DolphinSlider* m_bt_speaker_volume;
|
DolphinSlider* m_bt_speaker_volume;
|
||||||
|
|
|
@ -62,6 +62,7 @@
|
||||||
<ClCompile Include="Cheats\CheatsWindow.cpp" />
|
<ClCompile Include="Cheats\CheatsWindow.cpp" />
|
||||||
<ClCompile Include="Cheats\CreateCodeDialog.cpp" />
|
<ClCompile Include="Cheats\CreateCodeDialog.cpp" />
|
||||||
<ClCompile Include="Cheats\GeckoCodeDiag.cpp" />
|
<ClCompile Include="Cheats\GeckoCodeDiag.cpp" />
|
||||||
|
<ClCompile Include="Config\AddUSBDeviceDiag.cpp" />
|
||||||
<ClCompile Include="Config\AdvancedConfigPane.cpp" />
|
<ClCompile Include="Config\AdvancedConfigPane.cpp" />
|
||||||
<ClCompile Include="Config\AudioConfigPane.cpp" />
|
<ClCompile Include="Config\AudioConfigPane.cpp" />
|
||||||
<ClCompile Include="Config\ConfigMain.cpp" />
|
<ClCompile Include="Config\ConfigMain.cpp" />
|
||||||
|
@ -139,6 +140,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Cheats\ActionReplayCodesPanel.h" />
|
<ClInclude Include="Cheats\ActionReplayCodesPanel.h" />
|
||||||
<ClInclude Include="Cheats\ARCodeAddEdit.h" />
|
<ClInclude Include="Cheats\ARCodeAddEdit.h" />
|
||||||
|
<ClInclude Include="Config\AddUSBDeviceDiag.h" />
|
||||||
<ClInclude Include="Config\AdvancedConfigPane.h" />
|
<ClInclude Include="Config\AdvancedConfigPane.h" />
|
||||||
<ClInclude Include="Config\AudioConfigPane.h" />
|
<ClInclude Include="Config\AudioConfigPane.h" />
|
||||||
<ClInclude Include="Config\GameCubeConfigPane.h" />
|
<ClInclude Include="Config\GameCubeConfigPane.h" />
|
||||||
|
|
|
@ -224,6 +224,9 @@
|
||||||
<ClCompile Include="Config\PathConfigPane.cpp">
|
<ClCompile Include="Config\PathConfigPane.cpp">
|
||||||
<Filter>GUI\Config</Filter>
|
<Filter>GUI\Config</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Config\AddUSBDeviceDiag.cpp">
|
||||||
|
<Filter>GUI\Config</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="Config\AdvancedConfigPane.cpp">
|
<ClCompile Include="Config\AdvancedConfigPane.cpp">
|
||||||
<Filter>GUI\Config</Filter>
|
<Filter>GUI\Config</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -443,6 +446,9 @@
|
||||||
<ClInclude Include="Config\PathConfigPane.h">
|
<ClInclude Include="Config\PathConfigPane.h">
|
||||||
<Filter>GUI\Config</Filter>
|
<Filter>GUI\Config</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClCompile Include="Config\AddUSBDeviceDiag.h">
|
||||||
|
<Filter>GUI\Config</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClInclude Include="Config\AdvancedConfigPane.h">
|
<ClInclude Include="Config\AdvancedConfigPane.h">
|
||||||
<Filter>GUI\Config</Filter>
|
<Filter>GUI\Config</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
Loading…
Reference in New Issue