Windows NT 4.0 source code leak
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.

544 lines
17 KiB

4 years ago
  1. /*****************************************************************************
  2. *
  3. * Dialogs.c - This module handles the Menu and Dialog user interactions.
  4. *
  5. * Microsoft Confidential
  6. * Copyright (c) 1992-1993 Microsoft Corporation
  7. *
  8. ****************************************************************************/
  9. #include <stdio.h>
  10. #include <wchar.h> // for swscanf
  11. #include "perfmon.h"
  12. #include "perfmops.h" // for ConvertDecimalPoint
  13. #include "alert.h" // for SetAlertTimer, AlertData
  14. #include "graph.h"
  15. #include "cderr.h"
  16. #include "utils.h"
  17. #include "playback.h" // for PlayingBackLog
  18. #include "grafdisp.h" // for ToggleGraphRefresh
  19. #include "pmhelpid.h" // Help IDs
  20. BOOL LocalManualRefresh ;
  21. /***************************************************************************/
  22. BOOL FAR PASCAL GraphOptionDlg(HWND hDlg, WORD msg, DWORD wParam, LONG lParam)
  23. /***************************************************************************/
  24. {
  25. static GRAPH_OPTIONS goLocalCopy ;
  26. INT iTimeMilliseconds ;
  27. TCHAR szBuff[MiscTextLen] ;
  28. PGRAPHSTRUCT lgraph;
  29. lParam ;
  30. lgraph = pGraphs;
  31. switch(msg)
  32. {
  33. case WM_INITDIALOG:
  34. dwCurrentDlgID = HC_PM_idDlgOptionChart ;
  35. // Init the Radio button, Check boxes and text fields.
  36. goLocalCopy.iGraphOrHistogram =
  37. lgraph->gOptions.iGraphOrHistogram ;
  38. if (lgraph->gOptions.iGraphOrHistogram == LINE_GRAPH)
  39. CheckRadioButton(hDlg, ID_GRAPH, ID_HISTOGRAM, ID_GRAPH) ;
  40. else
  41. CheckRadioButton(hDlg, ID_GRAPH, ID_HISTOGRAM, ID_HISTOGRAM) ;
  42. CheckDlgButton(hDlg, ID_LEGEND, lgraph->gOptions.bLegendChecked) ;
  43. if (!(lgraph->gOptions.bLegendChecked))
  44. {
  45. // can't display valuebar w/o legend
  46. DialogEnable (hDlg, IDD_CHARTOPTIONSVALUEBAR, FALSE) ;
  47. }
  48. CheckDlgButton(hDlg, ID_LABELS, lgraph->gOptions.bLabelsChecked) ;
  49. CheckDlgButton(hDlg, ID_VERT_GRID, lgraph->gOptions.bVertGridChecked) ;
  50. CheckDlgButton(hDlg, ID_HORZ_GRID, lgraph->gOptions.bHorzGridChecked) ;
  51. CheckDlgButton(hDlg, IDD_CHARTOPTIONSVALUEBAR,
  52. lgraph->gOptions.bStatusBarChecked) ;
  53. TSPRINTF(szBuff, TEXT("%d"), lgraph->gOptions.iVertMax) ;
  54. SendDlgItemMessage(hDlg, ID_VERT_MAX, WM_SETTEXT, 0, (LONG) szBuff) ;
  55. TSPRINTF(szBuff, TEXT("%3.3f"), lgraph->gOptions.eTimeInterval) ;
  56. ConvertDecimalPoint (szBuff) ;
  57. SendDlgItemMessage(hDlg, IDD_CHARTOPTIONSINTERVAL, WM_SETTEXT, 0, (LONG) szBuff) ;
  58. // Pickup a local copy of the Graph Options.
  59. goLocalCopy = lgraph->gOptions ;
  60. LocalManualRefresh = lgraph->bManualRefresh ;
  61. if (PlayingBackLog())
  62. {
  63. DialogEnable (hDlg, IDD_CHARTOPTIONSPERIODIC, FALSE) ;
  64. DialogEnable (hDlg, IDD_CHARTOPTIONSUPDATETEXT, FALSE) ;
  65. DialogEnable (hDlg, IDD_CHARTOPTIONSMANUALREFRESH, FALSE) ;
  66. }
  67. else
  68. {
  69. CheckRadioButton (hDlg,
  70. IDD_CHARTOPTIONSMANUALREFRESH,
  71. IDD_CHARTOPTIONSPERIODIC,
  72. LocalManualRefresh ? IDD_CHARTOPTIONSMANUALREFRESH :
  73. IDD_CHARTOPTIONSPERIODIC) ;
  74. }
  75. if (lgraph->bManualRefresh || PlayingBackLog())
  76. {
  77. DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVALTEXT, FALSE) ;
  78. DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVAL, FALSE) ;
  79. }
  80. else
  81. {
  82. DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVALTEXT, TRUE) ;
  83. DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVAL, TRUE) ;
  84. }
  85. EditSetLimit (GetDlgItem(hDlg, ID_VERT_MAX),
  86. sizeof(szBuff) / sizeof(TCHAR) - 1) ;
  87. EditSetLimit (GetDlgItem(hDlg, IDD_CHARTOPTIONSINTERVAL),
  88. ShortTextLen) ;
  89. WindowCenter (hDlg) ;
  90. return(TRUE);
  91. case WM_COMMAND:
  92. switch(LOWORD(wParam))
  93. {
  94. case ID_VERT_MAX:
  95. if (HIWORD(wParam) == EN_CHANGE)
  96. {
  97. DialogText(hDlg, ID_VERT_MAX, szBuff) ;
  98. swscanf(szBuff, TEXT("%d"), &goLocalCopy.iVertMax) ;
  99. }
  100. break ;
  101. case IDD_CHARTOPTIONSINTERVAL:
  102. if (HIWORD(wParam) == EN_CHANGE)
  103. {
  104. goLocalCopy.eTimeInterval =
  105. DialogFloat (hDlg, IDD_CHARTOPTIONSINTERVAL, NULL) ;
  106. }
  107. break ;
  108. case IDD_CHARTOPTIONSPERIODIC:
  109. case IDD_CHARTOPTIONSMANUALREFRESH:
  110. // check if the Manual refresh is currently checked.
  111. // Then toggle the ManualRefresh button
  112. LocalManualRefresh =
  113. (LOWORD(wParam) == IDD_CHARTOPTIONSMANUALREFRESH) ;
  114. CheckRadioButton (hDlg,
  115. IDD_CHARTOPTIONSMANUALREFRESH,
  116. IDD_CHARTOPTIONSPERIODIC,
  117. LocalManualRefresh ? IDD_CHARTOPTIONSMANUALREFRESH :
  118. IDD_CHARTOPTIONSPERIODIC) ;
  119. // gray out time interval if necessary...
  120. DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVALTEXT,
  121. !LocalManualRefresh) ;
  122. DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVAL,
  123. !LocalManualRefresh) ;
  124. break ;
  125. case IDD_CHARTOPTIONSVALUEBAR:
  126. if (goLocalCopy.bStatusBarChecked == TRUE)
  127. goLocalCopy.bStatusBarChecked = FALSE ;
  128. else
  129. goLocalCopy.bStatusBarChecked = TRUE ;
  130. break ;
  131. case ID_LEGEND:
  132. if (goLocalCopy.bLegendChecked == TRUE)
  133. goLocalCopy.bLegendChecked = FALSE ;
  134. else
  135. goLocalCopy.bLegendChecked = TRUE ;
  136. DialogEnable (hDlg, IDD_CHARTOPTIONSVALUEBAR,
  137. goLocalCopy.bLegendChecked) ;
  138. break ;
  139. case ID_LABELS:
  140. if (goLocalCopy.bLabelsChecked == TRUE)
  141. goLocalCopy.bLabelsChecked = FALSE ;
  142. else
  143. goLocalCopy.bLabelsChecked = TRUE ;
  144. break ;
  145. case ID_VERT_GRID:
  146. if (goLocalCopy.bVertGridChecked == TRUE)
  147. goLocalCopy.bVertGridChecked = FALSE ;
  148. else
  149. goLocalCopy.bVertGridChecked = TRUE ;
  150. break ;
  151. case ID_HORZ_GRID:
  152. if (goLocalCopy.bHorzGridChecked == TRUE)
  153. goLocalCopy.bHorzGridChecked = FALSE ;
  154. else
  155. goLocalCopy.bHorzGridChecked = TRUE ;
  156. break ;
  157. case ID_GRAPH:
  158. case ID_HISTOGRAM:
  159. if (LOWORD(wParam) == ID_GRAPH)
  160. {
  161. goLocalCopy.iGraphOrHistogram = LINE_GRAPH ;
  162. }
  163. else
  164. {
  165. goLocalCopy.iGraphOrHistogram = BAR_GRAPH ;
  166. }
  167. CheckRadioButton(hDlg, ID_GRAPH, ID_HISTOGRAM,
  168. goLocalCopy.iGraphOrHistogram == LINE_GRAPH ?
  169. ID_GRAPH : ID_HISTOGRAM) ;
  170. break ;
  171. case IDOK:
  172. // verify some numeric entries first
  173. if (goLocalCopy.iVertMax > MAX_VERTICAL ||
  174. goLocalCopy.iVertMax < MIN_VERTICAL)
  175. {
  176. DlgErrorBox (hDlg, ERR_BADVERTMAX) ;
  177. SetFocus (DialogControl (hDlg, ID_VERT_MAX)) ;
  178. EditSetTextEndPos (hDlg, ID_VERT_MAX) ;
  179. return (FALSE) ;
  180. break ;
  181. }
  182. if (goLocalCopy.eTimeInterval > MAX_INTERVALSEC ||
  183. goLocalCopy.eTimeInterval < MIN_INTERVALSEC)
  184. {
  185. DlgErrorBox (hDlg, ERR_BADTIMEINTERVAL) ;
  186. SetFocus (DialogControl (hDlg, IDD_CHARTOPTIONSINTERVAL)) ;
  187. EditSetTextEndPos (hDlg, IDD_CHARTOPTIONSINTERVAL) ;
  188. return (FALSE) ;
  189. break ;
  190. }
  191. // We need to send a size message to the main window
  192. // so it can setup the redraw of the graph and legend.
  193. lgraph->gOptions.bLegendChecked = goLocalCopy.bLegendChecked ;
  194. lgraph->gOptions.bStatusBarChecked = goLocalCopy.bStatusBarChecked ;
  195. if (lgraph->gOptions.eTimeInterval != goLocalCopy.eTimeInterval
  196. && !LocalManualRefresh)
  197. {
  198. iTimeMilliseconds = (INT) (goLocalCopy.eTimeInterval * (FLOAT) 1000.0) ;
  199. pGraphs->gInterval = iTimeMilliseconds ;
  200. if (!PlayingBackLog())
  201. {
  202. SetGraphTimer(pGraphs) ;
  203. }
  204. lgraph->bManualRefresh = LocalManualRefresh ;
  205. }
  206. else if (LocalManualRefresh != lgraph->bManualRefresh)
  207. {
  208. ToggleGraphRefresh (hWndGraph) ;
  209. }
  210. // Assign the local copy of the graph options to the
  211. // global copy.
  212. lgraph->gOptions = goLocalCopy ;
  213. SizeGraphComponents (hWndGraph) ;
  214. WindowInvalidate (hWndGraph) ;
  215. dwCurrentDlgID = 0 ;
  216. EndDialog (hDlg, 1) ;
  217. return (TRUE) ;
  218. break ;
  219. case IDCANCEL:
  220. dwCurrentDlgID = 0 ;
  221. EndDialog(hDlg,0);
  222. return(TRUE);
  223. case ID_HELP:
  224. CallWinHelp (dwCurrentDlgID) ;
  225. break ;
  226. default:
  227. break;
  228. }
  229. break;
  230. default:
  231. break;
  232. }
  233. return(FALSE);
  234. }
  235. DWORD iIntervalMSecs ;
  236. void static OnAlertOptionDlgInit (HWND hDlg, PALERT pAlert)
  237. {
  238. BOOL EnableFlag ;
  239. iIntervalMSecs = pAlert->iIntervalMSecs ;
  240. LocalManualRefresh = pAlert->bManualRefresh ;
  241. if (PlayingBackLog())
  242. {
  243. // When playingback log, disable all controls except
  244. // the alert interval
  245. //
  246. EnableFlag = TRUE ;
  247. DialogEnable (hDlg, IDD_ALERTOPTIONSMANUALREFRESH, FALSE) ;
  248. DialogEnable (hDlg, IDD_ALERTOPTIONSPOPUP, FALSE) ;
  249. DialogEnable (hDlg, IDD_ALERTOPTIONSNETWORKALERT, FALSE) ;
  250. DialogEnable (hDlg, IDD_ALERTOPTIONSNETGROUPTEXT, FALSE) ;
  251. DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAME, FALSE) ;
  252. DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAMETEXT, FALSE) ;
  253. }
  254. else
  255. {
  256. EnableFlag = !LocalManualRefresh ;
  257. DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAME, pAlert->bNetworkAlert) ;
  258. DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAMETEXT, pAlert->bNetworkAlert) ;
  259. }
  260. // setup the Update time interval group items
  261. DialogSetInterval (hDlg, IDD_ALERTOPTIONSINTERVAL, iIntervalMSecs) ;
  262. DialogEnable (hDlg, IDD_ALERTOPTIONSINTERVAL, EnableFlag) ;
  263. DialogEnable (hDlg, IDD_ALERTOPTIONSINTERVALTEXT, EnableFlag) ;
  264. CheckRadioButton(hDlg, IDD_ALERTOPTIONSMANUALREFRESH,
  265. IDD_ALERTOPTIONSPERIODIC,
  266. !EnableFlag ? IDD_ALERTOPTIONSMANUALREFRESH : IDD_ALERTOPTIONSPERIODIC) ;
  267. CheckDlgButton (hDlg, IDD_ALERTOPTIONSEVENTLOG, pAlert->bEventLog) ;
  268. CheckDlgButton (hDlg, IDD_ALERTOPTIONSPOPUP, pAlert->bSwitchToAlert) ;
  269. CheckDlgButton (hDlg, IDD_ALERTOPTIONSNETWORKALERT, pAlert->bNetworkAlert) ;
  270. if (pAlert->MessageName[0])
  271. {
  272. DialogSetString (hDlg, IDD_ALERTOPTIONSMSGNAME, pAlert->MessageName) ;
  273. }
  274. EditSetLimit (GetDlgItem(hDlg, IDD_ALERTOPTIONSMSGNAME),
  275. sizeof(pAlert->MessageName)/sizeof(TCHAR) - 1) ;
  276. dwCurrentDlgID = HC_PM_idDlgOptionAlert ;
  277. WindowCenter (hDlg) ;
  278. } // OnAlertOptionDlgInit
  279. BOOL FAR PASCAL AlertOptionDlg (HWND hDlg, WORD msg,
  280. DWORD wParam, LONG lParam)
  281. {
  282. PALERT pAlert ;
  283. switch(msg)
  284. {
  285. case WM_INITDIALOG:
  286. pAlert = (PALERT) lParam ;
  287. OnAlertOptionDlgInit (hDlg, pAlert) ;
  288. return(TRUE);
  289. case WM_COMMAND:
  290. switch(LOWORD(wParam))
  291. {
  292. case IDOK:
  293. {
  294. FLOAT eTimeInterval ;
  295. pAlert = AlertData (hWndAlert) ;
  296. eTimeInterval = DialogFloat (hDlg, IDD_ALERTOPTIONSINTERVAL, NULL) ;
  297. if (eTimeInterval > MAX_INTERVALSEC ||
  298. eTimeInterval < MIN_INTERVALSEC)
  299. {
  300. DlgErrorBox (hDlg, ERR_BADTIMEINTERVAL) ;
  301. SetFocus (DialogControl (hDlg, IDD_ALERTOPTIONSINTERVAL)) ;
  302. EditSetTextEndPos (hDlg, IDD_ALERTOPTIONSINTERVAL) ;
  303. return (FALSE) ;
  304. break ;
  305. }
  306. eTimeInterval = eTimeInterval * (FLOAT) 1000.0 +
  307. (FLOAT) 0.5 ;
  308. iIntervalMSecs = (DWORD) eTimeInterval ;
  309. pAlert->bNetworkAlert =
  310. IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSNETWORKALERT) ;
  311. pAlert->bSwitchToAlert =
  312. IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSPOPUP) ;
  313. pAlert->bEventLog =
  314. IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSEVENTLOG) ;
  315. if (!PlayingBackLog())
  316. {
  317. DialogText (hDlg,
  318. IDD_ALERTOPTIONSMSGNAME,
  319. pAlert->MessageName) ;
  320. }
  321. dwCurrentDlgID = 0 ;
  322. EndDialog (hDlg, 1) ;
  323. }
  324. break ;
  325. case IDCANCEL:
  326. dwCurrentDlgID = 0 ;
  327. EndDialog(hDlg,0);
  328. return(TRUE);
  329. case IDD_ALERTOPTIONSPERIODIC:
  330. case IDD_ALERTOPTIONSMANUALREFRESH:
  331. if (!PlayingBackLog())
  332. {
  333. // check if the Manual refresh is currently checked.
  334. // Then toggle the ManualRefresh button
  335. LocalManualRefresh =
  336. (LOWORD(wParam) == IDD_ALERTOPTIONSMANUALREFRESH) ;
  337. CheckRadioButton(hDlg,
  338. IDD_ALERTOPTIONSMANUALREFRESH,
  339. IDD_ALERTOPTIONSPERIODIC,
  340. LocalManualRefresh ? IDD_ALERTOPTIONSMANUALREFRESH :
  341. IDD_ALERTOPTIONSPERIODIC) ;
  342. DialogEnable (hDlg,
  343. IDD_ALERTOPTIONSINTERVAL,
  344. !LocalManualRefresh) ;
  345. DialogEnable (hDlg,
  346. IDD_ALERTOPTIONSINTERVALTEXT,
  347. !LocalManualRefresh) ;
  348. }
  349. break ;
  350. #if 0
  351. case IDD_ALERTOPTIONSPOPUP:
  352. bSwitchToAlert = !bSwitchToAlert ;
  353. CheckDlgButton (hDlg, IDD_ALERTOPTIONSPOPUP, bSwitchToAlert) ;
  354. break;
  355. #endif
  356. case IDD_ALERTOPTIONSNETWORKALERT:
  357. {
  358. BOOL bNetworkAlert ;
  359. bNetworkAlert =
  360. IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSNETWORKALERT) ;
  361. DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAME, bNetworkAlert) ;
  362. DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAMETEXT, bNetworkAlert) ;
  363. if (bNetworkAlert)
  364. {
  365. SetFocus (GetDlgItem(hDlg, IDD_ALERTOPTIONSMSGNAME)) ;
  366. SendDlgItemMessage(hDlg, IDD_ALERTOPTIONSMSGNAME,
  367. EM_SETSEL, 0, 16) ;
  368. }
  369. }
  370. break;
  371. case IDD_DISPLAYHELP:
  372. CallWinHelp (dwCurrentDlgID) ;
  373. break ;
  374. default:
  375. break;
  376. }
  377. break;
  378. default:
  379. break;
  380. }
  381. return (FALSE);
  382. } // AlertOptionDlg
  383. BOOL DisplayAlertOptions (HWND hWndParent,
  384. HWND hWndAlert)
  385. { // DisplayAlertOptions
  386. PALERT pAlert ;
  387. pAlert = AlertData (hWndParent) ;
  388. if (DialogBoxParam (hInstance, idDlgAlertOptions,
  389. hWndParent, (DLGPROC) AlertOptionDlg,
  390. (LPARAM) pAlert))
  391. { // if
  392. if (pAlert->bNetworkAlert && pAlert->hNetAlertThread == 0)
  393. {
  394. AlertCreateThread (pAlert) ;
  395. }
  396. if (PlayingBackLog())
  397. {
  398. if (pAlert->iIntervalMSecs != iIntervalMSecs)
  399. {
  400. // a new time interval, re-do the backing back log
  401. // using the new value...
  402. pAlert->iIntervalMSecs = iIntervalMSecs ;
  403. DialogSetInterval (hWndAlert, IDD_ALERTINTERVAL, iIntervalMSecs) ;
  404. if (pAlert->pLineFirst)
  405. {
  406. PlaybackAlert (hWndAlert, 0) ;
  407. WindowInvalidate (hWndAlert) ;
  408. }
  409. }
  410. }
  411. else if (LocalManualRefresh != pAlert->bManualRefresh)
  412. {
  413. if (!LocalManualRefresh)
  414. {
  415. pAlert->iIntervalMSecs = iIntervalMSecs ;
  416. DialogSetInterval (hWndAlert, IDD_ALERTINTERVAL, iIntervalMSecs) ;
  417. }
  418. ToggleAlertRefresh (hWndAlert) ;
  419. }
  420. else if (!LocalManualRefresh)
  421. {
  422. pAlert->iIntervalMSecs = iIntervalMSecs ;
  423. SetAlertTimer (pAlert) ;
  424. DialogSetInterval (hWndAlert, IDD_ALERTINTERVAL, iIntervalMSecs) ;
  425. }
  426. } // if
  427. return (TRUE) ;
  428. } // DisplayAlertOptions