diff --git a/Source/Core/DolphinWX/Src/FrameAui.cpp b/Source/Core/DolphinWX/Src/FrameAui.cpp index 04f0c516fa..571154a822 100644 --- a/Source/Core/DolphinWX/Src/FrameAui.cpp +++ b/Source/Core/DolphinWX/Src/FrameAui.cpp @@ -105,9 +105,10 @@ void CFrame::ToggleLogConfigWindow(bool bShow) { if (!m_LogConfigWindow) m_LogConfigWindow = new LogConfigWindow(this, m_LogWindow, IDM_LOGCONFIGWINDOW); + const int nbIndex = IDM_LOGCONFIGWINDOW - IDM_LOGWINDOW; DoAddPage(m_LogConfigWindow, - g_pCodeWindow ? g_pCodeWindow->iNbAffiliation[1] : 0, - g_pCodeWindow ? bFloatWindow[1] : false); + g_pCodeWindow ? g_pCodeWindow->iNbAffiliation[nbIndex] : 0, + g_pCodeWindow ? bFloatWindow[nbIndex] : false); } else { @@ -147,9 +148,10 @@ void CFrame::ToggleConsole(bool bShow) ConsoleWin->Reparent(ConsoleParent); ConsoleParent->Enable(); + const int nbIndex = IDM_CONSOLEWINDOW - IDM_LOGWINDOW; DoAddPage(ConsoleParent, - g_pCodeWindow ? g_pCodeWindow->iNbAffiliation[1] : 0, - g_pCodeWindow ? bFloatWindow[1] : false); + g_pCodeWindow ? g_pCodeWindow->iNbAffiliation[nbIndex] : 0, + g_pCodeWindow ? bFloatWindow[nbIndex] : false); } else // Hide { diff --git a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp index 3461efc7c9..0d3e91a340 100644 --- a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp +++ b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.cpp @@ -1,6 +1,7 @@ #include "WiimoteConfigDiag.h" #include "HW/Wiimote.h" +#include "HW/WiimoteReal/WiimoteReal.h" #include "Frame.h" #define _connect_macro_(b, f, c, s) (b)->Connect(wxID_ANY, (c), wxCommandEventHandler(f), (wxObject*)0, (wxEvtHandler*)s) @@ -14,7 +15,7 @@ const wxString& ConnectedWiimotesString() WiimoteConfigPage::WiimoteConfigPage(wxWindow* const parent, const int index) : wxNotebookPage(parent, -1, wxDefaultPosition, wxDefaultSize) - , m_index(index) + , m_index(index), orig_source(g_wiimote_sources[index]), end_source(g_wiimote_sources[index]) { // input source const wxString src_choices[] = { _("None"), @@ -66,19 +67,20 @@ WiimoteConfigPage::WiimoteConfigPage(wxWindow* const parent, const int index) WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin) : wxDialog(parent, -1, _("Dolphin Wiimote Configuration"), wxDefaultPosition, wxDefaultSize) - , m_plugin(plugin) + , m_plugin(plugin), m_save(false) { m_pad_notebook = new wxNotebook(this, -1, wxDefaultPosition, wxDefaultSize, wxNB_DEFAULT); for (unsigned int i = 0; i < 4; ++i) { WiimoteConfigPage* const wpage = new WiimoteConfigPage(m_pad_notebook, i); - //m_padpages.push_back(wpage); m_pad_notebook->AddPage(wpage, wxString(_("Wiimote ")) + wxChar('1'+i)); } wxButton* const ok_button = new wxButton(this, -1, _("OK"), wxDefaultPosition); _connect_macro_(ok_button, WiimoteConfigDiag::Save, wxEVT_COMMAND_BUTTON_CLICKED, this); + Connect(wxID_ANY, wxEVT_CLOSE_WINDOW, wxCloseEventHandler(WiimoteConfigDiag::OnClose), (wxObject*)0, this); + wxBoxSizer* const main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_pad_notebook, 1, wxEXPAND | wxALL, 5); main_sizer->Add(ok_button, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, 5); @@ -128,11 +130,28 @@ void WiimoteConfigDiag::RefreshRealWiimotes(wxCommandEvent&) void WiimoteConfigPage::SelectSource(wxCommandEvent& event) { - // should be kinda fine, maybe should just set when user clicks OK, w/e change it later - g_wiimote_sources[m_index] = event.GetInt(); + // This needs to be changed now in order for refresh to work right. + // Revert if the dialog is canceled. + g_wiimote_sources[m_index] = end_source = event.GetInt(); +} - // Connect or disconnect emulated wiimotes (maybe do this in when OK is clicked too?). - CFrame::ConnectWiimote(m_index, WIIMOTE_SRC_EMU & g_wiimote_sources[m_index]); +void WiimoteConfigPage::UpdateWiimoteStatus() +{ + if (orig_source != end_source) + { + // Disconnect first, otherwise the new source doesn't seem to work + CFrame::ConnectWiimote(m_index, false); + // Connect wiimotes + if (WIIMOTE_SRC_EMU & g_wiimote_sources[m_index]) + CFrame::ConnectWiimote(m_index, true); + else if (WIIMOTE_SRC_REAL & g_wiimote_sources[m_index] && orig_source & WIIMOTE_SRC_EMU) + CFrame::ConnectWiimote(m_index, WiimoteReal::g_wiimotes[m_index]->IsConnected()); + } +} + +void WiimoteConfigPage::RevertSource() +{ + g_wiimote_sources[m_index] = orig_source; } void WiimoteConfigDiag::Save(wxCommandEvent&) @@ -150,8 +169,20 @@ void WiimoteConfigDiag::Save(wxCommandEvent&) sec.Set("Source", (int)g_wiimote_sources[i]); } + for (size_t p = 0; p < m_pad_notebook->GetPageCount(); ++p) + ((WiimoteConfigPage*)m_pad_notebook->GetPage(p))->UpdateWiimoteStatus(); inifile.Save(ini_filename); + m_save = true; + Close(); } + +void WiimoteConfigDiag::OnClose(wxCloseEvent& event) +{ + if (!m_save) + for (size_t p = 0; p < m_pad_notebook->GetPageCount(); ++p) + ((WiimoteConfigPage*)m_pad_notebook->GetPage(p))->RevertSource(); + event.Skip(); +} diff --git a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.h b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.h index 4a46f019b2..c1eba800c2 100644 --- a/Source/Core/DolphinWX/Src/WiimoteConfigDiag.h +++ b/Source/Core/DolphinWX/Src/WiimoteConfigDiag.h @@ -21,11 +21,14 @@ public: WiimoteConfigPage(wxWindow* const parent, const int index); void SelectSource(wxCommandEvent& event); + void UpdateWiimoteStatus(); + void RevertSource(); wxStaticText* connected_wiimotes_txt; private: const int m_index; + unsigned int orig_source, end_source; }; class WiimoteConfigDiag : public wxDialog @@ -43,10 +46,11 @@ public: void UpdateGUI(); private: + void OnClose(wxCloseEvent& event); + InputPlugin& m_plugin; - wxNotebook* m_pad_notebook; - + bool m_save; };