Fix an issue when a wiimote source is changed to a real wiimote in the wiimote config dialog while a game is running, and the wiimote was disconnected from the CPU. Only change the connection status when the dialog is closed.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7229 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
39573ca959
commit
ceb03781dc
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue