ok...just need to update the button...
This commit is contained in:
parent
a751b627fd
commit
ade9485aac
|
@ -59,7 +59,7 @@ void CEXIMic::StreamInit()
|
||||||
|
|
||||||
void CEXIMic::StreamTerminate()
|
void CEXIMic::StreamTerminate()
|
||||||
{
|
{
|
||||||
if (pa_init && --mic_count <= 0)
|
if (--mic_count <= 0 && pa_init)
|
||||||
pa_error = Pa_Terminate();
|
pa_error = Pa_Terminate();
|
||||||
|
|
||||||
if (pa_error != paNoError)
|
if (pa_error != paNoError)
|
||||||
|
@ -98,15 +98,17 @@ void CEXIMic::StreamReadOne()
|
||||||
{
|
{
|
||||||
pa_error = Pa_ReadStream(pa_stream, ring_buffer, buff_size_samples);
|
pa_error = Pa_ReadStream(pa_stream, ring_buffer, buff_size_samples);
|
||||||
|
|
||||||
if (pa_error != paNoError)
|
if (pa_error == paInputOverflowed)
|
||||||
{
|
{
|
||||||
status.buff_ovrflw = 1;
|
status.buff_ovrflw = 1;
|
||||||
// Input overflowed - is re-setting the stream the only to recover?
|
// Input overflowed - is re-setting the stream the only to recover?
|
||||||
StreamLog("Pa_ReadStream");
|
|
||||||
|
|
||||||
StreamStop();
|
StreamStop();
|
||||||
StreamStart();
|
StreamStart();
|
||||||
}
|
}
|
||||||
|
else if (pa_error != paNoError)
|
||||||
|
{
|
||||||
|
StreamLog("Pa_ReadStream");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,10 +127,17 @@ int CEXIMic::mic_count = 0;
|
||||||
|
|
||||||
CEXIMic::CEXIMic()
|
CEXIMic::CEXIMic()
|
||||||
{
|
{
|
||||||
status.U16 = 0;
|
|
||||||
command = 0;
|
|
||||||
m_position = 0;
|
m_position = 0;
|
||||||
|
command = 0;
|
||||||
|
status.U16 = 0;
|
||||||
|
|
||||||
|
sample_rate = rate_base;
|
||||||
|
buff_size = ring_base;
|
||||||
|
buff_size_samples = buff_size / sample_size;
|
||||||
|
|
||||||
ring_pos = 0;
|
ring_pos = 0;
|
||||||
|
memset(ring_buffer, 0, sizeof(ring_buffer));
|
||||||
|
|
||||||
next_int_ticks = 0;
|
next_int_ticks = 0;
|
||||||
|
|
||||||
StreamInit();
|
StreamInit();
|
||||||
|
@ -194,7 +203,11 @@ void CEXIMic::TransferByte(u8 &byte)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case cmdGetStatus:
|
case cmdGetStatus:
|
||||||
|
if (pos == 0)
|
||||||
|
status.button = 0;// TODO
|
||||||
|
|
||||||
byte = status.U8[pos ^ 1];
|
byte = status.U8[pos ^ 1];
|
||||||
|
|
||||||
if (pos == 1 && status.buff_ovrflw)
|
if (pos == 1 && status.buff_ovrflw)
|
||||||
status.buff_ovrflw = 0;
|
status.buff_ovrflw = 0;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -55,7 +55,9 @@ private:
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
u16 out :4; // MICSet/GetOut...???
|
u16 out :4; // MICSet/GetOut...???
|
||||||
u16 button :5; // Buttons. Top bit is mic button. Lowest bit is used for MICGetDeviceID (always 0)
|
u16 id :1; // Used for MICGetDeviceID (always 0)
|
||||||
|
u16 button_unk :3; // Button bits which appear unused
|
||||||
|
u16 button :1; // The actual button on the mic
|
||||||
u16 buff_ovrflw :1; // Ring buffer wrote over bytes which weren't read by console
|
u16 buff_ovrflw :1; // Ring buffer wrote over bytes which weren't read by console
|
||||||
u16 gain :1; // Gain: 0dB or 15dB
|
u16 gain :1; // Gain: 0dB or 15dB
|
||||||
u16 sample_rate :2; // Sample rate, 00-11025, 01-22050, 10-44100, 11-??
|
u16 sample_rate :2; // Sample rate, 00-11025, 01-22050, 10-44100, 11-??
|
||||||
|
|
|
@ -236,6 +236,7 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||||
<ClCompile Include="Src\FrameAui.cpp" />
|
<ClCompile Include="Src\FrameAui.cpp" />
|
||||||
<ClCompile Include="Src\FrameTools.cpp" />
|
<ClCompile Include="Src\FrameTools.cpp" />
|
||||||
<ClCompile Include="Src\GameListCtrl.cpp" />
|
<ClCompile Include="Src\GameListCtrl.cpp" />
|
||||||
|
<ClCompile Include="Src\GCMicDlg.cpp" />
|
||||||
<ClCompile Include="Src\GeckoCodeDiag.cpp" />
|
<ClCompile Include="Src\GeckoCodeDiag.cpp" />
|
||||||
<ClCompile Include="Src\HotkeyDlg.cpp" />
|
<ClCompile Include="Src\HotkeyDlg.cpp" />
|
||||||
<ClCompile Include="Src\InputConfigDiag.cpp" />
|
<ClCompile Include="Src\InputConfigDiag.cpp" />
|
||||||
|
@ -298,6 +299,7 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||||
<ClInclude Include="Src\FifoPlayerDlg.h" />
|
<ClInclude Include="Src\FifoPlayerDlg.h" />
|
||||||
<ClInclude Include="Src\Frame.h" />
|
<ClInclude Include="Src\Frame.h" />
|
||||||
<ClInclude Include="Src\GameListCtrl.h" />
|
<ClInclude Include="Src\GameListCtrl.h" />
|
||||||
|
<ClInclude Include="Src\GCMicDlg.h" />
|
||||||
<ClInclude Include="Src\GeckoCodeDiag.h" />
|
<ClInclude Include="Src\GeckoCodeDiag.h" />
|
||||||
<ClInclude Include="Src\Globals.h" />
|
<ClInclude Include="Src\Globals.h" />
|
||||||
<ClInclude Include="Src\HotkeyDlg.h" />
|
<ClInclude Include="Src\HotkeyDlg.h" />
|
||||||
|
|
|
@ -135,6 +135,9 @@
|
||||||
<ClCompile Include="Src\TASInputDlg.cpp">
|
<ClCompile Include="Src\TASInputDlg.cpp">
|
||||||
<Filter>GUI</Filter>
|
<Filter>GUI</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Src\GCMicDlg.cpp">
|
||||||
|
<Filter>GUI</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Src\Main.h" />
|
<ClInclude Include="Src\Main.h" />
|
||||||
|
@ -264,6 +267,9 @@
|
||||||
<ClInclude Include="Src\TASInputDlg.h">
|
<ClInclude Include="Src\TASInputDlg.h">
|
||||||
<Filter>GUI</Filter>
|
<Filter>GUI</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Src\GCMicDlg.h">
|
||||||
|
<Filter>GUI</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Src\SConscript" />
|
<None Include="Src\SConscript" />
|
||||||
|
|
|
@ -0,0 +1,290 @@
|
||||||
|
// Copyright (C) 2003 Dolphin Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official SVN repository and contact information can be found at
|
||||||
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#include <wx/notebook.h>
|
||||||
|
|
||||||
|
#include "GCMicDlg.h"
|
||||||
|
#include "ConfigManager.h"
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(GCMicDialog,wxDialog)
|
||||||
|
EVT_COMMAND_RANGE(0, NUM_HOTKEYS - 1,
|
||||||
|
wxEVT_COMMAND_BUTTON_CLICKED, GCMicDialog::OnButtonClick)
|
||||||
|
EVT_TIMER(wxID_ANY, GCMicDialog::OnButtonTimer)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
GCMicDialog::GCMicDialog(wxWindow *parent, wxWindowID id, const wxString &title,
|
||||||
|
const wxPoint &position, const wxSize& size, long style)
|
||||||
|
: wxDialog(parent, id, title, position, size, style)
|
||||||
|
{
|
||||||
|
CreateHotkeyGUIControls();
|
||||||
|
|
||||||
|
#if wxUSE_TIMER
|
||||||
|
m_ButtonMappingTimer = new wxTimer(this, wxID_ANY);
|
||||||
|
g_Pressed = 0;
|
||||||
|
g_Modkey = 0;
|
||||||
|
ClickedButton = NULL;
|
||||||
|
GetButtonWaitingID = 0;
|
||||||
|
GetButtonWaitingTimer = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
GCMicDialog::~GCMicDialog()
|
||||||
|
{
|
||||||
|
delete m_ButtonMappingTimer;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save keyboard key mapping
|
||||||
|
void GCMicDialog::SaveButtonMapping(int Id, int Key, int Modkey)
|
||||||
|
{
|
||||||
|
SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkey[Id] = Key;
|
||||||
|
SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkeyModifier[Id] = Modkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GCMicDialog::EndGetButtons(void)
|
||||||
|
{
|
||||||
|
wxTheApp->Disconnect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
|
||||||
|
wxKeyEventHandler(GCMicDialog::OnKeyDown),
|
||||||
|
(wxObject*)0, this);
|
||||||
|
m_ButtonMappingTimer->Stop();
|
||||||
|
GetButtonWaitingTimer = 0;
|
||||||
|
GetButtonWaitingID = 0;
|
||||||
|
ClickedButton = NULL;
|
||||||
|
SetEscapeId(wxID_ANY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GCMicDialog::OnKeyDown(wxKeyEvent& event)
|
||||||
|
{
|
||||||
|
if(ClickedButton != NULL)
|
||||||
|
{
|
||||||
|
// Save the key
|
||||||
|
g_Pressed = event.GetKeyCode();
|
||||||
|
g_Modkey = event.GetModifiers();
|
||||||
|
|
||||||
|
// Don't allow modifier keys
|
||||||
|
if (g_Pressed == WXK_CONTROL || g_Pressed == WXK_ALT ||
|
||||||
|
g_Pressed == WXK_SHIFT || g_Pressed == WXK_COMMAND)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Use the space key to set a blank key
|
||||||
|
if (g_Pressed == WXK_SPACE)
|
||||||
|
{
|
||||||
|
SaveButtonMapping(ClickedButton->GetId(), -1, 0);
|
||||||
|
SetButtonText(ClickedButton->GetId(), wxString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetButtonText(ClickedButton->GetId(),
|
||||||
|
InputCommon::WXKeyToString(g_Pressed),
|
||||||
|
InputCommon::WXKeymodToString(g_Modkey));
|
||||||
|
SaveButtonMapping(ClickedButton->GetId(), g_Pressed, g_Modkey);
|
||||||
|
}
|
||||||
|
EndGetButtons();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the textbox for the buttons
|
||||||
|
void GCMicDialog::SetButtonText(int id, const wxString &keystr, const wxString &modkeystr)
|
||||||
|
{
|
||||||
|
m_Button_Hotkeys[id]->SetLabel(modkeystr + keystr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GCMicDialog::DoGetButtons(int _GetId)
|
||||||
|
{
|
||||||
|
// Values used in this function
|
||||||
|
const int Seconds = 4; // Seconds to wait for
|
||||||
|
const int TimesPerSecond = 40; // How often to run the check
|
||||||
|
|
||||||
|
// If the Id has changed or the timer is not running we should start one
|
||||||
|
if( GetButtonWaitingID != _GetId || !m_ButtonMappingTimer->IsRunning() )
|
||||||
|
{
|
||||||
|
if(m_ButtonMappingTimer->IsRunning())
|
||||||
|
m_ButtonMappingTimer->Stop();
|
||||||
|
|
||||||
|
// Save the button Id
|
||||||
|
GetButtonWaitingID = _GetId;
|
||||||
|
GetButtonWaitingTimer = 0;
|
||||||
|
|
||||||
|
// Start the timer
|
||||||
|
#if wxUSE_TIMER
|
||||||
|
m_ButtonMappingTimer->Start(1000 / TimesPerSecond);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process results
|
||||||
|
// Count each time
|
||||||
|
GetButtonWaitingTimer++;
|
||||||
|
|
||||||
|
// This is run every second
|
||||||
|
if (GetButtonWaitingTimer % TimesPerSecond == 0)
|
||||||
|
{
|
||||||
|
// Current time
|
||||||
|
int TmpTime = Seconds - (GetButtonWaitingTimer / TimesPerSecond);
|
||||||
|
// Update text
|
||||||
|
SetButtonText(_GetId, wxString::Format(wxT("[ %d ]"), TmpTime));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Time's up
|
||||||
|
if (GetButtonWaitingTimer / TimesPerSecond >= Seconds)
|
||||||
|
{
|
||||||
|
// Revert back to old label
|
||||||
|
SetButtonText(_GetId, OldLabel);
|
||||||
|
EndGetButtons();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Input button clicked
|
||||||
|
void GCMicDialog::OnButtonClick(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
event.Skip();
|
||||||
|
|
||||||
|
if (m_ButtonMappingTimer->IsRunning()) return;
|
||||||
|
|
||||||
|
wxTheApp->Connect(wxID_ANY, wxEVT_KEY_DOWN, // Keyboard
|
||||||
|
wxKeyEventHandler(GCMicDialog::OnKeyDown),
|
||||||
|
(wxObject*)0, this);
|
||||||
|
|
||||||
|
// Get the button
|
||||||
|
ClickedButton = (wxButton *)event.GetEventObject();
|
||||||
|
SetEscapeId(wxID_CANCEL);
|
||||||
|
// Save old label so we can revert back
|
||||||
|
OldLabel = ClickedButton->GetLabel();
|
||||||
|
ClickedButton->SetWindowStyle(wxWANTS_CHARS);
|
||||||
|
ClickedButton->SetLabel(_("<Press Key>"));
|
||||||
|
DoGetButtons(ClickedButton->GetId());
|
||||||
|
}
|
||||||
|
|
||||||
|
#define HOTKEY_NUM_COLUMNS 2
|
||||||
|
|
||||||
|
void GCMicDialog::CreateHotkeyGUIControls(void)
|
||||||
|
{
|
||||||
|
const wxString pageNames[] =
|
||||||
|
{
|
||||||
|
_("General"),
|
||||||
|
_("State Saves")
|
||||||
|
};
|
||||||
|
|
||||||
|
const wxString hkText[] =
|
||||||
|
{
|
||||||
|
_("Open"),
|
||||||
|
_("Change Disc"),
|
||||||
|
_("Refresh List"),
|
||||||
|
|
||||||
|
_("Play/Pause"),
|
||||||
|
_("Stop"),
|
||||||
|
_("Reset"),
|
||||||
|
_("Frame Advance"),
|
||||||
|
|
||||||
|
_("Start Recording"),
|
||||||
|
_("Play Recording"),
|
||||||
|
_("Export Recording"),
|
||||||
|
_("Read-only mode"),
|
||||||
|
|
||||||
|
_("Toggle Fullscreen"),
|
||||||
|
_("Take Screenshot"),
|
||||||
|
|
||||||
|
_("Connect Wiimote 1"),
|
||||||
|
_("Connect Wiimote 2"),
|
||||||
|
_("Connect Wiimote 3"),
|
||||||
|
_("Connect Wiimote 4"),
|
||||||
|
|
||||||
|
_("Load State Slot 1"),
|
||||||
|
_("Load State Slot 2"),
|
||||||
|
_("Load State Slot 3"),
|
||||||
|
_("Load State Slot 4"),
|
||||||
|
_("Load State Slot 5"),
|
||||||
|
_("Load State Slot 6"),
|
||||||
|
_("Load State Slot 7"),
|
||||||
|
_("Load State Slot 8"),
|
||||||
|
|
||||||
|
_("Save State Slot 1"),
|
||||||
|
_("Save State Slot 2"),
|
||||||
|
_("Save State Slot 3"),
|
||||||
|
_("Save State Slot 4"),
|
||||||
|
_("Save State Slot 5"),
|
||||||
|
_("Save State Slot 6"),
|
||||||
|
_("Save State Slot 7"),
|
||||||
|
_("Save State Slot 8")
|
||||||
|
};
|
||||||
|
|
||||||
|
const int page_breaks[3] = {HK_OPEN, HK_LOAD_STATE_SLOT_1, NUM_HOTKEYS};
|
||||||
|
|
||||||
|
// Configuration controls sizes
|
||||||
|
wxSize size(100,20);
|
||||||
|
// A small type font
|
||||||
|
wxFont m_SmallFont(7, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
|
||||||
|
|
||||||
|
wxNotebook *Notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||||
|
|
||||||
|
for (int j = 0; j < 2; j++)
|
||||||
|
{
|
||||||
|
wxPanel *Page = new wxPanel(Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||||
|
Notebook->AddPage(Page, pageNames[j]);
|
||||||
|
|
||||||
|
wxGridBagSizer *sHotkeys = new wxGridBagSizer();
|
||||||
|
|
||||||
|
// Header line
|
||||||
|
for (int i = 0; i < HOTKEY_NUM_COLUMNS; i++)
|
||||||
|
{
|
||||||
|
wxBoxSizer *HeaderSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
wxStaticText *StaticTextHeader = new wxStaticText(Page, wxID_ANY, _("Action"));
|
||||||
|
HeaderSizer->Add(StaticTextHeader, 1, wxALL, 2);
|
||||||
|
StaticTextHeader = new wxStaticText(Page, wxID_ANY, _("Key"), wxDefaultPosition, size);
|
||||||
|
HeaderSizer->Add(StaticTextHeader, 0, wxALL, 2);
|
||||||
|
sHotkeys->Add(HeaderSizer, wxGBPosition(0, i), wxDefaultSpan, wxEXPAND | wxLEFT, (i > 0) ? 30 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int column_break = (page_breaks[j+1] + page_breaks[j] + 1) / 2;
|
||||||
|
|
||||||
|
for (int i = page_breaks[j]; i < page_breaks[j+1]; i++)
|
||||||
|
{
|
||||||
|
// Text for the action
|
||||||
|
wxStaticText *stHotkeys = new wxStaticText(Page, wxID_ANY, hkText[i]);
|
||||||
|
|
||||||
|
// Key selection button
|
||||||
|
m_Button_Hotkeys[i] = new wxButton(Page, i, wxEmptyString,
|
||||||
|
wxDefaultPosition, size);
|
||||||
|
m_Button_Hotkeys[i]->SetFont(m_SmallFont);
|
||||||
|
m_Button_Hotkeys[i]->SetToolTip(_("Left click to detect hotkeys.\nEnter space to clear."));
|
||||||
|
SetButtonText(i,
|
||||||
|
InputCommon::WXKeyToString(SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkey[i]),
|
||||||
|
InputCommon::WXKeymodToString(
|
||||||
|
SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkeyModifier[i]));
|
||||||
|
|
||||||
|
wxBoxSizer *sHotkey = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
sHotkey->Add(stHotkeys, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 2);
|
||||||
|
sHotkey->Add(m_Button_Hotkeys[i], 0, wxALL, 2);
|
||||||
|
sHotkeys->Add(sHotkey,
|
||||||
|
wxGBPosition((i < column_break) ? i - page_breaks[j] + 1 : i - column_break + 1,
|
||||||
|
(i < column_break) ? 0 : 1),
|
||||||
|
wxDefaultSpan, wxEXPAND | wxLEFT, (i < column_break) ? 1 : 30);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxStaticBoxSizer *sHotkeyBox = new wxStaticBoxSizer(wxVERTICAL, Page, _("Hotkeys"));
|
||||||
|
sHotkeyBox->Add(sHotkeys);
|
||||||
|
|
||||||
|
wxBoxSizer* const sPage = new wxBoxSizer(wxVERTICAL);
|
||||||
|
sPage->Add(sHotkeyBox, 0, wxEXPAND | wxALL, 5);
|
||||||
|
Page->SetSizer(sPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxBoxSizer *sMainSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
sMainSizer->Add(Notebook, 0, wxEXPAND | wxALL, 5);
|
||||||
|
sMainSizer->Add(CreateButtonSizer(wxOK), 0, wxEXPAND | wxLEFT | wxRIGHT | wxDOWN, 5);
|
||||||
|
SetSizerAndFit(sMainSizer);
|
||||||
|
SetFocus();
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
// Copyright (C) 2003 Dolphin Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official SVN repository and contact information can be found at
|
||||||
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#ifndef __HOTKEYDIALOG_h__
|
||||||
|
#define __HOTKEYDIALOG_h__
|
||||||
|
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
#include <wx/combobox.h>
|
||||||
|
#include <wx/checkbox.h>
|
||||||
|
#include <wx/gbsizer.h>
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "CoreParameter.h"
|
||||||
|
#include "WXInputBase.h"
|
||||||
|
|
||||||
|
#if defined(HAVE_X11) && HAVE_X11
|
||||||
|
#include "X11InputBase.h"
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class GCMicDialog : public wxDialog
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GCMicDialog(wxWindow *parent,
|
||||||
|
wxWindowID id = 1,
|
||||||
|
const wxString &title = _("GCMic Configuration"),
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_DIALOG_STYLE);
|
||||||
|
virtual ~GCMicDialog();
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_EVENT_TABLE();
|
||||||
|
|
||||||
|
wxString OldLabel;
|
||||||
|
|
||||||
|
wxButton *ClickedButton,
|
||||||
|
*m_Button_Hotkeys[NUM_HOTKEYS];
|
||||||
|
|
||||||
|
wxTimer *m_ButtonMappingTimer;
|
||||||
|
|
||||||
|
void OnButtonTimer(wxTimerEvent& WXUNUSED(event)) { DoGetButtons(GetButtonWaitingID); }
|
||||||
|
void OnButtonClick(wxCommandEvent& event);
|
||||||
|
void OnKeyDown(wxKeyEvent& event);
|
||||||
|
void SaveButtonMapping(int Id, int Key, int Modkey);
|
||||||
|
void CreateHotkeyGUIControls(void);
|
||||||
|
|
||||||
|
void SetButtonText(int id, const wxString &keystr, const wxString &modkeystr = wxString());
|
||||||
|
|
||||||
|
void DoGetButtons(int id);
|
||||||
|
void EndGetButtons(void);
|
||||||
|
|
||||||
|
int GetButtonWaitingID, GetButtonWaitingTimer, g_Pressed, g_Modkey;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue