/* ------------------------------- infodlg.c -------------------------------- */ /* 11-25-91 DMH -- Dialog boxes to mediate cursor/extension info-boxes, */ /* 6/1/98 Napoli -- Added WTI_DDCTXS, WTI_DSCTXS */ /* -- Copied from wttest32 to mgrtest */ #include #include #include #include "wintab.h" #include "mgrtest.h" #define Abort() EndDialog(hDlg, -2) extern HANDLE hInst; #ifndef WIN32 #define TCHAR char #define wcscpy(a,b) strcpy((a),(b)) #define TEXT(a) (a) #endif BOOL CALLBACK CursInfoDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LONG lParam) { int cBaseCat; /* Base category -- cursors, devices, extensions? */ int cNumCats=0; int nNameCat=1; /* For all three the *_NAME Index is 1. &&&MAGIC&&&*/ int cSize; long nCat; TCHAR *szCatName; TCHAR PhraseBuf[40]; TCHAR TextBuf[40]; TCHAR szNameBuf[128]; lParam = lParam; /* Nuke warning */ switch (Msg) { default: return FALSE; case WM_INITDIALOG: cBaseCat = LOWORD(lParam); switch (cBaseCat) { default: EndDialog(hDlg, -2); break; case WTI_DDCTXS: case WTI_DSCTXS: case WTI_DEVICES: szCatName = TEXT("Device"); WTInfo(WTI_INTERFACE, IFC_NDEVICES, &cNumCats); if( cBaseCat == WTI_DDCTXS || cBaseCat == WTI_DSCTXS ) { WORD ver; if( !WTInfo(WTI_INTERFACE,IFC_SPECVERSION, &ver) || ((ver >> 8) <= 1 && (ver & 0xff) <= 10) ) { /* Apparently, this version of Wintab doesn't support WTI_DDCTXS or WTI_DSCTXS; return cNumCats, to indicate "default device" since no other categories actually exist. */ EndDialog(hDlg, cNumCats); return TRUE; } } break; case WTI_CURSORS: szCatName = TEXT("Cursor"); WTInfo(WTI_INTERFACE, IFC_NCURSORS, &cNumCats); break; case WTI_EXTENSIONS: szCatName = TEXT("Extension"); WTInfo(WTI_INTERFACE, IFC_NEXTENSIONS, &cNumCats); break; /* Failure to support IFC_N* is handled later. */ } /* Switch on lParam */ if (cNumCats == 1) EndDialog(hDlg, 0); /*&&& Send message to secret field, indicating this window's cBaseCat. Also, set window's title field and caption. */ GetWindowText(hDlg, TextBuf, sizeof(TextBuf)); wsprintf(PhraseBuf, TextBuf, (LPSTR)szCatName); SetWindowText(hDlg, PhraseBuf); GetDlgItemText(hDlg, LBC_TITLE, TextBuf, sizeof(TextBuf)); wsprintf(PhraseBuf, TextBuf, (LPSTR)szCatName); SetDlgItemText(hDlg, LBC_TITLE, PhraseBuf); SetDlgItemInt(hDlg, LBC_BASECAT, cBaseCat, FALSE); /* How many items are there? Catch un-reported items.*/ while (WTInfo(cBaseCat + cNumCats, 0, NULL)) cNumCats++; while (cNumCats > 0 && !WTInfo(cBaseCat + cNumCats-1, 0, NULL)) cNumCats--; if (cNumCats == 0) { wsprintf(PhraseBuf, TEXT("No %ss defined!"), (LPSTR)szCatName); MessageBox(hInst, PhraseBuf, TEXT("Info Boxes"), MB_ICONINFORMATION | MB_OK); EndDialog(hDlg, -2); return TRUE; } /* Fill list Box */ for (nCat = 0; nCat < cNumCats; nCat++) { cSize = WTInfo(cBaseCat + (int)nCat, CSR_NAME, (LPVOID) szNameBuf); if (cSize == 0 || szNameBuf[0] == '\0') wsprintf(szNameBuf, TEXT("%s #%d"), (LPSTR)szCatName,(int)nCat); cSize = (int)SendDlgItemMessage(hDlg, LBC_LISTBOX, LB_INSERTSTRING, (WPARAM)-1, (DWORD)(LPSTR)szNameBuf); if (cSize == LB_ERR || cSize == LB_ERRSPACE) { MessageBox(hInst, TEXT("Couldn't set an item name!"), TEXT("Info Boxes"), MB_ICONINFORMATION | MB_OK); /* EndDialog(hDlg, -2); return TRUE; /* Abort on failure */ } /* Abort on failure */ else ; } /* for each cursor */ if( cBaseCat == WTI_DDCTXS || cBaseCat == WTI_DSCTXS ) { /* Give a 'Default Device' choice, to fall back to WTI_DEFCONTEXT, WTI_DEFSYSCTX */ wcscpy((wchar_t *)szNameBuf, (wchar_t *)TEXT("Default Device")); SendDlgItemMessage(hDlg, LBC_LISTBOX, LB_INSERTSTRING, (WPARAM)-1, (DWORD)(LPSTR)szNameBuf); } /* Default selection was current cursor. Now, skipping the whole thing, because there can be multiple active cursors! */ nCat = 0; /* Index of 0, First item. */ if (LB_ERR == (int)SendDlgItemMessage(hDlg, LBC_LISTBOX, LB_SETCURSEL, (int)nCat, (long)NULL)) MessageBox(hInst, TEXT("Couldn't set current selection!"), TEXT("Info Boxes"), MB_ICONINFORMATION | MB_OK); return TRUE; case WM_COMMAND: switch (wParam) { default: return FALSE; case LBC_LISTBOX: if (HIWORD(lParam)!=LBN_DBLCLK) return FALSE; // fall through on double click! case IDOK: cBaseCat = GetDlgItemInt(hDlg, LBC_BASECAT, NULL, FALSE); nCat = (int)SendDlgItemMessage(hDlg, LBC_LISTBOX, LB_GETCURSEL, 0, (long)NULL); EndDialog(hDlg, (int)nCat); return TRUE; case IDCANCEL: EndDialog(hDlg, -1); return TRUE; } /* Switch wParam on WM_COMMAND */ } /* switch Msg number */ return FALSE; } /* CursInfoDlgProc */