windows-nt/Source/XPSP1/NT/drivers/wdm/input/tabletpc/cpl/gesture.c
2020-09-26 16:20:57 +08:00

305 lines
8.7 KiB
C

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
gesture.c
Abstract: Tablet PC Gesture Property Sheet module.
Environment:
User mode
Author:
Michael Tsang (MikeTs) 20-Apr-2000
Revision History:
--*/
#include "pch.h"
GESTURE_SETTINGS gGestureSettings = {0};
int giGestureControls[] =
{
IDC_GESTUREMAP_GROUPBOX,
IDC_UPSPIKE_TEXT,
IDC_UPSPIKE,
IDC_DOWNSPIKE_TEXT,
IDC_DOWNSPIKE,
IDC_LEFTSPIKE_TEXT,
IDC_LEFTSPIKE,
IDC_RIGHTSPIKE_TEXT,
IDC_RIGHTSPIKE,
0
};
COMBOBOX_STRING GestureComboStringTable[] =
{
GestureNoAction, IDS_GESTCOMBO_NONE,
PopupSuperTIP, IDS_GESTCOMBO_POPUP_SUPERTIP,
PopupMIP, IDS_GESTCOMBO_POPUP_MIP,
0, 0
};
int giGestureComboIDs[] =
{
IDC_UPSPIKE,
IDC_DOWNSPIKE,
IDC_LEFTSPIKE,
IDC_RIGHTSPIKE
};
DWORD gGestureHelpIDs[] =
{
IDC_ENABLE_GESTURE, IDH_GESTURE_MAP,
IDC_UPSPIKE, IDH_GESTURE_MAP,
IDC_DOWNSPIKE, IDH_GESTURE_MAP,
IDC_LEFTSPIKE, IDH_GESTURE_MAP,
IDC_RIGHTSPIKE, IDH_GESTURE_MAP,
0, 0
};
/*****************************************************************************
*
* @doc EXTERNAL
*
* @func INT_PTR | GestureDlgProc |
* Dialog procedure for the Gesture map page.
*
* @parm IN HWND | hwnd | Window handle.
* @parm IN UINT | uMsg | Message.
* @parm IN WPARAM | wParam | Word Parameter.
* @parm IN LPARAM | lParam | Long Parameter.
*
* @rvalue Return value depends on the message.
*
*****************************************************************************/
INT_PTR APIENTRY
GestureDlgProc(
IN HWND hwnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
TRACEPROC("GestureDlgProc", 2)
INT_PTR rc = FALSE;
TRACEENTER(("(hwnd=%p,Msg=%s,wParam=%x,lParam=%x)\n",
hwnd, LookupName(uMsg, WMMsgNames), wParam, lParam));
switch (uMsg)
{
case WM_INITDIALOG:
rc = InitGesturePage(hwnd);
if (rc == FALSE)
{
EnableWindow(hwnd, FALSE);
}
break;
case WM_NOTIFY:
{
NMHDR FAR *lpnm = (NMHDR FAR *)lParam;
switch (lpnm->code)
{
case PSN_APPLY:
RPC_TRY("TabSrvSetGestureSettings",
rc = TabSrvSetGestureSettings(ghBinding,
&gGestureSettings));
break;
}
break;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
int iGestureMapping;
int i;
case IDC_ENABLE_GESTURE:
gGestureSettings.dwfFeatures &=
~GESTURE_FEATURE_RECOG_ENABLED;
if (IsDlgButtonChecked(hwnd, IDC_ENABLE_GESTURE))
{
gGestureSettings.dwfFeatures |=
GESTURE_FEATURE_RECOG_ENABLED;
}
EnableDlgControls(hwnd,
giGestureControls,
(gGestureSettings.dwfFeatures &
GESTURE_FEATURE_RECOG_ENABLED) != 0);
SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0);
break;
case IDC_UPSPIKE:
i = UP_SPIKE;
goto GestureCommon;
case IDC_DOWNSPIKE:
i = DOWN_SPIKE;
goto GestureCommon;
case IDC_LEFTSPIKE:
i = LEFT_SPIKE;
goto GestureCommon;
case IDC_RIGHTSPIKE:
i = RIGHT_SPIKE;
GestureCommon:
switch (HIWORD(wParam))
{
case CBN_SELCHANGE:
iGestureMapping =
(int)SendMessage(GetDlgItem(hwnd,
LOWORD(wParam)),
CB_GETCURSEL,
0,
0);
if (iGestureMapping !=
gGestureSettings.GestureMap[i])
{
//
// Mapping has changed, mark the property
// sheet dirty.
//
gGestureSettings.GestureMap[i] =
iGestureMapping;
SendMessage(GetParent(hwnd),
PSM_CHANGED,
(WPARAM)hwnd,
0);
rc = TRUE;
}
break;
}
break;
case IDC_ENABLE_PRESSHOLD:
gGestureSettings.dwfFeatures &=
~GESTURE_FEATURE_PRESSHOLD_ENABLED;
if (IsDlgButtonChecked(hwnd, IDC_ENABLE_PRESSHOLD))
{
gGestureSettings.dwfFeatures |=
GESTURE_FEATURE_PRESSHOLD_ENABLED;
}
SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0);
break;
#ifdef DEBUG
case IDC_ENABLE_MOUSE:
gGestureSettings.dwfFeatures &=
~GESTURE_FEATURE_MOUSE_ENABLED;
if (IsDlgButtonChecked(hwnd, IDC_ENABLE_MOUSE))
{
gGestureSettings.dwfFeatures |=
GESTURE_FEATURE_MOUSE_ENABLED;
}
SendMessage(GetParent(hwnd), PSM_CHANGED, (WPARAM)hwnd, 0);
break;
#endif
}
break;
case WM_HELP:
WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle,
TEXT("tabletpc.hlp"),
HELP_WM_HELP,
(DWORD_PTR)gGestureHelpIDs);
break;
case WM_CONTEXTMENU:
WinHelp((HWND)wParam,
TEXT("tabletpc.hlp"),
HELP_CONTEXTMENU,
(DWORD_PTR)gGestureHelpIDs);
break;
}
TRACEEXIT(("=%x\n", rc));
return rc;
} //GestureDlgProc
/*****************************************************************************
*
* @doc INTERNAL
*
* @func BOOL | InitGesturePage |
* Initialize the Gesture property page.
*
* @parm IN HWND | hwnd | Window handle.
*
* @rvalue SUCCESS | Returns TRUE.
* @rvalue FAILURE | Returns FALSE.
*
*****************************************************************************/
BOOL
InitGesturePage(
IN HWND hwnd
)
{
TRACEPROC("InitGesturePage", 2)
BOOL rc;
TRACEENTER(("(hwnd=%x)\n", hwnd));
RPC_TRY("TabSrvGetGestureSettings",
rc = TabSrvGetGestureSettings(ghBinding,
&gGestureSettings));
if (rc == TRUE)
{
int i;
CheckDlgButton(hwnd,
IDC_ENABLE_GESTURE,
(gGestureSettings.dwfFeatures &
GESTURE_FEATURE_RECOG_ENABLED) != 0);
EnableDlgControls(hwnd,
giGestureControls,
(gGestureSettings.dwfFeatures &
GESTURE_FEATURE_RECOG_ENABLED) != 0);
CheckDlgButton(hwnd,
IDC_ENABLE_PRESSHOLD,
(gGestureSettings.dwfFeatures &
GESTURE_FEATURE_PRESSHOLD_ENABLED)
!= 0);
#ifdef DEBUG
CheckDlgButton(hwnd,
IDC_ENABLE_MOUSE,
(gGestureSettings.dwfFeatures &
GESTURE_FEATURE_MOUSE_ENABLED)
!= 0);
#endif
for (i = 0; i < NUM_GESTURES; i++)
{
InsertComboBoxStrings(hwnd,
giGestureComboIDs[i],
GestureComboStringTable);
SendDlgItemMessage(hwnd,
giGestureComboIDs[i],
CB_SETCURSEL,
gGestureSettings.GestureMap[i],
0);
}
}
else
{
ErrorMsg(IDSERR_TABSRV_GETGESTURESETTINGS);
}
TRACEEXIT(("=%x\n", rc));
return rc;
} //InitGesturePage