2016-11-19 00:54:06 +00:00
|
|
|
// Copyright 2016 Dolphin Emulator Project
|
|
|
|
// Licensed under GPLv2+
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
#include <wx/notebook.h>
|
|
|
|
#include <wx/panel.h>
|
|
|
|
#include <wx/sizer.h>
|
|
|
|
|
|
|
|
#include "Core/HotkeyManager.h"
|
|
|
|
#include "DolphinWX/Input/HotkeyInputConfigDiag.h"
|
|
|
|
|
|
|
|
enum HotkeyGroup : int;
|
|
|
|
|
2016-12-30 20:22:59 +00:00
|
|
|
HotkeyInputConfigDialog::HotkeyInputConfigDialog(wxWindow* parent, InputConfig& config,
|
|
|
|
const wxString& name, bool using_debugger,
|
|
|
|
int port_num)
|
2016-11-19 00:54:06 +00:00
|
|
|
: InputConfigDialog(parent, config, name, port_num)
|
|
|
|
{
|
|
|
|
const int space5 = FromDIP(5);
|
|
|
|
|
|
|
|
auto* const device_chooser = CreateDeviceChooserGroupBox();
|
|
|
|
auto* const reset_sizer = CreaterResetGroupBox(wxVERTICAL);
|
|
|
|
auto* const profile_chooser = CreateProfileChooserGroupBox();
|
|
|
|
|
|
|
|
auto* const notebook = new wxNotebook(this, wxID_ANY);
|
|
|
|
|
|
|
|
// General
|
|
|
|
auto* const tab_general = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_general =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_GENERAL), tab_general, this);
|
|
|
|
auto* const group_box_volume =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_VOLUME), tab_general, this);
|
|
|
|
auto* const group_box_speed =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_SPEED), tab_general, this);
|
|
|
|
|
|
|
|
auto* const szr_volume_speed = new wxBoxSizer(wxVERTICAL);
|
|
|
|
szr_volume_speed->AddSpacer(space5);
|
|
|
|
szr_volume_speed->Add(group_box_volume, 0, wxEXPAND);
|
|
|
|
szr_volume_speed->AddSpacer(space5);
|
|
|
|
szr_volume_speed->Add(group_box_speed, 0, wxEXPAND);
|
|
|
|
|
|
|
|
auto* const szr_general = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_general->Add(group_box_general, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_general->AddSpacer(space5);
|
|
|
|
szr_general->Add(szr_volume_speed, 0, wxEXPAND);
|
|
|
|
|
|
|
|
tab_general->SetSizerAndFit(szr_general);
|
|
|
|
|
2016-12-24 18:26:21 +00:00
|
|
|
notebook->AddPage(tab_general, _("General"));
|
2016-11-19 00:54:06 +00:00
|
|
|
|
|
|
|
// TAS Tools
|
|
|
|
auto* const tab_tas = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_frame_advance =
|
2016-12-24 18:26:21 +00:00
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_FRAME_ADVANCE), tab_tas, this);
|
2016-11-19 00:54:06 +00:00
|
|
|
auto* const group_box_movie =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_MOVIE), tab_tas, this);
|
|
|
|
|
|
|
|
auto* const szr_tas = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_tas->AddSpacer(space5);
|
|
|
|
szr_tas->Add(group_box_frame_advance, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_tas->AddSpacer(space5);
|
|
|
|
szr_tas->Add(group_box_movie, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
|
|
|
|
tab_tas->SetSizerAndFit(szr_tas);
|
|
|
|
|
2016-12-24 18:26:21 +00:00
|
|
|
// i18n: TAS is short for tool-assisted speedrun. Read http://tasvideos.org/ for details.
|
|
|
|
// Frame advance is an example of a typical TAS tool.
|
|
|
|
notebook->AddPage(tab_tas, _("TAS Tools"));
|
2016-11-19 00:54:06 +00:00
|
|
|
|
2016-12-30 20:22:59 +00:00
|
|
|
if (using_debugger)
|
|
|
|
{
|
|
|
|
// Debugging
|
|
|
|
auto* const tab_debugging = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_steping =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_STEPPING), tab_debugging, this);
|
|
|
|
auto* const group_box_pc =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_PC), tab_debugging, this);
|
|
|
|
auto* const group_box_breakpoint =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_BREAKPOINT), tab_debugging, this);
|
|
|
|
|
|
|
|
auto* const szr_debugging = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_debugging->AddSpacer(space5);
|
|
|
|
szr_debugging->Add(group_box_steping, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_debugging->AddSpacer(space5);
|
|
|
|
szr_debugging->Add(group_box_pc, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_debugging->AddSpacer(space5);
|
|
|
|
szr_debugging->Add(group_box_breakpoint, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_debugging->AddSpacer(space5);
|
|
|
|
|
|
|
|
tab_debugging->SetSizerAndFit(szr_debugging);
|
|
|
|
|
|
|
|
notebook->AddPage(tab_debugging, _("Debugging"));
|
|
|
|
}
|
2016-11-19 00:54:06 +00:00
|
|
|
// WII and Wii Remote
|
|
|
|
auto* const tab_wii = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_wii =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_WII), tab_wii, this);
|
|
|
|
|
|
|
|
auto* const szr_wii = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_wii->AddSpacer(space5);
|
|
|
|
szr_wii->Add(group_box_wii, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_wii->AddSpacer(space5);
|
|
|
|
|
|
|
|
tab_wii->SetSizerAndFit(szr_wii);
|
|
|
|
|
2016-12-24 18:26:21 +00:00
|
|
|
notebook->AddPage(tab_wii, _("Wii and Wii Remote"));
|
2016-11-19 00:54:06 +00:00
|
|
|
|
|
|
|
// Graphics
|
|
|
|
auto* const tab_graphics = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_graphics_toggles = new ControlGroupBox(
|
|
|
|
HotkeyManagerEmu::GetHotkeyGroup(HKGP_GRAPHICS_TOGGLES), tab_graphics, this);
|
|
|
|
auto* const group_box_ir =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_IR), tab_graphics, this);
|
|
|
|
|
|
|
|
auto* const szr_toggle_ir = new wxBoxSizer(wxVERTICAL);
|
|
|
|
szr_toggle_ir->Add(group_box_graphics_toggles, 0, wxEXPAND);
|
|
|
|
szr_toggle_ir->AddSpacer(space5);
|
|
|
|
szr_toggle_ir->Add(group_box_ir, 0, wxEXPAND);
|
|
|
|
|
|
|
|
auto* const group_box_freelook =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_FREELOOK), tab_graphics, this);
|
|
|
|
|
|
|
|
auto* const szr_graphics_toggles = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_graphics_toggles->AddSpacer(space5);
|
|
|
|
szr_graphics_toggles->Add(szr_toggle_ir, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_graphics_toggles->AddSpacer(space5);
|
|
|
|
szr_graphics_toggles->Add(group_box_freelook, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_graphics_toggles->AddSpacer(space5);
|
|
|
|
|
|
|
|
tab_graphics->SetSizerAndFit(szr_graphics_toggles);
|
|
|
|
|
2016-12-24 18:26:21 +00:00
|
|
|
notebook->AddPage(tab_graphics, _("Graphics"));
|
2016-11-19 00:54:06 +00:00
|
|
|
|
|
|
|
// 3D
|
|
|
|
auto* const tab_3D = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_3D_toggles =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_3D_TOGGLE), tab_3D, this);
|
|
|
|
auto* const group_box_3D_depth =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_3D_DEPTH), tab_3D, this);
|
|
|
|
|
|
|
|
auto* const szr_3D = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_3D->AddSpacer(space5);
|
|
|
|
szr_3D->Add(group_box_3D_toggles, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_3D->AddSpacer(space5);
|
|
|
|
szr_3D->Add(group_box_3D_depth, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_3D->AddSpacer(space5);
|
|
|
|
|
|
|
|
tab_3D->SetSizerAndFit(szr_3D);
|
|
|
|
|
2016-12-24 18:26:21 +00:00
|
|
|
// i18n: Stereoscopic 3D
|
|
|
|
notebook->AddPage(tab_3D, _("3D"));
|
2016-11-19 00:54:06 +00:00
|
|
|
|
|
|
|
// Save and Load State
|
|
|
|
auto* const tab_save_load_state = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_load_state = new ControlGroupBox(
|
|
|
|
HotkeyManagerEmu::GetHotkeyGroup(HKGP_LOAD_STATE), tab_save_load_state, this);
|
|
|
|
auto* const group_box_save_state = new ControlGroupBox(
|
|
|
|
HotkeyManagerEmu::GetHotkeyGroup(HKGP_SAVE_STATE), tab_save_load_state, this);
|
|
|
|
|
|
|
|
auto* const szr_save_load_state = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_save_load_state->AddSpacer(space5);
|
|
|
|
szr_save_load_state->Add(group_box_load_state, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_save_load_state->AddSpacer(space5);
|
|
|
|
szr_save_load_state->Add(group_box_save_state, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_save_load_state->AddSpacer(space5);
|
|
|
|
|
|
|
|
tab_save_load_state->SetSizerAndFit(szr_save_load_state);
|
|
|
|
|
2016-12-24 18:26:21 +00:00
|
|
|
notebook->AddPage(tab_save_load_state, _("Save and Load State"));
|
2016-11-19 00:54:06 +00:00
|
|
|
|
|
|
|
// Other State Managament
|
|
|
|
auto* const tab_other_state = new wxPanel(notebook);
|
|
|
|
|
|
|
|
auto* const group_box_select_state = new ControlGroupBox(
|
|
|
|
HotkeyManagerEmu::GetHotkeyGroup(HKGP_SELECT_STATE), tab_other_state, this);
|
|
|
|
auto* const group_box_load_last_state = new ControlGroupBox(
|
|
|
|
HotkeyManagerEmu::GetHotkeyGroup(HKGP_LOAD_LAST_STATE), tab_other_state, this);
|
|
|
|
auto* const group_box_state_misc =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_STATE_MISC), tab_other_state, this);
|
|
|
|
|
|
|
|
auto* const szr_other_state = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
szr_other_state->AddSpacer(space5);
|
|
|
|
szr_other_state->Add(group_box_select_state, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_other_state->AddSpacer(space5);
|
|
|
|
szr_other_state->Add(group_box_load_last_state, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_other_state->AddSpacer(space5);
|
|
|
|
szr_other_state->Add(group_box_state_misc, 0, wxEXPAND | wxTOP, space5);
|
|
|
|
szr_other_state->AddSpacer(space5);
|
|
|
|
|
|
|
|
tab_other_state->SetSizerAndFit(szr_other_state);
|
|
|
|
|
2016-12-24 18:26:21 +00:00
|
|
|
notebook->AddPage(tab_other_state, _("Other State Management"));
|
2016-11-19 00:54:06 +00:00
|
|
|
|
|
|
|
notebook->SetSelection(0);
|
|
|
|
|
|
|
|
auto* const device_profile_sizer = new wxBoxSizer(wxVERTICAL);
|
|
|
|
device_profile_sizer->Add(device_chooser, 1, wxEXPAND);
|
|
|
|
device_profile_sizer->Add(profile_chooser, 1, wxEXPAND);
|
|
|
|
|
|
|
|
auto* const group_box_options =
|
|
|
|
new ControlGroupBox(HotkeyManagerEmu::GetOptionsGroup(), this, this);
|
|
|
|
|
|
|
|
auto* const dio = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
dio->AddSpacer(space5);
|
|
|
|
dio->Add(device_profile_sizer, 3, wxEXPAND);
|
|
|
|
dio->Add(reset_sizer, 0, wxEXPAND);
|
|
|
|
dio->Add(group_box_options, 1, wxEXPAND);
|
|
|
|
dio->AddSpacer(space5);
|
|
|
|
|
|
|
|
auto* const szr_main = new wxBoxSizer(wxVERTICAL);
|
|
|
|
szr_main->AddSpacer(space5);
|
|
|
|
szr_main->Add(dio);
|
|
|
|
szr_main->AddSpacer(space5);
|
|
|
|
szr_main->Add(notebook, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
|
|
|
szr_main->AddSpacer(space5);
|
|
|
|
szr_main->Add(CreateButtonSizer(wxCLOSE | wxNO_DEFAULT), 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
|
|
|
szr_main->AddSpacer(space5);
|
|
|
|
|
|
|
|
SetSizerAndFit(szr_main);
|
|
|
|
Center();
|
|
|
|
|
|
|
|
UpdateDeviceComboBox();
|
|
|
|
UpdateProfileComboBox();
|
|
|
|
|
|
|
|
UpdateGUI();
|
|
|
|
}
|