dolphin/Source/Core/DolphinWX/Input/HotkeyInputConfigDiag.cpp
Lioncash 89da37b1c6 HotkeyInputConfigDialog: Move UI creation into named functions
The constructor shouldn't be used as a dumping ground for all UI-related
initialization. Doing so makes it somewhat more difficult to reason about
how certain UI elements get created. It also puts unrelated identifiers in
the same scope.

This separates the UI creation out so code relevant to each component
is self-contained.
2017-01-05 16:26:42 -05:00

281 lines
10 KiB
C++

// 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"
HotkeyInputConfigDialog::HotkeyInputConfigDialog(wxWindow* parent, InputConfig& config,
const wxString& name, bool using_debugger,
int port_num)
: InputConfigDialog(parent, config, name, port_num), m_using_debugger{using_debugger}
{
InitializeNotebook();
SetSizerAndFit(CreateMainSizer());
Center();
UpdateDeviceComboBox();
UpdateProfileComboBox();
UpdateGUI();
}
wxBoxSizer* HotkeyInputConfigDialog::CreateMainSizer()
{
const int space5 = FromDIP(5);
auto* const main_sizer = new wxBoxSizer(wxVERTICAL);
main_sizer->AddSpacer(space5);
main_sizer->Add(CreateDeviceRelatedSizer());
main_sizer->AddSpacer(space5);
main_sizer->Add(m_notebook, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
main_sizer->AddSpacer(space5);
main_sizer->Add(CreateButtonSizer(wxCLOSE | wxNO_DEFAULT), 0, wxEXPAND | wxLEFT | wxRIGHT,
space5);
main_sizer->AddSpacer(space5);
return main_sizer;
}
wxBoxSizer* HotkeyInputConfigDialog::CreateDeviceRelatedSizer()
{
const int space5 = FromDIP(5);
auto* const enclosing_sizer = new wxBoxSizer(wxHORIZONTAL);
auto* const reset_sizer = CreaterResetGroupBox(wxVERTICAL);
auto* const options_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetOptionsGroup(), this, this);
enclosing_sizer->AddSpacer(space5);
enclosing_sizer->Add(CreateDeviceProfileSizer(), 3, wxEXPAND);
enclosing_sizer->Add(reset_sizer, 0, wxEXPAND);
enclosing_sizer->Add(options_group_box, 1, wxEXPAND);
enclosing_sizer->AddSpacer(space5);
return enclosing_sizer;
}
wxBoxSizer* HotkeyInputConfigDialog::CreateDeviceProfileSizer()
{
auto* const device_chooser = CreateDeviceChooserGroupBox();
auto* const profile_chooser = CreateProfileChooserGroupBox();
auto* const device_profile_sizer = new wxBoxSizer(wxVERTICAL);
device_profile_sizer->Add(device_chooser, 1, wxEXPAND);
device_profile_sizer->Add(profile_chooser, 1, wxEXPAND);
return device_profile_sizer;
}
void HotkeyInputConfigDialog::InitializeNotebook()
{
m_notebook = new wxNotebook(this, wxID_ANY);
m_notebook->AddPage(CreateGeneralPanel(), _("General"));
// i18n: TAS is short for tool-assisted speedrun. Read http://tasvideos.org/ for details.
// Frame advance is an example of a typical TAS tool.
m_notebook->AddPage(CreateTASToolsPanel(), _("TAS Tools"));
if (m_using_debugger)
{
m_notebook->AddPage(CreateDebuggingPanel(), _("Debugging"));
}
m_notebook->AddPage(CreateWiiPanel(), _("Wii and Wii Remote"));
m_notebook->AddPage(CreateGraphicsPanel(), _("Graphics"));
// i18n: Stereoscopic 3D
m_notebook->AddPage(CreateStereoscopic3DPanel(), _("3D"));
m_notebook->AddPage(CreateSaveAndLoadStatePanel(), _("Save and Load State"));
m_notebook->AddPage(CreateOtherStateManagementPanel(), _("Other State Management"));
m_notebook->SetSelection(0);
}
wxPanel* HotkeyInputConfigDialog::CreateGeneralPanel()
{
const int space5 = FromDIP(5);
auto* const general_panel = new wxPanel(m_notebook);
auto* const general_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_GENERAL), general_panel, this);
auto* const volume_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_VOLUME), general_panel, this);
auto* const speed_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_SPEED), general_panel, this);
auto* const volume_speed_sizer = new wxBoxSizer(wxVERTICAL);
volume_speed_sizer->AddSpacer(space5);
volume_speed_sizer->Add(volume_group_box, 0, wxEXPAND);
volume_speed_sizer->AddSpacer(space5);
volume_speed_sizer->Add(speed_group_box, 0, wxEXPAND);
auto* const general_sizer = new wxBoxSizer(wxHORIZONTAL);
general_sizer->Add(general_group_box, 0, wxEXPAND | wxTOP, space5);
general_sizer->AddSpacer(space5);
general_sizer->Add(volume_speed_sizer, 0, wxEXPAND);
general_panel->SetSizerAndFit(general_sizer);
return general_panel;
}
wxPanel* HotkeyInputConfigDialog::CreateTASToolsPanel()
{
const int space5 = FromDIP(5);
auto* const tas_panel = new wxPanel(m_notebook);
auto* const frame_advance_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_FRAME_ADVANCE), tas_panel, this);
auto* const movie_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_MOVIE), tas_panel, this);
auto* const tas_sizer = new wxBoxSizer(wxHORIZONTAL);
tas_sizer->AddSpacer(space5);
tas_sizer->Add(frame_advance_group_box, 0, wxEXPAND | wxTOP, space5);
tas_sizer->AddSpacer(space5);
tas_sizer->Add(movie_group_box, 0, wxEXPAND | wxTOP, space5);
tas_panel->SetSizerAndFit(tas_sizer);
return tas_panel;
}
wxPanel* HotkeyInputConfigDialog::CreateDebuggingPanel()
{
const int space5 = FromDIP(5);
auto* const debugging_panel = new wxPanel(m_notebook);
auto* const stepping_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_STEPPING), debugging_panel, this);
auto* const pc_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_PC), debugging_panel, this);
auto* const breakpoint_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_BREAKPOINT), debugging_panel, this);
auto* const debugging_sizer = new wxBoxSizer(wxHORIZONTAL);
debugging_sizer->AddSpacer(space5);
debugging_sizer->Add(stepping_group_box, 0, wxEXPAND | wxTOP, space5);
debugging_sizer->AddSpacer(space5);
debugging_sizer->Add(pc_group_box, 0, wxEXPAND | wxTOP, space5);
debugging_sizer->AddSpacer(space5);
debugging_sizer->Add(breakpoint_group_box, 0, wxEXPAND | wxTOP, space5);
debugging_sizer->AddSpacer(space5);
debugging_panel->SetSizerAndFit(debugging_sizer);
return debugging_panel;
}
wxPanel* HotkeyInputConfigDialog::CreateWiiPanel()
{
const int space5 = FromDIP(5);
auto* const wii_panel = new wxPanel(m_notebook);
auto* const wii_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_WII), wii_panel, this);
auto* const wii_sizer = new wxBoxSizer(wxHORIZONTAL);
wii_sizer->AddSpacer(space5);
wii_sizer->Add(wii_group_box, 0, wxEXPAND | wxTOP, space5);
wii_sizer->AddSpacer(space5);
wii_panel->SetSizerAndFit(wii_sizer);
return wii_panel;
}
wxPanel* HotkeyInputConfigDialog::CreateGraphicsPanel()
{
const int space5 = FromDIP(5);
auto* const graphics_panel = new wxPanel(m_notebook);
auto* const graphics_toggles_group_box = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_GRAPHICS_TOGGLES), graphics_panel, this);
auto* const ir_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_IR), graphics_panel, this);
auto* const ir_sizer = new wxBoxSizer(wxVERTICAL);
ir_sizer->Add(graphics_toggles_group_box, 0, wxEXPAND);
ir_sizer->AddSpacer(space5);
ir_sizer->Add(ir_group_box, 0, wxEXPAND);
auto* const freelook_group_box =
new ControlGroupBox(HotkeyManagerEmu::GetHotkeyGroup(HKGP_FREELOOK), graphics_panel, this);
auto* const szr_graphics_toggles = new wxBoxSizer(wxHORIZONTAL);
szr_graphics_toggles->AddSpacer(space5);
szr_graphics_toggles->Add(ir_sizer, 0, wxEXPAND | wxTOP, space5);
szr_graphics_toggles->AddSpacer(space5);
szr_graphics_toggles->Add(freelook_group_box, 0, wxEXPAND | wxTOP, space5);
szr_graphics_toggles->AddSpacer(space5);
graphics_panel->SetSizerAndFit(szr_graphics_toggles);
return graphics_panel;
}
wxPanel* HotkeyInputConfigDialog::CreateStereoscopic3DPanel()
{
const int space5 = FromDIP(5);
auto* const stereoscopic_panel = new wxPanel(m_notebook);
auto* const stereoscopic_toggles_group_box = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_3D_TOGGLE), stereoscopic_panel, this);
auto* const stereoscopic_depth_group_box = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_3D_DEPTH), stereoscopic_panel, this);
auto* const stereoscopic_sizer = new wxBoxSizer(wxHORIZONTAL);
stereoscopic_sizer->AddSpacer(space5);
stereoscopic_sizer->Add(stereoscopic_toggles_group_box, 0, wxEXPAND | wxTOP, space5);
stereoscopic_sizer->AddSpacer(space5);
stereoscopic_sizer->Add(stereoscopic_depth_group_box, 0, wxEXPAND | wxTOP, space5);
stereoscopic_sizer->AddSpacer(space5);
stereoscopic_panel->SetSizerAndFit(stereoscopic_sizer);
return stereoscopic_panel;
}
wxPanel* HotkeyInputConfigDialog::CreateSaveAndLoadStatePanel()
{
const int space5 = FromDIP(5);
auto* const save_load_state_panel = new wxPanel(m_notebook);
auto* const load_state_group_box = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_LOAD_STATE), save_load_state_panel, this);
auto* const save_state_group_box = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_SAVE_STATE), save_load_state_panel, this);
auto* const save_load_state_sizer = new wxBoxSizer(wxHORIZONTAL);
save_load_state_sizer->AddSpacer(space5);
save_load_state_sizer->Add(load_state_group_box, 0, wxEXPAND | wxTOP, space5);
save_load_state_sizer->AddSpacer(space5);
save_load_state_sizer->Add(save_state_group_box, 0, wxEXPAND | wxTOP, space5);
save_load_state_sizer->AddSpacer(space5);
save_load_state_panel->SetSizerAndFit(save_load_state_sizer);
return save_load_state_panel;
}
wxPanel* HotkeyInputConfigDialog::CreateOtherStateManagementPanel()
{
const int space5 = FromDIP(5);
auto* const other_state_panel = new wxPanel(m_notebook);
auto* const group_box_select_state = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_SELECT_STATE), other_state_panel, this);
auto* const group_box_load_last_state = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_LOAD_LAST_STATE), other_state_panel, this);
auto* const group_box_state_misc = new ControlGroupBox(
HotkeyManagerEmu::GetHotkeyGroup(HKGP_STATE_MISC), other_state_panel, this);
auto* const other_state_sizer = new wxBoxSizer(wxHORIZONTAL);
other_state_sizer->AddSpacer(space5);
other_state_sizer->Add(group_box_select_state, 0, wxEXPAND | wxTOP, space5);
other_state_sizer->AddSpacer(space5);
other_state_sizer->Add(group_box_load_last_state, 0, wxEXPAND | wxTOP, space5);
other_state_sizer->AddSpacer(space5);
other_state_sizer->Add(group_box_state_misc, 0, wxEXPAND | wxTOP, space5);
other_state_sizer->AddSpacer(space5);
other_state_panel->SetSizerAndFit(other_state_sizer);
return other_state_panel;
}