mirror of
https://github.com/izzy2lost/dolphin.git
synced 2026-06-19 01:16:48 -07:00
Merge pull request #4068 from EmptyChaos/wx-hidpi
WX: Comprehensive HiDPI Patch
This commit is contained in:
+3
@@ -218,6 +218,9 @@ void wxTipWindow::Close()
|
||||
*m_windowPtr = NULL;
|
||||
m_windowPtr = NULL;
|
||||
}
|
||||
// XXX: Dolphin: Prevents an assertion failure due to Close being called multiple times.
|
||||
if (!IsShown())
|
||||
return;
|
||||
|
||||
#if wxUSE_POPUPWIN
|
||||
Show(false);
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include <cinttypes>
|
||||
#include <climits>
|
||||
#include <memory>
|
||||
|
||||
#include "Common/CDUtils.h"
|
||||
@@ -138,8 +139,8 @@ void SConfig::SaveInterfaceSettings(IniFile& ini)
|
||||
interface->Set("OnScreenDisplayMessages", bOnScreenDisplayMessages);
|
||||
interface->Set("HideCursor", bHideCursor);
|
||||
interface->Set("AutoHideCursor", bAutoHideCursor);
|
||||
interface->Set("MainWindowPosX", (iPosX == -32000) ? 0 : iPosX); // TODO - HAX
|
||||
interface->Set("MainWindowPosY", (iPosY == -32000) ? 0 : iPosY); // TODO - HAX
|
||||
interface->Set("MainWindowPosX", iPosX);
|
||||
interface->Set("MainWindowPosY", iPosY);
|
||||
interface->Set("MainWindowWidth", iWidth);
|
||||
interface->Set("MainWindowHeight", iHeight);
|
||||
interface->Set("LanguageCode", m_InterfaceLanguage);
|
||||
@@ -402,10 +403,10 @@ void SConfig::LoadInterfaceSettings(IniFile& ini)
|
||||
interface->Get("OnScreenDisplayMessages", &bOnScreenDisplayMessages, true);
|
||||
interface->Get("HideCursor", &bHideCursor, false);
|
||||
interface->Get("AutoHideCursor", &bAutoHideCursor, false);
|
||||
interface->Get("MainWindowPosX", &iPosX, 100);
|
||||
interface->Get("MainWindowPosY", &iPosY, 100);
|
||||
interface->Get("MainWindowWidth", &iWidth, 800);
|
||||
interface->Get("MainWindowHeight", &iHeight, 600);
|
||||
interface->Get("MainWindowPosX", &iPosX, INT_MIN);
|
||||
interface->Get("MainWindowPosY", &iPosY, INT_MIN);
|
||||
interface->Get("MainWindowWidth", &iWidth, -1);
|
||||
interface->Get("MainWindowHeight", &iHeight, -1);
|
||||
interface->Get("LanguageCode", &m_InterfaceLanguage, "");
|
||||
interface->Get("ShowToolbar", &m_InterfaceToolbar, true);
|
||||
interface->Get("ShowStatusbar", &m_InterfaceStatusbar, true);
|
||||
@@ -663,10 +664,10 @@ void SConfig::LoadDefaults()
|
||||
bDPL2Decoder = false;
|
||||
iLatency = 14;
|
||||
|
||||
iPosX = 100;
|
||||
iPosY = 100;
|
||||
iWidth = 800;
|
||||
iHeight = 600;
|
||||
iPosX = INT_MIN;
|
||||
iPosY = INT_MIN;
|
||||
iWidth = -1;
|
||||
iHeight = -1;
|
||||
|
||||
m_analytics_id = "";
|
||||
m_analytics_enabled = false;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <limits>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -129,8 +130,10 @@ struct SConfig : NonCopyable
|
||||
|
||||
// Display settings
|
||||
std::string strFullscreenResolution;
|
||||
int iRenderWindowXPos = -1, iRenderWindowYPos = -1;
|
||||
int iRenderWindowWidth = 640, iRenderWindowHeight = 480;
|
||||
int iRenderWindowXPos = std::numeric_limits<int>::min();
|
||||
int iRenderWindowYPos = std::numeric_limits<int>::min();
|
||||
int iRenderWindowWidth = -1;
|
||||
int iRenderWindowHeight = -1;
|
||||
bool bRenderWindowAutoSize = false, bKeepWindowOnTop = false;
|
||||
bool bFullscreen = false, bRenderToMain = false;
|
||||
bool bProgressive = false, bPAL60 = false;
|
||||
|
||||
@@ -20,8 +20,8 @@ AboutDolphin::AboutDolphin(wxWindow* parent, wxWindowID id, const wxString& titl
|
||||
const wxPoint& position, const wxSize& size, long style)
|
||||
: wxDialog(parent, id, title, position, size, style)
|
||||
{
|
||||
wxGenericStaticBitmap* const sbDolphinLogo =
|
||||
new wxGenericStaticBitmap(this, wxID_ANY, WxUtils::LoadResourceBitmap("dolphin_logo"));
|
||||
wxGenericStaticBitmap* const sbDolphinLogo = new wxGenericStaticBitmap(
|
||||
this, wxID_ANY, WxUtils::LoadScaledResourceBitmap("dolphin_logo", this));
|
||||
|
||||
const wxString DolphinText = _("Dolphin");
|
||||
const wxString RevisionText = scm_desc_str;
|
||||
@@ -80,6 +80,12 @@ AboutDolphin::AboutDolphin(wxWindow* parent, wxWindowID id, const wxString& titl
|
||||
|
||||
wxSizerFlags center_flag;
|
||||
center_flag.Center();
|
||||
const int space5 = FromDIP(5);
|
||||
const int space10 = FromDIP(10);
|
||||
const int space15 = FromDIP(15);
|
||||
const int space30 = FromDIP(30);
|
||||
const int space40 = FromDIP(40);
|
||||
const int space75 = FromDIP(75);
|
||||
|
||||
wxBoxSizer* const sCheckUpdates = new wxBoxSizer(wxHORIZONTAL);
|
||||
sCheckUpdates->Add(UpdateText, center_flag);
|
||||
@@ -94,30 +100,30 @@ AboutDolphin::AboutDolphin(wxWindow* parent, wxWindowID id, const wxString& titl
|
||||
|
||||
wxBoxSizer* const sInfo = new wxBoxSizer(wxVERTICAL);
|
||||
sInfo->Add(Dolphin);
|
||||
sInfo->AddSpacer(5);
|
||||
sInfo->AddSpacer(space5);
|
||||
sInfo->Add(Revision);
|
||||
sInfo->AddSpacer(10);
|
||||
sInfo->AddSpacer(space10);
|
||||
sInfo->Add(Branch);
|
||||
sInfo->Add(sCheckUpdates);
|
||||
sInfo->Add(Message);
|
||||
sInfo->Add(sLinks);
|
||||
|
||||
wxBoxSizer* const sLogo = new wxBoxSizer(wxVERTICAL);
|
||||
sLogo->AddSpacer(75);
|
||||
sLogo->AddSpacer(space75);
|
||||
sLogo->Add(sbDolphinLogo);
|
||||
sLogo->AddSpacer(40);
|
||||
sLogo->AddSpacer(space40);
|
||||
|
||||
wxBoxSizer* const sMainHor = new wxBoxSizer(wxHORIZONTAL);
|
||||
sMainHor->AddSpacer(30);
|
||||
sMainHor->AddSpacer(space30);
|
||||
sMainHor->Add(sLogo);
|
||||
sMainHor->AddSpacer(30);
|
||||
sMainHor->AddSpacer(space30);
|
||||
sMainHor->Add(sInfo);
|
||||
sMainHor->AddSpacer(30);
|
||||
sMainHor->AddSpacer(space30);
|
||||
|
||||
wxBoxSizer* const sFooter = new wxBoxSizer(wxVERTICAL);
|
||||
sFooter->AddSpacer(15);
|
||||
sFooter->AddSpacer(space15);
|
||||
sFooter->Add(Copyright, 0, wxALIGN_CENTER_HORIZONTAL);
|
||||
sFooter->AddSpacer(5);
|
||||
sFooter->AddSpacer(space5);
|
||||
|
||||
wxBoxSizer* const sMain = new wxBoxSizer(wxVERTICAL);
|
||||
sMain->Add(sMainHor, 1, wxEXPAND);
|
||||
|
||||
@@ -40,6 +40,7 @@ set(GUI_SRCS
|
||||
NetPlay/NetPlaySetupFrame.cpp
|
||||
NetPlay/NetWindow.cpp
|
||||
NetPlay/PadMapDialog.cpp
|
||||
DolphinSlider.cpp
|
||||
FifoPlayerDlg.cpp
|
||||
Frame.cpp
|
||||
FrameAui.cpp
|
||||
|
||||
@@ -27,10 +27,7 @@
|
||||
#include "DolphinWX/Cheats/CreateCodeDialog.h"
|
||||
#include "DolphinWX/WxUtils.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
const unsigned int MAX_CHEAT_SEARCH_RESULTS_DISPLAY = 1024;
|
||||
}
|
||||
static constexpr unsigned int MAX_CHEAT_SEARCH_RESULTS_DISPLAY = 1024;
|
||||
|
||||
CheatSearchTab::CheatSearchTab(wxWindow* const parent) : wxPanel(parent)
|
||||
{
|
||||
@@ -39,13 +36,25 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent) : wxPanel(parent)
|
||||
|
||||
// first scan button
|
||||
m_btn_init_scan = new wxButton(this, wxID_ANY, _("New Scan"));
|
||||
m_btn_init_scan->SetToolTip(_("Perform a full index of the game's RAM at the current Data Size. "
|
||||
"Required before any Searching can be performed."));
|
||||
m_btn_init_scan->Bind(wxEVT_BUTTON, &CheatSearchTab::OnNewScanClicked, this);
|
||||
m_btn_init_scan->Disable();
|
||||
|
||||
// next scan button
|
||||
m_btn_next_scan = new wxButton(this, wxID_ANY, _("Next Scan"));
|
||||
m_btn_next_scan->SetToolTip(_("Eliminate items from the current scan results that do not match "
|
||||
"the current Search settings."));
|
||||
m_btn_next_scan->Bind(wxEVT_BUTTON, &CheatSearchTab::OnNextScanClicked, this);
|
||||
m_btn_next_scan->Disable();
|
||||
|
||||
m_label_scan_disabled = new wxStaticText(this, wxID_ANY, _("No game is running."));
|
||||
|
||||
// create AR code button
|
||||
m_btn_create_code = new wxButton(this, wxID_ANY, _("Create AR Code"));
|
||||
m_btn_create_code->Bind(wxEVT_BUTTON, &CheatSearchTab::OnCreateARCodeClicked, this);
|
||||
m_btn_create_code->Disable();
|
||||
|
||||
// data sizes radiobox
|
||||
std::array<wxString, 3> data_size_names = {{_("8-bit"), _("16-bit"), _("32-bit")}};
|
||||
m_data_sizes = new wxRadioBox(this, wxID_ANY, _("Data Size"), wxDefaultPosition, wxDefaultSize,
|
||||
@@ -54,30 +63,39 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent) : wxPanel(parent)
|
||||
// ListView for search results
|
||||
m_lview_search_results = new wxListView(this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
|
||||
wxLC_REPORT | wxLC_SINGLE_SEL);
|
||||
ResetListViewColumns();
|
||||
m_lview_search_results->AppendColumn(_("Address"));
|
||||
m_lview_search_results->AppendColumn(_("Value"));
|
||||
m_lview_search_results->AppendColumn(_("Value (float)"));
|
||||
m_lview_search_results->AppendColumn(_("Value (double)"));
|
||||
m_lview_search_results->Bind(wxEVT_LIST_ITEM_ACTIVATED, &CheatSearchTab::OnListViewItemActivated,
|
||||
this);
|
||||
m_lview_search_results->Bind(wxEVT_LIST_ITEM_SELECTED, &CheatSearchTab::OnListViewItemSelected,
|
||||
this);
|
||||
m_lview_search_results->Bind(wxEVT_LIST_ITEM_DESELECTED, &CheatSearchTab::OnListViewItemSelected,
|
||||
this);
|
||||
|
||||
// Result count
|
||||
m_label_results_count = new wxStaticText(this, wxID_ANY, _("Count:"));
|
||||
|
||||
// create AR code button
|
||||
wxButton* const button_cheat_search_copy_address =
|
||||
new wxButton(this, wxID_ANY, _("Create AR Code"));
|
||||
button_cheat_search_copy_address->Bind(wxEVT_BUTTON, &CheatSearchTab::OnCreateARCodeClicked,
|
||||
this);
|
||||
const int space5 = FromDIP(5);
|
||||
|
||||
// results groupbox
|
||||
wxStaticBoxSizer* const sizer_cheat_search_results =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Results"));
|
||||
sizer_cheat_search_results->Add(m_label_results_count, 0, wxALIGN_LEFT | wxALL, 5);
|
||||
sizer_cheat_search_results->Add(m_lview_search_results, 1, wxEXPAND | wxALL, 5);
|
||||
sizer_cheat_search_results->Add(button_cheat_search_copy_address, 0,
|
||||
wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, 5);
|
||||
sizer_cheat_search_results->AddSpacer(space5);
|
||||
sizer_cheat_search_results->Add(m_label_results_count, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_cheat_search_results->AddSpacer(space5);
|
||||
sizer_cheat_search_results->Add(m_lview_search_results, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_cheat_search_results->AddSpacer(space5);
|
||||
sizer_cheat_search_results->Add(m_btn_create_code, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_cheat_search_results->AddSpacer(space5);
|
||||
|
||||
// search value textbox
|
||||
m_textctrl_value_x = new wxTextCtrl(this, wxID_ANY, "0x0", wxDefaultPosition, wxSize(96, -1));
|
||||
|
||||
wxBoxSizer* const sizer_cheat_filter_text = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer_cheat_filter_text->Add(m_textctrl_value_x, 1, wxALIGN_CENTER_VERTICAL, 5);
|
||||
m_textctrl_value_x = new wxTextCtrl(this, wxID_ANY, "0x0");
|
||||
m_textctrl_value_x->SetMinSize(WxUtils::GetTextWidgetMinSize(m_textctrl_value_x, "0x00000000 "));
|
||||
m_textctrl_value_x->SetToolTip(
|
||||
_("Value to match against. Can be Hex (\"0x\"), Octal (\"0\") or Decimal. "
|
||||
"Leave blank to filter each result against its own previous value."));
|
||||
|
||||
// Filter types in the compare dropdown
|
||||
// TODO: Implement between search
|
||||
@@ -93,33 +111,46 @@ CheatSearchTab::CheatSearchTab(wxWindow* const parent) : wxPanel(parent)
|
||||
|
||||
wxStaticBoxSizer* const sizer_cheat_search_filter =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Search (clear to use previous value)"));
|
||||
sizer_cheat_search_filter->Add(sizer_cheat_filter_text, 0, wxALL | wxEXPAND, 5);
|
||||
sizer_cheat_search_filter->Add(m_search_type, 0, wxALL, 5);
|
||||
|
||||
// left sizer
|
||||
wxBoxSizer* const sizer_left = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_left->Add(sizer_cheat_search_results, 1, wxEXPAND, 5);
|
||||
sizer_cheat_search_filter->AddSpacer(space5);
|
||||
sizer_cheat_search_filter->Add(m_textctrl_value_x, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_cheat_search_filter->AddSpacer(space5);
|
||||
sizer_cheat_search_filter->Add(m_search_type, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_cheat_search_filter->AddSpacer(space5);
|
||||
|
||||
// button sizer
|
||||
wxBoxSizer* boxButtons = new wxBoxSizer(wxHORIZONTAL);
|
||||
boxButtons->Add(m_btn_init_scan, 1, wxRIGHT, 5);
|
||||
boxButtons->Add(m_btn_next_scan, 1);
|
||||
boxButtons->Add(m_btn_init_scan, 1);
|
||||
boxButtons->Add(m_btn_next_scan, 1, wxLEFT, space5);
|
||||
|
||||
// right sizer
|
||||
wxBoxSizer* const sizer_right = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_right->Add(m_data_sizes, 0, wxEXPAND | wxBOTTOM, 5);
|
||||
sizer_right->Add(sizer_cheat_search_filter, 0, wxEXPAND | wxBOTTOM, 5);
|
||||
sizer_right->Add(m_data_sizes, 0, wxEXPAND);
|
||||
sizer_right->Add(sizer_cheat_search_filter, 0, wxEXPAND | wxTOP, space5);
|
||||
sizer_right->AddStretchSpacer(1);
|
||||
sizer_right->Add(boxButtons, 0, wxTOP | wxEXPAND, 5);
|
||||
sizer_right->Add(m_label_scan_disabled, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, space5);
|
||||
sizer_right->Add(boxButtons, 0, wxEXPAND | wxTOP, space5);
|
||||
|
||||
// main sizer
|
||||
wxBoxSizer* const sizer_main = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer_main->Add(sizer_left, 1, wxEXPAND | wxALL, 5);
|
||||
sizer_main->Add(sizer_right, 0, wxEXPAND | wxALL, 5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(sizer_cheat_search_results, 1, wxEXPAND | wxTOP | wxBOTTOM, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(sizer_right, 0, wxEXPAND | wxTOP | wxBOTTOM, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
|
||||
SetSizerAndFit(sizer_main);
|
||||
}
|
||||
|
||||
void CheatSearchTab::UpdateGUI()
|
||||
{
|
||||
bool core_running = Core::IsRunning();
|
||||
m_btn_init_scan->Enable(core_running);
|
||||
m_btn_next_scan->Enable(core_running && m_scan_is_initialized);
|
||||
m_label_scan_disabled->Show(!core_running);
|
||||
|
||||
Layout(); // Label shown/hidden may require layout adjustment
|
||||
}
|
||||
|
||||
void CheatSearchTab::OnNewScanClicked(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
if (!Core::IsRunningAndStarted())
|
||||
@@ -136,6 +167,7 @@ void CheatSearchTab::OnNewScanClicked(wxCommandEvent& WXUNUSED(event))
|
||||
m_search_results.reserve(Memory::RAM_SIZE / m_search_type_size);
|
||||
|
||||
// Enable the "Next Scan" button.
|
||||
m_scan_is_initialized = true;
|
||||
m_btn_next_scan->Enable();
|
||||
|
||||
CheatSearchResult r;
|
||||
@@ -183,6 +215,21 @@ void CheatSearchTab::OnCreateARCodeClicked(wxCommandEvent&)
|
||||
arcode_dlg.ShowModal();
|
||||
}
|
||||
|
||||
void CheatSearchTab::OnListViewItemActivated(wxListEvent&)
|
||||
{
|
||||
if (!m_btn_create_code->IsEnabled())
|
||||
return;
|
||||
|
||||
wxCommandEvent fake(wxEVT_BUTTON, m_btn_create_code->GetId());
|
||||
m_btn_create_code->GetEventHandler()->ProcessEvent(fake);
|
||||
}
|
||||
|
||||
void CheatSearchTab::OnListViewItemSelected(wxListEvent&)
|
||||
{
|
||||
// Toggle "Create AR Code" Button
|
||||
m_btn_create_code->Enable(m_lview_search_results->GetSelectedItemCount() > 0);
|
||||
}
|
||||
|
||||
void CheatSearchTab::OnTimerUpdate(wxTimerEvent&)
|
||||
{
|
||||
if (Core::GetState() != Core::CORE_RUN)
|
||||
@@ -190,8 +237,8 @@ void CheatSearchTab::OnTimerUpdate(wxTimerEvent&)
|
||||
|
||||
// Only update the currently visible list rows.
|
||||
long first = m_lview_search_results->GetTopItem();
|
||||
long last =
|
||||
std::min(m_lview_search_results->GetItemCount(), m_lview_search_results->GetCountPerPage());
|
||||
long last = std::min<long>(m_lview_search_results->GetItemCount(),
|
||||
first + m_lview_search_results->GetCountPerPage());
|
||||
|
||||
m_lview_search_results->Freeze();
|
||||
|
||||
@@ -207,8 +254,8 @@ void CheatSearchTab::OnTimerUpdate(wxTimerEvent&)
|
||||
void CheatSearchTab::UpdateCheatSearchResultsList()
|
||||
{
|
||||
m_update_timer.Stop();
|
||||
m_lview_search_results->ClearAll();
|
||||
ResetListViewColumns();
|
||||
m_lview_search_results->DeleteAllItems();
|
||||
m_btn_create_code->Disable();
|
||||
|
||||
wxString count_label = wxString::Format(_("Count: %lu"), (unsigned long)m_search_results.size());
|
||||
if (m_search_results.size() > MAX_CHEAT_SEARCH_RESULTS_DISPLAY)
|
||||
@@ -312,14 +359,6 @@ void CheatSearchTab::FilterCheatSearchResults(u32 value, bool prev)
|
||||
m_search_results.swap(filtered_results);
|
||||
}
|
||||
|
||||
void CheatSearchTab::ResetListViewColumns()
|
||||
{
|
||||
m_lview_search_results->AppendColumn(_("Address"));
|
||||
m_lview_search_results->AppendColumn(_("Value"));
|
||||
m_lview_search_results->AppendColumn(_("Value (float)"));
|
||||
m_lview_search_results->AppendColumn(_("Value (double)"));
|
||||
}
|
||||
|
||||
bool CheatSearchTab::ParseUserEnteredValue(u32* out) const
|
||||
{
|
||||
unsigned long parsed_x_val = 0;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
class wxButton;
|
||||
class wxChoice;
|
||||
class wxFocusEvent;
|
||||
class wxListEvent;
|
||||
class wxListView;
|
||||
class wxRadioBox;
|
||||
class wxRadioButton;
|
||||
@@ -22,6 +23,8 @@ class CheatSearchTab final : public wxPanel
|
||||
public:
|
||||
CheatSearchTab(wxWindow* const parent);
|
||||
|
||||
void UpdateGUI();
|
||||
|
||||
private:
|
||||
class CheatSearchResult final
|
||||
{
|
||||
@@ -34,25 +37,29 @@ private:
|
||||
void UpdateCheatSearchResultsList();
|
||||
void UpdateCheatSearchResultItem(long index);
|
||||
void FilterCheatSearchResults(u32 value, bool prev);
|
||||
void ResetListViewColumns();
|
||||
bool ParseUserEnteredValue(u32* out) const;
|
||||
u32 SwapValue(u32 value) const;
|
||||
|
||||
void OnNewScanClicked(wxCommandEvent&);
|
||||
void OnNextScanClicked(wxCommandEvent&);
|
||||
void OnCreateARCodeClicked(wxCommandEvent&);
|
||||
void OnListViewItemActivated(wxListEvent&);
|
||||
void OnListViewItemSelected(wxListEvent&);
|
||||
void OnTimerUpdate(wxTimerEvent&);
|
||||
|
||||
std::vector<CheatSearchResult> m_search_results;
|
||||
unsigned int m_search_type_size;
|
||||
bool m_scan_is_initialized = false;
|
||||
|
||||
wxChoice* m_search_type;
|
||||
wxListView* m_lview_search_results;
|
||||
wxStaticText* m_label_results_count;
|
||||
wxTextCtrl* m_textctrl_value_x;
|
||||
|
||||
wxButton* m_btn_create_code;
|
||||
wxButton* m_btn_init_scan;
|
||||
wxButton* m_btn_next_scan;
|
||||
wxStaticText* m_label_scan_disabled;
|
||||
|
||||
wxRadioBox* m_data_sizes;
|
||||
|
||||
|
||||
@@ -55,13 +55,15 @@ wxCheatsWindow::wxCheatsWindow(wxWindow* const parent)
|
||||
wxDIALOG_NO_PARENT)
|
||||
{
|
||||
// Create the GUI controls
|
||||
Init_ChildControls();
|
||||
CreateGUI();
|
||||
|
||||
// load codes
|
||||
UpdateGUI();
|
||||
wxTheApp->Bind(DOLPHIN_EVT_LOCAL_INI_CHANGED, &wxCheatsWindow::OnLocalGameIniModified, this);
|
||||
|
||||
SetSize(wxSize(-1, 600));
|
||||
SetIcons(WxUtils::GetDolphinIconBundle());
|
||||
SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED);
|
||||
SetLayoutAdaptationLevel(wxDIALOG_ADAPTATION_STANDARD_SIZER);
|
||||
Center();
|
||||
Show();
|
||||
}
|
||||
@@ -71,8 +73,11 @@ wxCheatsWindow::~wxCheatsWindow()
|
||||
main_frame->g_CheatsWindow = nullptr;
|
||||
}
|
||||
|
||||
void wxCheatsWindow::Init_ChildControls()
|
||||
void wxCheatsWindow::CreateGUI()
|
||||
{
|
||||
const int space5 = FromDIP(5);
|
||||
const int space10 = FromDIP(10);
|
||||
|
||||
// Main Notebook
|
||||
m_notebook_main = new wxNotebook(this, wxID_ANY);
|
||||
|
||||
@@ -84,13 +89,15 @@ void wxCheatsWindow::Init_ChildControls()
|
||||
new ActionReplayCodesPanel(tab_cheats, ActionReplayCodesPanel::STYLE_SIDE_PANEL |
|
||||
ActionReplayCodesPanel::STYLE_MODIFY_BUTTONS);
|
||||
|
||||
wxBoxSizer* sizer_tab_cheats = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer_tab_cheats->Add(m_ar_codes_panel, 1, wxEXPAND | wxALL, 5);
|
||||
wxBoxSizer* sizer_tab_cheats = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_tab_cheats->AddSpacer(space5);
|
||||
sizer_tab_cheats->Add(m_ar_codes_panel, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_tab_cheats->AddSpacer(space5);
|
||||
|
||||
tab_cheats->SetSizerAndFit(sizer_tab_cheats);
|
||||
|
||||
// Cheat Search Tab
|
||||
wxPanel* const tab_cheat_search = new CheatSearchTab(m_notebook_main);
|
||||
m_tab_cheat_search = new CheatSearchTab(m_notebook_main);
|
||||
|
||||
// Log Tab
|
||||
m_tab_log = new wxPanel(m_notebook_main, wxID_ANY);
|
||||
@@ -105,25 +112,30 @@ void wxCheatsWindow::Init_ChildControls()
|
||||
&wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange, this);
|
||||
|
||||
m_checkbox_log_ar->SetValue(ActionReplay::IsSelfLogging());
|
||||
m_textctrl_log = new wxTextCtrl(m_tab_log, wxID_ANY, "", wxDefaultPosition, wxSize(100, -1),
|
||||
wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
|
||||
m_textctrl_log = new wxTextCtrl(m_tab_log, wxID_ANY, wxEmptyString, wxDefaultPosition,
|
||||
wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
|
||||
|
||||
wxBoxSizer* HStrip1 = new wxBoxSizer(wxHORIZONTAL);
|
||||
HStrip1->Add(m_checkbox_log_ar, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
|
||||
HStrip1->Add(button_updatelog, 0, wxALL, 5);
|
||||
HStrip1->Add(button_clearlog, 0, wxALL, 5);
|
||||
wxBoxSizer* log_control_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
log_control_sizer->Add(m_checkbox_log_ar, 0, wxALIGN_CENTER_VERTICAL);
|
||||
log_control_sizer->Add(button_updatelog, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, space10);
|
||||
log_control_sizer->Add(button_clearlog, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, space10);
|
||||
|
||||
wxBoxSizer* sTabLog = new wxBoxSizer(wxVERTICAL);
|
||||
sTabLog->Add(HStrip1, 0, wxALL, 5);
|
||||
sTabLog->Add(m_textctrl_log, 1, wxALL | wxEXPAND, 5);
|
||||
sTabLog->AddSpacer(space5);
|
||||
sTabLog->Add(log_control_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space10);
|
||||
sTabLog->AddSpacer(space5);
|
||||
sTabLog->Add(m_textctrl_log, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sTabLog->AddSpacer(space5);
|
||||
|
||||
m_tab_log->SetSizerAndFit(sTabLog);
|
||||
|
||||
// Gecko tab
|
||||
m_geckocode_panel = new Gecko::CodeConfigPanel(m_notebook_main);
|
||||
|
||||
// Add Tabs to Notebook
|
||||
m_notebook_main->AddPage(tab_cheats, _("AR Codes"));
|
||||
m_geckocode_panel = new Gecko::CodeConfigPanel(m_notebook_main);
|
||||
m_notebook_main->AddPage(m_geckocode_panel, _("Gecko Codes"));
|
||||
m_notebook_main->AddPage(tab_cheat_search, _("Cheat Search"));
|
||||
m_notebook_main->AddPage(m_tab_cheat_search, _("Cheat Search"));
|
||||
m_notebook_main->AddPage(m_tab_log, _("Logging"));
|
||||
|
||||
Bind(wxEVT_BUTTON, &wxCheatsWindow::OnEvent_ApplyChanges_Press, this, wxID_APPLY);
|
||||
@@ -137,18 +149,23 @@ void wxCheatsWindow::Init_ChildControls()
|
||||
SetAffirmativeId(wxID_CANCEL);
|
||||
|
||||
wxBoxSizer* const sMain = new wxBoxSizer(wxVERTICAL);
|
||||
sMain->Add(m_notebook_main, 1, wxEXPAND | wxALL, 5);
|
||||
sMain->Add(sButtons, 0, wxRIGHT | wxBOTTOM | wxALIGN_RIGHT, 5);
|
||||
sMain->AddSpacer(space5);
|
||||
sMain->Add(m_notebook_main, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sMain->AddSpacer(space5);
|
||||
sMain->Add(sButtons, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sMain->AddSpacer(space5);
|
||||
sMain->SetMinSize(FromDIP(wxSize(-1, 600)));
|
||||
SetSizerAndFit(sMain);
|
||||
}
|
||||
|
||||
void wxCheatsWindow::OnEvent_ButtonClose_Press(wxCommandEvent& WXUNUSED(event))
|
||||
void wxCheatsWindow::OnEvent_ButtonClose_Press(wxCommandEvent&)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
void wxCheatsWindow::OnEvent_Close(wxCloseEvent& ev)
|
||||
void wxCheatsWindow::OnEvent_Close(wxCloseEvent&)
|
||||
{
|
||||
// This dialog is created on the heap instead of the stack so we have to destroy ourself.
|
||||
Destroy();
|
||||
}
|
||||
|
||||
@@ -164,6 +181,7 @@ void wxCheatsWindow::UpdateGUI()
|
||||
m_gameini_local_path = File::GetUserPath(D_GAMESETTINGS_IDX) + m_game_id + ".ini";
|
||||
Load_ARCodes();
|
||||
Load_GeckoCodes();
|
||||
m_tab_cheat_search->UpdateGUI();
|
||||
|
||||
// enable controls
|
||||
m_button_apply->Enable(Core::IsRunning());
|
||||
@@ -194,8 +212,7 @@ void wxCheatsWindow::Load_ARCodes()
|
||||
|
||||
void wxCheatsWindow::Load_GeckoCodes()
|
||||
{
|
||||
m_geckocode_panel->LoadCodes(m_gameini_default, m_gameini_local,
|
||||
SConfig::GetInstance().GetUniqueID(), true);
|
||||
m_geckocode_panel->LoadCodes(m_gameini_default, m_gameini_local, m_game_id, true);
|
||||
}
|
||||
|
||||
void wxCheatsWindow::OnNewARCodeCreated(wxCommandEvent& ev)
|
||||
@@ -243,7 +260,7 @@ void wxCheatsWindow::OnEvent_ApplyChanges_Press(wxCommandEvent& ev)
|
||||
ev.Skip();
|
||||
}
|
||||
|
||||
void wxCheatsWindow::OnEvent_ButtonUpdateLog_Press(wxCommandEvent& WXUNUSED(event))
|
||||
void wxCheatsWindow::OnEvent_ButtonUpdateLog_Press(wxCommandEvent&)
|
||||
{
|
||||
wxBeginBusyCursor();
|
||||
m_textctrl_log->Freeze();
|
||||
@@ -284,7 +301,7 @@ void wxCheatsWindow::OnClearActionReplayLog(wxCommandEvent& event)
|
||||
OnEvent_ButtonUpdateLog_Press(event);
|
||||
}
|
||||
|
||||
void wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange(wxCommandEvent& WXUNUSED(event))
|
||||
void wxCheatsWindow::OnEvent_CheckBoxEnableLogging_StateChange(wxCommandEvent&)
|
||||
{
|
||||
ActionReplay::EnableSelfLogging(m_checkbox_log_ar->IsChecked());
|
||||
}
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <wx/arrstr.h>
|
||||
#include <wx/dialog.h>
|
||||
#include <wx/panel.h>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/IniFile.h"
|
||||
|
||||
class CheatSearchTab;
|
||||
class wxButton;
|
||||
class wxCheckBox;
|
||||
class wxNotebook;
|
||||
@@ -41,6 +41,7 @@ private:
|
||||
wxButton* m_button_apply;
|
||||
wxNotebook* m_notebook_main;
|
||||
|
||||
CheatSearchTab* m_tab_cheat_search;
|
||||
wxPanel* m_tab_log;
|
||||
|
||||
wxCheckBox* m_checkbox_log_ar;
|
||||
@@ -57,7 +58,7 @@ private:
|
||||
|
||||
bool m_ignore_ini_callback = false;
|
||||
|
||||
void Init_ChildControls();
|
||||
void CreateGUI();
|
||||
|
||||
void Load_ARCodes();
|
||||
void Load_GeckoCodes();
|
||||
|
||||
@@ -19,8 +19,8 @@ CreateCodeDialog::CreateCodeDialog(wxWindow* const parent, const u32 address)
|
||||
: wxDialog(parent, wxID_ANY, _("Create AR Code")), m_code_address(address)
|
||||
{
|
||||
wxStaticText* const label_name = new wxStaticText(this, wxID_ANY, _("Name: "));
|
||||
m_textctrl_name =
|
||||
new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(256, -1));
|
||||
m_textctrl_name = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition,
|
||||
wxDLG_UNIT(this, wxSize(180, -1)));
|
||||
|
||||
wxStaticText* const label_code = new wxStaticText(this, wxID_ANY, _("Code: "));
|
||||
m_textctrl_code = new wxTextCtrl(this, wxID_ANY, wxString::Format("0x%08x", address));
|
||||
@@ -33,22 +33,31 @@ CreateCodeDialog::CreateCodeDialog(wxWindow* const parent, const u32 address)
|
||||
m_checkbox_use_hex->SetValue(true);
|
||||
|
||||
wxBoxSizer* const sizer_value_label = new wxBoxSizer(wxHORIZONTAL);
|
||||
sizer_value_label->Add(label_value, 0, wxRIGHT, 5);
|
||||
sizer_value_label->Add(m_checkbox_use_hex);
|
||||
const int space5 = FromDIP(5);
|
||||
sizer_value_label->Add(label_value);
|
||||
sizer_value_label->Add(m_checkbox_use_hex, 0, wxLEFT, space5);
|
||||
|
||||
// main sizer
|
||||
wxBoxSizer* const sizer_main = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_main->Add(label_name, 0, wxALL, 5);
|
||||
sizer_main->Add(m_textctrl_name, 0, wxALL, 5);
|
||||
sizer_main->Add(label_code, 0, wxALL, 5);
|
||||
sizer_main->Add(m_textctrl_code, 0, wxALL, 5);
|
||||
sizer_main->Add(sizer_value_label, 0, wxALL, 5);
|
||||
sizer_main->Add(m_textctrl_value, 0, wxALL, 5);
|
||||
sizer_main->Add(CreateButtonSizer(wxOK | wxCANCEL | wxNO_DEFAULT), 0, wxALL, 5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(label_name, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(m_textctrl_name, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(label_code, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(m_textctrl_code, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(sizer_value_label, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(m_textctrl_value, 0, wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(CreateButtonSizer(wxOK | wxCANCEL | wxNO_DEFAULT), 0, wxEXPAND | wxLEFT | wxRIGHT,
|
||||
space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
|
||||
// NOTE: Use default wxCANCEL handling.
|
||||
Bind(wxEVT_BUTTON, &CreateCodeDialog::PressOK, this, wxID_OK);
|
||||
Bind(wxEVT_BUTTON, &CreateCodeDialog::PressCancel, this, wxID_CANCEL);
|
||||
Bind(wxEVT_CLOSE_WINDOW, &CreateCodeDialog::OnEvent_Close, this);
|
||||
|
||||
SetSizerAndFit(sizer_main);
|
||||
SetFocus();
|
||||
@@ -82,15 +91,6 @@ void CreateCodeDialog::PressOK(wxCommandEvent& ev)
|
||||
add_event.SetClientData(&new_cheat);
|
||||
GetParent()->GetEventHandler()->ProcessEvent(add_event);
|
||||
|
||||
Close();
|
||||
}
|
||||
|
||||
void CreateCodeDialog::PressCancel(wxCommandEvent& ev)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
void CreateCodeDialog::OnEvent_Close(wxCloseEvent& ev)
|
||||
{
|
||||
Destroy();
|
||||
// Allow base class to process. wxDialog will set the return code and hide the window.
|
||||
ev.Skip();
|
||||
}
|
||||
|
||||
@@ -26,6 +26,4 @@ private:
|
||||
wxCheckBox* m_checkbox_use_hex;
|
||||
|
||||
void PressOK(wxCommandEvent&);
|
||||
void PressCancel(wxCommandEvent&);
|
||||
void OnEvent_Close(wxCloseEvent& ev);
|
||||
};
|
||||
|
||||
@@ -27,8 +27,9 @@ wxDEFINE_EVENT(DOLPHIN_EVT_GECKOCODE_TOGGLED, wxCommandEvent);
|
||||
|
||||
namespace Gecko
|
||||
{
|
||||
static const wxString wxstr_name(wxTRANSLATE("Name: ")), wxstr_notes(wxTRANSLATE("Notes: ")),
|
||||
wxstr_creator(wxTRANSLATE("Creator: "));
|
||||
static const char str_name[] = wxTRANSLATE("Name: ");
|
||||
static const char str_notes[] = wxTRANSLATE("Notes: ");
|
||||
static const char str_creator[] = wxTRANSLATE("Creator: ");
|
||||
|
||||
CodeConfigPanel::CodeConfigPanel(wxWindow* const parent) : wxPanel(parent)
|
||||
{
|
||||
@@ -36,40 +37,41 @@ CodeConfigPanel::CodeConfigPanel(wxWindow* const parent) : wxPanel(parent)
|
||||
m_listbox_gcodes->Bind(wxEVT_LISTBOX, &CodeConfigPanel::UpdateInfoBox, this);
|
||||
m_listbox_gcodes->Bind(wxEVT_CHECKLISTBOX, &CodeConfigPanel::ToggleCode, this);
|
||||
|
||||
m_infobox.label_name = new wxStaticText(this, wxID_ANY, wxGetTranslation(wxstr_name));
|
||||
m_infobox.label_creator = new wxStaticText(this, wxID_ANY, wxGetTranslation(wxstr_creator));
|
||||
m_infobox.label_notes = new wxStaticText(this, wxID_ANY, wxGetTranslation(wxstr_notes));
|
||||
m_infobox.label_name = new wxStaticText(this, wxID_ANY, wxGetTranslation(str_name));
|
||||
m_infobox.label_creator = new wxStaticText(this, wxID_ANY, wxGetTranslation(str_creator));
|
||||
m_infobox.label_notes = new wxStaticText(this, wxID_ANY, wxGetTranslation(str_notes));
|
||||
m_infobox.textctrl_notes = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition,
|
||||
wxSize(64, -1), wxTE_MULTILINE | wxTE_READONLY);
|
||||
m_infobox.listbox_codes = new wxListBox(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 64));
|
||||
wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY);
|
||||
m_infobox.listbox_codes =
|
||||
new wxListBox(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1, 48)));
|
||||
|
||||
// TODO: buttons to add/edit codes
|
||||
|
||||
// sizers
|
||||
const int space5 = FromDIP(5);
|
||||
wxBoxSizer* const sizer_infobox = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_infobox->Add(m_infobox.label_name, 0, wxBOTTOM, 5);
|
||||
sizer_infobox->Add(m_infobox.label_creator, 0, wxBOTTOM, 5);
|
||||
sizer_infobox->Add(m_infobox.label_notes, 0, wxBOTTOM, 5);
|
||||
sizer_infobox->Add(m_infobox.textctrl_notes, 0, wxBOTTOM | wxEXPAND, 5);
|
||||
sizer_infobox->Add(m_infobox.listbox_codes, 1, wxEXPAND, 5);
|
||||
sizer_infobox->Add(m_infobox.label_name);
|
||||
sizer_infobox->Add(m_infobox.label_creator, 0, wxTOP, space5);
|
||||
sizer_infobox->Add(m_infobox.label_notes, 0, wxTOP, space5);
|
||||
sizer_infobox->Add(m_infobox.textctrl_notes, 0, wxEXPAND | wxTOP, space5);
|
||||
sizer_infobox->Add(m_infobox.listbox_codes, 1, wxEXPAND | wxTOP, space5);
|
||||
|
||||
// button sizer
|
||||
wxBoxSizer* const sizer_buttons = new wxBoxSizer(wxHORIZONTAL);
|
||||
btn_download = new wxButton(this, wxID_ANY, _("Download Codes (WiiRD Database)"),
|
||||
wxDefaultPosition, wxSize(128, -1));
|
||||
btn_download = new wxButton(this, wxID_ANY, _("Download Codes (WiiRD Database)"));
|
||||
btn_download->Disable();
|
||||
btn_download->Bind(wxEVT_BUTTON, &CodeConfigPanel::DownloadCodes, this);
|
||||
sizer_buttons->AddStretchSpacer(1);
|
||||
sizer_buttons->Add(btn_download, 1, wxEXPAND);
|
||||
|
||||
// horizontal sizer
|
||||
wxBoxSizer* const sizer_vert = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_vert->Add(sizer_infobox, 1, wxEXPAND);
|
||||
sizer_vert->Add(sizer_buttons, 0, wxEXPAND | wxTOP, 5);
|
||||
sizer_buttons->Add(WxUtils::GiveMinSizeDIP(btn_download, wxSize(128, -1)), 1, wxEXPAND);
|
||||
|
||||
wxBoxSizer* const sizer_main = new wxBoxSizer(wxVERTICAL);
|
||||
sizer_main->Add(m_listbox_gcodes, 1, wxALL | wxEXPAND, 5);
|
||||
sizer_main->Add(sizer_vert, 0, wxALL | wxEXPAND, 5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(m_listbox_gcodes, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(sizer_infobox, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
sizer_main->Add(sizer_buttons, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sizer_main->AddSpacer(space5);
|
||||
|
||||
SetSizerAndFit(sizer_main);
|
||||
}
|
||||
@@ -83,7 +85,7 @@ void CodeConfigPanel::UpdateCodeList(bool checkRunning)
|
||||
// add the codes to the listbox
|
||||
for (const GeckoCode& code : m_gcodes)
|
||||
{
|
||||
m_listbox_gcodes->Append(StrToWxStr(code.name));
|
||||
m_listbox_gcodes->Append(m_listbox_gcodes->EscapeMnemonics(StrToWxStr(code.name)));
|
||||
if (code.enabled)
|
||||
{
|
||||
m_listbox_gcodes->Check(m_listbox_gcodes->GetCount() - 1, true);
|
||||
@@ -126,7 +128,7 @@ void CodeConfigPanel::UpdateInfoBox(wxCommandEvent&)
|
||||
|
||||
if (sel > -1)
|
||||
{
|
||||
m_infobox.label_name->SetLabel(wxGetTranslation(wxstr_name) + StrToWxStr(m_gcodes[sel].name));
|
||||
m_infobox.label_name->SetLabel(wxGetTranslation(str_name) + StrToWxStr(m_gcodes[sel].name));
|
||||
|
||||
// notes textctrl
|
||||
m_infobox.textctrl_notes->Clear();
|
||||
@@ -136,7 +138,7 @@ void CodeConfigPanel::UpdateInfoBox(wxCommandEvent&)
|
||||
}
|
||||
m_infobox.textctrl_notes->ScrollLines(-99); // silly
|
||||
|
||||
m_infobox.label_creator->SetLabel(wxGetTranslation(wxstr_creator) +
|
||||
m_infobox.label_creator->SetLabel(wxGetTranslation(str_creator) +
|
||||
StrToWxStr(m_gcodes[sel].creator));
|
||||
|
||||
// add codes to info listbox
|
||||
@@ -147,9 +149,9 @@ void CodeConfigPanel::UpdateInfoBox(wxCommandEvent&)
|
||||
}
|
||||
else
|
||||
{
|
||||
m_infobox.label_name->SetLabel(wxGetTranslation(wxstr_name));
|
||||
m_infobox.label_name->SetLabel(wxGetTranslation(str_name));
|
||||
m_infobox.textctrl_notes->Clear();
|
||||
m_infobox.label_creator->SetLabel(wxGetTranslation(wxstr_creator));
|
||||
m_infobox.label_creator->SetLabel(wxGetTranslation(str_creator));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,9 +7,7 @@
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/datectrl.h>
|
||||
#include <wx/dateevt.h>
|
||||
#include <wx/gbsizer.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/slider.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/time.h>
|
||||
#include <wx/timectrl.h>
|
||||
@@ -17,6 +15,7 @@
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
#include "DolphinWX/Config/AdvancedConfigPane.h"
|
||||
#include "DolphinWX/DolphinSlider.h"
|
||||
|
||||
AdvancedConfigPane::AdvancedConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id)
|
||||
{
|
||||
@@ -29,7 +28,7 @@ void AdvancedConfigPane::InitializeGUI()
|
||||
{
|
||||
m_clock_override_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable CPU Clock Override"));
|
||||
m_clock_override_slider =
|
||||
new wxSlider(this, wxID_ANY, 100, 0, 150, wxDefaultPosition, wxSize(200, -1));
|
||||
new DolphinSlider(this, wxID_ANY, 100, 0, 150, wxDefaultPosition, FromDIP(wxSize(200, -1)));
|
||||
m_clock_override_text = new wxStaticText(this, wxID_ANY, "");
|
||||
|
||||
m_clock_override_checkbox->Bind(wxEVT_CHECKBOX,
|
||||
@@ -67,47 +66,47 @@ void AdvancedConfigPane::InitializeGUI()
|
||||
clock_override_description->Wrap(550);
|
||||
custom_rtc_description->Wrap(550);
|
||||
#else
|
||||
clock_override_description->Wrap(400);
|
||||
custom_rtc_description->Wrap(400);
|
||||
clock_override_description->Wrap(FromDIP(400));
|
||||
custom_rtc_description->Wrap(FromDIP(400));
|
||||
#endif
|
||||
|
||||
wxBoxSizer* const clock_override_checkbox_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
clock_override_checkbox_sizer->Add(m_clock_override_checkbox, 1, wxALL, 5);
|
||||
const int space5 = FromDIP(5);
|
||||
|
||||
wxBoxSizer* const clock_override_slider_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
clock_override_slider_sizer->Add(m_clock_override_slider, 1, wxALL, 5);
|
||||
clock_override_slider_sizer->Add(m_clock_override_text, 1, wxALL, 5);
|
||||
|
||||
wxBoxSizer* const clock_override_description_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
clock_override_description_sizer->Add(clock_override_description, 1, wxALL, 5);
|
||||
clock_override_slider_sizer->Add(m_clock_override_slider, 1);
|
||||
clock_override_slider_sizer->Add(m_clock_override_text, 1, wxLEFT, space5);
|
||||
|
||||
wxStaticBoxSizer* const cpu_options_sizer =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("CPU Options"));
|
||||
cpu_options_sizer->Add(clock_override_checkbox_sizer);
|
||||
cpu_options_sizer->Add(clock_override_slider_sizer);
|
||||
cpu_options_sizer->Add(clock_override_description_sizer);
|
||||
cpu_options_sizer->AddSpacer(space5);
|
||||
cpu_options_sizer->Add(m_clock_override_checkbox, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
cpu_options_sizer->AddSpacer(space5);
|
||||
cpu_options_sizer->Add(clock_override_slider_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
cpu_options_sizer->AddSpacer(space5);
|
||||
cpu_options_sizer->Add(clock_override_description, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
cpu_options_sizer->AddSpacer(space5);
|
||||
|
||||
wxBoxSizer* const custom_rtc_checkbox_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
custom_rtc_checkbox_sizer->Add(m_custom_rtc_checkbox, 1, wxALL, 5);
|
||||
|
||||
wxGridBagSizer* const custom_rtc_date_time_sizer = new wxGridBagSizer();
|
||||
custom_rtc_date_time_sizer->Add(m_custom_rtc_date_picker, wxGBPosition(0, 0), wxDefaultSpan,
|
||||
wxEXPAND | wxALL, 5);
|
||||
custom_rtc_date_time_sizer->Add(m_custom_rtc_time_picker, wxGBPosition(0, 1), wxDefaultSpan,
|
||||
wxEXPAND | wxALL, 5);
|
||||
|
||||
wxBoxSizer* const custom_rtc_description_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
custom_rtc_description_sizer->Add(custom_rtc_description, 1, wxALL, 5);
|
||||
wxFlexGridSizer* const custom_rtc_date_time_sizer =
|
||||
new wxFlexGridSizer(2, wxSize(space5, space5));
|
||||
custom_rtc_date_time_sizer->Add(m_custom_rtc_date_picker, 0, wxEXPAND);
|
||||
custom_rtc_date_time_sizer->Add(m_custom_rtc_time_picker, 0, wxEXPAND);
|
||||
|
||||
wxStaticBoxSizer* const custom_rtc_sizer =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Custom RTC Options"));
|
||||
custom_rtc_sizer->Add(custom_rtc_checkbox_sizer);
|
||||
custom_rtc_sizer->Add(custom_rtc_date_time_sizer);
|
||||
custom_rtc_sizer->Add(custom_rtc_description_sizer);
|
||||
custom_rtc_sizer->AddSpacer(space5);
|
||||
custom_rtc_sizer->Add(m_custom_rtc_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
custom_rtc_sizer->AddSpacer(space5);
|
||||
custom_rtc_sizer->Add(custom_rtc_date_time_sizer, 0, wxLEFT | wxRIGHT, space5);
|
||||
custom_rtc_sizer->AddSpacer(space5);
|
||||
custom_rtc_sizer->Add(custom_rtc_description, 0, wxLEFT | wxRIGHT, space5);
|
||||
custom_rtc_sizer->AddSpacer(space5);
|
||||
|
||||
wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->Add(cpu_options_sizer, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->Add(custom_rtc_sizer, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(cpu_options_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(custom_rtc_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
|
||||
SetSizer(main_sizer);
|
||||
}
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
#include <wx/panel.h>
|
||||
|
||||
class DolphinSlider;
|
||||
class wxCheckBox;
|
||||
class wxDatePickerCtrl;
|
||||
class wxSlider;
|
||||
class wxStaticText;
|
||||
class wxTimePickerCtrl;
|
||||
|
||||
@@ -37,7 +37,7 @@ private:
|
||||
u32 m_temp_time;
|
||||
|
||||
wxCheckBox* m_clock_override_checkbox;
|
||||
wxSlider* m_clock_override_slider;
|
||||
DolphinSlider* m_clock_override_slider;
|
||||
wxStaticText* m_clock_override_text;
|
||||
wxCheckBox* m_custom_rtc_checkbox;
|
||||
wxDatePickerCtrl* m_custom_rtc_date_picker;
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#include <wx/gbsizer.h>
|
||||
#include <wx/radiobox.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/slider.h>
|
||||
#include <wx/spinctrl.h>
|
||||
#include <wx/stattext.h>
|
||||
|
||||
@@ -18,6 +17,7 @@
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
#include "DolphinWX/Config/AudioConfigPane.h"
|
||||
#include "DolphinWX/DolphinSlider.h"
|
||||
#include "DolphinWX/WxUtils.h"
|
||||
|
||||
AudioConfigPane::AudioConfigPane(wxWindow* parent, wxWindowID id) : wxPanel(parent, id)
|
||||
@@ -37,8 +37,8 @@ void AudioConfigPane::InitializeGUI()
|
||||
new wxRadioBox(this, wxID_ANY, _("DSP Emulator Engine"), wxDefaultPosition, wxDefaultSize,
|
||||
m_dsp_engine_strings, 0, wxRA_SPECIFY_ROWS);
|
||||
m_dpl2_decoder_checkbox = new wxCheckBox(this, wxID_ANY, _("Dolby Pro Logic II decoder"));
|
||||
m_volume_slider = new wxSlider(this, wxID_ANY, 0, 0, 100, wxDefaultPosition, wxDefaultSize,
|
||||
wxSL_VERTICAL | wxSL_INVERSE);
|
||||
m_volume_slider = new DolphinSlider(this, wxID_ANY, 0, 0, 100, wxDefaultPosition, wxDefaultSize,
|
||||
wxSL_VERTICAL | wxSL_INVERSE);
|
||||
m_volume_text = new wxStaticText(this, wxID_ANY, "");
|
||||
m_audio_backend_choice =
|
||||
new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_audio_backend_strings);
|
||||
@@ -64,34 +64,51 @@ void AudioConfigPane::InitializeGUI()
|
||||
_("Enables Dolby Pro Logic II emulation using 5.1 surround. OpenAL or Pulse backends only."));
|
||||
#endif
|
||||
|
||||
const int space5 = FromDIP(5);
|
||||
|
||||
wxStaticBoxSizer* const dsp_engine_sizer =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Sound Settings"));
|
||||
dsp_engine_sizer->Add(m_dsp_engine_radiobox, 0, wxALL | wxEXPAND, 5);
|
||||
dsp_engine_sizer->Add(m_dpl2_decoder_checkbox, 0, wxALL, 5);
|
||||
dsp_engine_sizer->Add(m_dsp_engine_radiobox, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
dsp_engine_sizer->AddSpacer(space5);
|
||||
dsp_engine_sizer->AddStretchSpacer();
|
||||
dsp_engine_sizer->Add(m_dpl2_decoder_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
dsp_engine_sizer->AddStretchSpacer();
|
||||
dsp_engine_sizer->AddSpacer(space5);
|
||||
|
||||
wxStaticBoxSizer* const volume_sizer = new wxStaticBoxSizer(wxVERTICAL, this, _("Volume"));
|
||||
volume_sizer->Add(m_volume_slider, 1, wxLEFT | wxRIGHT, 13);
|
||||
volume_sizer->Add(m_volume_text, 0, wxALIGN_CENTER | wxALL, 5);
|
||||
volume_sizer->Add(m_volume_slider, 1, wxALIGN_CENTER_HORIZONTAL);
|
||||
volume_sizer->Add(m_volume_text, 0, wxALIGN_CENTER_HORIZONTAL | wxLEFT | wxRIGHT, space5);
|
||||
volume_sizer->AddSpacer(space5);
|
||||
|
||||
wxGridBagSizer* const backend_grid_sizer = new wxGridBagSizer();
|
||||
wxGridBagSizer* const backend_grid_sizer = new wxGridBagSizer(space5, space5);
|
||||
backend_grid_sizer->Add(new wxStaticText(this, wxID_ANY, _("Audio Backend:")), wxGBPosition(0, 0),
|
||||
wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxALL, 5);
|
||||
backend_grid_sizer->Add(m_audio_backend_choice, wxGBPosition(0, 1), wxDefaultSpan, wxALL, 5);
|
||||
wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
|
||||
backend_grid_sizer->Add(m_audio_backend_choice, wxGBPosition(0, 1), wxDefaultSpan,
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
backend_grid_sizer->Add(new wxStaticText(this, wxID_ANY, _("Latency:")), wxGBPosition(1, 0),
|
||||
wxDefaultSpan, wxALIGN_CENTER_VERTICAL | wxALL, 5);
|
||||
backend_grid_sizer->Add(m_audio_latency_spinctrl, wxGBPosition(1, 1), wxDefaultSpan, wxALL, 5);
|
||||
wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
|
||||
backend_grid_sizer->Add(m_audio_latency_spinctrl, wxGBPosition(1, 1), wxDefaultSpan,
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
|
||||
wxStaticBoxSizer* const backend_static_box_sizer =
|
||||
new wxStaticBoxSizer(wxHORIZONTAL, this, _("Backend Settings"));
|
||||
backend_static_box_sizer->Add(backend_grid_sizer, 0, wxEXPAND);
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Backend Settings"));
|
||||
backend_static_box_sizer->AddSpacer(space5);
|
||||
backend_static_box_sizer->Add(backend_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
backend_static_box_sizer->AddSpacer(space5);
|
||||
|
||||
wxBoxSizer* const dsp_audio_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
dsp_audio_sizer->Add(dsp_engine_sizer, 1, wxEXPAND | wxALL, 5);
|
||||
dsp_audio_sizer->Add(volume_sizer, 0, wxEXPAND | wxALL, 5);
|
||||
dsp_audio_sizer->AddSpacer(space5);
|
||||
dsp_audio_sizer->Add(dsp_engine_sizer, 1, wxEXPAND | wxTOP | wxBOTTOM, space5);
|
||||
dsp_audio_sizer->AddSpacer(space5);
|
||||
dsp_audio_sizer->Add(volume_sizer, 0, wxEXPAND | wxTOP | wxBOTTOM, space5);
|
||||
dsp_audio_sizer->AddSpacer(space5);
|
||||
|
||||
wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->Add(dsp_audio_sizer, 0, wxALL | wxEXPAND);
|
||||
main_sizer->Add(backend_static_box_sizer, 0, wxALL | wxEXPAND, 5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(dsp_audio_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(backend_static_box_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
|
||||
SetSizerAndFit(main_sizer);
|
||||
}
|
||||
@@ -180,10 +197,10 @@ void AudioConfigPane::PopulateBackendChoiceBox()
|
||||
for (const std::string& backend : AudioCommon::GetSoundBackends())
|
||||
{
|
||||
m_audio_backend_choice->Append(wxGetTranslation(StrToWxStr(backend)));
|
||||
|
||||
int num = m_audio_backend_choice->FindString(StrToWxStr(SConfig::GetInstance().sBackend));
|
||||
m_audio_backend_choice->SetSelection(num);
|
||||
}
|
||||
|
||||
int num = m_audio_backend_choice->FindString(StrToWxStr(SConfig::GetInstance().sBackend));
|
||||
m_audio_backend_choice->SetSelection(num);
|
||||
}
|
||||
|
||||
bool AudioConfigPane::SupportsVolumeChanges(const std::string& backend)
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
#include <wx/arrstr.h>
|
||||
#include <wx/panel.h>
|
||||
|
||||
class DolphinSlider;
|
||||
class wxCheckBox;
|
||||
class wxChoice;
|
||||
class wxRadioBox;
|
||||
class wxSlider;
|
||||
class wxSpinCtrl;
|
||||
class wxStaticText;
|
||||
|
||||
@@ -39,7 +39,7 @@ private:
|
||||
|
||||
wxRadioBox* m_dsp_engine_radiobox;
|
||||
wxCheckBox* m_dpl2_decoder_checkbox;
|
||||
wxSlider* m_volume_slider;
|
||||
DolphinSlider* m_volume_slider;
|
||||
wxStaticText* m_volume_text;
|
||||
wxChoice* m_audio_backend_choice;
|
||||
wxSpinCtrl* m_audio_latency_spinctrl;
|
||||
|
||||
@@ -76,16 +76,23 @@ void CConfigMain::CreateGUIControls()
|
||||
Notebook->AddPage(path_pane, _("Paths"));
|
||||
Notebook->AddPage(advanced_pane, _("Advanced"));
|
||||
|
||||
const int space5 = FromDIP(5);
|
||||
|
||||
wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->Add(Notebook, 1, wxEXPAND | wxALL, 5);
|
||||
main_sizer->Add(CreateButtonSizer(wxCLOSE), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(Notebook, 1, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(CreateButtonSizer(wxCLOSE), 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
|
||||
#ifdef __APPLE__
|
||||
main_sizer->SetMinSize(550, 0);
|
||||
#else
|
||||
main_sizer->SetMinSize(400, 0);
|
||||
main_sizer->SetMinSize(FromDIP(400), 0);
|
||||
#endif
|
||||
|
||||
SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED);
|
||||
SetLayoutAdaptationLevel(wxDIALOG_ADAPTATION_STANDARD_SIZER);
|
||||
SetSizerAndFit(main_sizer);
|
||||
Center();
|
||||
SetFocus();
|
||||
|
||||
@@ -15,10 +15,8 @@ wxDEFINE_EVENT(wxEVT_ADAPTER_UPDATE, wxCommandEvent);
|
||||
|
||||
GCAdapterConfigDiag::GCAdapterConfigDiag(wxWindow* const parent, const wxString& name,
|
||||
const int tab_num)
|
||||
: wxDialog(parent, wxID_ANY, name, wxPoint(128, -1)), m_pad_id(tab_num)
|
||||
: wxDialog(parent, wxID_ANY, name), m_pad_id(tab_num)
|
||||
{
|
||||
wxBoxSizer* const szr = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
wxCheckBox* const gamecube_rumble = new wxCheckBox(this, wxID_ANY, _("Rumble"));
|
||||
gamecube_rumble->SetValue(SConfig::GetInstance().m_AdapterRumble[m_pad_id]);
|
||||
gamecube_rumble->Bind(wxEVT_CHECKBOX, &GCAdapterConfigDiag::OnAdapterRumble, this);
|
||||
@@ -43,12 +41,16 @@ GCAdapterConfigDiag::GCAdapterConfigDiag(wxWindow* const parent, const wxString&
|
||||
}
|
||||
GCAdapter::SetAdapterCallback(std::bind(&GCAdapterConfigDiag::ScheduleAdapterUpdate, this));
|
||||
|
||||
const int space5 = FromDIP(5);
|
||||
|
||||
wxBoxSizer* const szr = new wxBoxSizer(wxVERTICAL);
|
||||
szr->Add(m_adapter_status, 0, wxEXPAND);
|
||||
szr->Add(gamecube_rumble, 0, wxEXPAND);
|
||||
szr->Add(gamecube_konga, 0, wxEXPAND);
|
||||
szr->Add(CreateButtonSizer(wxCLOSE), 0, wxEXPAND | wxALL, 5);
|
||||
szr->AddSpacer(space5);
|
||||
szr->Add(CreateButtonSizer(wxCLOSE | wxNO_DEFAULT), 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
szr->AddSpacer(space5);
|
||||
|
||||
SetLayoutAdaptationMode(wxDIALOG_ADAPTATION_MODE_ENABLED);
|
||||
SetSizerAndFit(szr);
|
||||
Center();
|
||||
|
||||
|
||||
@@ -100,42 +100,51 @@ void GameCubeConfigPane::InitializeGUI()
|
||||
new wxButton(this, wxID_ANY, "...", wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
|
||||
m_memcard_path[1]->Bind(wxEVT_BUTTON, &GameCubeConfigPane::OnSlotBButtonClick, this);
|
||||
|
||||
const int space5 = FromDIP(5);
|
||||
const int space10 = FromDIP(10);
|
||||
|
||||
// Populate the GameCube page
|
||||
wxGridBagSizer* const sGamecubeIPLSettings = new wxGridBagSizer();
|
||||
sGamecubeIPLSettings->Add(m_skip_bios_checkbox, wxGBPosition(0, 0), wxGBSpan(1, 2), wxALL, 5);
|
||||
wxGridBagSizer* const sGamecubeIPLSettings = new wxGridBagSizer(space5, space5);
|
||||
sGamecubeIPLSettings->Add(m_skip_bios_checkbox, wxGBPosition(0, 0), wxGBSpan(1, 2));
|
||||
sGamecubeIPLSettings->Add(new wxStaticText(this, wxID_ANY, _("System Language:")),
|
||||
wxGBPosition(1, 0), wxDefaultSpan,
|
||||
wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
wxGBPosition(1, 0), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
|
||||
sGamecubeIPLSettings->Add(m_system_lang_choice, wxGBPosition(1, 1), wxDefaultSpan,
|
||||
wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
sGamecubeIPLSettings->Add(m_override_lang_checkbox, wxGBPosition(2, 0), wxGBSpan(1, 2), wxALL, 5);
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
sGamecubeIPLSettings->Add(m_override_lang_checkbox, wxGBPosition(2, 0), wxGBSpan(1, 2));
|
||||
|
||||
wxStaticBoxSizer* const sbGamecubeIPLSettings =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("IPL Settings"));
|
||||
sbGamecubeIPLSettings->Add(sGamecubeIPLSettings);
|
||||
sbGamecubeIPLSettings->AddSpacer(space5);
|
||||
sbGamecubeIPLSettings->Add(sGamecubeIPLSettings, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sbGamecubeIPLSettings->AddSpacer(space5);
|
||||
|
||||
wxStaticBoxSizer* const sbGamecubeDeviceSettings =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Device Settings"));
|
||||
wxGridBagSizer* const sbGamecubeEXIDevSettings = new wxGridBagSizer(10, 10);
|
||||
|
||||
wxGridBagSizer* const gamecube_EXIDev_sizer = new wxGridBagSizer(space10, space10);
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
sbGamecubeEXIDevSettings->Add(GCEXIDeviceText[i], wxGBPosition(i, 0), wxDefaultSpan,
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
sbGamecubeEXIDevSettings->Add(m_exi_devices[i], wxGBPosition(i, 1),
|
||||
wxGBSpan(1, (i < 2) ? 1 : 2), wxALIGN_CENTER_VERTICAL);
|
||||
gamecube_EXIDev_sizer->Add(GCEXIDeviceText[i], wxGBPosition(i, 0), wxDefaultSpan,
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
gamecube_EXIDev_sizer->Add(m_exi_devices[i], wxGBPosition(i, 1), wxGBSpan(1, (i < 2) ? 1 : 2),
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
|
||||
if (i < 2)
|
||||
sbGamecubeEXIDevSettings->Add(m_memcard_path[i], wxGBPosition(i, 2), wxDefaultSpan,
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
gamecube_EXIDev_sizer->Add(m_memcard_path[i], wxGBPosition(i, 2), wxDefaultSpan,
|
||||
wxALIGN_CENTER_VERTICAL);
|
||||
|
||||
if (NetPlay::IsNetPlayRunning())
|
||||
m_exi_devices[i]->Disable();
|
||||
}
|
||||
sbGamecubeDeviceSettings->Add(sbGamecubeEXIDevSettings, 0, wxALL, 5);
|
||||
sbGamecubeDeviceSettings->AddSpacer(space5);
|
||||
sbGamecubeDeviceSettings->Add(gamecube_EXIDev_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
sbGamecubeDeviceSettings->AddSpacer(space5);
|
||||
|
||||
wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->Add(sbGamecubeIPLSettings, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->Add(sbGamecubeDeviceSettings, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(sbGamecubeIPLSettings, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(sbGamecubeDeviceSettings, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
|
||||
SetSizer(main_sizer);
|
||||
}
|
||||
|
||||
@@ -101,32 +101,51 @@ void GeneralConfigPane::InitializeGUI()
|
||||
m_throttler_choice->Bind(wxEVT_CHOICE, &GeneralConfigPane::OnThrottlerChoiceChanged, this);
|
||||
m_cpu_engine_radiobox->Bind(wxEVT_RADIOBOX, &GeneralConfigPane::OnCPUEngineRadioBoxChanged, this);
|
||||
|
||||
const int space5 = FromDIP(5);
|
||||
|
||||
wxBoxSizer* const throttler_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
throttler_sizer->AddSpacer(space5);
|
||||
throttler_sizer->Add(new wxStaticText(this, wxID_ANY, _("Speed Limit:")), 0,
|
||||
wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
throttler_sizer->Add(m_throttler_choice, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, 5);
|
||||
wxALIGN_CENTER_VERTICAL | wxBOTTOM, space5);
|
||||
throttler_sizer->AddSpacer(space5);
|
||||
throttler_sizer->Add(m_throttler_choice, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, space5);
|
||||
throttler_sizer->AddSpacer(space5);
|
||||
|
||||
wxStaticBoxSizer* const basic_settings_sizer =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Basic Settings"));
|
||||
basic_settings_sizer->Add(m_dual_core_checkbox, 0, wxALL, 5);
|
||||
basic_settings_sizer->Add(m_idle_skip_checkbox, 0, wxALL, 5);
|
||||
basic_settings_sizer->Add(m_cheats_checkbox, 0, wxALL, 5);
|
||||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(m_dual_core_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(m_idle_skip_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(m_cheats_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
basic_settings_sizer->AddSpacer(space5);
|
||||
basic_settings_sizer->Add(throttler_sizer);
|
||||
|
||||
wxStaticBoxSizer* const analytics_sizer =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Usage Statistics Reporting Settings"));
|
||||
analytics_sizer->Add(m_analytics_checkbox, 0, wxALL, 5);
|
||||
analytics_sizer->Add(m_analytics_new_id, 0, wxALL, 5);
|
||||
analytics_sizer->AddSpacer(space5);
|
||||
analytics_sizer->Add(m_analytics_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
analytics_sizer->AddSpacer(space5);
|
||||
analytics_sizer->Add(m_analytics_new_id, 0, wxLEFT | wxRIGHT, space5);
|
||||
analytics_sizer->AddSpacer(space5);
|
||||
|
||||
wxStaticBoxSizer* const advanced_settings_sizer =
|
||||
new wxStaticBoxSizer(wxVERTICAL, this, _("Advanced Settings"));
|
||||
advanced_settings_sizer->Add(m_cpu_engine_radiobox, 0, wxALL, 5);
|
||||
advanced_settings_sizer->Add(m_force_ntscj_checkbox, 0, wxALL, 5);
|
||||
advanced_settings_sizer->AddSpacer(space5);
|
||||
advanced_settings_sizer->Add(m_cpu_engine_radiobox, 0, wxLEFT | wxRIGHT, space5);
|
||||
advanced_settings_sizer->AddSpacer(space5);
|
||||
advanced_settings_sizer->Add(m_force_ntscj_checkbox, 0, wxLEFT | wxRIGHT, space5);
|
||||
advanced_settings_sizer->AddSpacer(space5);
|
||||
|
||||
wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
main_sizer->Add(basic_settings_sizer, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->Add(analytics_sizer, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->Add(advanced_settings_sizer, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(basic_settings_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(analytics_sizer, 0, wxEXPAND | wxLEFT | wxLEFT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
main_sizer->Add(advanced_settings_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, space5);
|
||||
main_sizer->AddSpacer(space5);
|
||||
|
||||
SetSizer(main_sizer);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user