diff options
Diffstat (limited to 'src/wx/InputConfig.cpp')
-rw-r--r-- | src/wx/InputConfig.cpp | 153 |
1 files changed, 147 insertions, 6 deletions
diff --git a/src/wx/InputConfig.cpp b/src/wx/InputConfig.cpp index ea5f1c8..b4785fe 100644 --- a/src/wx/InputConfig.cpp +++ b/src/wx/InputConfig.cpp @@ -22,6 +22,37 @@ wxBEGIN_EVENT_TABLE(InputConfigDialog, wxDialog) + EVT_COMMAND(1001, wxEVT_BUTTON, InputConfigDialog::OnDerp) + + EVT_COMMAND(100, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(101, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(102, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(103, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(104, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(105, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(106, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(107, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(108, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(109, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(110, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + EVT_COMMAND(111, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey) + + EVT_COMMAND(200, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(201, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(202, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(203, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(204, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(205, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(206, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(207, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(208, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(209, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(210, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + EVT_COMMAND(211, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy) + + EVT_TIMER(wxID_ANY, InputConfigDialog::OnPoll) + + EVT_KEY_DOWN(InputConfigDialog::OnKeyDown) wxEND_EVENT_TABLE() @@ -31,6 +62,9 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent) int keyorder[12] = {0, 1, 10, 11, 5, 4, 6, 7, 9, 8, 3, 2}; char keylabels[12][8] = {"A:", "B:", "Select:", "Start:", "Right:", "Left:", "Up:", "Down:", "R:", "L:", "X:", "Y:"}; + memcpy(keymapping, Config::KeyMapping, 12*sizeof(int)); + memcpy(joymapping, Config::JoyMapping, 12*sizeof(int)); + wxBoxSizer* vboxmain = new wxBoxSizer(wxVERTICAL); { @@ -39,24 +73,52 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent) wxStaticBox* kbdside = new wxStaticBox(p, wxID_ANY, "Keyboard"); { - wxGridSizer* grid = new wxGridSizer(2, 3, 0); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + wxPanel* p = new wxPanel(kbdside); + wxFlexGridSizer* grid = new wxFlexGridSizer(2, 3, 8); for (int i = 0; i < 12; i++) { int j = keyorder[i]; - wxStaticText* label = new wxStaticText(kbdside, wxID_ANY, keylabels[j]); - grid->Add(label); + wxStaticText* label = new wxStaticText(p, wxID_ANY, keylabels[j]); + grid->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL); - const char* keyname = SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)Config::KeyMapping[j])); - wxButton* btn = new wxButton(kbdside, 100+i, keyname); + const char* keyname = SDL_GetScancodeName((SDL_Scancode)Config::KeyMapping[j]); + wxButton* btn = new wxButton(p, 100+j, keyname); grid->Add(btn); } - kbdside->SetSizer(grid); + p->SetSizer(grid); + sizer->Add(p, 0, wxALL, 15); + kbdside->SetSizer(sizer); } sizer->Add(kbdside); + wxStaticBox* joyside = new wxStaticBox(p, wxID_ANY, "Joystick"); + { + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + wxPanel* p = new wxPanel(joyside); + wxFlexGridSizer* grid = new wxFlexGridSizer(2, 3, 8); + + for (int i = 0; i < 12; i++) + { + int j = keyorder[i]; + + wxStaticText* label = new wxStaticText(p, wxID_ANY, keylabels[j]); + grid->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL); + + const char* keyname = "zorp";//SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)Config::KeyMapping[j])); + wxButton* btn = new wxButton(p, 200+j, keyname); + grid->Add(btn); + } + + p->SetSizer(grid); + sizer->Add(p, 0, wxALL, 15); + joyside->SetSizer(sizer); + } + sizer->Add(joyside); + p->SetSizer(sizer); vboxmain->Add(p, 0, wxALL&(~wxBOTTOM), 15); } @@ -78,4 +140,83 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent) SetSizer(vboxmain); Fit(); + + polltimer = new wxTimer(this); + pollid = 0; + + keystate = SDL_GetKeyboardState(&nkeys); +} + +InputConfigDialog::~InputConfigDialog() +{ + delete polltimer; +} + +void InputConfigDialog::OnDerp(wxCommandEvent& event) +{ + printf("OnDerp %d\n", event.GetId()); +} + +void InputConfigDialog::OnConfigureKey(wxCommandEvent& event) +{ + pollid = event.GetId(); + //pollbtn = (wxButton*)event.GetOwner(); + polltimer->Start(100); +} + +void InputConfigDialog::OnConfigureJoy(wxCommandEvent& event) +{ + pollid = event.GetId(); + //pollbtn = (wxButton*)event.GetSource(); + polltimer->Start(100); +} + +void InputConfigDialog::OnPoll(wxTimerEvent& event) +{ + if (pollid < 100) return; + + SDL_PumpEvents(); + keystate = SDL_GetKeyboardState(&nkeys); + + if (keystate[SDL_SCANCODE_ESCAPE]) + { + polltimer->Stop(); + //pollbtn->Enable(true); + pollid = 0; + return; + } + + if (pollid >= 200) + { + // + } + else + {printf("poll kbd %d, %d, %d\n", pollid, nkeys, keystate[SDL_SCANCODE_A]); + int id = pollid - 100; + if (id >= 12) return; + + for (int i = 0; i < nkeys; i++) + { + if (keystate[i]) + { + keymapping[id] = i; + + //pollbtn->Enable(true); + + const char* keyname = SDL_GetScancodeName((SDL_Scancode)i); + //pollbtn->SetText(keyname); + printf("%s\n", keyname); + + polltimer->Stop(); + pollid = 0; + + break; + } + } + } +} + +void InputConfigDialog::OnKeyDown(wxKeyEvent& event) +{ + printf("!!\n"); } |