PPageAccelTbl.cpp
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:32k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2006 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. // PPageAccelTbl.cpp : implementation file
  22. //
  23. #include "stdafx.h"
  24. #include "mplayerc.h"
  25. #include "PPageAccelTbl.h"
  26. // CPPageAccelTbl dialog
  27. IMPLEMENT_DYNAMIC(CPPageAccelTbl, CPPageBase)
  28. CPPageAccelTbl::CPPageAccelTbl()
  29. : CPPageBase(CPPageAccelTbl::IDD, CPPageAccelTbl::IDD)
  30. , m_list(0)
  31. , m_counter(0)
  32. , m_fWinLirc(FALSE)
  33. , m_WinLircLink(_T("http://winlirc.sourceforge.net/"))
  34. , m_fUIce(FALSE)
  35. , m_UIceLink(_T("http://www.mediatexx.com/"))
  36. {
  37. }
  38. CPPageAccelTbl::~CPPageAccelTbl()
  39. {
  40. }
  41. BOOL CPPageAccelTbl::PreTranslateMessage(MSG* pMsg)
  42. {
  43. if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN 
  44. && (pMsg->hwnd == m_WinLircEdit.m_hWnd || pMsg->hwnd == m_UIceEdit.m_hWnd))
  45. {
  46. OnApply();
  47. return TRUE;
  48. }
  49. return __super::PreTranslateMessage(pMsg);
  50. }
  51. void CPPageAccelTbl::SetupList()
  52. {
  53. for(int row = 0; row < m_list.GetItemCount(); row++)
  54. {
  55. wmcmd& wc = m_wmcmds.GetAt((POSITION)m_list.GetItemData(row));
  56. CString mod = MakeAccelModLabel(wc.fVirt);
  57. m_list.SetItemText(row, COL_MOD, mod);
  58. CString key = MakeAccelVkeyLabel(wc.key, wc.fVirt&FVIRTKEY);
  59. m_list.SetItemText(row, COL_KEY, key);
  60. CString type = (wc.fVirt&FVIRTKEY)?_T("VIRTKEY"):_T("ASCII");
  61. m_list.SetItemText(row, COL_TYPE, type);
  62. CString id;
  63. id.Format(_T("%d"), wc.cmd);
  64. m_list.SetItemText(row, COL_ID, id);
  65. m_list.SetItemText(row, COL_MOUSE, MakeMouseButtonLabel(wc.mouse));
  66. m_list.SetItemText(row, COL_APPCMD, MakeAppCommandLabel(wc.appcmd));
  67. m_list.SetItemText(row, COL_RMCMD, CString(wc.rmcmd));
  68. CString repcnt;
  69. repcnt.Format(_T("%d"), wc.rmrepcnt);
  70. m_list.SetItemText(row, COL_RMREPCNT, repcnt);
  71. }
  72. }
  73. CString CPPageAccelTbl::MakeAccelModLabel(BYTE fVirt)
  74. {
  75. CString str;
  76. if(fVirt&FCONTROL) {if(!str.IsEmpty()) str += _T(" + "); str += _T("Ctrl");}
  77. if(fVirt&FALT) {if(!str.IsEmpty()) str += _T(" + "); str += _T("Alt");}
  78. if(fVirt&FSHIFT) {if(!str.IsEmpty()) str += _T(" + "); str += _T("Shift");}
  79. if(str.IsEmpty()) str = _T("None");
  80. return(str);
  81. }
  82. CString CPPageAccelTbl::MakeAccelVkeyLabel(WORD key, bool fVirtKey)
  83. {
  84. CString str;
  85. if(fVirtKey)
  86. switch(key)
  87. {
  88. case VK_LBUTTON: str = _T("VK_LBUTTON"); break;
  89. case VK_RBUTTON: str = _T("VK_RBUTTON"); break;
  90. case VK_CANCEL: str = _T("VK_CANCEL"); break;
  91. case VK_MBUTTON: str = _T("VK_MBUTTON"); break;
  92. case VK_XBUTTON1: str = _T("VK_XBUTTON1"); break;
  93. case VK_XBUTTON2: str = _T("VK_XBUTTON2"); break;
  94. case VK_BACK: str = _T("VK_BACK"); break;
  95. case VK_TAB: str = _T("VK_TAB"); break;
  96. case VK_CLEAR: str = _T("VK_CLEAR"); break;
  97. case VK_RETURN: str = _T("VK_RETURN"); break;
  98. case VK_SHIFT: str = _T("VK_SHIFT"); break;
  99. case VK_CONTROL: str = _T("VK_CONTROL"); break;
  100. case VK_MENU: str = _T("VK_MENU"); break;
  101. case VK_PAUSE: str = _T("VK_PAUSE"); break;
  102. case VK_CAPITAL: str = _T("VK_CAPITAL"); break;
  103. // case VK_KANA: str = _T("VK_KANA"); break;
  104. // case VK_HANGEUL: str = _T("VK_HANGEUL"); break;
  105. case VK_HANGUL: str = _T("VK_HANGUL"); break;
  106. case VK_JUNJA: str = _T("VK_JUNJA"); break;
  107. case VK_FINAL: str = _T("VK_FINAL"); break;
  108. // case VK_HANJA: str = _T("VK_HANJA"); break;
  109. case VK_KANJI: str = _T("VK_KANJI"); break;
  110. case VK_ESCAPE: str = _T("VK_ESCAPE"); break;
  111. case VK_CONVERT: str = _T("VK_CONVERT"); break;
  112. case VK_NONCONVERT: str = _T("VK_NONCONVERT"); break;
  113. case VK_ACCEPT: str = _T("VK_ACCEPT"); break;
  114. case VK_MODECHANGE: str = _T("VK_MODECHANGE"); break;
  115. case VK_SPACE: str = _T("VK_SPACE"); break;
  116. case VK_PRIOR: str = _T("VK_PRIOR"); break;
  117. case VK_NEXT: str = _T("VK_NEXT"); break;
  118. case VK_END: str = _T("VK_END"); break;
  119. case VK_HOME: str = _T("VK_HOME"); break;
  120. case VK_LEFT: str = _T("VK_LEFT"); break;
  121. case VK_UP: str = _T("VK_UP"); break;
  122. case VK_RIGHT: str = _T("VK_RIGHT"); break;
  123. case VK_DOWN: str = _T("VK_DOWN"); break;
  124. case VK_SELECT: str = _T("VK_SELECT"); break;
  125. case VK_PRINT: str = _T("VK_PRINT"); break;
  126. case VK_EXECUTE: str = _T("VK_EXECUTE"); break;
  127. case VK_SNAPSHOT: str = _T("VK_SNAPSHOT"); break;
  128. case VK_INSERT: str = _T("VK_INSERT"); break;
  129. case VK_DELETE: str = _T("VK_DELETE"); break;
  130. case VK_HELP: str = _T("VK_HELP"); break;
  131. case VK_LWIN: str = _T("VK_LWIN"); break;
  132. case VK_RWIN: str = _T("VK_RWIN"); break;
  133. case VK_APPS: str = _T("VK_APPS"); break;
  134. case VK_SLEEP: str = _T("VK_SLEEP"); break;
  135. case VK_NUMPAD0: str = _T("VK_NUMPAD0"); break;
  136. case VK_NUMPAD1: str = _T("VK_NUMPAD1"); break;
  137. case VK_NUMPAD2: str = _T("VK_NUMPAD2"); break;
  138. case VK_NUMPAD3: str = _T("VK_NUMPAD3"); break;
  139. case VK_NUMPAD4: str = _T("VK_NUMPAD4"); break;
  140. case VK_NUMPAD5: str = _T("VK_NUMPAD5"); break;
  141. case VK_NUMPAD6: str = _T("VK_NUMPAD6"); break;
  142. case VK_NUMPAD7: str = _T("VK_NUMPAD7"); break;
  143. case VK_NUMPAD8: str = _T("VK_NUMPAD8"); break;
  144. case VK_NUMPAD9: str = _T("VK_NUMPAD9"); break;
  145. case VK_MULTIPLY: str = _T("VK_MULTIPLY"); break;
  146. case VK_ADD: str = _T("VK_ADD"); break;
  147. case VK_SEPARATOR: str = _T("VK_SEPARATOR"); break;
  148. case VK_SUBTRACT: str = _T("VK_SUBTRACT"); break;
  149. case VK_DECIMAL: str = _T("VK_DECIMAL"); break;
  150. case VK_DIVIDE: str = _T("VK_DIVIDE"); break;
  151. case VK_F1: str = _T("VK_F1"); break;
  152. case VK_F2: str = _T("VK_F2"); break;
  153. case VK_F3: str = _T("VK_F3"); break;
  154. case VK_F4: str = _T("VK_F4"); break;
  155. case VK_F5: str = _T("VK_F5"); break;
  156. case VK_F6: str = _T("VK_F6"); break;
  157. case VK_F7: str = _T("VK_F7"); break;
  158. case VK_F8: str = _T("VK_F8"); break;
  159. case VK_F9: str = _T("VK_F9"); break;
  160. case VK_F10: str = _T("VK_F10"); break;
  161. case VK_F11: str = _T("VK_F11"); break;
  162. case VK_F12: str = _T("VK_F12"); break;
  163. case VK_F13: str = _T("VK_F13"); break;
  164. case VK_F14: str = _T("VK_F14"); break;
  165. case VK_F15: str = _T("VK_F15"); break;
  166. case VK_F16: str = _T("VK_F16"); break;
  167. case VK_F17: str = _T("VK_F17"); break;
  168. case VK_F18: str = _T("VK_F18"); break;
  169. case VK_F19: str = _T("VK_F19"); break;
  170. case VK_F20: str = _T("VK_F20"); break;
  171. case VK_F21: str = _T("VK_F21"); break;
  172. case VK_F22: str = _T("VK_F22"); break;
  173. case VK_F23: str = _T("VK_F23"); break;
  174. case VK_F24: str = _T("VK_F24"); break;
  175. case VK_NUMLOCK: str = _T("VK_NUMLOCK"); break;
  176. case VK_SCROLL: str = _T("VK_SCROLL"); break;
  177. // case VK_OEM_NEC_EQUAL: str = _T("VK_OEM_NEC_EQUAL"); break;
  178. case VK_OEM_FJ_JISHO: str = _T("VK_OEM_FJ_JISHO"); break;
  179. case VK_OEM_FJ_MASSHOU: str = _T("VK_OEM_FJ_MASSHOU"); break;
  180. case VK_OEM_FJ_TOUROKU: str = _T("VK_OEM_FJ_TOUROKU"); break;
  181. case VK_OEM_FJ_LOYA: str = _T("VK_OEM_FJ_LOYA"); break;
  182. case VK_OEM_FJ_ROYA: str = _T("VK_OEM_FJ_ROYA"); break;
  183. case VK_LSHIFT: str = _T("VK_LSHIFT"); break;
  184. case VK_RSHIFT: str = _T("VK_RSHIFT"); break;
  185. case VK_LCONTROL: str = _T("VK_LCONTROL"); break;
  186. case VK_RCONTROL: str = _T("VK_RCONTROL"); break;
  187. case VK_LMENU: str = _T("VK_LMENU"); break;
  188. case VK_RMENU: str = _T("VK_RMENU"); break;
  189. case VK_BROWSER_BACK: str = _T("VK_BROWSER_BACK"); break;
  190. case VK_BROWSER_FORWARD: str = _T("VK_BROWSER_FORWARD"); break;
  191. case VK_BROWSER_REFRESH: str = _T("VK_BROWSER_REFRESH"); break;
  192. case VK_BROWSER_STOP: str = _T("VK_BROWSER_STOP"); break;
  193. case VK_BROWSER_SEARCH: str = _T("VK_BROWSER_SEARCH"); break;
  194. case VK_BROWSER_FAVORITES: str = _T("VK_BROWSER_FAVORITES"); break;
  195. case VK_BROWSER_HOME: str = _T("VK_BROWSER_HOME"); break;
  196. case VK_VOLUME_MUTE: str = _T("VK_VOLUME_MUTE"); break;
  197. case VK_VOLUME_DOWN: str = _T("VK_VOLUME_DOWN"); break;
  198. case VK_VOLUME_UP: str = _T("VK_VOLUME_UP"); break;
  199. case VK_MEDIA_NEXT_TRACK: str = _T("VK_MEDIA_NEXT_TRACK"); break;
  200. case VK_MEDIA_PREV_TRACK: str = _T("VK_MEDIA_PREV_TRACK"); break;
  201. case VK_MEDIA_STOP: str = _T("VK_MEDIA_STOP"); break;
  202. case VK_MEDIA_PLAY_PAUSE: str = _T("VK_MEDIA_PLAY_PAUSE"); break;
  203. case VK_LAUNCH_MAIL: str = _T("VK_LAUNCH_MAIL"); break;
  204. case VK_LAUNCH_MEDIA_SELECT: str = _T("VK_LAUNCH_MEDIA_SELECT"); break;
  205. case VK_LAUNCH_APP1: str = _T("VK_LAUNCH_APP1"); break;
  206. case VK_LAUNCH_APP2: str = _T("VK_LAUNCH_APP2"); break;
  207. case VK_OEM_1: str = _T("VK_OEM_1"); break;
  208. case VK_OEM_PLUS: str = _T("VK_OEM_PLUS"); break;
  209. case VK_OEM_COMMA: str = _T("VK_OEM_COMMA"); break;
  210. case VK_OEM_MINUS: str = _T("VK_OEM_MINUS"); break;
  211. case VK_OEM_PERIOD: str = _T("VK_OEM_PERIOD"); break;
  212. case VK_OEM_2: str = _T("VK_OEM_2"); break;
  213. case VK_OEM_3: str = _T("VK_OEM_3"); break;
  214. case VK_OEM_4: str = _T("VK_OEM_4"); break;
  215. case VK_OEM_5: str = _T("VK_OEM_5"); break;
  216. case VK_OEM_6: str = _T("VK_OEM_6"); break;
  217. case VK_OEM_7: str = _T("VK_OEM_7"); break;
  218. case VK_OEM_8: str = _T("VK_OEM_8"); break;
  219. case VK_OEM_AX: str = _T("VK_OEM_AX"); break;
  220. case VK_OEM_102: str = _T("VK_OEM_102"); break;
  221. case VK_ICO_HELP: str = _T("VK_ICO_HELP"); break;
  222. case VK_ICO_00: str = _T("VK_ICO_00"); break;
  223. case VK_PROCESSKEY: str = _T("VK_PROCESSKEY"); break;
  224. case VK_ICO_CLEAR: str = _T("VK_ICO_CLEAR"); break;
  225. case VK_PACKET: str = _T("VK_PACKET"); break;
  226. case VK_OEM_RESET: str = _T("VK_OEM_RESET"); break;
  227. case VK_OEM_JUMP: str = _T("VK_OEM_JUMP"); break;
  228. case VK_OEM_PA1: str = _T("VK_OEM_PA1"); break;
  229. case VK_OEM_PA2: str = _T("VK_OEM_PA2"); break;
  230. case VK_OEM_PA3: str = _T("VK_OEM_PA3"); break;
  231. case VK_OEM_WSCTRL: str = _T("VK_OEM_WSCTRL"); break;
  232. case VK_OEM_CUSEL: str = _T("VK_OEM_CUSEL"); break;
  233. case VK_OEM_ATTN: str = _T("VK_OEM_ATTN"); break;
  234. case VK_OEM_FINISH: str = _T("VK_OEM_FINISH"); break;
  235. case VK_OEM_COPY: str = _T("VK_OEM_COPY"); break;
  236. case VK_OEM_AUTO: str = _T("VK_OEM_AUTO"); break;
  237. case VK_OEM_ENLW: str = _T("VK_OEM_ENLW"); break;
  238. case VK_OEM_BACKTAB: str = _T("VK_OEM_BACKTAB"); break;
  239. case VK_ATTN: str = _T("VK_ATTN"); break;
  240. case VK_CRSEL: str = _T("VK_CRSEL"); break;
  241. case VK_EXSEL: str = _T("VK_EXSEL"); break;
  242. case VK_EREOF: str = _T("VK_EREOF"); break;
  243. case VK_PLAY: str = _T("VK_PLAY"); break;
  244. case VK_ZOOM: str = _T("VK_ZOOM"); break;
  245. case VK_NONAME: str = _T("VK_NONAME"); break;
  246. case VK_PA1: str = _T("VK_PA1"); break;
  247. case VK_OEM_CLEAR: str = _T("VK_OEM_CLEAR"); break;
  248. default: 
  249. if('0' <= key && key <= '9' || 'A' <= key && key <= 'Z')
  250. str.Format(_T("%c"), (TCHAR)key);
  251. break;
  252. }
  253. if(str.IsEmpty() || !fVirtKey)
  254. {
  255. str.Format(_T("%c, 0x%02x"), (TCHAR)key, key); 
  256. return(str);
  257. }
  258. return(str);
  259. }
  260. CString CPPageAccelTbl::MakeAccelShortcutLabel(UINT id)
  261. {
  262. CList<wmcmd>& wmcmds = AfxGetAppSettings().wmcmds;
  263. POSITION pos = wmcmds.GetHeadPosition();
  264. while(pos)
  265. {
  266. ACCEL& a = wmcmds.GetNext(pos);
  267. if(a.cmd == id)
  268. return(MakeAccelShortcutLabel(a));
  269. }
  270. return(_T(""));
  271. }
  272. CString CPPageAccelTbl::MakeAccelShortcutLabel(ACCEL& a)
  273. {
  274. CString str;
  275. if(a.fVirt&1)
  276. switch(a.key)
  277. {
  278. case VK_LBUTTON: str = _T("LBtn"); break;
  279. case VK_RBUTTON: str = _T("RBtn"); break;
  280. case VK_CANCEL: str = _T("Cancel"); break;
  281. case VK_MBUTTON: str = _T("MBtn"); break;
  282. case VK_XBUTTON1: str = _T("X1Btn"); break;
  283. case VK_XBUTTON2: str = _T("X2Btn"); break;
  284. case VK_BACK: str = _T("Back"); break;
  285. case VK_TAB: str = _T("Tab"); break;
  286. case VK_CLEAR: str = _T("Clear"); break;
  287. case VK_RETURN: str = _T("Return"); break;
  288. case VK_SHIFT: str = _T("Shift"); break;
  289. case VK_CONTROL: str = _T("Ctrl"); break;
  290. case VK_MENU: str = _T("Alt"); break;
  291. case VK_PAUSE: str = _T("Pause"); break;
  292. case VK_CAPITAL: str = _T("Capital"); break;
  293. // case VK_KANA: str = _T("Kana"); break;
  294. // case VK_HANGEUL: str = _T("Hangeul"); break;
  295. case VK_HANGUL: str = _T("Hangul"); break;
  296. case VK_JUNJA: str = _T("Junja"); break;
  297. case VK_FINAL: str = _T("Final"); break;
  298. // case VK_HANJA: str = _T("Hanja"); break;
  299. case VK_KANJI: str = _T("Kanji"); break;
  300. case VK_ESCAPE: str = _T("Escape"); break;
  301. case VK_CONVERT: str = _T("Convert"); break;
  302. case VK_NONCONVERT: str = _T("Non Convert"); break;
  303. case VK_ACCEPT: str = _T("Accept"); break;
  304. case VK_MODECHANGE: str = _T("Mode Change"); break;
  305. case VK_SPACE: str = _T("Space"); break;
  306. case VK_PRIOR: str = _T("PgUp"); break;
  307. case VK_NEXT: str = _T("PgDn"); break;
  308. case VK_END: str = _T("End"); break;
  309. case VK_HOME: str = _T("Home"); break;
  310. case VK_LEFT: str = _T("Left"); break;
  311. case VK_UP: str = _T("Up"); break;
  312. case VK_RIGHT: str = _T("Right"); break;
  313. case VK_DOWN: str = _T("Down"); break;
  314. case VK_SELECT: str = _T("Select"); break;
  315. case VK_PRINT: str = _T("Print"); break;
  316. case VK_EXECUTE: str = _T("Execute"); break;
  317. case VK_SNAPSHOT: str = _T("Snapshot"); break;
  318. case VK_INSERT: str = _T("Insert"); break;
  319. case VK_DELETE: str = _T("Delete"); break;
  320. case VK_HELP: str = _T("Help"); break;
  321. case VK_LWIN: str = _T("LWin"); break;
  322. case VK_RWIN: str = _T("RWin"); break;
  323. case VK_APPS: str = _T("Apps"); break;
  324. case VK_SLEEP: str = _T("Sleep"); break;
  325. case VK_NUMPAD0: str = _T("Numpad 0"); break;
  326. case VK_NUMPAD1: str = _T("Numpad 1"); break;
  327. case VK_NUMPAD2: str = _T("Numpad 2"); break;
  328. case VK_NUMPAD3: str = _T("Numpad 3"); break;
  329. case VK_NUMPAD4: str = _T("Numpad 4"); break;
  330. case VK_NUMPAD5: str = _T("Numpad 5"); break;
  331. case VK_NUMPAD6: str = _T("Numpad 6"); break;
  332. case VK_NUMPAD7: str = _T("Numpad 7"); break;
  333. case VK_NUMPAD8: str = _T("Numpad 8"); break;
  334. case VK_NUMPAD9: str = _T("Numpad 9"); break;
  335. case VK_MULTIPLY: str = _T("Multiply"); break;
  336. case VK_ADD: str = _T("Add"); break;
  337. case VK_SEPARATOR: str = _T("Separator"); break;
  338. case VK_SUBTRACT: str = _T("Subtract"); break;
  339. case VK_DECIMAL: str = _T("Decimal"); break;
  340. case VK_DIVIDE: str = _T("Divide"); break;
  341. case VK_F1: str = _T("F1"); break;
  342. case VK_F2: str = _T("F2"); break;
  343. case VK_F3: str = _T("F3"); break;
  344. case VK_F4: str = _T("F4"); break;
  345. case VK_F5: str = _T("F5"); break;
  346. case VK_F6: str = _T("F6"); break;
  347. case VK_F7: str = _T("F7"); break;
  348. case VK_F8: str = _T("F8"); break;
  349. case VK_F9: str = _T("F9"); break;
  350. case VK_F10: str = _T("F10"); break;
  351. case VK_F11: str = _T("F11"); break;
  352. case VK_F12: str = _T("F12"); break;
  353. case VK_F13: str = _T("F13"); break;
  354. case VK_F14: str = _T("F14"); break;
  355. case VK_F15: str = _T("F15"); break;
  356. case VK_F16: str = _T("F16"); break;
  357. case VK_F17: str = _T("F17"); break;
  358. case VK_F18: str = _T("F18"); break;
  359. case VK_F19: str = _T("F19"); break;
  360. case VK_F20: str = _T("F20"); break;
  361. case VK_F21: str = _T("F21"); break;
  362. case VK_F22: str = _T("F22"); break;
  363. case VK_F23: str = _T("F23"); break;
  364. case VK_F24: str = _T("F24"); break;
  365. case VK_NUMLOCK: str = _T("Numlock"); break;
  366. case VK_SCROLL: str = _T("Scroll"); break;
  367. // case VK_OEM_NEC_EQUAL: str = _T("OEM NEC Equal"); break;
  368. case VK_OEM_FJ_JISHO: str = _T("OEM FJ Jisho"); break;
  369. case VK_OEM_FJ_MASSHOU: str = _T("OEM FJ Msshou"); break;
  370. case VK_OEM_FJ_TOUROKU: str = _T("OEM FJ Touroku"); break;
  371. case VK_OEM_FJ_LOYA: str = _T("OEM FJ Loya"); break;
  372. case VK_OEM_FJ_ROYA: str = _T("OEM FJ Roya"); break;
  373. case VK_LSHIFT: str = _T("LShift"); break;
  374. case VK_RSHIFT: str = _T("RShift"); break;
  375. case VK_LCONTROL: str = _T("LCtrl"); break;
  376. case VK_RCONTROL: str = _T("RCtrl"); break;
  377. case VK_LMENU: str = _T("LAlt"); break;
  378. case VK_RMENU: str = _T("RAlt"); break;
  379. case VK_BROWSER_BACK: str = _T("Browser Back"); break;
  380. case VK_BROWSER_FORWARD: str = _T("Browser Forward"); break;
  381. case VK_BROWSER_REFRESH: str = _T("Browser Refresh"); break;
  382. case VK_BROWSER_STOP: str = _T("Browser Stop"); break;
  383. case VK_BROWSER_SEARCH: str = _T("Browser Search"); break;
  384. case VK_BROWSER_FAVORITES: str = _T("Browser Favorites"); break;
  385. case VK_BROWSER_HOME: str = _T("Browser Home"); break;
  386. case VK_VOLUME_MUTE: str = _T("Volume Mute"); break;
  387. case VK_VOLUME_DOWN: str = _T("Volume Down"); break;
  388. case VK_VOLUME_UP: str = _T("Volume Up"); break;
  389. case VK_MEDIA_NEXT_TRACK: str = _T("Media Next Track"); break;
  390. case VK_MEDIA_PREV_TRACK: str = _T("Media Prev Track"); break;
  391. case VK_MEDIA_STOP: str = _T("Media Stop"); break;
  392. case VK_MEDIA_PLAY_PAUSE: str = _T("Media Play/Pause"); break;
  393. case VK_LAUNCH_MAIL: str = _T("Launch Mail"); break;
  394. case VK_LAUNCH_MEDIA_SELECT: str = _T("Launch Media Select"); break;
  395. case VK_LAUNCH_APP1: str = _T("Launch App1"); break;
  396. case VK_LAUNCH_APP2: str = _T("Launch App2"); break;
  397. case VK_OEM_1: str = _T("OEM 1"); break;
  398. case VK_OEM_PLUS: str = _T("Plus"); break;
  399. case VK_OEM_COMMA: str = _T("Comma"); break;
  400. case VK_OEM_MINUS: str = _T("Minus"); break;
  401. case VK_OEM_PERIOD: str = _T("Period"); break;
  402. case VK_OEM_2: str = _T("OEM 2"); break;
  403. case VK_OEM_3: str = _T("OEM 3"); break;
  404. case VK_OEM_4: str = _T("OEM 4"); break;
  405. case VK_OEM_5: str = _T("OEM 5"); break;
  406. case VK_OEM_6: str = _T("OEM 6"); break;
  407. case VK_OEM_7: str = _T("OEM 7"); break;
  408. case VK_OEM_8: str = _T("OEM 8"); break;
  409. case VK_OEM_AX: str = _T("OEM AX"); break;
  410. case VK_OEM_102: str = _T("OEM 102"); break;
  411. case VK_ICO_HELP: str = _T("ICO Help"); break;
  412. case VK_ICO_00: str = _T("ICO 00"); break;
  413. case VK_PROCESSKEY: str = _T("Process Key"); break;
  414. case VK_ICO_CLEAR: str = _T("ICO Clear"); break;
  415. case VK_PACKET: str = _T("Packet"); break;
  416. case VK_OEM_RESET: str = _T("OEM Reset"); break;
  417. case VK_OEM_JUMP: str = _T("OEM Jump"); break;
  418. case VK_OEM_PA1: str = _T("OEM PA1"); break;
  419. case VK_OEM_PA2: str = _T("OEM PA2"); break;
  420. case VK_OEM_PA3: str = _T("OEM PA3"); break;
  421. case VK_OEM_WSCTRL: str = _T("OEM WSCtrl"); break;
  422. case VK_OEM_CUSEL: str = _T("OEM CUSEL"); break;
  423. case VK_OEM_ATTN: str = _T("OEM ATTN"); break;
  424. case VK_OEM_FINISH: str = _T("OEM Finish"); break;
  425. case VK_OEM_COPY: str = _T("OEM Copy"); break;
  426. case VK_OEM_AUTO: str = _T("OEM Auto"); break;
  427. case VK_OEM_ENLW: str = _T("OEM ENLW"); break;
  428. case VK_OEM_BACKTAB: str = _T("OEM Backtab"); break;
  429. case VK_ATTN: str = _T("ATTN"); break;
  430. case VK_CRSEL: str = _T("CRSEL"); break;
  431. case VK_EXSEL: str = _T("EXSEL"); break;
  432. case VK_EREOF: str = _T("EREOF"); break;
  433. case VK_PLAY: str = _T("Play"); break;
  434. case VK_ZOOM: str = _T("Zoom"); break;
  435. case VK_NONAME: str = _T("Noname"); break;
  436. case VK_PA1: str = _T("PA1"); break;
  437. case VK_OEM_CLEAR: str = _T("OEM Clear"); break;
  438. default: 
  439. if('0' <= a.key && a.key <= '9' || 'A' <= a.key && a.key <= 'Z')
  440. str.Format(_T("%c"), (TCHAR)a.key);
  441. break;
  442. }
  443. if(str.IsEmpty() || !(a.fVirt&1))
  444. str.Format(_T("%c"), (TCHAR)a.key);
  445. if(a.fVirt&(FCONTROL|FALT|FSHIFT)) 
  446. str = MakeAccelModLabel(a.fVirt) + _T(" + ") + str;
  447. str.Replace(_T(" + "), _T("+"));
  448. return(str);
  449. }
  450. CString CPPageAccelTbl::MakeMouseButtonLabel(UINT mouse)
  451. {
  452. CString ret;
  453. switch(mouse)
  454. {
  455. case wmcmd::NONE: default: ret = _T("None"); break;
  456. case wmcmd::LDOWN: ret = _T("Left Down"); break;
  457. case wmcmd::LUP: ret = _T("Left Up"); break;
  458. case wmcmd::LDBLCLK: ret = _T("Left DblClk"); break;
  459. case wmcmd::MDOWN: ret = _T("Middle Down"); break;
  460. case wmcmd::MUP: ret = _T("Middle Up"); break;
  461. case wmcmd::MDBLCLK: ret = _T("Middle DblClk"); break;
  462. case wmcmd::RDOWN: ret = _T("Right Down"); break;
  463. case wmcmd::RUP: ret = _T("Right Up"); break;
  464. case wmcmd::RDBLCLK: ret = _T("Right DblClk"); break;
  465. case wmcmd::X1DOWN: ret = _T("X1 Down"); break;
  466. case wmcmd::X1UP: ret = _T("X1 Up"); break;
  467. case wmcmd::X1DBLCLK: ret = _T("X1 DblClk"); break;
  468. case wmcmd::X2DOWN: ret = _T("X2 Down"); break;
  469. case wmcmd::X2UP: ret = _T("X2 Up"); break;
  470. case wmcmd::X2DBLCLK: ret = _T("X2 DblClk"); break;
  471. case wmcmd::WUP: ret = _T("Wheel Up"); break;
  472. case wmcmd::WDOWN: ret = _T("Wheel Down"); break;
  473. }
  474. return ret;
  475. }
  476. CString CPPageAccelTbl::MakeAppCommandLabel(UINT id)
  477. {
  478. CString str;
  479. ASSERT(id <= APPCOMMAND_LAST);
  480. switch(id)
  481. {
  482. default: str = _T(""); break;
  483. case APPCOMMAND_BROWSER_BACKWARD: str = _T("BROWSER_BACKWARD"); break;
  484. case APPCOMMAND_BROWSER_FORWARD: str = _T("BROWSER_FORWARD"); break;
  485. case APPCOMMAND_BROWSER_REFRESH: str = _T("BROWSER_REFRESH"); break;
  486. case APPCOMMAND_BROWSER_STOP: str = _T("BROWSER_STOP"); break;
  487. case APPCOMMAND_BROWSER_SEARCH: str = _T("BROWSER_SEARCH"); break;
  488. case APPCOMMAND_BROWSER_FAVORITES: str = _T("BROWSER_FAVORITES"); break;
  489. case APPCOMMAND_BROWSER_HOME: str = _T("BROWSER_HOME"); break;
  490. case APPCOMMAND_VOLUME_MUTE: str = _T("VOLUME_MUTE"); break;
  491. case APPCOMMAND_VOLUME_DOWN: str = _T("VOLUME_DOWN"); break;
  492. case APPCOMMAND_VOLUME_UP: str = _T("VOLUME_UP"); break;
  493. case APPCOMMAND_MEDIA_NEXTTRACK: str = _T("MEDIA_NEXTTRACK"); break;
  494. case APPCOMMAND_MEDIA_PREVIOUSTRACK: str = _T("MEDIA_PREVIOUSTRACK"); break;
  495. case APPCOMMAND_MEDIA_STOP: str = _T("MEDIA_STOP"); break;
  496. case APPCOMMAND_MEDIA_PLAY_PAUSE: str = _T("MEDIA_PLAY_PAUSE"); break;
  497. case APPCOMMAND_LAUNCH_MAIL: str = _T("LAUNCH_MAIL"); break;
  498. case APPCOMMAND_LAUNCH_MEDIA_SELECT: str = _T("LAUNCH_MEDIA_SELECT"); break;
  499. case APPCOMMAND_LAUNCH_APP1: str = _T("LAUNCH_APP1"); break;
  500. case APPCOMMAND_LAUNCH_APP2: str = _T("LAUNCH_APP2"); break;
  501. case APPCOMMAND_BASS_DOWN: str = _T("BASS_DOWN"); break;
  502. case APPCOMMAND_BASS_BOOST: str = _T("BASS_BOOST"); break;
  503. case APPCOMMAND_BASS_UP: str = _T("BASS_UP"); break;
  504. case APPCOMMAND_TREBLE_DOWN: str = _T("TREBLE_DOWN"); break;
  505. case APPCOMMAND_TREBLE_UP: str = _T("TREBLE_UP"); break;
  506. case APPCOMMAND_MICROPHONE_VOLUME_MUTE: str = _T("MICROPHONE_VOLUME_MUTE"); break;
  507. case APPCOMMAND_MICROPHONE_VOLUME_DOWN: str = _T("MICROPHONE_VOLUME_DOWN"); break;
  508. case APPCOMMAND_MICROPHONE_VOLUME_UP: str = _T("MICROPHONE_VOLUME_UP"); break;
  509. case APPCOMMAND_HELP: str = _T("HELP"); break;
  510. case APPCOMMAND_FIND: str = _T("FIND"); break;
  511. case APPCOMMAND_NEW: str = _T("NEW"); break;
  512. case APPCOMMAND_OPEN: str = _T("OPEN"); break;
  513. case APPCOMMAND_CLOSE: str = _T("CLOSE"); break;
  514. case APPCOMMAND_SAVE: str = _T("SAVE"); break;
  515. case APPCOMMAND_PRINT: str = _T("PRINT"); break;
  516. case APPCOMMAND_UNDO: str = _T("UNDO"); break;
  517. case APPCOMMAND_REDO: str = _T("REDO"); break;
  518. case APPCOMMAND_COPY: str = _T("COPY"); break;
  519. case APPCOMMAND_CUT: str = _T("CUT"); break;
  520. case APPCOMMAND_PASTE: str = _T("PASTE"); break;
  521. case APPCOMMAND_REPLY_TO_MAIL: str = _T("REPLY_TO_MAIL"); break;
  522. case APPCOMMAND_FORWARD_MAIL: str = _T("FORWARD_MAIL"); break;
  523. case APPCOMMAND_SEND_MAIL: str = _T("SEND_MAIL"); break;
  524. case APPCOMMAND_SPELL_CHECK: str = _T("SPELL_CHECK"); break;
  525. case APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE: str = _T("DICTATE_OR_COMMAND_CONTROL_TOGGLE"); break;
  526. case APPCOMMAND_MIC_ON_OFF_TOGGLE: str = _T("MIC_ON_OFF_TOGGLE"); break;
  527. case APPCOMMAND_CORRECTION_LIST: str = _T("CORRECTION_LIST"); break;
  528. case APPCOMMAND_MEDIA_PLAY: str = _T("MEDIA_PLAY"); break;
  529. case APPCOMMAND_MEDIA_PAUSE: str = _T("MEDIA_PAUSE"); break;
  530. case APPCOMMAND_MEDIA_RECORD: str = _T("MEDIA_RECORD"); break;
  531. case APPCOMMAND_MEDIA_FAST_FORWARD: str = _T("MEDIA_FAST_FORWARD"); break;
  532. case APPCOMMAND_MEDIA_REWIND: str = _T("MEDIA_REWIND"); break;
  533. case APPCOMMAND_MEDIA_CHANNEL_UP: str = _T("MEDIA_CHANNEL_UP"); break;
  534. case APPCOMMAND_MEDIA_CHANNEL_DOWN: str = _T("MEDIA_CHANNEL_DOWN"); break;
  535. }
  536. return str;
  537. }
  538. void CPPageAccelTbl::DoDataExchange(CDataExchange* pDX)
  539. {
  540. __super::DoDataExchange(pDX);
  541. DDX_Text(pDX, IDC_EDIT1, m_WinLircAddr);
  542. DDX_Control(pDX, IDC_EDIT1, m_WinLircEdit);
  543. DDX_Control(pDX, IDC_STATICLINK, m_WinLircLink);
  544. DDX_Check(pDX, IDC_CHECK1, m_fWinLirc);
  545. DDX_Text(pDX, IDC_EDIT2, m_UIceAddr);
  546. DDX_Control(pDX, IDC_EDIT2, m_UIceEdit);
  547. DDX_Control(pDX, IDC_STATICLINK2, m_UIceLink);
  548. DDX_Check(pDX, IDC_CHECK9, m_fUIce);
  549. }
  550. BEGIN_MESSAGE_MAP(CPPageAccelTbl, CPPageBase)
  551. ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_LIST1, OnBeginlabeleditList)
  552. ON_NOTIFY(LVN_DOLABELEDIT, IDC_LIST1, OnDolabeleditList)
  553. ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST1, OnEndlabeleditList)
  554. ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
  555. ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
  556. ON_WM_TIMER()
  557. ON_WM_CTLCOLOR()
  558. END_MESSAGE_MAP()
  559. // CPPageAccelTbl message handlers
  560. BOOL CPPageAccelTbl::OnInitDialog()
  561. {
  562. __super::OnInitDialog();
  563. AppSettings& s = AfxGetAppSettings();
  564. m_wmcmds.RemoveAll();
  565. m_wmcmds.AddTail(&s.wmcmds);
  566. m_fWinLirc = s.fWinLirc;
  567. m_WinLircAddr = s.WinLircAddr;
  568. m_fUIce = s.fUIce;
  569. m_UIceAddr = s.UIceAddr;
  570. UpdateData(FALSE);
  571. CRect r;
  572. GetDlgItem(IDC_PLACEHOLDER)->GetWindowRect(r);
  573. ScreenToClient(r);
  574. m_list.CreateEx(
  575. WS_EX_CLIENTEDGE, 
  576. WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_TABSTOP|LVS_REPORT|LVS_AUTOARRANGE|LVS_SHOWSELALWAYS, 
  577. r, this, IDC_LIST1);
  578. m_list.SetExtendedStyle(m_list.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER);
  579. for(int i = 0, j = m_list.GetHeaderCtrl()->GetItemCount(); i < j; i++) m_list.DeleteColumn(0);
  580. m_list.InsertColumn(COL_CMD, _T("Command"), LVCFMT_LEFT, 80);
  581. m_list.InsertColumn(COL_MOD, _T("Modifier"), LVCFMT_LEFT, 40);
  582. m_list.InsertColumn(COL_KEY, _T("Key"), LVCFMT_LEFT, 40);
  583. m_list.InsertColumn(COL_TYPE, _T("Type"), LVCFMT_LEFT, 40);
  584. m_list.InsertColumn(COL_ID, _T("ID"), LVCFMT_LEFT, 40);
  585. m_list.InsertColumn(COL_MOUSE, _T("Mouse"), LVCFMT_LEFT, 80);
  586. m_list.InsertColumn(COL_APPCMD, _T("App Command"), LVCFMT_LEFT, 120);
  587. m_list.InsertColumn(COL_RMCMD, _T("RemoteCmd"), LVCFMT_LEFT, 80);
  588. m_list.InsertColumn(COL_RMREPCNT, _T("RepCnt"), LVCFMT_CENTER, 60);
  589. POSITION pos = m_wmcmds.GetHeadPosition();
  590.     for(int i = 0; pos; i++)
  591. {
  592. int row = m_list.InsertItem(m_list.GetItemCount(), m_wmcmds.GetAt(pos).name, COL_CMD);
  593. m_list.SetItemData(row, (DWORD_PTR)pos);
  594. m_wmcmds.GetNext(pos);
  595. }
  596. SetupList();
  597. m_list.SetColumnWidth(COL_CMD, LVSCW_AUTOSIZE);
  598. m_list.SetColumnWidth(COL_MOD, LVSCW_AUTOSIZE);
  599. m_list.SetColumnWidth(COL_KEY, LVSCW_AUTOSIZE);
  600. m_list.SetColumnWidth(COL_TYPE, LVSCW_AUTOSIZE);
  601. m_list.SetColumnWidth(COL_ID, LVSCW_AUTOSIZE_USEHEADER);
  602. return TRUE;  // return TRUE unless you set the focus to a control
  603. // EXCEPTION: OCX Property Pages should return FALSE
  604. }
  605. BOOL CPPageAccelTbl::OnApply()
  606. {
  607. UpdateData();
  608. AppSettings& s = AfxGetAppSettings();
  609. s.wmcmds.RemoveAll();
  610. s.wmcmds.AddTail(&m_wmcmds);
  611. CAtlArray<ACCEL> pAccel;
  612. pAccel.SetCount(m_wmcmds.GetCount());
  613. POSITION pos = m_wmcmds.GetHeadPosition();
  614. for(int i = 0; pos; i++) pAccel[i] = m_wmcmds.GetNext(pos);
  615. if(s.hAccel) DestroyAcceleratorTable(s.hAccel);
  616. s.hAccel = CreateAcceleratorTable(pAccel.GetData(), pAccel.GetCount());
  617.   GetParentFrame()->m_hAccelTable = s.hAccel;
  618. s.fWinLirc = !!m_fWinLirc;
  619. s.WinLircAddr = m_WinLircAddr;
  620. if(s.fWinLirc) s.WinLircClient.Connect(m_WinLircAddr);
  621. s.fUIce = !!m_fUIce;
  622. s.UIceAddr = m_UIceAddr;
  623. if(s.fUIce) s.UIceClient.Connect(m_UIceAddr);
  624. return __super::OnApply();
  625. }
  626. void CPPageAccelTbl::OnBnClickedButton1()
  627. {
  628. m_list.SetFocus();
  629. for(int i = 0, j = m_list.GetItemCount(); i < j; i++)
  630. {
  631. m_list.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
  632. }
  633. }
  634. void CPPageAccelTbl::OnBnClickedButton2()
  635. {
  636. m_list.SetFocus();
  637. POSITION pos = m_list.GetFirstSelectedItemPosition();
  638. if(!pos) return;
  639. AppSettings& s = AfxGetAppSettings();
  640. while(pos)
  641. {
  642. wmcmd& wc = m_wmcmds.GetAt((POSITION)m_list.GetItemData(m_list.GetNextSelectedItem(pos)));
  643. wc.Restore();
  644. }
  645. SetupList();
  646. SetModified();
  647. }
  648. void CPPageAccelTbl::OnBeginlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
  649. {
  650. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  651. LV_ITEM* pItem = &pDispInfo->item;
  652. *pResult = FALSE;
  653. if(pItem->iItem < 0) 
  654. return;
  655. if(pItem->iSubItem == COL_MOD || pItem->iSubItem == COL_KEY || pItem->iSubItem == COL_TYPE
  656. || pItem->iSubItem == COL_MOUSE || pItem->iSubItem == COL_APPCMD 
  657. || pItem->iSubItem == COL_RMCMD || pItem->iSubItem == COL_RMREPCNT)
  658. {
  659. *pResult = TRUE;
  660. }
  661. }
  662. static BYTE s_mods[] = {0,FALT,FCONTROL,FSHIFT,FCONTROL|FALT,FCONTROL|FSHIFT,FALT|FSHIFT,FCONTROL|FALT|FSHIFT};
  663. void CPPageAccelTbl::OnDolabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
  664. {
  665. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  666. LV_ITEM* pItem = &pDispInfo->item;
  667. *pResult = FALSE;
  668. if(pItem->iItem < 0) 
  669. return;
  670. wmcmd& wc = m_wmcmds.GetAt((POSITION)m_list.GetItemData(pItem->iItem));
  671. ACCEL& a = wc;
  672. CAtlList<CString> sl;
  673. int nSel = -1;
  674. if(pItem->iSubItem == COL_MOD)
  675. {
  676. for(int i = 0; i < countof(s_mods); i++)
  677. {
  678. sl.AddTail(MakeAccelModLabel(s_mods[i]));
  679. if((a.fVirt&~3) == s_mods[i]) nSel = i;
  680. }
  681. m_list.ShowInPlaceComboBox(pItem->iItem, pItem->iSubItem, sl, nSel);
  682. *pResult = TRUE;
  683. }
  684. else if(pItem->iSubItem == COL_KEY)
  685. {
  686. for(int i = 0; i < 256; i++)
  687. {
  688. sl.AddTail(MakeAccelVkeyLabel(i, a.fVirt&FVIRTKEY));
  689. if(a.key == i) nSel = i;
  690. }
  691. m_list.ShowInPlaceComboBox(pItem->iItem, pItem->iSubItem, sl, nSel);
  692. *pResult = TRUE;
  693. }
  694. else if(pItem->iSubItem == COL_TYPE)
  695. {
  696. sl.AddTail(_T("VIRTKEY"));
  697. sl.AddTail(_T("ASCII"));
  698. nSel = !(a.fVirt&FVIRTKEY);
  699. m_list.ShowInPlaceComboBox(pItem->iItem, pItem->iSubItem, sl, nSel);
  700. *pResult = TRUE;
  701. }
  702. else if(pItem->iSubItem == COL_MOUSE)
  703. {
  704. for(UINT i = 0; i < wmcmd::LAST; i++)
  705. {
  706. sl.AddTail(MakeMouseButtonLabel(i));
  707. if(wc.mouse == i) nSel = i;
  708. }
  709. m_list.ShowInPlaceComboBox(pItem->iItem, pItem->iSubItem, sl, nSel);
  710. *pResult = TRUE;
  711. }
  712. else if(pItem->iSubItem == COL_APPCMD)
  713. {
  714. for(int i = 0; i <= APPCOMMAND_LAST; i++)
  715. {
  716. sl.AddTail(MakeAppCommandLabel(i));
  717. if(wc.appcmd == i) nSel = i;
  718. }
  719. m_list.ShowInPlaceComboBox(pItem->iItem, pItem->iSubItem, sl, nSel);
  720. *pResult = TRUE;
  721. }
  722. else if(pItem->iSubItem == COL_RMCMD)
  723. {
  724. m_list.ShowInPlaceEdit(pItem->iItem, pItem->iSubItem);
  725. *pResult = TRUE;
  726. }
  727. else if(pItem->iSubItem == COL_RMREPCNT)
  728. {
  729. m_list.ShowInPlaceEdit(pItem->iItem, pItem->iSubItem);
  730. *pResult = TRUE;
  731. }
  732. }
  733. void CPPageAccelTbl::OnEndlabeleditList(NMHDR* pNMHDR, LRESULT* pResult) 
  734. {
  735. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  736. LV_ITEM* pItem = &pDispInfo->item;
  737. *pResult = FALSE;
  738. if(!m_list.m_fInPlaceDirty)
  739. return;
  740. if(pItem->iItem < 0) 
  741. return;
  742. wmcmd& wc = m_wmcmds.GetAt((POSITION)m_list.GetItemData(pItem->iItem));
  743. if(pItem->iSubItem == COL_MOD)
  744. {
  745. if(pItem->lParam >= 0 && pItem->lParam < countof(s_mods))
  746. {
  747. wc.fVirt = (wc.fVirt&3) | (s_mods[pItem->lParam]&~3);
  748. m_list.SetItemText(pItem->iItem, COL_MOD, pItem->pszText);
  749. *pResult = TRUE;
  750. }
  751. }
  752. else if(pItem->iSubItem == COL_KEY)
  753. {
  754. int i = pItem->lParam;
  755. if(i >= 0 && i < 256)
  756. {
  757. wc.key = (WORD)i;
  758. m_list.SetItemText(pItem->iItem, COL_KEY, pItem->pszText);
  759. *pResult = TRUE;
  760. }
  761. }
  762. else if(pItem->iSubItem == COL_TYPE)
  763. {
  764. int i = pItem->lParam;
  765. if(i >= 0 && i < 2)
  766. {
  767. wc.fVirt = (wc.fVirt&~FVIRTKEY) | (i == 0 ? FVIRTKEY : 0);
  768. m_list.SetItemText(pItem->iItem, COL_KEY, MakeAccelVkeyLabel(wc.key, wc.fVirt&FVIRTKEY));
  769. m_list.SetItemText(pItem->iItem, COL_TYPE, (wc.fVirt&FVIRTKEY)?_T("VIRTKEY"):_T("ASCII"));
  770. *pResult = TRUE;
  771. }
  772. }
  773. else if(pItem->iSubItem == COL_APPCMD)
  774. {
  775. int i = pItem->lParam;
  776. if(i >= 0 && i <= APPCOMMAND_LAST)
  777. {
  778. wc.appcmd = (WORD)i;
  779. m_list.SetItemText(pItem->iItem, COL_APPCMD, pItem->pszText);
  780. *pResult = TRUE;
  781. }
  782. }
  783. else if(pItem->iSubItem == COL_MOUSE)
  784. {
  785. wc.mouse = pItem->lParam;
  786. m_list.SetItemText(pItem->iItem, COL_MOUSE, pItem->pszText);
  787. }
  788. else if(pItem->iSubItem == COL_RMCMD)
  789. {
  790. wc.rmcmd = CStringA(CString(pItem->pszText)).Trim();
  791. wc.rmcmd.Replace(' ', '_');
  792. m_list.SetItemText(pItem->iItem, pItem->iSubItem, CString(wc.rmcmd));
  793. *pResult = TRUE;
  794. }
  795. else if(pItem->iSubItem == COL_RMREPCNT)
  796. {
  797. CString str = CString(pItem->pszText).Trim();
  798. wc.rmrepcnt = _tcstol(str, NULL, 10);
  799. str.Format(_T("%d"), wc.rmrepcnt);
  800. m_list.SetItemText(pItem->iItem, pItem->iSubItem, str);
  801. *pResult = TRUE;
  802. }
  803. if(*pResult)
  804. SetModified();
  805. }
  806. void CPPageAccelTbl::OnTimer(UINT nIDEvent)
  807. {
  808. UpdateData();
  809. if(m_fWinLirc)
  810. {
  811. CString addr;
  812. m_WinLircEdit.GetWindowText(addr);
  813. AfxGetAppSettings().WinLircClient.Connect(addr);
  814. }
  815. m_WinLircEdit.Invalidate();
  816. if(m_fUIce)
  817. {
  818. CString addr;
  819. m_UIceEdit.GetWindowText(addr);
  820. AfxGetAppSettings().UIceClient.Connect(addr);
  821. }
  822. m_UIceEdit.Invalidate();
  823. m_counter++;
  824. __super::OnTimer(nIDEvent);
  825. }
  826. HBRUSH CPPageAccelTbl::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  827. {
  828. HBRUSH hbr = __super::OnCtlColor(pDC, pWnd, nCtlColor);
  829. int status = -1;
  830. if(*pWnd == m_WinLircEdit)
  831. status = AfxGetAppSettings().WinLircClient.GetStatus();
  832. else if(*pWnd == m_UIceEdit)
  833. status = AfxGetAppSettings().UIceClient.GetStatus();
  834. if(status == 0 || status == 2 && (m_counter&1))
  835. pDC->SetTextColor(0x0000ff);
  836. else if(status == 1) 
  837. pDC->SetTextColor(0x008000);
  838. return hbr;
  839. }
  840. BOOL CPPageAccelTbl::OnSetActive()
  841. {
  842. SetTimer(1, 1000, NULL);
  843. return CPPageBase::OnSetActive();
  844. }
  845. BOOL CPPageAccelTbl::OnKillActive()
  846. {
  847. KillTimer(1);
  848. return CPPageBase::OnKillActive();
  849. }