|
|
//==========================================================================//
// Includes //
//==========================================================================//
#include "perfmon.h"
#include "datasrc.h" // External declarations for this file
#include "fileutil.h" // for FileErrorMessageBox (whatever)
#include "grafdata.h" // for ResetGraph
#include "alert.h" // for ResetAlert
#include "log.h" // for ResetLog
#include "report.h" // for ResetReport
#include "playback.h"
#include "status.h"
#include "utils.h"
#include "pmhelpid.h" // Help IDs
#include "fileopen.h" // FileOpneHookProc
#include "pmemory.h" // for MemoryAllocate & MemoryFree
#include "perfmops.h" // for ShowPerfmonWindowText
//==========================================================================//
// Local Data //
//==========================================================================//
BOOL bIgnoreFirstChange ; BOOL bDataSourceNow ; BOOL bDataSourcePrevious ; BOOL bLogFileNameChanged ;
LPTSTR pszLogFilePath ; LPTSTR pszLogFileTitle ; //TCHAR szLogFilePath [FilePathLen + 1] ;
//TCHAR szLogFileTitle [FilePathLen + 1] ;
//==========================================================================//
// Local Functions //
//==========================================================================//
void static UpdateLogName (HDLG hDlg) { DialogSetString (hDlg, IDD_DATASOURCEFILENAME, pszLogFilePath) ; // DialogSetString (hDlg, IDD_DATASOURCEFILENAME, pszLogFileTitle) ;
}
void OnChangeLog (HWND hWndParent) { // OnChangeLog
OPENFILENAME ofn ; TCHAR szOpenLog [WindowCaptionLen + 1] ; TCHAR aszOpenFilter[LongTextLen] ; TCHAR szMyLogFilePath [FilePathLen + 1] ; int StringLength ; DWORD SaveCurrentDlgID = dwCurrentDlgID ;
//=============================//
// Get Log File //
//=============================//
aszOpenFilter[0] = 0; StringLoad (IDS_OPENLOG, szOpenLog) ; StringLoad (IDS_SAVELOGFILEEXT, szMyLogFilePath) ;
// load the log file extension
LoadString (hInstance, IDS_SAVELOGFILE, aszOpenFilter, sizeof(aszOpenFilter) / sizeof(TCHAR)) ; StringLength = lstrlen (aszOpenFilter) + 1 ; LoadString (hInstance, IDS_SAVELOGFILEEXT, &aszOpenFilter[StringLength], sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ; StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
// setup the end strings
aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
ofn.lStructSize = sizeof (OPENFILENAME) ; ofn.hwndOwner = hWndParent ; ofn.hInstance = hInstance ; ofn.lpstrFilter = aszOpenFilter ; ofn.lpstrCustomFilter = NULL ; ofn.nMaxCustFilter = 0 ; ofn.nFilterIndex = 1; ofn.lpstrFile = szMyLogFilePath ; ofn.nMaxFile = FilePathLen * sizeof (TCHAR) ; ofn.lpstrFileTitle = pszLogFileTitle ; ofn.nMaxFileTitle = FilePathLen * sizeof (TCHAR) ; ofn.lpstrInitialDir = NULL ; ofn.lpstrTitle = szOpenLog ; ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | // OFN_PATHMUSTEXIST | OFN_SHOWHELP | OFN_ENABLEHOOK ;
OFN_PATHMUSTEXIST | OFN_ENABLEHOOK | OFN_EXPLORER; ofn.lCustData = 0L ; ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ; ofn.lpstrDefExt = (LPTSTR)NULL;
dwCurrentDlgID = HC_PM_idDlgOptionOpenLogFile ; if (GetOpenFileName (&ofn)) { if (!strsame(pszLogFilePath, szMyLogFilePath)) { INT_PTR FileNameOffset ; LPTSTR pFileName ;
bLogFileNameChanged |= TRUE ; lstrcpy (pszLogFilePath, szMyLogFilePath) ; lstrcpy (pszLogFileTitle, ofn.lpstrFileTitle) ;
pFileName = ExtractFileName (szMyLogFilePath) ; if (pFileName != szMyLogFilePath) { FileNameOffset = pFileName - szMyLogFilePath ; szMyLogFilePath[FileNameOffset] = TEXT('\0') ; SetCurrentDirectory (szMyLogFilePath) ; } UpdateLogName (hWndParent) ; } }
// restore the global before exit
dwCurrentDlgID = SaveCurrentDlgID ; } // OnChangeLog
//==========================================================================//
// Message Handlers //
//==========================================================================//
void static OnInitDialog (HDLG hDlg) { bLogFileNameChanged = FALSE ;
bIgnoreFirstChange = TRUE ;
bDataSourcePrevious = bDataSourceNow = !PlayingBackLog () ;
CheckRadioButton (hDlg, IDD_DATASOURCENOW, IDD_DATASOURCEFILE, bDataSourceNow ? IDD_DATASOURCENOW : IDD_DATASOURCEFILE) ; UpdateLogName (hDlg) ;
EditSetLimit (GetDlgItem(hDlg, IDD_DATASOURCEFILENAME), FilePathLen - 1) ;
WindowCenter (hDlg) ;
dwCurrentDlgID = HC_PM_idDlgOptionDataFrom ; }
void /*static*/ OnDataSourceOK (HDLG hDlg) { // OnOK
BOOL bHaveResetPerfmon ; INT RetCode = 0 ;
bHaveResetPerfmon = FALSE; if (!BoolEqual (bDataSourceNow, bDataSourcePrevious) || (bLogFileNameChanged && !bDataSourceNow) ) { if (PlayingBackLog () && bDataSourceNow | bLogFileNameChanged) { CloseInputLog (hWndMain) ; bHaveResetPerfmon = TRUE ; }
if (!bDataSourceNow) { if (!bHaveResetPerfmon) { ResetGraphView (hWndGraph) ; ResetAlertView (hWndAlert) ; ResetLogView (hWndLog) ; ResetReportView (hWndReport) ;
if (pWorkSpaceFullFileName) { MemoryFree (pWorkSpaceFullFileName) ; pWorkSpaceFileName = NULL ; pWorkSpaceFullFileName = NULL ; } ShowPerfmonWindowText () ; }
GetDlgItemText (hDlg, IDD_DATASOURCEFILENAME, pszLogFilePath, FilePathLen - 1) ; lstrcpy (pszLogFileTitle, pszLogFilePath);
if (RetCode = OpenPlayback (pszLogFilePath, pszLogFileTitle)) { DlgErrorBox (hDlg, RetCode, pszLogFileTitle) ; } }
StatusLineReady (hWndStatus) ; }
if (!BoolEqual (bDataSourceNow, bDataSourcePrevious)) { if (bDataSourceNow) { // Set Priority high
SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS) ; SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST) ; } else { // Use a lower priority for Playing back log
SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS) ; SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL) ; } }
if (RetCode == 0) { EndDialog (hDlg, 1) ; } } // OnOK
//==========================================================================//
// Exported Functions //
//==========================================================================//
INT_PTR FAR WINAPI DataSourceDlgProc ( HWND hDlg, unsigned iMessage, WPARAM wParam, LPARAM lParam ) { BOOL bHandled ;
bHandled = TRUE ; switch (iMessage) { case WM_INITDIALOG: OnInitDialog (hDlg) ; return (TRUE) ;
case WM_CLOSE: EndDialog (hDlg, 0) ; break ;
case WM_DESTROY: dwCurrentDlgID = 0 ; break;
case WM_COMMAND: switch(LOWORD(wParam)) { case IDD_DATASOURCEFILENAME: if (bIgnoreFirstChange) { bIgnoreFirstChange = FALSE; }
else if (HIWORD(wParam) == EN_UPDATE && !bLogFileNameChanged) { bLogFileNameChanged = TRUE; CheckRadioButton (hDlg, IDD_DATASOURCENOW, IDD_DATASOURCEFILE, IDD_DATASOURCEFILE) ; bDataSourceNow = FALSE ; } break ;
case IDD_DATASOURCECHANGEFILE: OnChangeLog (hDlg) ; if (bLogFileNameChanged) { CheckRadioButton (hDlg, IDD_DATASOURCENOW, IDD_DATASOURCEFILE, IDD_DATASOURCEFILE) ; bDataSourceNow = FALSE ; } break ;
case IDD_DATASOURCEFILE: bDataSourceNow = FALSE ; break ;
case IDD_DATASOURCENOW: bDataSourceNow = TRUE ; break ;
case IDD_OK: OnDataSourceOK (hDlg) ; break ;
case IDD_CANCEL: EndDialog (hDlg, 0) ; break ;
case IDD_DATASOURCEHELP: CallWinHelp (dwCurrentDlgID, hDlg) ; break ;
default: bHandled = FALSE ; break; } break;
default: bHandled = FALSE ; break ; } // switch
return (bHandled) ; } // DataSourceDlgProc
BOOL DisplayDataSourceOptions ( HWND hWndParent ) /*
Effect: Put up Perfmon's Data Source Options Display dialog, which allows the user to select the source of data input: real time or log file. */ { // DisplayDisplayOptions
BOOL retCode ;
pszLogFilePath = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ; if (pszLogFilePath == NULL) return FALSE; pszLogFileTitle = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ; if (pszLogFileTitle == NULL) { MemoryFree(pszLogFilePath); return FALSE; }
lstrcpy (pszLogFilePath, PlaybackLog.szFilePath) ; lstrcpy (pszLogFileTitle, PlaybackLog.szFileTitle) ;
retCode = DialogBox (hInstance, idDlgDataSource, hWndParent, DataSourceDlgProc) ? TRUE : FALSE;
MemoryFree (pszLogFilePath) ; MemoryFree (pszLogFileTitle) ;
return (retCode) ;
} // DisplayDisplayOptions
|