Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

534 lines
14 KiB

  1. //Copyright (c) 1998 - 2001 Microsoft Corporation
  2. #include "precomp.h"
  3. #include <commctrl.h>
  4. #include "utils.h"
  5. #include "fancypasting.h"
  6. extern HINSTANCE g_hInstance;
  7. void SetDeleteKeyStatus(int iValue) ;
  8. int GetDeleteKeyStatus(void) ;
  9. void MoveCaretRetail(int nID, HWND hwnd )
  10. {
  11. POINT Pt;
  12. int iCaretIndex ;
  13. DWORD dwNext = 0;
  14. TCHAR tcUserValue[ CHARS_IN_BATCH + 1];
  15. DWORD dwLen ;
  16. GetCaretPos(&Pt);
  17. iCaretIndex = (int) SendMessage(GetDlgItem(hwnd,nID), EM_CHARFROMPOS, 0, MAKELPARAM(Pt.x, Pt.y));
  18. GetDlgItemText(hwnd,nID, tcUserValue, CHARS_IN_BATCH+1);
  19. dwLen = _tcslen(tcUserValue);
  20. switch(iCaretIndex)
  21. {
  22. case 0: //Move to left edit box
  23. dwNext = -1 ;
  24. switch(nID)
  25. {
  26. case IDC_RETAILSPK2:
  27. dwNext = IDC_RETAILSPK1;
  28. break ;
  29. case IDC_RETAILSPK3:
  30. dwNext = IDC_RETAILSPK2;
  31. break ;
  32. case IDC_RETAILSPK4:
  33. dwNext = IDC_RETAILSPK3;
  34. break ;
  35. case IDC_RETAILSPK5:
  36. dwNext = IDC_RETAILSPK4;
  37. break ;
  38. }
  39. if (dwNext != -1 && dwLen == 0 && GetDeleteKeyStatus() == 0)
  40. {
  41. SetFocus(GetDlgItem(hwnd, dwNext));
  42. SendMessage(GetDlgItem(hwnd,dwNext),WM_KEYDOWN, VK_END,0);
  43. }
  44. break;
  45. case 5: //Move to right edit box
  46. dwNext = -1 ;
  47. switch(nID)
  48. {
  49. case IDC_RETAILSPK1:
  50. dwNext = IDC_RETAILSPK2;
  51. break ;
  52. case IDC_RETAILSPK2:
  53. dwNext = IDC_RETAILSPK3;
  54. break ;
  55. case IDC_RETAILSPK3:
  56. dwNext = IDC_RETAILSPK4;
  57. break ;
  58. case IDC_RETAILSPK4:
  59. dwNext = IDC_RETAILSPK5;
  60. break ;
  61. }
  62. if (dwNext != -1)
  63. {
  64. SetFocus(GetDlgItem(hwnd, dwNext));
  65. SendMessage(GetDlgItem(hwnd,dwNext),WM_KEYDOWN, VK_HOME,0);
  66. }
  67. break;
  68. }
  69. }
  70. LRW_DLG_INT CALLBACK
  71. RetailSPKProc(
  72. IN HWND hwnd,
  73. IN UINT uMsg,
  74. IN WPARAM wParam,
  75. IN LPARAM lParam
  76. )
  77. {
  78. DWORD dwRetCode = ERROR_SUCCESS;
  79. DWORD dwNextPage = 0;
  80. BOOL bStatus = TRUE;
  81. HWND hWndListView = GetDlgItem(hwnd, IDC_RETAILSPKLIST );
  82. HWND hSPKField = GetDlgItem(hwnd, IDC_RETAILSPK1);
  83. PageInfo *pi = (PageInfo *)LRW_GETWINDOWLONG( hwnd, LRW_GWL_USERDATA );
  84. int lo = LOWORD(wParam);
  85. int hi = HIWORD(wParam);
  86. if(hi == 1)
  87. {
  88. int b = 0;
  89. }
  90. switch (uMsg)
  91. {
  92. case WM_INITDIALOG:
  93. pi = (PageInfo *)((LPPROPSHEETPAGE)lParam)->lParam;
  94. LRW_SETWINDOWLONG( hwnd, LRW_GWL_USERDATA, (LRW_LONG_PTR)pi );
  95. SendDlgItemMessage (hwnd, IDC_RETAILSPK1, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  96. SendDlgItemMessage (hwnd, IDC_RETAILSPK2, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  97. SendDlgItemMessage (hwnd, IDC_RETAILSPK3, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  98. SendDlgItemMessage (hwnd, IDC_RETAILSPK4, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  99. SendDlgItemMessage (hwnd, IDC_RETAILSPK5, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  100. //Setup columns in list view
  101. {
  102. LV_COLUMN lvColumn;
  103. TCHAR lpszHeader[ 128];
  104. lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
  105. lvColumn.fmt = LVCFMT_LEFT;
  106. lvColumn.cx = 225;
  107. LoadString(GetInstanceHandle(), IDS_RETAIL_HEADERSPK, lpszHeader, sizeof(lpszHeader)/sizeof(TCHAR));
  108. lvColumn.pszText = lpszHeader;
  109. ListView_InsertColumn(hWndListView, 0, &lvColumn);
  110. lvColumn.cx = 80;
  111. LoadString(GetInstanceHandle(), IDS_RETAIL_HEADERSTATUS, lpszHeader, sizeof(lpszHeader)/sizeof(TCHAR));
  112. lvColumn.pszText = lpszHeader;
  113. ListView_InsertColumn(hWndListView, 1, &lvColumn);
  114. lvColumn.cx = 160;
  115. LoadString(GetInstanceHandle(), IDS_PRODUCT_TYPE, lpszHeader, sizeof(lpszHeader)/sizeof(TCHAR));
  116. lvColumn.pszText = lpszHeader;
  117. ListView_InsertColumn(hWndListView, 2, &lvColumn);
  118. // Now that this is done, pre-populate the List Control from the Internal
  119. // List, if any
  120. ListView_SetItemCount(hWndListView, MAX_RETAILSPKS_IN_BATCH);
  121. }
  122. break;
  123. case WM_SHOWWINDOW:
  124. if (wParam)
  125. {
  126. // List is being shown
  127. // Clean-it up & Load the list view
  128. ListView_DeleteAllItems(hWndListView);
  129. LoadUnfinishedFromList(hWndListView);
  130. }
  131. break;
  132. case WM_COMMAND:
  133. if (HIWORD(wParam) == EN_CHANGE)
  134. {
  135. MoveCaretRetail(LOWORD(wParam), hwnd ) ;
  136. }
  137. if (HIWORD(wParam) == EN_UPDATE)
  138. {
  139. if (GetKeyState(VK_DELETE) == -128)
  140. SetDeleteKeyStatus(1) ;
  141. else
  142. SetDeleteKeyStatus(0) ;
  143. }
  144. else
  145. {
  146. switch ( LOWORD(wParam) ) //from which control
  147. {
  148. case IDC_ADDBUTTON:
  149. if (HIWORD(wParam) == BN_CLICKED)
  150. {
  151. TCHAR lpVal[ LR_RETAILSPK_LEN+1];
  152. GetDlgItemText(hwnd,IDC_RETAILSPK1, lpVal, CHARS_IN_BATCH+1);
  153. GetDlgItemText(hwnd,IDC_RETAILSPK2, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  154. GetDlgItemText(hwnd,IDC_RETAILSPK3, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  155. GetDlgItemText(hwnd,IDC_RETAILSPK4, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  156. GetDlgItemText(hwnd,IDC_RETAILSPK5, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  157. if ((dwRetCode=AddRetailSPKToList(hWndListView, lpVal)) != ERROR_SUCCESS)
  158. {
  159. // Could not validate the SPK because of SOME reason
  160. LRMessageBox(hwnd,dwRetCode);
  161. if(dwRetCode == IDS_ERR_TOOMANYSPK)
  162. {
  163. // Blank out the field & continue
  164. SetDlgItemText(hwnd, IDC_RETAILSPK1, _TEXT(""));
  165. SetDlgItemText(hwnd, IDC_RETAILSPK2, _TEXT(""));
  166. SetDlgItemText(hwnd, IDC_RETAILSPK3, _TEXT(""));
  167. SetDlgItemText(hwnd, IDC_RETAILSPK4, _TEXT(""));
  168. SetDlgItemText(hwnd, IDC_RETAILSPK5, _TEXT(""));
  169. }
  170. }
  171. else
  172. {
  173. // Blank out the field & continue
  174. SetDlgItemText(hwnd, IDC_RETAILSPK1, _TEXT(""));
  175. SetDlgItemText(hwnd, IDC_RETAILSPK2, _TEXT(""));
  176. SetDlgItemText(hwnd, IDC_RETAILSPK3, _TEXT(""));
  177. SetDlgItemText(hwnd, IDC_RETAILSPK4, _TEXT(""));
  178. SetDlgItemText(hwnd, IDC_RETAILSPK5, _TEXT(""));
  179. }
  180. SetFocus(hSPKField);
  181. }
  182. break;
  183. case IDC_DELETEBUTTON:
  184. if (HIWORD(wParam) == BN_CLICKED)
  185. {
  186. TCHAR lpVal[ LR_RETAILSPK_LEN+1];
  187. int nItem = ListView_GetSelectionMark(hWndListView);
  188. if (nItem != -1)
  189. {
  190. LVITEM lvItem;
  191. lvItem.mask = LVIF_TEXT;
  192. lvItem.iItem = nItem;
  193. lvItem.iSubItem = 0;
  194. lvItem.pszText = lpVal;
  195. lvItem.cchTextMax = LR_RETAILSPK_LEN+1;
  196. ListView_GetItem(hWndListView, &lvItem);
  197. // Something is selected, Delete it
  198. ListView_DeleteItem(hWndListView, nItem);
  199. DeleteRetailSPKFromList(lvItem.pszText);
  200. ListView_SetSelectionMark(hWndListView, -1);
  201. }
  202. SetFocus(hSPKField);
  203. }
  204. break;
  205. case IDC_EDITBUTTON:
  206. if (HIWORD(wParam) == BN_CLICKED)
  207. {
  208. CString sModifiedRetailSPK;
  209. TCHAR lpVal[ LR_RETAILSPK_LEN+1];
  210. int nItem = ListView_GetSelectionMark(hWndListView);
  211. if (nItem != -1 )
  212. {
  213. LVITEM lvItem;
  214. lvItem.mask = LVIF_TEXT;
  215. lvItem.iItem = nItem;
  216. lvItem.iSubItem = 0;
  217. lvItem.pszText = lpVal;
  218. lvItem.cchTextMax = LR_RETAILSPK_LEN+1;
  219. ListView_GetItem(hWndListView, &lvItem);
  220. SetModifiedRetailSPK(lvItem.pszText);
  221. //Show dialog box to Edit the SPK
  222. if ( DialogBox ( GetInstanceHandle(),
  223. MAKEINTRESOURCE(IDD_EDIT_RETAILSPK),
  224. hwnd,
  225. EditRetailSPKDlgProc
  226. ) == IDOK )
  227. {
  228. //Get the modified SPK
  229. GetModifiedRetailSPK(sModifiedRetailSPK);
  230. ModifyRetailSPKFromList(lvItem.pszText,(LPTSTR)(LPCTSTR)sModifiedRetailSPK);
  231. ListView_SetItemText(hWndListView,nItem,0,(LPTSTR)(LPCTSTR)sModifiedRetailSPK);
  232. }
  233. ListView_SetSelectionMark(GetDlgItem(hwnd,IDC_RETAILSPKLIST),-1);
  234. }
  235. SetFocus(hSPKField);
  236. }
  237. break;
  238. case IDC_RETAILSPK1:
  239. if (HIWORD(wParam) == EN_MAXTEXT)
  240. InsertClipboardDataIntoIDFields(hwnd, IDC_RETAILSPK1, IDC_RETAILSPK5);
  241. break;
  242. }
  243. }
  244. break;
  245. case WM_DESTROY:
  246. LRW_SETWINDOWLONG( hwnd, LRW_GWL_USERDATA, NULL );
  247. break;
  248. case WM_NOTIFY:
  249. {
  250. BOOL bGoNextPage = TRUE ;
  251. LPNMHDR pnmh = (LPNMHDR)lParam;
  252. switch( pnmh->code )
  253. {
  254. case PSN_SETACTIVE:
  255. {
  256. DWORD dwStyle = BS_DEFPUSHBUTTON|BS_CENTER|BS_VCENTER|BS_NOTIFY|WS_GROUP;
  257. SendDlgItemMessage (hwnd, IDC_ADDBUTTON, BM_SETSTYLE,(WPARAM)LOWORD(dwStyle), MAKELPARAM(TRUE, 0));
  258. PropSheet_SetWizButtons( GetParent( hwnd ), PSWIZB_NEXT | PSWIZB_BACK);
  259. }
  260. break;
  261. case PSN_WIZNEXT:
  262. TCHAR lpVal[ LR_RETAILSPK_LEN+1];
  263. if (GetFocus() == GetDlgItem(hwnd,IDC_ADDBUTTON)) //Fix bug #312
  264. {
  265. bGoNextPage = FALSE;
  266. }
  267. // Read the SPK from the Field
  268. GetDlgItemText(hwnd,IDC_RETAILSPK1, lpVal, CHARS_IN_BATCH+1);
  269. GetDlgItemText(hwnd,IDC_RETAILSPK2, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  270. GetDlgItemText(hwnd,IDC_RETAILSPK3, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  271. GetDlgItemText(hwnd,IDC_RETAILSPK4, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  272. GetDlgItemText(hwnd,IDC_RETAILSPK5, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  273. if (lstrlen(lpVal) != 0)
  274. {
  275. dwRetCode = AddRetailSPKToList(hWndListView, lpVal);
  276. if (dwRetCode != IDS_ERR_TOOMANYSPK && dwRetCode != ERROR_SUCCESS)
  277. {
  278. // Could not validate the SPK because of SOME reason
  279. dwNextPage = IDD_DLG_RETAILSPK;
  280. LRMessageBox(hwnd, dwRetCode);
  281. SetFocus(hSPKField);
  282. }
  283. else
  284. {
  285. SetDlgItemText(hwnd, IDC_RETAILSPK1, _TEXT(""));
  286. SetDlgItemText(hwnd, IDC_RETAILSPK2, _TEXT(""));
  287. SetDlgItemText(hwnd, IDC_RETAILSPK3, _TEXT(""));
  288. SetDlgItemText(hwnd, IDC_RETAILSPK4, _TEXT(""));
  289. SetDlgItemText(hwnd, IDC_RETAILSPK5, _TEXT(""));
  290. if (bGoNextPage == FALSE)
  291. {
  292. dwNextPage = IDD_DLG_RETAILSPK;
  293. SetFocus(hSPKField);
  294. }
  295. else
  296. dwNextPage = IDD_PROGRESS2;
  297. }
  298. }
  299. else if (ListView_GetItemCount(hWndListView) <= 0)
  300. {
  301. LRMessageBox(hwnd, IDS_NOSPKSTOPROCESS);
  302. dwNextPage = IDD_DLG_RETAILSPK;
  303. }
  304. else
  305. {
  306. dwNextPage = IDD_PROGRESS2;
  307. LRPush(IDD_DLG_RETAILSPK);
  308. }
  309. if (dwNextPage == IDD_PROGRESS2)
  310. {
  311. dwRetCode = ShowProgressBox(hwnd, ProcessThread, 0, 0, 0);
  312. LRPush( IDD_DLG_RETAILSPK );
  313. }
  314. LRW_SETWINDOWLONG(hwnd, LRW_DWL_MSGRESULT, dwNextPage);
  315. bStatus = -1;
  316. break;
  317. case PSN_WIZBACK:
  318. dwNextPage = LRPop();
  319. LRW_SETWINDOWLONG(hwnd, LRW_DWL_MSGRESULT, dwNextPage);
  320. bStatus = -1;
  321. break;
  322. case NM_KILLFOCUS:
  323. if(pnmh->idFrom == IDC_RETAILSPKLIST && GetFocus() != GetDlgItem(hwnd,IDC_ADDBUTTON) &&
  324. GetFocus() != GetDlgItem(hwnd,IDC_EDITBUTTON) && GetFocus() != GetDlgItem(hwnd,IDC_DELETEBUTTON))
  325. {
  326. ListView_SetSelectionMark(GetDlgItem(hwnd,IDC_RETAILSPKLIST),-1);
  327. }
  328. break;
  329. default:
  330. bStatus = FALSE;
  331. break;
  332. }
  333. }
  334. break;
  335. default:
  336. bStatus = FALSE;
  337. break;
  338. }
  339. return bStatus;
  340. }
  341. LRW_DLG_INT CALLBACK EditRetailSPKDlgProc( IN HWND hwndDlg, // handle to dialog box
  342. IN UINT uMsg, // message
  343. IN WPARAM wParam, // first message parameter
  344. IN LPARAM lParam // second message parameter
  345. )
  346. {
  347. BOOL bRetCode = FALSE;
  348. TCHAR lpVal[ LR_RETAILSPK_LEN+1];
  349. switch ( uMsg )
  350. {
  351. case WM_INITDIALOG:
  352. {
  353. CString sFullRetailSPK;
  354. CString sSPK1,sSPK2,sSPK3,sSPK4,sSPK5;
  355. int nIndex = 0;
  356. sFullRetailSPK.Empty();
  357. sSPK1.Empty();
  358. sSPK2.Empty();
  359. sSPK3.Empty();
  360. sSPK4.Empty();
  361. sSPK5.Empty();
  362. GetModifiedRetailSPK(sFullRetailSPK);
  363. sSPK1 = sFullRetailSPK.Mid(nIndex,CHARS_IN_BATCH);
  364. nIndex += CHARS_IN_BATCH;
  365. sSPK2 = sFullRetailSPK.Mid(nIndex,CHARS_IN_BATCH);
  366. nIndex += CHARS_IN_BATCH;
  367. sSPK3 = sFullRetailSPK.Mid(nIndex,CHARS_IN_BATCH);
  368. nIndex += CHARS_IN_BATCH;
  369. sSPK4 = sFullRetailSPK.Mid(nIndex,CHARS_IN_BATCH);
  370. nIndex += CHARS_IN_BATCH;
  371. sSPK5 = sFullRetailSPK.Mid(nIndex,CHARS_IN_BATCH);
  372. SendDlgItemMessage (hwndDlg, IDC_RETAILSPK1, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  373. SendDlgItemMessage (hwndDlg, IDC_RETAILSPK2, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  374. SendDlgItemMessage (hwndDlg, IDC_RETAILSPK3, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  375. SendDlgItemMessage (hwndDlg, IDC_RETAILSPK4, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  376. SendDlgItemMessage (hwndDlg, IDC_RETAILSPK5, EM_SETLIMITTEXT, CHARS_IN_BATCH,0);
  377. SetDlgItemText(hwndDlg, IDC_RETAILSPK1, sSPK1);
  378. SetDlgItemText(hwndDlg, IDC_RETAILSPK2, sSPK2);
  379. SetDlgItemText(hwndDlg, IDC_RETAILSPK3, sSPK3);
  380. SetDlgItemText(hwndDlg, IDC_RETAILSPK4, sSPK4);
  381. SetDlgItemText(hwndDlg, IDC_RETAILSPK5, sSPK5);
  382. bRetCode = TRUE;
  383. }
  384. break;
  385. case WM_COMMAND:
  386. if (HIWORD(wParam) == EN_CHANGE)
  387. {
  388. MoveCaretRetail(LOWORD(wParam), hwndDlg ) ;
  389. }
  390. if (HIWORD(wParam) == EN_UPDATE)
  391. {
  392. if (GetKeyState(VK_DELETE) == -128)
  393. SetDeleteKeyStatus(1) ;
  394. else
  395. SetDeleteKeyStatus(0) ;
  396. }
  397. else
  398. {
  399. switch ( LOWORD(wParam) ) //from which control
  400. {
  401. case IDOK:
  402. if (HIWORD(wParam) == BN_CLICKED)
  403. {
  404. DWORD dwRetCode = ERROR_SUCCESS;
  405. CString sOldRetailSPK;
  406. GetModifiedRetailSPK(sOldRetailSPK);
  407. GetDlgItemText(hwndDlg,IDC_RETAILSPK1, lpVal, CHARS_IN_BATCH+1);
  408. GetDlgItemText(hwndDlg,IDC_RETAILSPK2, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  409. GetDlgItemText(hwndDlg,IDC_RETAILSPK3, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  410. GetDlgItemText(hwndDlg,IDC_RETAILSPK4, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  411. GetDlgItemText(hwndDlg,IDC_RETAILSPK5, lpVal+lstrlen(lpVal), CHARS_IN_BATCH+1);
  412. //Set the new spk only if changed
  413. if(_tcsicmp(sOldRetailSPK,(LPCTSTR)lpVal))
  414. {
  415. dwRetCode = ValidateRetailSPK(lpVal);
  416. if(dwRetCode != ERROR_SUCCESS)
  417. {
  418. LRMessageBox(hwndDlg, dwRetCode);
  419. return TRUE;
  420. }
  421. SetModifiedRetailSPK(lpVal);
  422. }
  423. EndDialog(hwndDlg, IDOK);
  424. bRetCode = TRUE;
  425. }
  426. break;
  427. case IDCANCEL:
  428. if (HIWORD(wParam) == BN_CLICKED)
  429. {
  430. EndDialog(hwndDlg, IDCANCEL);
  431. bRetCode = TRUE;
  432. }
  433. default:
  434. break;
  435. }
  436. }
  437. break;
  438. default:
  439. break;
  440. }
  441. return bRetCode;
  442. }