// Copyright 2013 Dolphin Emulator Project // Licensed under GPLv2 // Refer to the license.txt file included. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "Common/CommonTypes.h" #include "DolphinWX/TASInputDlg.h" #include "InputCommon/GCPadStatus.h" BEGIN_EVENT_TABLE(TASInputDlg, wxDialog) EVT_SLIDER(ID_MAIN_X_SLIDER, TASInputDlg::UpdateFromSliders) EVT_SLIDER(ID_MAIN_Y_SLIDER, TASInputDlg::UpdateFromSliders) EVT_SLIDER(ID_C_X_SLIDER, TASInputDlg::UpdateFromSliders) EVT_SLIDER(ID_C_Y_SLIDER, TASInputDlg::UpdateFromSliders) EVT_SLIDER(ID_L_SLIDER, TASInputDlg::UpdateFromSliders) EVT_SLIDER(ID_R_SLIDER, TASInputDlg::UpdateFromSliders) EVT_TEXT(ID_MAIN_X_TEXT, TASInputDlg::UpdateFromText) EVT_TEXT(ID_MAIN_Y_TEXT, TASInputDlg::UpdateFromText) EVT_TEXT(ID_C_X_TEXT, TASInputDlg::UpdateFromText) EVT_TEXT(ID_C_Y_TEXT, TASInputDlg::UpdateFromText) EVT_TEXT(ID_L_TEXT, TASInputDlg::UpdateFromText) EVT_TEXT(ID_R_TEXT, TASInputDlg::UpdateFromText) EVT_CLOSE(TASInputDlg::OnCloseWindow) END_EVENT_TABLE() TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style) : wxDialog(parent, id, title, position, size, style) { A_turbo = B_turbo = X_turbo = Y_turbo = Z_turbo = L_turbo = R_turbo = START_turbo = DL_turbo = DR_turbo = DD_turbo = DU_turbo = false; xaxis = yaxis = c_xaxis = c_yaxis = 128; A_cont = B_cont = X_cont = Y_cont = Z_cont = L_cont = L_button_cont = R_cont = R_button_cont = START_cont = DL_cont = DR_cont = DD_cont = DU_cont = mstickx = msticky = cstickx = csticky = false; wxBoxSizer* const top_box = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* const bottom_box = new wxBoxSizer(wxHORIZONTAL); wxStaticBoxSizer* const main_box = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Main Stick")); wxBoxSizer* const main_xslider_box = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* const main_yslider_box = new wxBoxSizer(wxVERTICAL); wxBoxSizer* const main_stick_box = new wxBoxSizer(wxVERTICAL); static_bitmap_main = new wxStaticBitmap(this, ID_MAIN_STICK, TASInputDlg::CreateStickBitmap(128,128)); static_bitmap_main->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::OnMouseDownL, this); static_bitmap_main->Bind(wxEVT_MOTION, &TASInputDlg::OnMouseDownL, this); static_bitmap_main->Bind(wxEVT_RIGHT_UP, &TASInputDlg::OnMouseUpR, this); wx_mainX_s = new wxSlider(this, ID_MAIN_X_SLIDER, 128, 0, 255); wx_mainX_s->SetMinSize(wxSize(120,-1)); wx_mainX_t = new wxTextCtrl(this, ID_MAIN_X_TEXT, "128", wxDefaultPosition, wxSize(40, 20)); wx_mainX_t->SetMaxLength(3); wx_mainY_s = new wxSlider(this, ID_MAIN_Y_SLIDER, 128, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE); wx_mainY_s->SetMinSize(wxSize(-1,120)); wx_mainY_t = new wxTextCtrl(this, ID_MAIN_Y_TEXT, "128", wxDefaultPosition, wxSize(40, 20)); wx_mainY_t->SetMaxLength(3); main_xslider_box->Add(wx_mainX_s, 0, wxALIGN_TOP); main_xslider_box->Add(wx_mainX_t, 0, wxALIGN_TOP); main_stick_box->Add(main_xslider_box); main_stick_box->Add(static_bitmap_main, 0, wxALL|wxCENTER, 3); main_box->Add(main_stick_box); main_yslider_box->Add(wx_mainY_s, 0, wxALIGN_CENTER_VERTICAL); main_yslider_box->Add(wx_mainY_t, 0, wxALIGN_CENTER_VERTICAL); main_box->Add(main_yslider_box); wxStaticBoxSizer* const c_box = new wxStaticBoxSizer(wxHORIZONTAL, this, _("C Stick")); wxBoxSizer* const c_xslider_box = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* const c_yslider_box = new wxBoxSizer(wxVERTICAL); wxBoxSizer* const c_stick_box = new wxBoxSizer(wxVERTICAL); static_bitmap_c = new wxStaticBitmap(this, ID_C_STICK, TASInputDlg::CreateStickBitmap(128,128)); static_bitmap_c->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::OnMouseDownL, this); static_bitmap_c->Bind(wxEVT_MOTION, &TASInputDlg::OnMouseDownL, this); static_bitmap_c->Bind(wxEVT_RIGHT_UP, &TASInputDlg::OnMouseUpR, this); wx_cX_s = new wxSlider(this, ID_C_X_SLIDER, 128, 0, 255); wx_cX_s->SetMinSize(wxSize(120,-1)); wx_cX_t = new wxTextCtrl(this, ID_C_X_TEXT, "128", wxDefaultPosition, wxSize(40, 20)); wx_cX_t->SetMaxLength(3); wx_cY_s = new wxSlider(this, ID_C_Y_SLIDER, 128, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE); wx_cY_s->SetMinSize(wxSize(-1,120)); wx_cY_t = new wxTextCtrl(this, ID_C_Y_TEXT, "128", wxDefaultPosition, wxSize(40, 20)); wx_cY_t->SetMaxLength(3); c_xslider_box->Add(wx_cX_s, 0, wxALIGN_TOP); c_xslider_box->Add(wx_cX_t, 0, wxALIGN_TOP); c_stick_box->Add(c_xslider_box); c_stick_box->Add(static_bitmap_c,0, wxALL|wxCenter,3); c_box->Add(c_stick_box); c_yslider_box->Add(wx_cY_s, 0, wxALIGN_CENTER_VERTICAL); c_yslider_box->Add(wx_cY_t, 0, wxALIGN_CENTER_VERTICAL); c_box->Add(c_yslider_box); wxStaticBoxSizer* const shoulder_box = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Shoulder Buttons")); wx_l_s = new wxSlider(this, ID_L_SLIDER, 0, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE); wx_l_s->SetMinSize(wxSize(-1,100)); wx_l_t = new wxTextCtrl(this, ID_L_TEXT, "0", wxDefaultPosition, wxSize(40, 20)); wx_l_t->SetMaxLength(3); wx_r_s = new wxSlider(this, ID_R_SLIDER, 0, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE); wx_r_s->SetMinSize(wxSize(-1,100)); wx_r_t = new wxTextCtrl(this, ID_R_TEXT, "0", wxDefaultPosition, wxSize(40, 20)); wx_r_t->SetMaxLength(3); shoulder_box->Add(wx_l_s, 0, wxALIGN_CENTER_VERTICAL); shoulder_box->Add(wx_l_t, 0, wxALIGN_CENTER_VERTICAL); shoulder_box->Add(wx_r_s, 0, wxALIGN_CENTER_VERTICAL); shoulder_box->Add(wx_r_t, 0, wxALIGN_CENTER_VERTICAL); wxStaticBoxSizer* const buttons_box = new wxStaticBoxSizer(wxVERTICAL, this, _("Buttons")); wxGridSizer* const buttons_grid = new wxGridSizer(4); wx_a_button = new wxCheckBox(this, ID_A, "A"); wx_a_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_a_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_b_button = new wxCheckBox(this, ID_B, "B"); wx_b_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_b_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_x_button = new wxCheckBox(this, ID_X, "X"); wx_x_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_x_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_y_button = new wxCheckBox(this, ID_Y, "Y"); wx_y_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_y_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_l_button = new wxCheckBox(this, ID_L, "L"); wx_l_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_l_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_r_button = new wxCheckBox(this, ID_R, "R"); wx_r_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_r_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_z_button = new wxCheckBox(this, ID_Z, "Z"); wx_z_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_z_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_start_button = new wxCheckBox(this, ID_START, "Start"); wx_start_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_start_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); buttons_grid->Add(wx_a_button,false); buttons_grid->Add(wx_b_button,false); buttons_grid->Add(wx_x_button,false); buttons_grid->Add(wx_y_button,false); buttons_grid->Add(wx_l_button,false); buttons_grid->Add(wx_r_button,false); buttons_grid->Add(wx_z_button,false); buttons_grid->Add(wx_start_button,false); buttons_grid->AddSpacer(5); wxGridSizer* const buttons_dpad = new wxGridSizer(3); wx_up_button = new wxCheckBox(this, ID_UP, "Up"); wx_up_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_up_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_right_button = new wxCheckBox(this, ID_RIGHT, "Right"); wx_right_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_right_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_down_button = new wxCheckBox(this, ID_DOWN, "Down"); wx_down_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_down_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); wx_left_button = new wxCheckBox(this, ID_LEFT, "Left"); wx_left_button->Bind(wxEVT_RIGHT_DOWN, &TASInputDlg::SetTurbo, this); wx_left_button->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::SetTurboFalse, this); buttons_dpad->AddSpacer(20); buttons_dpad->Add(wx_up_button,false); buttons_dpad->AddSpacer(20); buttons_dpad->Add(wx_left_button,false); buttons_dpad->AddSpacer(20); buttons_dpad->Add(wx_right_button,false); buttons_dpad->AddSpacer(20); buttons_dpad->Add(wx_down_button,false); buttons_dpad->AddSpacer(20); buttons_box->Add(buttons_grid); buttons_box->Add(buttons_dpad); wxBoxSizer* const main_szr = new wxBoxSizer(wxVERTICAL); top_box->AddSpacer(5); top_box->Add(main_box); top_box->AddSpacer(5); top_box->Add(c_box); top_box->AddSpacer(5); bottom_box->AddSpacer(5); bottom_box->Add(shoulder_box); bottom_box->AddSpacer(5); bottom_box->Add(buttons_box); bottom_box->AddSpacer(5); main_szr->Add(top_box); main_szr->Add(bottom_box); SetSizerAndFit(main_szr); ResetValues(); } void TASInputDlg::ResetValues() { mainX = mainY = cX = cY = 128; lTrig = rTrig = 0; wx_mainX_s->SetValue(128); wx_mainY_s->SetValue(128); wx_cX_s->SetValue(128); wx_cY_s->SetValue(128); wx_l_s->SetValue(0); wx_r_s->SetValue(0); wx_mainX_t->SetValue("128"); wx_mainY_t->SetValue("128"); wx_cX_t->SetValue("128"); wx_cY_t->SetValue("128"); wx_l_t->SetValue("0"); wx_r_t->SetValue("0"); wx_up_button->SetValue(false); wx_down_button->SetValue(false); wx_left_button->SetValue(false); wx_right_button->SetValue(false); wx_a_button->SetValue(false); wx_b_button->SetValue(false); wx_x_button->SetValue(false); wx_y_button->SetValue(false); wx_l_button->SetValue(false); wx_r_button->SetValue(false); wx_z_button->SetValue(false); wx_start_button->SetValue(false); } void TASInputDlg::GetKeyBoardInput(GCPadStatus* PadStatus) { if (PadStatus->stickX != 128) { mainX = PadStatus->stickX; mstickx = true; wx_mainX_t->SetValue(wxString::Format("%i", mainX)); } else if (mstickx) { mstickx = false; mainX = 128; wx_mainX_t->SetValue(wxString::Format("%i", mainX)); } if (PadStatus->stickY != 128) { mainY = PadStatus->stickY; msticky = true; wx_mainY_t->SetValue(wxString::Format("%i",mainY)); } else if (msticky) { msticky = false; mainY = 128; wx_mainY_t->SetValue(wxString::Format("%i", mainY)); } if (PadStatus->substickX != 128) { cX = PadStatus->substickX; cstickx = true; wx_cX_t->SetValue(wxString::Format("%i", cX)); } else if (cstickx) { cstickx = false; cX = 128; wx_cX_t->SetValue(wxString::Format("%i", cX)); } if (PadStatus->substickY != 128) { cY = PadStatus->substickY; csticky = true; wx_cY_t->SetValue(wxString::Format("%i", cY)); } else if (csticky) { csticky = false; cY = 128; wx_cY_t->SetValue(wxString::Format("%i", cY)); } if ((PadStatus->button & PAD_BUTTON_UP) != 0) { wx_up_button->SetValue(true); DU_cont = true; } else if (DU_cont) { wx_up_button->SetValue(false); DU_cont = false; } if ((PadStatus->button & PAD_BUTTON_DOWN) != 0) { wx_down_button->SetValue(true); DD_cont = true; } else if (DD_cont) { wx_down_button->SetValue(false); DD_cont = false; } if ((PadStatus->button & PAD_BUTTON_LEFT) != 0) { wx_left_button->SetValue(true); DL_cont = true; } else if (DL_cont) { wx_left_button->SetValue(false); DL_cont = false; } if ((PadStatus->button & PAD_BUTTON_RIGHT) != 0) { wx_right_button->SetValue(true); DR_cont = true; } else if (DR_cont) { wx_right_button->SetValue(false); DR_cont = false; } if ((PadStatus->button & PAD_BUTTON_A) != 0) { wx_a_button->SetValue(true); A_cont = true; } else if (A_cont) { wx_a_button->SetValue(false); A_cont = false; } if ((PadStatus->button & PAD_BUTTON_B) != 0) { wx_b_button->SetValue(true); B_cont = true; } else if (B_cont) { wx_b_button->SetValue(false); B_cont = false; } if ((PadStatus->button & PAD_BUTTON_X) != 0) { wx_x_button->SetValue(true); X_cont = true; } else if (X_cont) { wx_x_button->SetValue(false); X_cont = false; } if ((PadStatus->button & PAD_BUTTON_Y) != 0) { wx_y_button->SetValue(true); Y_cont = true; } else if (Y_cont) { wx_y_button->SetValue(false); Y_cont = false; } if ((PadStatus->triggerLeft) != 0) { if (PadStatus->triggerLeft == 255) { wx_l_button->SetValue(true); L_button_cont = true; } else if (L_button_cont) { wx_l_button->SetValue(false); L_button_cont = false; } wx_l_s->SetValue(PadStatus->triggerLeft); wx_l_t->SetValue(wxString::Format("%i", PadStatus->triggerLeft)); L_cont = true; } else if (L_cont) { wx_l_button->SetValue(false); wx_l_s->SetValue(0); wx_l_t->SetValue("0"); L_cont = false; } if ((PadStatus->triggerRight) != 0) { if (PadStatus->triggerRight == 255) { wx_r_button->SetValue(true); R_button_cont = true; } else if (R_button_cont) { wx_r_button->SetValue(false); R_button_cont = false; } wx_r_s->SetValue(PadStatus->triggerRight); wx_r_t->SetValue(wxString::Format("%i", PadStatus->triggerRight)); R_cont = true; } else if (R_cont) { wx_r_button->SetValue(false); wx_r_s->SetValue(0); wx_r_t->SetValue("0"); R_cont = false; } if ((PadStatus->button & PAD_TRIGGER_Z) != 0) { wx_z_button->SetValue(true); Z_cont = true; } else if (Z_cont) { wx_z_button->SetValue(false); Z_cont = false; } if ((PadStatus->button & PAD_BUTTON_START) != 0) { wx_start_button->SetValue(true); START_cont = true; } else if (START_cont) { wx_start_button->SetValue(false); START_cont = false; } } void TASInputDlg::SetLandRTriggers() { if (wx_l_button->GetValue()) lTrig = 255; else lTrig = wx_l_s->GetValue(); if (wx_r_button->GetValue()) rTrig = 255; else rTrig = wx_r_s->GetValue(); } void TASInputDlg::GetValues(GCPadStatus* PadStatus, int controllerID) { if (!IsShown()) return; //TODO:: Make this instant not when polled. GetKeyBoardInput(PadStatus); SetLandRTriggers(); PadStatus->stickX = mainX; PadStatus->stickY = mainY; PadStatus->substickX = cX; PadStatus->substickY = cY; PadStatus->triggerLeft = lTrig; PadStatus->triggerRight = rTrig; if (wx_up_button->IsChecked()) PadStatus->button |= PAD_BUTTON_UP; else PadStatus->button &= ~PAD_BUTTON_UP; if (wx_down_button->IsChecked()) PadStatus->button |= PAD_BUTTON_DOWN; else PadStatus->button &= ~PAD_BUTTON_DOWN; if (wx_left_button->IsChecked()) PadStatus->button |= PAD_BUTTON_LEFT; else PadStatus->button &= ~PAD_BUTTON_LEFT; if (wx_right_button->IsChecked()) PadStatus->button |= PAD_BUTTON_RIGHT; else PadStatus->button &= ~PAD_BUTTON_RIGHT; if (wx_a_button->IsChecked()) { PadStatus->button |= PAD_BUTTON_A; PadStatus->analogA = 0xFF; } else { PadStatus->button &= ~PAD_BUTTON_A; PadStatus->analogA = 0x00; } if (wx_b_button->IsChecked()) { PadStatus->button |= PAD_BUTTON_B; PadStatus->analogB = 0xFF; } else { PadStatus->button &= ~PAD_BUTTON_B; PadStatus->analogB = 0x00; } if (wx_x_button->IsChecked()) PadStatus->button |= PAD_BUTTON_X; else PadStatus->button &= ~PAD_BUTTON_X; if (wx_y_button->IsChecked()) PadStatus->button |= PAD_BUTTON_Y; else PadStatus->button &= ~PAD_BUTTON_Y; if (wx_z_button->IsChecked()) PadStatus->button |= PAD_TRIGGER_Z; else PadStatus->button &= ~PAD_TRIGGER_Z; if (wx_start_button->IsChecked()) PadStatus->button |= PAD_BUTTON_START; else PadStatus->button &= ~PAD_BUTTON_START; if (wx_r_button->IsChecked() || rTrig >= 255) PadStatus->button |= PAD_TRIGGER_R; else PadStatus->button &= ~PAD_TRIGGER_R; if (wx_l_button->IsChecked() || lTrig >= 255) PadStatus->button |= PAD_TRIGGER_L; else PadStatus->button &= ~PAD_TRIGGER_L; ButtonTurbo(); } void TASInputDlg::UpdateFromSliders(wxCommandEvent& event) { wxTextCtrl *text; u8 *v; update = 0; switch (event.GetId()) { case ID_MAIN_X_SLIDER: text = wx_mainX_t; v = &mainX; xaxis =((wxSlider *) event.GetEventObject())->GetValue(); update = 1; break; case ID_MAIN_Y_SLIDER: text = wx_mainY_t; v = &mainY; yaxis = 256 - ((wxSlider *) event.GetEventObject())->GetValue(); update = 1; break; case ID_C_X_SLIDER: text = wx_cX_t; v = &cX; c_xaxis = ((wxSlider *) event.GetEventObject())->GetValue(); update = 2; break; case ID_C_Y_SLIDER: text = wx_cY_t; v = &cY; c_yaxis = 256 -((wxSlider *) event.GetEventObject())->GetValue(); update = 2; break; case ID_L_SLIDER: text = wx_l_t; v = &lTrig; break; case ID_R_SLIDER: text = wx_r_t; v = &rTrig; break; default: return; } int value = ((wxSlider *) event.GetEventObject())->GetValue(); *v = (u8) value; text->SetValue(wxString::Format("%i", value)); if (update == 1) { static_bitmap_main->SetBitmap(TASInputDlg::CreateStickBitmap(xaxis, yaxis)); } if (update == 2) { static_bitmap_c->SetBitmap(TASInputDlg::CreateStickBitmap(c_xaxis, c_yaxis)); } } void TASInputDlg::UpdateFromText(wxCommandEvent& event) { wxSlider *slider; u8 *v; update = 0; update_axis = 0; switch (event.GetId()) { case ID_MAIN_X_TEXT: slider = wx_mainX_s; v = &mainX; update = 1; update_axis = 1; break; case ID_MAIN_Y_TEXT: slider = wx_mainY_s; v = &mainY; update = 1; update_axis = 2; break; case ID_C_X_TEXT: slider = wx_cX_s; v = &cX; update = 2; update_axis = 1; break; case ID_C_Y_TEXT: slider = wx_cY_s; v = &cY; update = 2; update_axis = 2; break; case ID_L_TEXT: slider = wx_l_s; v = &lTrig; break; case ID_R_TEXT: slider = wx_r_s; v = &rTrig; break; default: return; } unsigned long value; if (((wxTextCtrl *) event.GetEventObject())->GetValue().ToULong(&value)) { *v = (u8) (value > 255 ? 255 : value); slider->SetValue(*v); if (update == 1) { if (update_axis == 1) { xaxis = *v; static_bitmap_main->SetBitmap(TASInputDlg::CreateStickBitmap(xaxis,yaxis)); } else if (update_axis == 2) { yaxis =256 - *v; static_bitmap_main->SetBitmap(TASInputDlg::CreateStickBitmap(xaxis,yaxis)); } } else if (update == 2) { if (update_axis == 1) { c_xaxis = *v; static_bitmap_c->SetBitmap(TASInputDlg::CreateStickBitmap(c_xaxis,c_yaxis)); } else if (update_axis == 2) { c_yaxis =256- *v; static_bitmap_c->SetBitmap(TASInputDlg::CreateStickBitmap(c_xaxis,c_yaxis)); } } } } void TASInputDlg::OnCloseWindow(wxCloseEvent& event) { if (event.CanVeto()) { event.Skip(false); this->Show(false); ResetValues(); } } bool TASInputDlg::TASHasFocus() { //allows numbers to be used as hotkeys if (TextBoxHasFocus()) return false; if (wxWindow::FindFocus() == this) return true; else if (wxWindow::FindFocus() != nullptr && wxWindow::FindFocus()->GetParent() == this) return true; else return false; } bool TASInputDlg::TextBoxHasFocus() { if (wxWindow::FindFocus() == wx_mainX_t) return true; if (wxWindow::FindFocus() == wx_mainY_t) return true; if (wxWindow::FindFocus() == wx_cX_t) return true; if (wxWindow::FindFocus() == wx_cY_t) return true; if (wxWindow::FindFocus() == wx_l_t) return true; if (wxWindow::FindFocus() == wx_r_t) return true; return false; } void TASInputDlg::OnMouseUpR(wxMouseEvent& event) { wxSlider *sliderX,*sliderY; wxStaticBitmap *sbitmap; wxTextCtrl *textX, *textY; int *x,*y; switch (event.GetId()) { case ID_MAIN_STICK: sliderX = wx_mainX_s; sliderY = wx_mainY_s; textX = wx_mainX_t; textY = wx_mainY_t; sbitmap = static_bitmap_main; x = &xaxis; y = &yaxis; break; case ID_C_STICK: sliderX = wx_cX_s; sliderY = wx_cY_s; textX = wx_cX_t; textY = wx_cY_t; sbitmap = static_bitmap_c; x = &c_xaxis; y = &c_yaxis; break; default: return; } *x = 128; *y = 128; sbitmap->SetBitmap(TASInputDlg::CreateStickBitmap(*x,*y)); textX->SetValue(wxString::Format("%i", *x)); textY->SetValue(wxString::Format("%i", 256 - *y)); sliderX->SetValue(*x); sliderY->SetValue(256 - *y); event.Skip(); } void TASInputDlg::OnMouseDownL(wxMouseEvent& event) { if (event.GetEventType() == wxEVT_MOTION && !event.LeftIsDown()) return; wxSlider *sliderX,*sliderY; wxStaticBitmap *sbitmap; wxTextCtrl *textX, *textY; int *x,*y; switch (event.GetId()) { case ID_MAIN_STICK: sliderX = wx_mainX_s; sliderY = wx_mainY_s; textX = wx_mainX_t; textY = wx_mainY_t; sbitmap = static_bitmap_main; x = &xaxis; y = &yaxis; break; case ID_C_STICK: sliderX = wx_cX_s; sliderY = wx_cY_s; textX = wx_cX_t; textY = wx_cY_t; sbitmap = static_bitmap_c; x = &c_xaxis; y = &c_yaxis; break; default: return; } wxPoint ptM(event.GetPosition()); *x = ptM.x *2; *y = ptM.y * 2; if (*x > 255) *x = 255; if (*y > 255) *y = 255; sbitmap->SetBitmap(TASInputDlg::CreateStickBitmap(*x,*y)); textX->SetValue(wxString::Format("%i", *x)); textY->SetValue(wxString::Format("%i", 256 - *y)); sliderX->SetValue(*x); sliderY->SetValue(256 - *y); event.Skip(); } void TASInputDlg::SetTurboFalse(wxMouseEvent& event) { switch (event.GetId()) { case ID_A: A_turbo = false; break; case ID_B: B_turbo = false; break; case ID_X: X_turbo = false; break; case ID_Y: Y_turbo = false; break; case ID_Z: Z_turbo = false; break; case ID_L: L_turbo = false; break; case ID_R: R_turbo = false; break; case ID_START: START_turbo = false; break; case ID_UP: DU_turbo = false; break; case ID_DOWN: DD_turbo = false; break; case ID_LEFT: DL_turbo = false; break; case ID_RIGHT: DR_turbo = false; break; default: return; } event.Skip(); } void TASInputDlg::SetTurbo(wxMouseEvent& event) { wxCheckBox* placeholder; switch (event.GetId()) { case ID_A: placeholder = wx_a_button; A_turbo = !A_turbo; break; case ID_B: placeholder = wx_b_button; B_turbo = !B_turbo; break; case ID_X: placeholder = wx_x_button; X_turbo = !X_turbo; break; case ID_Y: placeholder = wx_y_button; Y_turbo = !Y_turbo; break; case ID_Z: placeholder = wx_z_button; Z_turbo = !Z_turbo; break; case ID_L: placeholder = wx_l_button; L_turbo = !L_turbo; break; case ID_R: placeholder = wx_r_button; R_turbo = !R_turbo; break; case ID_START: placeholder = wx_start_button; START_turbo = !START_turbo; break; case ID_UP: placeholder = wx_up_button; DU_turbo = !DU_turbo; break; case ID_DOWN: placeholder = wx_down_button; DD_turbo = !DD_turbo; break; case ID_LEFT: placeholder = wx_left_button; DL_turbo = !DL_turbo; break; case ID_RIGHT: placeholder = wx_right_button; DR_turbo = !DR_turbo; break; default: return; } placeholder->SetValue(true); } void TASInputDlg::ButtonTurbo() { if (A_turbo) { if (wx_a_button->GetValue()) wx_a_button->SetValue(false); else wx_a_button->SetValue(true); } if (B_turbo) { if (wx_b_button->GetValue()) wx_b_button->SetValue(false); else wx_b_button->SetValue(true); } if (X_turbo) { if (wx_x_button->GetValue()) wx_x_button->SetValue(false); else wx_x_button->SetValue(true); } if (Y_turbo) { if (wx_y_button->GetValue()) wx_y_button->SetValue(false); else wx_y_button->SetValue(true); } if (Z_turbo) { if (wx_z_button->GetValue()) wx_z_button->SetValue(false); else wx_z_button->SetValue(true); } if (L_turbo) { if (wx_l_button->GetValue()) wx_l_button->SetValue(false); else wx_l_button->SetValue(true); } if (R_turbo) { if (wx_r_button->GetValue()) wx_r_button->SetValue(false); else wx_r_button->SetValue(true); } if (START_turbo) { if (wx_start_button->GetValue()) wx_start_button->SetValue(false); else wx_start_button->SetValue(true); } if (DU_turbo) { if (wx_up_button->GetValue()) wx_up_button->SetValue(false); else wx_up_button->SetValue(true); } if (DD_turbo) { if (wx_down_button->GetValue()) wx_down_button->SetValue(false); else wx_down_button->SetValue(true); } if (DL_turbo) { if (wx_left_button->GetValue()) wx_left_button->SetValue(false); else wx_left_button->SetValue(true); } if (DR_turbo) { if (wx_right_button->GetValue()) wx_right_button->SetValue(false); else wx_right_button->SetValue(true); } } wxBitmap TASInputDlg::CreateStickBitmap(int x, int y) { x = x/2; y = y/2; wxMemoryDC memDC; wxBitmap stick_bitmap(127, 127); memDC.SelectObject(stick_bitmap); memDC.SetBackground(*wxLIGHT_GREY_BRUSH); memDC.Clear(); memDC.SetBrush(*wxWHITE_BRUSH); memDC.DrawCircle(65,65,64); memDC.SetBrush(*wxRED_BRUSH); memDC.DrawLine(64,64,x,y); memDC.DrawLine(63,64,x-1,y); memDC.DrawLine(65,64,x+1,y); memDC.DrawLine(64,63,x,y-1); memDC.DrawLine(64,65,x,y+1); memDC.SetPen(*wxBLACK_PEN); memDC.CrossHair(64,64); memDC.SetBrush(*wxBLUE_BRUSH); memDC.DrawCircle(x,y,5); memDC.SelectObject(wxNullBitmap); return stick_bitmap; }