rlm@1: // Joypad.cpp : implementation file rlm@1: // rlm@1: rlm@1: #include "stdafx.h" rlm@1: #include "resource.h" rlm@1: #include "Joypad.h" rlm@1: #include "Input.h" rlm@1: #include "VBA.h" rlm@1: rlm@1: extern USHORT joypad[4][13]; rlm@1: extern USHORT motion[4]; rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // JoypadEditControl rlm@1: rlm@1: JoypadEditControl::JoypadEditControl() rlm@1: {} rlm@1: rlm@1: JoypadEditControl::~JoypadEditControl() rlm@1: {} rlm@1: rlm@1: BEGIN_MESSAGE_MAP(JoypadEditControl, CEdit) rlm@1: //{{AFX_MSG_MAP(JoypadEditControl) rlm@1: ON_WM_CHAR() rlm@1: //}}AFX_MSG_MAP rlm@1: ON_MESSAGE(JOYCONFIG_MESSAGE, OnJoyConfig) rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // JoypadEditControl message handlers rlm@1: rlm@1: void JoypadEditControl::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) rlm@1: {} rlm@1: rlm@1: LRESULT JoypadEditControl::OnJoyConfig(WPARAM wParam, LPARAM lParam) rlm@1: { rlm@1: SetWindowLong(GetSafeHwnd(), GWL_USERDATA, ((wParam<<8)|lParam)); rlm@1: SetWindowText(theApp.input->getKeyName((wParam<<8)|lParam)); rlm@1: GetParent()->GetNextDlgTabItem(this, FALSE)->SetFocus(); rlm@1: return TRUE; rlm@1: } rlm@1: rlm@1: BOOL JoypadEditControl::PreTranslateMessage(MSG *pMsg) rlm@1: { rlm@1: if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)) rlm@1: return TRUE; rlm@1: rlm@1: return CEdit::PreTranslateMessage(pMsg); rlm@1: } rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // JoypadConfig dialog rlm@1: rlm@1: JoypadConfig::JoypadConfig(int w, CWnd*pParent /*=NULL*/) rlm@1: : CDialog(JoypadConfig::IDD, pParent) rlm@1: { rlm@1: //{{AFX_DATA_INIT(JoypadConfig) rlm@1: //}}AFX_DATA_INIT rlm@1: timerId = 0; rlm@1: which = w; rlm@1: if (which < 0 || which > 3) rlm@1: which = 0; rlm@1: } rlm@1: rlm@1: void JoypadConfig::DoDataExchange(CDataExchange*pDX) rlm@1: { rlm@1: CDialog::DoDataExchange(pDX); rlm@1: //{{AFX_DATA_MAP(JoypadConfig) rlm@1: DDX_Control(pDX, IDC_EDIT_UP, up); rlm@1: DDX_Control(pDX, IDC_EDIT_SPEED, speed); rlm@1: DDX_Control(pDX, IDC_EDIT_RIGHT, right); rlm@1: DDX_Control(pDX, IDC_EDIT_LEFT, left); rlm@1: DDX_Control(pDX, IDC_EDIT_DOWN, down); rlm@1: DDX_Control(pDX, IDC_EDIT_CAPTURE, capture); rlm@1: DDX_Control(pDX, IDC_EDIT_BUTTON_START, buttonStart); rlm@1: DDX_Control(pDX, IDC_EDIT_BUTTON_SELECT, buttonSelect); rlm@1: DDX_Control(pDX, IDC_EDIT_BUTTON_R, buttonR); rlm@1: DDX_Control(pDX, IDC_EDIT_BUTTON_L, buttonL); rlm@1: DDX_Control(pDX, IDC_EDIT_BUTTON_GS, buttonGS); rlm@1: DDX_Control(pDX, IDC_EDIT_BUTTON_B, buttonB); rlm@1: DDX_Control(pDX, IDC_EDIT_BUTTON_A, buttonA); rlm@1: //}}AFX_DATA_MAP rlm@1: } rlm@1: rlm@1: BEGIN_MESSAGE_MAP(JoypadConfig, CDialog) rlm@1: //{{AFX_MSG_MAP(JoypadConfig) rlm@1: ON_BN_CLICKED(ID_CANCEL, OnCancel) rlm@1: ON_BN_CLICKED(ID_OK, OnOk) rlm@1: ON_WM_CHAR() rlm@1: ON_WM_DESTROY() rlm@1: ON_WM_TIMER() rlm@1: ON_WM_KEYDOWN() rlm@1: //}}AFX_MSG_MAP rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // JoypadConfig message handlers rlm@1: rlm@1: void JoypadConfig::OnCancel() rlm@1: { rlm@1: EndDialog(FALSE); rlm@1: } rlm@1: rlm@1: void JoypadConfig::OnOk() rlm@1: { rlm@1: assignKeys(); rlm@1: theApp.input->checkKeys(); rlm@1: EndDialog(TRUE); rlm@1: } rlm@1: rlm@1: void JoypadConfig::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) rlm@1: {} rlm@1: rlm@1: void JoypadConfig::OnDestroy() rlm@1: { rlm@1: CDialog::OnDestroy(); rlm@1: rlm@1: KillTimer(timerId); rlm@1: } rlm@1: rlm@1: void JoypadConfig::OnTimer(UINT nIDEvent) rlm@1: { rlm@1: theApp.input->checkDevices(); rlm@1: rlm@1: CDialog::OnTimer(nIDEvent); rlm@1: } rlm@1: rlm@1: void JoypadConfig::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) rlm@1: {} rlm@1: rlm@1: BOOL JoypadConfig::OnInitDialog() rlm@1: { rlm@1: CDialog::OnInitDialog(); rlm@1: rlm@1: timerId = SetTimer(0, 200, NULL); rlm@1: rlm@1: SetWindowLong(up, GWL_USERDATA, joypad[which][KEY_UP]); rlm@1: up.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_UP])); rlm@1: rlm@1: SetWindowLong(down, GWL_USERDATA, joypad[which][KEY_DOWN]); rlm@1: down.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_DOWN])); rlm@1: rlm@1: SetWindowLong(left, GWL_USERDATA, joypad[which][KEY_LEFT]); rlm@1: left.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_LEFT])); rlm@1: rlm@1: SetWindowLong(right, GWL_USERDATA, joypad[which][KEY_RIGHT]); rlm@1: right.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_RIGHT])); rlm@1: rlm@1: SetWindowLong(buttonA, GWL_USERDATA, joypad[which][KEY_BUTTON_A]); rlm@1: buttonA.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_A])); rlm@1: rlm@1: SetWindowLong(buttonB, GWL_USERDATA, joypad[which][KEY_BUTTON_B]); rlm@1: buttonB.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_B])); rlm@1: rlm@1: SetWindowLong(buttonL, GWL_USERDATA, joypad[which][KEY_BUTTON_L]); rlm@1: buttonL.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_L])); rlm@1: rlm@1: SetWindowLong(buttonR, GWL_USERDATA, joypad[which][KEY_BUTTON_R]); rlm@1: buttonR.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_R])); rlm@1: rlm@1: SetWindowLong(buttonSelect, GWL_USERDATA, joypad[which][KEY_BUTTON_SELECT]); rlm@1: buttonSelect.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_SELECT])); rlm@1: rlm@1: SetWindowLong(buttonStart, GWL_USERDATA, joypad[which][KEY_BUTTON_START]); rlm@1: buttonStart.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_START])); rlm@1: rlm@1: SetWindowLong(speed, GWL_USERDATA, joypad[which][KEY_BUTTON_SPEED]); rlm@1: speed.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_SPEED])); rlm@1: rlm@1: SetWindowLong(capture, GWL_USERDATA, joypad[which][KEY_BUTTON_CAPTURE]); rlm@1: capture.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_CAPTURE])); rlm@1: rlm@1: SetWindowLong(buttonGS, GWL_USERDATA, joypad[which][KEY_BUTTON_GS]); rlm@1: buttonGS.SetWindowText(theApp.input->getKeyName(joypad[which][KEY_BUTTON_GS])); rlm@1: rlm@1: CenterWindow(); rlm@1: rlm@1: return TRUE; // return TRUE unless you set the focus to a control rlm@1: // EXCEPTION: OCX Property Pages should return FALSE rlm@1: } rlm@1: rlm@1: void JoypadConfig::assignKey(int id, int key) rlm@1: { rlm@1: switch (id) rlm@1: { rlm@1: case IDC_EDIT_LEFT: rlm@1: joypad[which][KEY_LEFT] = key; rlm@1: break; rlm@1: case IDC_EDIT_RIGHT: rlm@1: joypad[which][KEY_RIGHT] = key; rlm@1: break; rlm@1: case IDC_EDIT_UP: rlm@1: joypad[which][KEY_UP] = key; rlm@1: break; rlm@1: case IDC_EDIT_SPEED: rlm@1: joypad[which][KEY_BUTTON_SPEED] = key; rlm@1: break; rlm@1: case IDC_EDIT_CAPTURE: rlm@1: joypad[which][KEY_BUTTON_CAPTURE] = key; rlm@1: break; rlm@1: case IDC_EDIT_DOWN: rlm@1: joypad[which][KEY_DOWN] = key; rlm@1: break; rlm@1: case IDC_EDIT_BUTTON_A: rlm@1: joypad[which][KEY_BUTTON_A] = key; rlm@1: break; rlm@1: case IDC_EDIT_BUTTON_B: rlm@1: joypad[which][KEY_BUTTON_B] = key; rlm@1: break; rlm@1: case IDC_EDIT_BUTTON_L: rlm@1: joypad[which][KEY_BUTTON_L] = key; rlm@1: break; rlm@1: case IDC_EDIT_BUTTON_R: rlm@1: joypad[which][KEY_BUTTON_R] = key; rlm@1: break; rlm@1: case IDC_EDIT_BUTTON_START: rlm@1: joypad[which][KEY_BUTTON_START] = key; rlm@1: break; rlm@1: case IDC_EDIT_BUTTON_SELECT: rlm@1: joypad[which][KEY_BUTTON_SELECT] = key; rlm@1: break; rlm@1: case IDC_EDIT_BUTTON_GS: rlm@1: joypad[which][KEY_BUTTON_GS] = key; rlm@1: break; rlm@1: } rlm@1: } rlm@1: rlm@1: void JoypadConfig::assignKeys() rlm@1: { rlm@1: int id; rlm@1: rlm@1: id = IDC_EDIT_UP; rlm@1: assignKey(id, GetWindowLong(up, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_DOWN; rlm@1: assignKey(id, GetWindowLong(down, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_LEFT; rlm@1: assignKey(id, GetWindowLong(left, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_RIGHT; rlm@1: assignKey(id, GetWindowLong(right, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_BUTTON_A; rlm@1: assignKey(id, GetWindowLong(buttonA, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_BUTTON_B; rlm@1: assignKey(id, GetWindowLong(buttonB, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_BUTTON_L; rlm@1: assignKey(id, GetWindowLong(buttonL, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_BUTTON_R; rlm@1: assignKey(id, GetWindowLong(buttonR, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_BUTTON_SELECT; rlm@1: assignKey(id, GetWindowLong(buttonSelect, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_BUTTON_START; rlm@1: assignKey(id, GetWindowLong(buttonStart, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_SPEED; rlm@1: assignKey(id, GetWindowLong(speed, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_CAPTURE; rlm@1: assignKey(id, GetWindowLong(capture, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_BUTTON_GS; rlm@1: assignKey(id, GetWindowLong(buttonGS, GWL_USERDATA)); rlm@1: rlm@1: // winSaveKeys(); rlm@1: } rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // MotionConfig dialog rlm@1: rlm@1: MotionConfig::MotionConfig(CWnd*pParent /*=NULL*/) rlm@1: : CDialog(MotionConfig::IDD, pParent) rlm@1: { rlm@1: //{{AFX_DATA_INIT(MotionConfig) rlm@1: // NOTE: the ClassWizard will add member initialization here rlm@1: //}}AFX_DATA_INIT rlm@1: timerId = 0; rlm@1: } rlm@1: rlm@1: void MotionConfig::DoDataExchange(CDataExchange*pDX) rlm@1: { rlm@1: CDialog::DoDataExchange(pDX); rlm@1: //{{AFX_DATA_MAP(MotionConfig) rlm@1: DDX_Control(pDX, IDC_EDIT_UP, up); rlm@1: DDX_Control(pDX, IDC_EDIT_RIGHT, right); rlm@1: DDX_Control(pDX, IDC_EDIT_LEFT, left); rlm@1: DDX_Control(pDX, IDC_EDIT_DOWN, down); rlm@1: //}}AFX_DATA_MAP rlm@1: } rlm@1: rlm@1: BEGIN_MESSAGE_MAP(MotionConfig, CDialog) rlm@1: //{{AFX_MSG_MAP(MotionConfig) rlm@1: ON_BN_CLICKED(ID_CANCEL, OnCancel) rlm@1: ON_BN_CLICKED(ID_OK, OnOk) rlm@1: ON_WM_CHAR() rlm@1: ON_WM_DESTROY() rlm@1: ON_WM_KEYDOWN() rlm@1: ON_WM_TIMER() rlm@1: //}}AFX_MSG_MAP rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // MotionConfig message handlers rlm@1: rlm@1: void MotionConfig::OnCancel() rlm@1: { rlm@1: EndDialog(FALSE); rlm@1: } rlm@1: rlm@1: void MotionConfig::OnOk() rlm@1: { rlm@1: assignKeys(); rlm@1: theApp.input->checkKeys(); rlm@1: EndDialog(TRUE); rlm@1: } rlm@1: rlm@1: void MotionConfig::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) rlm@1: {} rlm@1: rlm@1: void MotionConfig::OnDestroy() rlm@1: { rlm@1: CDialog::OnDestroy(); rlm@1: rlm@1: KillTimer(timerId); rlm@1: } rlm@1: rlm@1: BOOL MotionConfig::OnInitDialog() rlm@1: { rlm@1: CDialog::OnInitDialog(); rlm@1: rlm@1: timerId = SetTimer(0, 200, NULL); rlm@1: rlm@1: SetWindowLong(up, GWL_USERDATA, motion[KEY_UP]); rlm@1: up.SetWindowText(theApp.input->getKeyName(motion[KEY_UP])); rlm@1: rlm@1: SetWindowLong(down, GWL_USERDATA, motion[KEY_DOWN]); rlm@1: down.SetWindowText(theApp.input->getKeyName(motion[KEY_DOWN])); rlm@1: rlm@1: SetWindowLong(left, GWL_USERDATA, motion[KEY_LEFT]); rlm@1: left.SetWindowText(theApp.input->getKeyName(motion[KEY_LEFT])); rlm@1: rlm@1: SetWindowLong(right, GWL_USERDATA, motion[KEY_RIGHT]); rlm@1: right.SetWindowText(theApp.input->getKeyName(motion[KEY_RIGHT])); rlm@1: rlm@1: CenterWindow(); rlm@1: rlm@1: return TRUE; // return TRUE unless you set the focus to a control rlm@1: // EXCEPTION: OCX Property Pages should return FALSE rlm@1: } rlm@1: rlm@1: void MotionConfig::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) rlm@1: {} rlm@1: rlm@1: void MotionConfig::OnTimer(UINT nIDEvent) rlm@1: { rlm@1: theApp.input->checkDevices(); rlm@1: rlm@1: CDialog::OnTimer(nIDEvent); rlm@1: } rlm@1: rlm@1: void MotionConfig::assignKey(int id, int key) rlm@1: { rlm@1: switch (id) rlm@1: { rlm@1: case IDC_EDIT_LEFT: rlm@1: motion[KEY_LEFT] = key; rlm@1: break; rlm@1: case IDC_EDIT_RIGHT: rlm@1: motion[KEY_RIGHT] = key; rlm@1: break; rlm@1: case IDC_EDIT_UP: rlm@1: motion[KEY_UP] = key; rlm@1: break; rlm@1: case IDC_EDIT_DOWN: rlm@1: motion[KEY_DOWN] = key; rlm@1: break; rlm@1: } rlm@1: } rlm@1: rlm@1: void MotionConfig::assignKeys() rlm@1: { rlm@1: int id; rlm@1: rlm@1: id = IDC_EDIT_UP; rlm@1: assignKey(id, GetWindowLong(up, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_DOWN; rlm@1: assignKey(id, GetWindowLong(down, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_LEFT; rlm@1: assignKey(id, GetWindowLong(left, GWL_USERDATA)); rlm@1: rlm@1: id = IDC_EDIT_RIGHT; rlm@1: assignKey(id, GetWindowLong(right, GWL_USERDATA)); rlm@1: } rlm@1: