[5/8] dinput: Added display of available actions to ConfigureDevices dialog (try 2)
Lucas Fialho Zawacki
lfzawacki at gmail.com
Thu Aug 4 12:22:19 CDT 2011
---
dlls/dinput/config.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/dlls/dinput/config.c b/dlls/dinput/config.c
index 9c66c01..939f9ec 100644
--- a/dlls/dinput/config.c
+++ b/dlls/dinput/config.c
@@ -111,6 +111,11 @@ static void init_listview_columns(HWND dialog)
SendDlgItemMessageW(dialog, IDC_DEVICEOBJECTSLIST, LVM_INSERTCOLUMNW, 1, (LPARAM) &listColumn);
}
+static int lv_get_cur_item(HWND dialog)
+{
+ return SendDlgItemMessageW(dialog, IDC_DEVICEOBJECTSLIST, LVM_GETNEXTITEM, -1, LVNI_SELECTED);
+}
+
static void lv_set_item_text(HWND dialog, int item, int subItem, WCHAR *text)
{
LVITEMW lvItem;
@@ -208,6 +213,35 @@ static void destroy_devices(DIDevicesData *data)
HeapFree(GetProcessHeap(), 0, data->devices);
}
+static void show_suitable_actions(HWND dialog, DeviceData* device, LPDIACTIONFORMATW lpdiaf)
+{
+ int i, added = 0;
+ int obj = lv_get_cur_item(dialog);
+
+ if (obj < 0) return;
+
+ SendDlgItemMessageW(dialog, IDC_ACTIONLIST, LB_RESETCONTENT, 0, 0);
+
+ for (i=0; i < lpdiaf->dwNumActions; i++)
+ {
+ /* Skip keyboard actions for non keyboards */
+ if (GET_DIDEVICE_TYPE(device->ddi.dwDevType) != DI8DEVTYPE_KEYBOARD &&
+ (lpdiaf->rgoAction[i].dwSemantic & DIKEYBOARD_MASK) == DIKEYBOARD_MASK) continue;
+
+ /* Skip mouse actions for non mouses */
+ if (GET_DIDEVICE_TYPE(device->ddi.dwDevType) != DI8DEVTYPE_MOUSE &&
+ (lpdiaf->rgoAction[i].dwSemantic & DIMOUSE_MASK) == DIMOUSE_MASK) continue;
+
+ /* Add action string and index in the action format to the list entry */
+ if (DIDFT_GETINSTANCE(lpdiaf->rgoAction[i].dwSemantic) & DIDFT_GETTYPE(device->ddo[obj].dwType))
+ {
+ SendDlgItemMessageW(dialog, IDC_ACTIONLIST, LB_ADDSTRING, 0, (LPARAM)lpdiaf->rgoAction[i].lptszActionName);
+ SendDlgItemMessageW(dialog, IDC_ACTIONLIST, LB_SETITEMDATA, added, (LPARAM) i);
+ added++;
+ }
+ }
+}
+
static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND dialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static LPDIACTIONFORMATW lpdiaf;
@@ -226,6 +260,18 @@ static INT_PTR CALLBACK ConfigureDevicesDlgProc(HWND dialog, UINT uMsg, WPARAM w
break;
+ case WM_NOTIFY:
+
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case LVN_ITEMCHANGED:
+ show_suitable_actions(dialog, get_cur_device(dialog, &devices_data), lpdiaf);
+ break;
+
+ }
+ break;
+
+
case WM_COMMAND:
switch( LOWORD( wParam ) )
--
1.7.0.4
More information about the wine-patches
mailing list