|
|
/*****************************************************************************
* * Dialogs.c - This module handles the Menu and Dialog user interactions. * * Microsoft Confidential * Copyright (c) 1992-1993 Microsoft Corporation * ****************************************************************************/
#include <stdio.h>
#include <wchar.h> // 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) ; }
|