/***************************************************************************** * * Dialogs.c - This module handles the Menu and Dialog user interactions. * * Microsoft Confidential * Copyright (c) 1992-1993 Microsoft Corporation * ****************************************************************************/ #include #include // for swscanf #include "perfmon.h" #include "perfmops.h" // for ConvertDecimalPoint #include "alert.h" // for SetAlertTimer, AlertData #include "graph.h" #include "cderr.h" #include "utils.h" #include "playback.h" // for PlayingBackLog #include "grafdisp.h" // for ToggleGraphRefresh #include "pmhelpid.h" // Help IDs BOOL LocalManualRefresh ; INT_PTR GraphOptionDlg( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam ) { static GRAPH_OPTIONS goLocalCopy ; INT iTimeMilliseconds ; TCHAR szBuff[MiscTextLen] ; PGRAPHSTRUCT lgraph; lParam ; lgraph = pGraphs; switch (msg) { case WM_INITDIALOG: dwCurrentDlgID = HC_PM_idDlgOptionChart ; // Init the Radio button, Check boxes and text fields. goLocalCopy.iGraphOrHistogram = lgraph->gOptions.iGraphOrHistogram ; if (lgraph->gOptions.iGraphOrHistogram == LINE_GRAPH) CheckRadioButton(hDlg, ID_GRAPH, ID_HISTOGRAM, ID_GRAPH) ; else CheckRadioButton(hDlg, ID_GRAPH, ID_HISTOGRAM, ID_HISTOGRAM) ; CheckDlgButton(hDlg, ID_LEGEND, lgraph->gOptions.bLegendChecked) ; if (!(lgraph->gOptions.bLegendChecked)) { // can't display valuebar w/o legend DialogEnable (hDlg, IDD_CHARTOPTIONSVALUEBAR, FALSE) ; } CheckDlgButton(hDlg, ID_LABELS, lgraph->gOptions.bLabelsChecked) ; CheckDlgButton(hDlg, ID_VERT_GRID, lgraph->gOptions.bVertGridChecked) ; CheckDlgButton(hDlg, ID_HORZ_GRID, lgraph->gOptions.bHorzGridChecked) ; CheckDlgButton(hDlg, IDD_CHARTOPTIONSVALUEBAR, lgraph->gOptions.bStatusBarChecked) ; TSPRINTF(szBuff, TEXT("%d"), lgraph->gOptions.iVertMax) ; SendDlgItemMessage(hDlg, ID_VERT_MAX, WM_SETTEXT, 0, (LONG_PTR) szBuff) ; TSPRINTF(szBuff, TEXT("%3.3f"), lgraph->gOptions.eTimeInterval) ; ConvertDecimalPoint (szBuff) ; SendDlgItemMessage(hDlg, IDD_CHARTOPTIONSINTERVAL, WM_SETTEXT, 0, (LONG_PTR) szBuff) ; // Pickup a local copy of the Graph Options. goLocalCopy = lgraph->gOptions ; LocalManualRefresh = lgraph->bManualRefresh ; if (PlayingBackLog()) { DialogEnable (hDlg, IDD_CHARTOPTIONSPERIODIC, FALSE) ; DialogEnable (hDlg, IDD_CHARTOPTIONSUPDATETEXT, FALSE) ; DialogEnable (hDlg, IDD_CHARTOPTIONSMANUALREFRESH, FALSE) ; } else { CheckRadioButton (hDlg, IDD_CHARTOPTIONSMANUALREFRESH, IDD_CHARTOPTIONSPERIODIC, LocalManualRefresh ? IDD_CHARTOPTIONSMANUALREFRESH : IDD_CHARTOPTIONSPERIODIC) ; } if (lgraph->bManualRefresh || PlayingBackLog()) { DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVALTEXT, FALSE) ; DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVAL, FALSE) ; } else { DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVALTEXT, TRUE) ; DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVAL, TRUE) ; } EditSetLimit (GetDlgItem(hDlg, ID_VERT_MAX), sizeof(szBuff) / sizeof(TCHAR) - 1) ; EditSetLimit (GetDlgItem(hDlg, IDD_CHARTOPTIONSINTERVAL), ShortTextLen) ; WindowCenter (hDlg) ; return(TRUE); case WM_COMMAND: switch (LOWORD(wParam)) { case ID_VERT_MAX: if (HIWORD(wParam) == EN_CHANGE) { DialogText(hDlg, ID_VERT_MAX, szBuff) ; swscanf(szBuff, TEXT("%d"), &goLocalCopy.iVertMax) ; } break ; case IDD_CHARTOPTIONSINTERVAL: if (HIWORD(wParam) == EN_CHANGE) { goLocalCopy.eTimeInterval = DialogFloat (hDlg, IDD_CHARTOPTIONSINTERVAL, NULL) ; } break ; case IDD_CHARTOPTIONSPERIODIC: case IDD_CHARTOPTIONSMANUALREFRESH: // check if the Manual refresh is currently checked. // Then toggle the ManualRefresh button LocalManualRefresh = (LOWORD(wParam) == IDD_CHARTOPTIONSMANUALREFRESH) ; CheckRadioButton (hDlg, IDD_CHARTOPTIONSMANUALREFRESH, IDD_CHARTOPTIONSPERIODIC, LocalManualRefresh ? IDD_CHARTOPTIONSMANUALREFRESH : IDD_CHARTOPTIONSPERIODIC) ; // gray out time interval if necessary... DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVALTEXT, !LocalManualRefresh) ; DialogEnable (hDlg, IDD_CHARTOPTIONSINTERVAL, !LocalManualRefresh) ; break ; case IDD_CHARTOPTIONSVALUEBAR: if (goLocalCopy.bStatusBarChecked == TRUE) goLocalCopy.bStatusBarChecked = FALSE ; else goLocalCopy.bStatusBarChecked = TRUE ; break ; case ID_LEGEND: if (goLocalCopy.bLegendChecked == TRUE) goLocalCopy.bLegendChecked = FALSE ; else goLocalCopy.bLegendChecked = TRUE ; DialogEnable (hDlg, IDD_CHARTOPTIONSVALUEBAR, goLocalCopy.bLegendChecked) ; break ; case ID_LABELS: if (goLocalCopy.bLabelsChecked == TRUE) goLocalCopy.bLabelsChecked = FALSE ; else goLocalCopy.bLabelsChecked = TRUE ; break ; case ID_VERT_GRID: if (goLocalCopy.bVertGridChecked == TRUE) goLocalCopy.bVertGridChecked = FALSE ; else goLocalCopy.bVertGridChecked = TRUE ; break ; case ID_HORZ_GRID: if (goLocalCopy.bHorzGridChecked == TRUE) goLocalCopy.bHorzGridChecked = FALSE ; else goLocalCopy.bHorzGridChecked = TRUE ; break ; case ID_GRAPH: case ID_HISTOGRAM: if (LOWORD(wParam) == ID_GRAPH) { goLocalCopy.iGraphOrHistogram = LINE_GRAPH ; } else { goLocalCopy.iGraphOrHistogram = BAR_GRAPH ; } CheckRadioButton(hDlg, ID_GRAPH, ID_HISTOGRAM, goLocalCopy.iGraphOrHistogram == LINE_GRAPH ? ID_GRAPH : ID_HISTOGRAM) ; break ; case IDOK: // verify some numeric entries first if (goLocalCopy.iVertMax > MAX_VERTICAL || goLocalCopy.iVertMax < MIN_VERTICAL) { DlgErrorBox (hDlg, ERR_BADVERTMAX) ; SetFocus (DialogControl (hDlg, ID_VERT_MAX)) ; EditSetTextEndPos (hDlg, ID_VERT_MAX) ; return (FALSE) ; break ; } if (goLocalCopy.eTimeInterval > MAX_INTERVALSEC || goLocalCopy.eTimeInterval < MIN_INTERVALSEC) { DlgErrorBox (hDlg, ERR_BADTIMEINTERVAL) ; SetFocus (DialogControl (hDlg, IDD_CHARTOPTIONSINTERVAL)) ; EditSetTextEndPos (hDlg, IDD_CHARTOPTIONSINTERVAL) ; return (FALSE) ; break ; } // We need to send a size message to the main window // so it can setup the redraw of the graph and legend. lgraph->gOptions.bLegendChecked = goLocalCopy.bLegendChecked ; lgraph->gOptions.bStatusBarChecked = goLocalCopy.bStatusBarChecked ; if (lgraph->gOptions.eTimeInterval != goLocalCopy.eTimeInterval && !LocalManualRefresh) { iTimeMilliseconds = (INT) (goLocalCopy.eTimeInterval * (FLOAT) 1000.0) ; pGraphs->gInterval = iTimeMilliseconds ; if (!PlayingBackLog()) { SetGraphTimer(pGraphs) ; } lgraph->bManualRefresh = LocalManualRefresh ; } else if (LocalManualRefresh != lgraph->bManualRefresh) { ToggleGraphRefresh (hWndGraph) ; } // Assign the local copy of the graph options to the // global copy. lgraph->gOptions = goLocalCopy ; SizeGraphComponents (hWndGraph) ; WindowInvalidate (hWndGraph) ; dwCurrentDlgID = 0 ; EndDialog (hDlg, 1) ; return (TRUE) ; break ; case IDCANCEL: dwCurrentDlgID = 0 ; EndDialog(hDlg,0); return(TRUE); case ID_HELP: CallWinHelp (dwCurrentDlgID, hDlg) ; break ; default: break; } break; default: break; } return(FALSE); } DWORD iIntervalMSecs ; void static OnAlertOptionDlgInit ( HWND hDlg, PALERT pAlert ) { BOOL EnableFlag ; iIntervalMSecs = pAlert->iIntervalMSecs ; LocalManualRefresh = pAlert->bManualRefresh ; if (PlayingBackLog()) { // When playingback log, disable all controls except // the alert interval // EnableFlag = TRUE ; DialogEnable (hDlg, IDD_ALERTOPTIONSMANUALREFRESH, FALSE) ; DialogEnable (hDlg, IDD_ALERTOPTIONSPOPUP, FALSE) ; DialogEnable (hDlg, IDD_ALERTOPTIONSNETWORKALERT, FALSE) ; DialogEnable (hDlg, IDD_ALERTOPTIONSNETGROUPTEXT, FALSE) ; DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAME, FALSE) ; DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAMETEXT, FALSE) ; } else { EnableFlag = !LocalManualRefresh ; DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAME, pAlert->bNetworkAlert) ; DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAMETEXT, pAlert->bNetworkAlert) ; } // setup the Update time interval group items DialogSetInterval (hDlg, IDD_ALERTOPTIONSINTERVAL, iIntervalMSecs) ; DialogEnable (hDlg, IDD_ALERTOPTIONSINTERVAL, EnableFlag) ; DialogEnable (hDlg, IDD_ALERTOPTIONSINTERVALTEXT, EnableFlag) ; CheckRadioButton(hDlg, IDD_ALERTOPTIONSMANUALREFRESH, IDD_ALERTOPTIONSPERIODIC, !EnableFlag ? IDD_ALERTOPTIONSMANUALREFRESH : IDD_ALERTOPTIONSPERIODIC) ; CheckDlgButton (hDlg, IDD_ALERTOPTIONSEVENTLOG, pAlert->bEventLog) ; CheckDlgButton (hDlg, IDD_ALERTOPTIONSPOPUP, pAlert->bSwitchToAlert) ; CheckDlgButton (hDlg, IDD_ALERTOPTIONSNETWORKALERT, pAlert->bNetworkAlert) ; if (pAlert->MessageName[0]) { DialogSetString (hDlg, IDD_ALERTOPTIONSMSGNAME, pAlert->MessageName) ; } EditSetLimit (GetDlgItem(hDlg, IDD_ALERTOPTIONSMSGNAME), sizeof(pAlert->MessageName)/sizeof(TCHAR) - 1) ; dwCurrentDlgID = HC_PM_idDlgOptionAlert ; WindowCenter (hDlg) ; } INT_PTR AlertOptionDlg ( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam ) { PALERT pAlert ; switch (msg) { case WM_INITDIALOG: pAlert = (PALERT) lParam ; OnAlertOptionDlgInit (hDlg, pAlert) ; return(TRUE); case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { FLOAT eTimeInterval ; pAlert = AlertData (hWndAlert) ; eTimeInterval = DialogFloat (hDlg, IDD_ALERTOPTIONSINTERVAL, NULL) ; if (eTimeInterval > MAX_INTERVALSEC || eTimeInterval < MIN_INTERVALSEC) { DlgErrorBox (hDlg, ERR_BADTIMEINTERVAL) ; SetFocus (DialogControl (hDlg, IDD_ALERTOPTIONSINTERVAL)) ; EditSetTextEndPos (hDlg, IDD_ALERTOPTIONSINTERVAL) ; return (FALSE) ; break ; } eTimeInterval = eTimeInterval * (FLOAT) 1000.0 + (FLOAT) 0.5 ; iIntervalMSecs = (DWORD) eTimeInterval ; pAlert->bNetworkAlert = IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSNETWORKALERT) ; pAlert->bSwitchToAlert = IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSPOPUP) ; pAlert->bEventLog = IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSEVENTLOG) ; if (!PlayingBackLog()) { DialogText (hDlg, IDD_ALERTOPTIONSMSGNAME, pAlert->MessageName) ; } dwCurrentDlgID = 0 ; EndDialog (hDlg, 1) ; } break ; case IDCANCEL: dwCurrentDlgID = 0 ; EndDialog(hDlg,0); return(TRUE); case IDD_ALERTOPTIONSPERIODIC: case IDD_ALERTOPTIONSMANUALREFRESH: if (!PlayingBackLog()) { // check if the Manual refresh is currently checked. // Then toggle the ManualRefresh button LocalManualRefresh = (LOWORD(wParam) == IDD_ALERTOPTIONSMANUALREFRESH) ; CheckRadioButton(hDlg, IDD_ALERTOPTIONSMANUALREFRESH, IDD_ALERTOPTIONSPERIODIC, LocalManualRefresh ? IDD_ALERTOPTIONSMANUALREFRESH : IDD_ALERTOPTIONSPERIODIC) ; DialogEnable (hDlg, IDD_ALERTOPTIONSINTERVAL, !LocalManualRefresh) ; DialogEnable (hDlg, IDD_ALERTOPTIONSINTERVALTEXT, !LocalManualRefresh) ; } break ; #if 0 case IDD_ALERTOPTIONSPOPUP: bSwitchToAlert = !bSwitchToAlert ; CheckDlgButton (hDlg, IDD_ALERTOPTIONSPOPUP, bSwitchToAlert) ; break; #endif case IDD_ALERTOPTIONSNETWORKALERT: { BOOL bNetworkAlert ; bNetworkAlert = IsDlgButtonChecked (hDlg, IDD_ALERTOPTIONSNETWORKALERT) ; DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAME, bNetworkAlert) ; DialogEnable (hDlg, IDD_ALERTOPTIONSMSGNAMETEXT, bNetworkAlert) ; if (bNetworkAlert) { SetFocus (GetDlgItem(hDlg, IDD_ALERTOPTIONSMSGNAME)) ; SendDlgItemMessage(hDlg, IDD_ALERTOPTIONSMSGNAME, EM_SETSEL, 0, 16) ; } } break; case IDD_DISPLAYHELP: CallWinHelp (dwCurrentDlgID, hDlg) ; break ; default: break; } break; default: break; } return (FALSE); } BOOL DisplayAlertOptions ( HWND hWndParent, HWND hWndAlert ) { PALERT pAlert ; pAlert = AlertData (hWndParent) ; if (DialogBoxParam (hInstance, idDlgAlertOptions, hWndParent, AlertOptionDlg, (LPARAM) pAlert)) { if (pAlert->bNetworkAlert && pAlert->hNetAlertThread == 0) { AlertCreateThread (pAlert) ; } if (PlayingBackLog()) { if (pAlert->iIntervalMSecs != iIntervalMSecs) { // a new time interval, re-do the backing back log // using the new value... pAlert->iIntervalMSecs = iIntervalMSecs ; DialogSetInterval (hWndAlert, IDD_ALERTINTERVAL, iIntervalMSecs) ; if (pAlert->pLineFirst) { PlaybackAlert (hWndAlert, 0) ; WindowInvalidate (hWndAlert) ; } } } else if (LocalManualRefresh != pAlert->bManualRefresh) { if (!LocalManualRefresh) { pAlert->iIntervalMSecs = iIntervalMSecs ; DialogSetInterval (hWndAlert, IDD_ALERTINTERVAL, iIntervalMSecs) ; } ToggleAlertRefresh (hWndAlert) ; } else if (!LocalManualRefresh) { pAlert->iIntervalMSecs = iIntervalMSecs ; SetAlertTimer (pAlert) ; DialogSetInterval (hWndAlert, IDD_ALERTINTERVAL, iIntervalMSecs) ; } } return (TRUE) ; }