2014-04-12 10:44:38 +00:00
|
|
|
/* LilyPad - Pad plugin for PS2 Emulator
|
|
|
|
* Copyright (C) 2002-2014 PCSX2 Dev Team/ChickenLiver
|
|
|
|
*
|
|
|
|
* PCSX2 is free software: you can redistribute it and/or modify it under the
|
|
|
|
* terms of the GNU Lesser General Public License as published by the Free
|
|
|
|
* Software Found- ation, either version 3 of the License, or (at your option)
|
|
|
|
* any later version.
|
|
|
|
*
|
|
|
|
* PCSX2 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 for more
|
|
|
|
* details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with PCSX2. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2010-04-24 21:37:39 +00:00
|
|
|
#include "Global.h"
|
|
|
|
#include "DeviceEnumerator.h"
|
|
|
|
#include "KeyboardQueue.h"
|
|
|
|
|
|
|
|
#include "resource.h"
|
|
|
|
#include "InputManager.h"
|
|
|
|
#include "WndProcEater.h"
|
|
|
|
|
|
|
|
Device *dev;
|
|
|
|
|
2016-09-04 12:16:34 +00:00
|
|
|
INT_PTR CALLBACK DiagDialog(HWND hWnd, unsigned int uMsg, WPARAM wParam, LPARAM lParam)
|
|
|
|
{
|
|
|
|
int i;
|
2016-11-30 12:39:12 +00:00
|
|
|
HWND hWndList = GetDlgItem(hWnd, IDC_DIAG_LIST);
|
2016-09-04 12:16:34 +00:00
|
|
|
static int fullRefresh;
|
|
|
|
if (dev) {
|
|
|
|
switch (uMsg) {
|
|
|
|
case WM_INITDIALOG: {
|
|
|
|
fullRefresh = 1;
|
|
|
|
SetWindowText(hWnd, dev->displayName);
|
|
|
|
LVCOLUMNW c;
|
|
|
|
c.mask = LVCF_TEXT | LVCF_WIDTH;
|
|
|
|
c.cx = 151;
|
|
|
|
c.pszText = L"Control";
|
|
|
|
ListView_InsertColumn(hWndList, 0, &c);
|
|
|
|
c.cx = 90;
|
|
|
|
c.pszText = L"Value";
|
|
|
|
ListView_InsertColumn(hWndList, 1, &c);
|
|
|
|
ListView_DeleteAllItems(hWndList);
|
|
|
|
LVITEM item;
|
|
|
|
item.mask = LVIF_TEXT;
|
|
|
|
item.iSubItem = 0;
|
|
|
|
for (i = 0; i < dev->numVirtualControls; i++) {
|
|
|
|
item.pszText = dev->GetVirtualControlName(dev->virtualControls + i);
|
|
|
|
item.iItem = i;
|
|
|
|
ListView_InsertItem(hWndList, &item);
|
|
|
|
}
|
|
|
|
SetTimer(hWnd, 1, 200, 0);
|
|
|
|
}
|
|
|
|
//break;
|
|
|
|
case WM_TIMER: {
|
|
|
|
hWndButtonProc.SetWndHandle(hWndList);
|
|
|
|
InitInfo info = {0, 1, hWnd, &hWndButtonProc};
|
|
|
|
dm->Update(&info);
|
|
|
|
LVITEMW item;
|
|
|
|
item.mask = LVIF_TEXT;
|
|
|
|
item.iSubItem = 1;
|
|
|
|
//ShowWindow(hWndList, 0);
|
|
|
|
//LockWindowUpdate(hWndList);
|
|
|
|
if (!dev->active) {
|
2019-04-04 01:05:06 +00:00
|
|
|
item.pszText = L"N/A";
|
2016-09-04 12:16:34 +00:00
|
|
|
for (i = 0; i < dev->numVirtualControls; i++) {
|
|
|
|
item.iItem = i;
|
|
|
|
ListView_SetItem(hWndList, &item);
|
|
|
|
}
|
|
|
|
fullRefresh = 1;
|
|
|
|
} else {
|
|
|
|
for (i = 0; i < dev->numVirtualControls; i++) {
|
|
|
|
if (fullRefresh || dev->virtualControlState[i] != dev->oldVirtualControlState[i]) {
|
2010-04-24 21:37:39 +00:00
|
|
|
|
2016-09-04 12:16:34 +00:00
|
|
|
VirtualControl *c = dev->virtualControls + i;
|
|
|
|
wchar_t temp[50];
|
|
|
|
int val = dev->virtualControlState[i];
|
|
|
|
if (c->uid & (UID_POV)) {
|
|
|
|
wsprintfW(temp, L"%i", val);
|
|
|
|
} else {
|
|
|
|
wchar_t *sign = L"";
|
|
|
|
if (val < 0) {
|
|
|
|
sign = L"-";
|
|
|
|
val = -val;
|
|
|
|
}
|
|
|
|
if ((c->uid & UID_AXIS) && val) {
|
|
|
|
val = val;
|
|
|
|
}
|
|
|
|
val = (int)floor(0.5 + val * 1000.0 / (double)FULLY_DOWN);
|
|
|
|
wsprintfW(temp, L"%s%i.%03i", sign, val / 1000, val % 1000);
|
|
|
|
}
|
|
|
|
item.pszText = temp;
|
|
|
|
item.iItem = i;
|
|
|
|
ListView_SetItem(hWndList, &item);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dm->PostRead();
|
|
|
|
fullRefresh = 0;
|
|
|
|
}
|
|
|
|
//LockWindowUpdate(0);
|
|
|
|
//ShowWindow(hWndList, 1);
|
|
|
|
//UpdateWindow(hWnd);
|
|
|
|
} break;
|
|
|
|
case WM_NOTIFY: {
|
|
|
|
NMLVKEYDOWN *n = (NMLVKEYDOWN *)lParam;
|
|
|
|
// Don't always get the notification when testing DirectInput non-keyboard devices.
|
|
|
|
// Don't get it (Or want it) when testing keyboards.
|
2016-11-30 12:39:12 +00:00
|
|
|
if (n->hdr.idFrom != IDC_DIAG_LIST || n->hdr.code != LVN_KEYDOWN || n->wVKey != VK_ESCAPE)
|
2016-09-04 12:16:34 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case WM_ACTIVATE:
|
|
|
|
if (uMsg == WM_ACTIVATE && wParam != WA_INACTIVE)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
|
|
KillTimer(hWnd, 1);
|
|
|
|
dm->ReleaseInput();
|
|
|
|
// Prevents reaching this branch again.
|
|
|
|
dev = 0;
|
|
|
|
EndDialog(hWnd, 1);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return 0;
|
2010-04-24 21:37:39 +00:00
|
|
|
}
|
|
|
|
|
2016-09-04 12:16:34 +00:00
|
|
|
void Diagnose(int id, HWND hWnd)
|
|
|
|
{
|
|
|
|
// init = 0;
|
|
|
|
dev = dm->devices[id];
|
|
|
|
for (int i = 0; i < dm->numDevices; i++) {
|
|
|
|
if (i != id)
|
|
|
|
dm->DisableDevice(i);
|
|
|
|
// Shouldn't be needed.
|
|
|
|
else
|
|
|
|
dm->EnableDevice(i);
|
|
|
|
}
|
|
|
|
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIAG), hWnd, DiagDialog);
|
|
|
|
ClearKeyQueue();
|
2010-04-24 21:37:39 +00:00
|
|
|
}
|