home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / winnt / perfmon / command.c < prev    next >
C/C++ Source or Header  |  1997-10-05  |  30KB  |  1,046 lines

  1. /*
  2. ==============================================================================
  3.  
  4.   Application:
  5.  
  6.             Microsoft Windows NT (TM) Performance Monitor
  7.  
  8.   File:
  9.             Command.c -- PerfmonCommand routine and helpers.
  10.  
  11.             This file contains the PerfmonCommand routine, which handles
  12.             all of the user's menu selections.
  13.  
  14.   Copyright 1992-1997, Microsoft Corporation. All Rights Reserved.
  15.             Microsoft Confidential.
  16. ==============================================================================
  17. */
  18.  
  19.  
  20. //==========================================================================//
  21. //                                  Includes                                //
  22. //==========================================================================//
  23.  
  24.  
  25. #include "stdio.h"
  26. #include "perfmon.h"
  27. #include "command.h"    // External declarations for this file
  28. #include <shellapi.h>   // for ShellAbout
  29.  
  30. #include "addlog.h"     // for AddLog
  31. #include "alert.h"      // for CurrentAlertLine
  32. #include "bookmark.h"   // for AddBookmark
  33. #include "cderr.h"
  34. #include "datasrc.h"    // for DisplayDataSourceOptions
  35. #include "dialogs.h"
  36. #include "dispoptn.h"   // for DisplayDisplayOptions
  37. #include "fileopen.h"   // for FileOpen
  38. #include "grafdata.h"   // for ChartDeleteLine ClearGraphDisplay
  39. #include "grafdisp.h"   // for ToggleGraphRefresh
  40. #include "graph.h"      // for SizeGraphComponents
  41. #include "init.h"       // for PerfmonClose
  42. #include "legend.h"
  43. #include "log.h"        // for LogTimer
  44. #include "logoptns.h"
  45. #include "playback.h"
  46. #include "report.h"     // for CurrentReportItem
  47. #include "rptoptns.h"   // for DisplayReportOptions
  48. #include "status.h"     // for StatusUpdateIcons
  49. #include "timefrm.h"    // for SetTimeframe
  50. #include "toolbar.h"    // for ToolbarDepressButton
  51. #include "utils.h"
  52. #include "perfmops.h"   // for SaveWorkspace
  53.  
  54. int static deltax ;
  55. int static deltay ;
  56.  
  57. #define ABOUT_TIMER_ID 10
  58.  
  59. int FAR WINAPI AboutDlgProc (HWND hDlg,
  60.                              unsigned iMessage,
  61.                              WPARAM wParam,
  62.                              LPARAM lParam)
  63.    {
  64.    BOOL           bHandled ;
  65.  
  66.    bHandled = TRUE ;
  67.    switch (iMessage)
  68.       {
  69.       case WM_INITDIALOG:
  70.          deltax = 0 ;
  71.          deltay = 0 ;
  72.          dwCurrentDlgID = 0 ;
  73.          SetTimer(hDlg, ABOUT_TIMER_ID, 1000, NULL) ;
  74.          WindowCenter (hDlg) ;
  75.          return (TRUE) ;
  76.  
  77.       case WM_TIMER:
  78.          deltax += 2 ;
  79.          if (deltax > 60)
  80.             deltax = 0 ;
  81.  
  82.          deltay += 5 ;
  83.          if (deltay > 60)
  84.             deltay = 0 ;
  85.  
  86.          WindowInvalidate (DialogControl (hDlg, 524)) ;
  87.          break ;
  88.  
  89.       case WM_DRAWITEM:
  90.          {
  91.          int xPos, yPos ;
  92.          LPDRAWITEMSTRUCT lpItem ;
  93.  
  94.          lpItem = (LPDRAWITEMSTRUCT) lParam ;
  95.          xPos = lpItem->rcItem.left + deltax ;
  96.          yPos = lpItem->rcItem.top + deltay ;
  97.          DrawIcon (lpItem->hDC, xPos, yPos, hIcon) ;
  98.          }
  99.          break ;
  100.  
  101.       case WM_CLOSE:
  102.          dwCurrentDlgID = 0 ;
  103.          KillTimer (hDlg, ABOUT_TIMER_ID) ;
  104.          EndDialog (hDlg, 1) ;
  105.          break ;
  106.  
  107.       case WM_COMMAND:
  108.          switch(wParam)
  109.             {
  110.             case IDD_OK:
  111.                dwCurrentDlgID = 0 ;
  112.                EndDialog (hDlg, 1) ;
  113.                break ;
  114.  
  115.             default:
  116.                bHandled = FALSE ;
  117.                break;
  118.             }
  119.          break;
  120.  
  121.  
  122.       default:
  123.             bHandled = FALSE ;
  124.          break ;
  125.       }  // switch
  126.  
  127.    return (bHandled) ;
  128.    }  // AboutDlgProc
  129.  
  130.  
  131. //==========================================================================//
  132. //                              Local Functions                             //
  133. //==========================================================================//
  134.  
  135.  
  136. void ChangeView (HWND hWnd,
  137.                  int iNewView)
  138.    {  // ChangeView
  139.    HMENU hMenu = GetMenu (hWnd) ;
  140.    BOOL  bViewChart, bViewAlert, bViewLog, bViewReport ;
  141.  
  142. #ifdef ADVANCED_PERFMON
  143.    iPerfmonView = iNewView ;
  144.    bViewChart = bViewAlert = bViewLog = bViewReport = FALSE;
  145.  
  146.    switch (iNewView)
  147.       {
  148.       case IDM_VIEWCHART:
  149.          bViewChart = TRUE ;
  150.          break ;
  151.  
  152.       case IDM_VIEWALERT:
  153.          bViewAlert = TRUE ;
  154.          break ;
  155.  
  156.       case IDM_VIEWLOG:
  157.          bViewLog = TRUE ;
  158.          break ;
  159.  
  160.       case IDM_VIEWREPORT:
  161.          bViewReport = TRUE ;
  162.          break ;
  163.       }
  164.  
  165.    WindowShow (hWndGraph, bViewChart) ;
  166.    WindowShow (hWndAlert, bViewAlert) ;
  167.    WindowShow (hWndLog, bViewLog) ;
  168.    WindowShow (hWndReport, bViewReport) ;
  169.  
  170.    // set focus on the Legend window
  171.    if (iPerfmonView == IDM_VIEWCHART)
  172.       {
  173.       SetFocus (hWndGraphLegend) ;
  174.       }
  175.    else if (iPerfmonView == IDM_VIEWALERT)
  176.       {
  177.       SetFocus (hWndAlertLegend) ;
  178.       }
  179.    else if (iPerfmonView == IDM_VIEWLOG)
  180.       {
  181.       SetFocus (hWndLogEntries) ;
  182.       }
  183.    else if (iPerfmonView == IDM_VIEWREPORT)
  184.       {
  185.       SetFocus (hWndReport) ;
  186.       }
  187.  
  188.  
  189.    if (hMenu)
  190.       {
  191.       MenuCheck (hMenu, IDM_VIEWCHART, bViewChart) ;
  192.       MenuCheck (hMenu, IDM_VIEWALERT, bViewAlert) ;
  193.       MenuCheck (hMenu, IDM_VIEWLOG, bViewLog) ;
  194.       MenuCheck (hMenu, IDM_VIEWREPORT, bViewReport) ;
  195.  
  196.       // show the Title bar
  197.       ShowPerfmonWindowText () ;
  198.       }
  199.  
  200.    ToolbarDepressButton (hWndToolbar, ChartTool, bViewChart) ;
  201.    ToolbarDepressButton (hWndToolbar, AlertTool, bViewAlert) ;
  202.    ToolbarDepressButton (hWndToolbar, LogTool, bViewLog) ;
  203.    ToolbarDepressButton (hWndToolbar, ReportTool, bViewReport) ;
  204. #else
  205.    // only Chart view in Perfmon Lite
  206.    iPerfmonView = IDM_VIEWCHART ;
  207.    WindowShow (hWndGraph, TRUE) ;
  208. #endif
  209.  
  210.    DrawMenuBar(hWnd) ;
  211.    StatusLineReady (hWndStatus) ;
  212.    }  // ChangeView
  213.  
  214.  
  215. //==========================================================================//
  216. //                              Message Handlers                            //
  217. //==========================================================================//
  218.  
  219.  
  220. void ViewChart (HWND hWnd)
  221.    {
  222.    if (Options.bMenubar)
  223.       SetMenu (hWnd, hMenuChart) ;
  224.    ChangeView (hWnd, IDM_VIEWCHART) ;
  225.    }
  226.  
  227.  
  228. void ViewAlert (HWND hWnd)
  229.    {
  230.    iUnviewedAlerts = 0 ;
  231.    StatusUpdateIcons (hWndStatus) ;
  232.    if (Options.bMenubar)
  233.       SetMenu (hWnd, hMenuAlert) ;
  234.    ChangeView (hWnd, IDM_VIEWALERT) ;
  235.    }
  236.  
  237.  
  238. void ViewLog (HWND hWnd)
  239.    {
  240.    if (Options.bMenubar)
  241.       SetMenu (hWnd, hMenuLog) ;
  242.    ChangeView (hWnd, IDM_VIEWLOG) ;
  243.    }
  244.  
  245.  
  246. void ViewReport (HWND hWnd)
  247.    {
  248.    if (Options.bMenubar)
  249.       SetMenu (hWnd, hMenuReport) ;
  250.    ChangeView (hWnd, IDM_VIEWREPORT) ;
  251.    }
  252.  
  253.  
  254. #ifdef KEEP_MANUALREFRESH
  255. void ToggleRefresh (HWND hWnd)
  256.    {
  257.    BOOL           bRefresh ;
  258.  
  259.    switch (iPerfmonView)
  260.       {
  261.       case IDM_VIEWCHART:
  262.          bRefresh = ToggleGraphRefresh (hWndGraph) ;
  263.          break ;
  264.  
  265.       case IDM_VIEWALERT:
  266.          bRefresh = ToggleAlertRefresh (hWndAlert) ;
  267.          break ;
  268.  
  269.       case IDM_VIEWLOG:
  270.          bRefresh = ToggleLogRefresh (hWndLog) ;
  271.          break ;
  272.  
  273.       case IDM_VIEWREPORT:
  274.          bRefresh = ToggleReportRefresh (hWndReport) ;
  275.          break ;
  276.       }  // switch
  277.  
  278.    MenuCheck (GetMenu (hWnd), IDM_OPTIONSMANUALREFRESH, bRefresh) ;
  279.    }  // ToggleRefresh
  280. #endif
  281.  
  282.  
  283. //==========================================================================//
  284. //                             Exported Functions                           //
  285. //==========================================================================//
  286.  
  287.  
  288. BOOL PerfmonCommand (HWND hWnd,
  289.                      WPARAM wParam,
  290.                      LPARAM lParam)
  291. /*
  292.    Effect:        Respond to the user's menu selection, found in wParam.
  293.                   In particular, branch to the appropriate OnXXX function
  294.                   to perform the action associated with each command.
  295.  
  296.    Called By:     MainWndProc (perfmon.c), in response to a WM_COMMAND
  297.                   message.
  298. */
  299.    {  // PerfmonCommand
  300.    PLINESTRUCT    pLine ;
  301.    BOOL           bPrepareMenu = TRUE ;
  302.  
  303.    switch (LOWORD (wParam))
  304.       {
  305.  
  306.       //=============================//
  307.       // Toolbar Commands            //
  308.       //=============================//
  309.  
  310.       case IDM_TOOLBARADD:
  311.          bPrepareMenu = FALSE ;
  312.  
  313.          switch (iPerfmonView)
  314.             {
  315.             case IDM_VIEWCHART:
  316.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDCHART, lParam) ;
  317.                break ;
  318.  
  319.             case IDM_VIEWALERT:
  320.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDALERT, lParam) ;
  321.                break ;
  322.  
  323.             case IDM_VIEWLOG:
  324.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDLOG, lParam) ;
  325.                break ;
  326.  
  327.             case IDM_VIEWREPORT:
  328.                SendMessage (hWnd, WM_COMMAND, IDM_EDITADDREPORT, lParam) ;
  329.                break ;
  330.             }  // switch
  331.          break ;
  332.  
  333.  
  334.       case IDM_TOOLBARMODIFY:
  335.          bPrepareMenu = FALSE ;
  336.  
  337.          switch (iPerfmonView)
  338.             {  // switch
  339.             case IDM_VIEWCHART:
  340.                SendMessage (hWnd, WM_COMMAND, IDM_EDITMODIFYCHART, lParam) ;
  341.                break ;
  342.  
  343.             case IDM_VIEWALERT:
  344.                SendMessage (hWnd, WM_COMMAND, IDM_EDITMODIFYALERT, lParam) ;
  345.                break ;
  346.  
  347.             case IDM_VIEWREPORT:
  348.                SendMessage (hWnd, WM_COMMAND, IDM_EDITMODIFYREPORT, lParam) ;
  349.                break ;
  350.             }  // switch
  351.          break ;
  352.  
  353.  
  354.       case IDM_TOOLBARDELETE:
  355.          bPrepareMenu = FALSE ;
  356.  
  357.          switch (iPerfmonView)
  358.             {
  359.             case IDM_VIEWCHART:
  360.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETECHART, lParam) ;
  361.                break ;
  362.  
  363.             case IDM_VIEWALERT:
  364.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETEALERT, lParam) ;
  365.                break ;
  366.  
  367.             case IDM_VIEWLOG:
  368.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETELOG, lParam) ;
  369.                break ;
  370.  
  371.             case IDM_VIEWREPORT:
  372.                SendMessage (hWnd, WM_COMMAND, IDM_EDITDELETEREPORT, lParam) ;
  373.                break ;
  374.             }  // switch
  375.          break ;
  376.  
  377.  
  378.       case IDM_TOOLBARREFRESH:
  379.          bPrepareMenu = FALSE ;
  380.  
  381.          switch (iPerfmonView)
  382.             {
  383.             case IDM_VIEWCHART:
  384.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWCHART, lParam) ;
  385.                break ;
  386.  
  387.             case IDM_VIEWALERT:
  388.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWALERT, lParam) ;
  389.                break ;
  390.  
  391.             case IDM_VIEWLOG:
  392.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWLOG, lParam) ;
  393.                break ;
  394.  
  395.             case IDM_VIEWREPORT:
  396.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREFRESHNOWREPORT, lParam) ;
  397.                break ;
  398.             }  // switch
  399.          break ;
  400.  
  401.  
  402.       case IDM_TOOLBAROPTIONS:
  403.          bPrepareMenu = FALSE ;
  404.  
  405.          switch (iPerfmonView)
  406.             {  // switch
  407.             case IDM_VIEWCHART:
  408.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSCHART, lParam) ;
  409.                break ;
  410.  
  411.             case IDM_VIEWALERT:
  412.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSALERT, lParam) ;
  413.                break ;
  414.  
  415.             case IDM_VIEWLOG:
  416.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSLOG, lParam) ;
  417.                break ;
  418.  
  419.             case IDM_VIEWREPORT:
  420.                SendMessage (hWnd, WM_COMMAND, IDM_OPTIONSREPORT, lParam) ;
  421.                break ;
  422.             }  // switch
  423.          break ;
  424.  
  425.  
  426.       //=============================//
  427.       // "File" Commands             //
  428.       //=============================//
  429.  
  430.  
  431.       case IDM_FILENEWCHART:
  432. //         if (QuerySaveChart (hWnd, pGraphs))
  433.             ResetGraphView (hWndGraph) ;
  434.          break ;
  435.  
  436.  
  437.       case IDM_FILENEWALERT:
  438. //         if (QuerySaveAlert (hWnd, hWndAlert))
  439.             ResetAlertView (hWndAlert) ;
  440.          break ;
  441.  
  442.       case IDM_FILENEWLOG:
  443.          ResetLogView (hWndLog) ;
  444.          break ;
  445.  
  446.       case IDM_FILENEWREPORT:
  447.          ResetReportView (hWndReport) ;
  448.          break ;
  449.  
  450.       case IDM_FILEOPENCHART:
  451.          FileOpen (hWndGraph, IDS_CHARTFILE, NULL) ;
  452.          break ;
  453.  
  454.       case IDM_FILEOPENALERT:
  455.          FileOpen (hWndAlert, IDS_ALERTFILE, NULL) ;
  456.          break ;
  457.  
  458.       case IDM_FILEOPENLOG:
  459.          FileOpen (hWndLog, IDS_LOGFILE, NULL) ;
  460.          break ;
  461.  
  462.       case IDM_FILEOPENREPORT:
  463.          FileOpen (hWndReport, IDS_REPORTFILE, NULL) ;
  464.          break ;
  465.  
  466.       case IDM_FILESAVECHART:
  467.       case IDM_FILESAVEASCHART:
  468.          bPrepareMenu = FALSE ;
  469.          SaveChart (hWndGraph, 0,
  470.             (LOWORD (wParam) == IDM_FILESAVEASCHART) ? TRUE : FALSE) ;
  471.          break;
  472.  
  473.       case IDM_FILESAVEALERT:
  474.       case IDM_FILESAVEASALERT:
  475.          bPrepareMenu = FALSE ;
  476.          SaveAlert (hWndAlert, 0,
  477.             (LOWORD (wParam) == IDM_FILESAVEASALERT) ? TRUE : FALSE) ;
  478.          break ;
  479.  
  480.       case IDM_FILESAVELOG:
  481.       case IDM_FILESAVEASLOG:
  482.          bPrepareMenu = FALSE ;
  483.          SaveLog (hWndLog, 0,
  484.             (LOWORD (wParam) == IDM_FILESAVEASLOG) ? TRUE : FALSE) ;
  485.          break ;
  486.  
  487.       case IDM_FILESAVEREPORT:
  488.       case IDM_FILESAVEASREPORT:
  489.          bPrepareMenu = FALSE ;
  490.          SaveReport (hWndReport, 0,
  491.             (LOWORD (wParam) == IDM_FILESAVEASREPORT) ? TRUE : FALSE) ;
  492.          break ;
  493.  
  494.  
  495.       case IDM_FILESAVEWORKSPACE:
  496.          bPrepareMenu = FALSE ;
  497.          SaveWorkspace () ;
  498.          break ;
  499.  
  500.       case IDM_FILEEXPORTCHART:
  501.          bPrepareMenu = FALSE ;
  502.          ExportChart () ;
  503.          break ;
  504.  
  505.       case IDM_FILEEXPORTALERT:
  506.          bPrepareMenu = FALSE ;
  507.          ExportAlert () ;
  508.          break ;
  509.  
  510.       case IDM_FILEEXPORTLOG:
  511.          bPrepareMenu = FALSE ;
  512.          ExportLog () ;
  513.          break ;
  514.  
  515.       case IDM_FILEEXPORTREPORT:
  516.          bPrepareMenu = FALSE ;
  517.          ExportReport () ;
  518.          break ;
  519.  
  520.  
  521. #ifdef KEEP_PRINT
  522.       case IDM_FILEPRINTCHART:
  523.           PrintChart (hWnd, pGraphs) ;
  524.           break ;
  525.  
  526.  
  527.       case IDM_FILEPRINTREPORT:
  528.          PrintReport (hWnd, hWndReport) ;
  529.          break ;
  530. #endif
  531.  
  532.       case IDM_FILEEXIT:
  533.          PerfmonClose (hWnd) ;
  534.          bPrepareMenu = FALSE ;
  535.          break ;
  536.  
  537.  
  538.       //=============================//
  539.       // "Edit" Commands             //
  540.       //=============================//
  541.  
  542.  
  543.       case IDM_EDITADDCHART:
  544.          AddChart (hWnd) ;
  545.          break;
  546.  
  547.       case IDM_EDITADDALERT:
  548.          AddAlert (hWnd) ;
  549.          break;
  550.  
  551.       case IDM_EDITADDLOG:
  552.          AddLog (hWnd) ;
  553.          break ;
  554.  
  555.       case IDM_EDITADDREPORT:
  556.          AddReport (hWnd) ;
  557.          break ;
  558.  
  559.       case IDM_EDITCLEARCHART :
  560.          ClearGraphDisplay (pGraphs) ;
  561.          break ;
  562.  
  563.       case IDM_EDITCLEARALERT:
  564.          ClearAlertDisplay (hWndAlert) ;
  565.          break ;
  566.  
  567.       case IDM_EDITCLEARREPORT:
  568.          ClearReportDisplay (hWndReport) ;
  569.          break ;
  570.  
  571.       case IDM_EDITDELETECHART:
  572.          pLine = CurrentGraphLine (hWndGraph) ;
  573.          if (pLine)
  574.             ChartDeleteLine(pGraphs, pLine) ;
  575.          break ;
  576.  
  577.       case IDM_EDITDELETEALERT:
  578.          pLine = CurrentAlertLine (hWndAlert) ;
  579.          if (pLine)
  580.             AlertDeleteLine (hWndAlert, pLine) ;
  581.          break ;
  582.  
  583.       case IDM_EDITDELETELOG:
  584.          LogDeleteEntry (hWndLog) ;
  585.          break ;
  586.  
  587.       case IDM_EDITDELETEREPORT:
  588.          if (CurrentReportItem (hWndReport))
  589.             ReportDeleteItem (hWndReport) ;
  590.          break ;
  591.  
  592.       case IDM_EDITMODIFYCHART:
  593.          EditChart (hWnd) ;
  594.          break ;
  595.  
  596.       case IDM_EDITMODIFYALERT:
  597.          EditAlert (hWnd) ;
  598.          break ;
  599.  
  600.       case IDM_EDITTIMEWINDOW:
  601.          if (PlayingBackLog())
  602.             {
  603.             SetTimeframe (hWnd) ;
  604.             }
  605.          break ;
  606.  
  607.  
  608.       //=============================//
  609.       // "View" Commands             //
  610.       //=============================//
  611.  
  612.  
  613.       case IDM_VIEWCHART:
  614.          if (iPerfmonView != IDM_VIEWCHART)
  615.             {
  616.             ViewChart (hWnd) ;
  617.             }
  618.          else
  619.             {
  620.             bPrepareMenu = FALSE ;
  621.             ToolbarDepressButton (hWndToolbar, ChartTool, TRUE) ;
  622.             }
  623.          break ;
  624.  
  625.       case IDM_VIEWALERT:
  626.          if (iPerfmonView != IDM_VIEWALERT)
  627.             {
  628.             ViewAlert (hWnd) ;
  629.             }
  630.          else
  631.             {
  632.             bPrepareMenu = FALSE ;
  633.             ToolbarDepressButton (hWndToolbar, AlertTool, TRUE) ;
  634.             }
  635.          break ;
  636.  
  637.       case IDM_VIEWLOG:
  638.          if (iPerfmonView != IDM_VIEWLOG)
  639.             {
  640.             ViewLog (hWnd) ;
  641.             }
  642.          else
  643.             {
  644.             bPrepareMenu = FALSE ;
  645.             ToolbarDepressButton (hWndToolbar, LogTool, TRUE) ;
  646.             }
  647.          break ;
  648.  
  649.       case IDM_VIEWREPORT:
  650.          if (iPerfmonView != IDM_VIEWREPORT)
  651.             {
  652.             ViewReport (hWnd) ;
  653.             }
  654.          else
  655.             {
  656.             bPrepareMenu = FALSE ;
  657.             ToolbarDepressButton (hWndToolbar, ReportTool, TRUE) ;
  658.             }
  659.          break ;
  660.  
  661.  
  662.       //=============================//
  663.       // "Options" Commands          //
  664.       //=============================//
  665.  
  666.  
  667.       case IDM_OPTIONSCHART:
  668.            DialogBox(hInstance, idDlgChartOptions, hWnd,
  669.                         (DLGPROC)GraphOptionDlg);
  670.            break;
  671.  
  672.       case IDM_OPTIONSALERT:
  673.          DisplayAlertOptions (hWnd, hWndAlert) ;
  674.           break;
  675.  
  676.       case IDM_OPTIONSLOG:
  677.          DisplayLogOptions (hWnd, hWndLog) ;
  678.          break ;
  679.  
  680.       case IDM_OPTIONSREPORT:
  681.          if (!PlayingBackLog())
  682.              DisplayReportOptions (hWnd, hWndReport) ;
  683.          break ;
  684.  
  685.        case IDM_OPTIONSBOOKMARK:
  686.          bPrepareMenu = FALSE ;
  687.          AddBookmark (hWnd) ;
  688.          break;
  689.  
  690. #ifdef KEEP_DISPLAY_OPTION
  691.       case IDM_OPTIONSDISPLAY:
  692.          DisplayDisplayOptions (hWnd) ;
  693.          break ;
  694. #endif
  695.  
  696.       case IDM_OPTIONSDISPLAYMENU:
  697.          // ShowPerfmonMenu will update Options.bMenubar..
  698.          ShowPerfmonMenu (!Options.bMenubar) ;
  699.          break ;
  700.  
  701.       case IDM_OPTIONSDISPLAYTOOL:
  702.          Options.bToolbar = !Options.bToolbar ;
  703.          SizePerfmonComponents () ;
  704.          break ;
  705.  
  706.       case IDM_OPTIONSDISPLAYSTATUS:
  707.          Options.bStatusbar = !Options.bStatusbar ;
  708.          SizePerfmonComponents () ;
  709.          break ;
  710.  
  711.       case IDM_OPTIONSDISPLAYONTOP:
  712.          Options.bAlwaysOnTop = !Options.bAlwaysOnTop ;
  713.          WindowSetTopmost (hWndMain, Options.bAlwaysOnTop) ;
  714.          break ;
  715.  
  716.       case IDM_OPTIONSDATASOURCE:
  717.          DisplayDataSourceOptions (hWnd) ;
  718.          break ;
  719.  
  720. #ifdef KEEP_MANUALREFRESH
  721.       case IDM_OPTIONSMANUALREFRESH:
  722.          bPrepareMenu = FALSE ;
  723.          if (!PlayingBackLog())
  724.             ToggleRefresh (hWnd) ;
  725.          break ;
  726. #endif
  727.  
  728.       case IDM_OPTIONSREFRESHNOWCHART:
  729.          bPrepareMenu = FALSE ;
  730.          if (!PlayingBackLog())
  731.             GraphTimer (hWndGraph, TRUE) ;
  732.          break ;
  733.  
  734.       case IDM_OPTIONSREFRESHNOWALERT:
  735.          bPrepareMenu = FALSE ;
  736.          if (!PlayingBackLog())
  737.             AlertTimer (hWndAlert, TRUE) ;
  738.          break ;
  739.  
  740.       case IDM_OPTIONSREFRESHNOWLOG:
  741.          bPrepareMenu = FALSE ;
  742.          if (!PlayingBackLog())
  743.             LogTimer (hWndLog, TRUE) ;
  744.          break ;
  745.  
  746.       case IDM_OPTIONSREFRESHNOWREPORT:
  747.          bPrepareMenu = FALSE ;
  748.          if (!PlayingBackLog())
  749.             ReportTimer (hWndReport, TRUE) ;
  750.          break ;
  751.  
  752.       case IDM_OPTIONSLEGENDONOFF:
  753.          bPrepareMenu = FALSE ;
  754.          if (iPerfmonView == IDM_VIEWCHART)
  755.             {
  756.             pGraphs->gOptions.bLegendChecked =
  757.                !pGraphs->gOptions.bLegendChecked ;
  758.             SizeGraphComponents (hWndGraph) ;
  759.             WindowInvalidate (hWndGraph) ;
  760.             }
  761.          else if (iPerfmonView == IDM_VIEWALERT)
  762.             {
  763.             PALERT pAlert = AlertData (hWnd) ;
  764.  
  765.             pAlert->bLegendOn = !pAlert->bLegendOn ;
  766.  
  767.             SizeAlertComponents (hWndAlert) ;
  768.             WindowInvalidate (hWndAlert) ;
  769.             }
  770.          break ;
  771.  
  772.       //=============================//
  773.       // "Help" Commands             //
  774.       //=============================//
  775.  
  776.  
  777.       case IDM_HELPABOUT:
  778.          {
  779.          TCHAR          szApplication [WindowCaptionLen] ;
  780.  
  781.          bPrepareMenu = FALSE ;
  782.  
  783.          if (GetKeyState(VK_SHIFT) < 0 && GetKeyState(VK_CONTROL) < 0)
  784.             {
  785.             DialogBox (hInstance, idDlgAbout, hWndMain, AboutDlgProc) ;
  786.             }
  787.          else
  788.             {
  789.             StringLoad (IDS_APPNAME, szApplication) ;
  790.             ShellAbout (hWnd, szApplication, NULL, hIcon) ;
  791.             }
  792.          }
  793.          break ;
  794.  
  795.       //======================================//
  796.       //  Generic messages from ACCELERATORS  //
  797.       //======================================//
  798.       case IDM_FILEOPENFILE:
  799.          bPrepareMenu = FALSE ;
  800.          switch (iPerfmonView)
  801.             {  // switch
  802.             case IDM_VIEWCHART:
  803.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENCHART, lParam) ;
  804.                break ;
  805.  
  806.             case IDM_VIEWALERT:
  807.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENALERT, lParam) ;
  808.                break ;
  809.  
  810.             case IDM_VIEWLOG:
  811.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENLOG, lParam) ;
  812.                break ;
  813.  
  814.             case IDM_VIEWREPORT:
  815.                SendMessage (hWnd, WM_COMMAND, IDM_FILEOPENREPORT, lParam) ;
  816.                break ;
  817.             }  // switch
  818.          break ;
  819.  
  820.       case IDM_FILESAVEFILE:
  821.          bPrepareMenu = FALSE ;
  822.          switch (iPerfmonView)
  823.             {  // switch
  824.             case IDM_VIEWCHART:
  825.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVECHART, lParam) ;
  826.                break ;
  827.  
  828.             case IDM_VIEWALERT:
  829.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEALERT, lParam) ;
  830.                break ;
  831.  
  832.             case IDM_VIEWLOG:
  833.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVELOG, lParam) ;
  834.                break ;
  835.  
  836.             case IDM_VIEWREPORT:
  837.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEREPORT, lParam) ;
  838.                break ;
  839.             }  // switch
  840.          break ;
  841.  
  842.       case IDM_FILESAVEASFILE:
  843.          bPrepareMenu = FALSE ;
  844.          switch (iPerfmonView)
  845.             {  // switch
  846.             case IDM_VIEWCHART:
  847.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASCHART, lParam) ;
  848.                break ;
  849.  
  850.             case IDM_VIEWALERT:
  851.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASALERT, lParam) ;
  852.                break ;
  853.  
  854.             case IDM_VIEWLOG:
  855.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASLOG, lParam) ;
  856.                break ;
  857.  
  858.             case IDM_VIEWREPORT:
  859.                SendMessage (hWnd, WM_COMMAND, IDM_FILESAVEASREPORT, lParam) ;
  860.                break ;
  861.             }  // switch
  862.          break ;
  863.  
  864.       case IDM_CHARTHIGHLIGHTON:
  865.          bPrepareMenu = FALSE ;
  866.          if (iPerfmonView == IDM_VIEWCHART)
  867.             {
  868.             ChartHighlight () ;
  869.             }
  870.          break ;
  871.  
  872.       case IDM_TOOLBARID:
  873.          // msg from the toolbar control
  874.          bPrepareMenu = FALSE ;
  875.          OnToolbarHit (wParam, lParam) ;
  876.          break ;
  877.  
  878.       case IDM_HELPCONTENTS:
  879.          {
  880.          TCHAR NullStr [2] ;
  881.  
  882.          NullStr[0] = TEXT('\0') ;
  883.          bPrepareMenu = FALSE ;
  884.          WinHelp (hWndMain, pszHelpFile, HELP_INDEX, (DWORD)(NullStr)) ;
  885.          }
  886.          break ;
  887.  
  888.       case IDM_HELPSEARCH:
  889.          {
  890.          TCHAR NullStr [2] ;
  891.  
  892.          NullStr[0] = TEXT('\0') ;
  893.          bPrepareMenu = FALSE ;
  894.          WinHelp (hWndMain, pszHelpFile, HELP_PARTIALKEY, (DWORD)(NullStr)) ;
  895.          }
  896.          break ;
  897.  
  898.       case IDM_HELPHELP:
  899.          {
  900.          TCHAR NullStr [2] ;
  901.  
  902.          NullStr[0] = TEXT('\0') ;
  903.          bPrepareMenu = FALSE ;
  904.          WinHelp (hWndMain, pszHelpFile, HELP_HELPONHELP, (DWORD)(NullStr)) ;
  905.          }
  906.          break ;
  907.  
  908.       default:
  909.          return (FALSE) ;
  910.       }  // switch
  911.  
  912.    if (bPrepareMenu)
  913.       {
  914.       PrepareMenu (GetMenu (hWnd)) ;
  915.       }
  916.  
  917.    return (TRUE) ;
  918.    }  // PerfmonCommand
  919.  
  920.  
  921.  
  922. void PrepareMenu (HMENU hMenu)
  923.    {  // PrepareMenu
  924.    BOOL           bPlayingLog ;
  925.    BOOL           bCurrentLine ;
  926.    BOOL           bManualRefresh ;
  927.    BOOL           bLogCollecting ;
  928.    BOOL           bRefresh ;
  929.  
  930.    // hMenu is NULL when the menu bar display option is off.
  931.    // In that case, we still have to enable/disable all tool buttons
  932.    // So, I have commented out the next 2 lines...
  933. //   if (!hMenu)
  934. //      return ;
  935.  
  936.    bLogCollecting = LogCollecting (hWndLog) ;
  937.    bPlayingLog = PlayingBackLog () ;
  938.  
  939.    switch (iPerfmonView)
  940.       {
  941.       case IDM_VIEWCHART:
  942.          bCurrentLine = (CurrentGraphLine (hWndGraph) != NULL) ;
  943.          bRefresh = GraphRefresh (hWndGraph) ;
  944.          bManualRefresh = !bPlayingLog && bCurrentLine ;
  945.          if (hMenu)
  946.             {
  947.             MenuCheck (hMenu, IDM_VIEWCHART, TRUE) ;
  948.             MenuEnableItem (hMenu, IDM_FILEEXPORTCHART, bCurrentLine) ;
  949.             MenuEnableItem (hMenu, IDM_EDITMODIFYCHART, bCurrentLine) ;
  950.             MenuEnableItem (hMenu, IDM_EDITDELETECHART, bCurrentLine) ;
  951.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWCHART, bManualRefresh) ;
  952.             MenuEnableItem (hMenu, IDM_EDITCLEARCHART, !bPlayingLog && bCurrentLine) ;
  953.             }
  954.          break ;
  955.  
  956.       case IDM_VIEWALERT:
  957.          bCurrentLine = (CurrentAlertLine (hWndAlert) != NULL) ;
  958.          bRefresh = AlertRefresh (hWndAlert) ;
  959.          bManualRefresh = !bPlayingLog && bCurrentLine ;
  960.          if (hMenu)
  961.             {
  962.             MenuCheck (hMenu, IDM_VIEWALERT, TRUE) ;
  963.             MenuEnableItem (hMenu, IDM_FILEEXPORTALERT, bCurrentLine) ;
  964.             MenuEnableItem (hMenu, IDM_EDITMODIFYALERT, bCurrentLine) ;
  965.             MenuEnableItem (hMenu, IDM_EDITDELETEALERT, bCurrentLine) ;
  966.             MenuEnableItem (hMenu, IDM_EDITCLEARALERT, !bPlayingLog && bCurrentLine) ;
  967.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWALERT, bManualRefresh) ;
  968.             }
  969.          break ;
  970.  
  971.       case IDM_VIEWLOG:
  972.          bCurrentLine = AnyLogLine() ;
  973.          bRefresh = LogRefresh (hWndLog) ;
  974.          bManualRefresh = !bPlayingLog && bLogCollecting ;
  975.          if (hMenu)
  976.             {
  977.             MenuCheck (hMenu, IDM_VIEWLOG, TRUE) ;
  978.             MenuEnableItem (hMenu, IDM_FILEEXPORTLOG, bCurrentLine) ;
  979.             MenuEnableItem (hMenu, IDM_EDITDELETELOG, bCurrentLine) ;
  980.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWLOG , bManualRefresh) ;
  981.             }
  982.          break ;
  983.  
  984.       case IDM_VIEWREPORT:
  985.          bCurrentLine = CurrentReportItem (hWndReport) ;
  986.          bRefresh = ReportRefresh (hWndReport) ;
  987.          bManualRefresh = !bPlayingLog && bCurrentLine ;
  988.          if (hMenu)
  989.             {
  990.             MenuCheck (hMenu, IDM_VIEWREPORT, TRUE) ;
  991.             MenuEnableItem (hMenu, IDM_FILEEXPORTREPORT, bCurrentLine) ;
  992.             MenuEnableItem (hMenu, IDM_EDITMODIFYREPORT, FALSE) ;
  993.             MenuEnableItem (hMenu, IDM_EDITDELETEREPORT, bCurrentLine) ;
  994.             MenuEnableItem (hMenu, IDM_EDITCLEARREPORT, !bPlayingLog && bCurrentLine) ;
  995.             MenuEnableItem (hMenu, IDM_OPTIONSREFRESHNOWREPORT, bManualRefresh) ;
  996.             }
  997.          break ;
  998.       }  // switch
  999.  
  1000.  
  1001.    ToolbarEnableButton (hWndToolbar, EditTool,
  1002.                         bCurrentLine &&
  1003.                         (iPerfmonView != IDM_VIEWREPORT &&
  1004.                          iPerfmonView != IDM_VIEWLOG)) ;
  1005.  
  1006.    ToolbarEnableButton (hWndToolbar, DeleteTool, bCurrentLine) ;
  1007.  
  1008.    ToolbarEnableButton (hWndToolbar, RefreshTool, bManualRefresh) ;
  1009.  
  1010.    // None of the alert or report options make sense when playing back a log.
  1011. #if 0
  1012.    ToolbarEnableButton (hWndToolbar,
  1013.                         OptionsTool,
  1014.                         !bPlayingLog ||
  1015.                         (iPerfmonView != IDM_VIEWREPORT &&
  1016.                          iPerfmonView != IDM_VIEWALERT)) ;
  1017. #endif
  1018.    ToolbarEnableButton (hWndToolbar,
  1019.                         OptionsTool,
  1020.                         !bPlayingLog ||
  1021.                         iPerfmonView != IDM_VIEWREPORT) ;
  1022.  
  1023.    ToolbarEnableButton (hWndToolbar, BookmarkTool, bLogCollecting) ;
  1024.  
  1025.  
  1026.    if (hMenu)
  1027.       {
  1028. //      MenuEnableItem (hMenu, IDM_OPTIONSMANUALREFRESH, !bPlayingLog) ;
  1029. //      MenuCheck (hMenu, IDM_OPTIONSMANUALREFRESH, bRefresh) ;
  1030.       MenuEnableItem (hMenu, IDM_EDITTIMEWINDOW, bPlayingLog) ;
  1031. //      MenuEnableItem (hMenu, IDM_OPTIONSALERT, !bPlayingLog) ;
  1032.       MenuEnableItem (hMenu, IDM_OPTIONSREPORT, !bPlayingLog) ;
  1033.       MenuEnableItem (hMenu, IDM_OPTIONSBOOKMARK, bLogCollecting) ;
  1034.  
  1035.       // check/uncheck all the display options
  1036.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYMENU, Options.bMenubar) ;
  1037.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYTOOL, Options.bToolbar) ;
  1038.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYSTATUS, Options.bStatusbar) ;
  1039.       MenuCheck (hMenu, IDM_OPTIONSDISPLAYONTOP, Options.bAlwaysOnTop) ;
  1040.       }
  1041.    }  // PrepareMenu
  1042.  
  1043.  
  1044.  
  1045.  
  1046.