|
|
//==========================================================================//
// Includes //
//==========================================================================//
#include <stdio.h>
#include "perfmon.h" // included by all source
#include "timefrm.h" // external declarations for this file
#include "alert.h" // for PlaybackAlert
#include "grafdata.h" // for PlaybackChart
#include "perfmops.h" // for PerfmonViewWindow
#include "playback.h" // for PlaybackIndexN
#include "report.h" // for PlaybackReport
#include "timeline.h" // for TL_INTERVAL
#include "utils.h"
#include "pmhelpid.h" // for Help IDs
//==========================================================================//
// Local Data //
//==========================================================================//
static RECT TFrameRectWindow ;
//==========================================================================//
// Local Functions //
//==========================================================================//
void ClearSystemTime ( SYSTEMTIME *pSystemTime ) { pSystemTime->wYear = 0 ; pSystemTime->wMonth = 0 ; pSystemTime->wDayOfWeek = 0 ; pSystemTime->wDay = 0 ; pSystemTime->wHour = 0 ; pSystemTime->wMinute = 0 ; pSystemTime->wSecond = 0 ; pSystemTime->wMilliseconds = 0 ; }
//==========================================================================//
// Message Handlers //
//==========================================================================//
void static OnInitDialog ( HDLG hDlg ) { PBOOKMARK pBookmark ; int iIndex ; TCHAR szText [20+20+BookmarkCommentLen] ; TCHAR szDate [20] ; TCHAR szTime [20] ; int iBookmarksNum ; HWND hWndTLine ; HWND hWndBookmarks ; int currentTextExtent = 0 ; int maxTextExtent = 0 ; HDC hDC = 0 ; HFONT hFont ;
hWndTLine = DialogControl (hDlg, IDD_TIMEFRAMETIMELINE) ; hWndBookmarks = DialogControl (hDlg, IDD_TIMEFRAMEBOOKMARKS) ; SetFont (hWndBookmarks, hFontScales) ; LBSetHorzExtent (hWndBookmarks, 0) ;
TLineSetRange (hWndTLine, 0, PlaybackLog.iTotalTics - 1) ; TLineSetStart (hWndTLine, PlaybackLog.StartIndexPos.iPosition) ; TLineSetStop (hWndTLine, PlaybackLog.StopIndexPos.iPosition) ;
iBookmarksNum = 0 ; pBookmark = PlaybackLog.pBookmarkFirst ;
if (pBookmark) { hDC = GetDC (hWndBookmarks) ; if (hDC) { hFont = (HFONT)SendMessage(hWndBookmarks, WM_GETFONT, 0, 0L); if (hFont) SelectObject(hDC, hFont); }
while (pBookmark) { SystemTimeDateString (&(pBookmark->SystemTime), szDate) ; SystemTimeTimeString (&(pBookmark->SystemTime), szTime, TRUE) ; TSPRINTF (szText, TEXT(" %s %s %s"), szDate, szTime, pBookmark->szComment) ; LBSetData (hWndBookmarks, LBAdd (hWndBookmarks, szText), pBookmark->iTic) ;
// get the biggest text width
if (hDC) { currentTextExtent = TextWidth (hDC, szText) + xScrollWidth / 2 ; if (currentTextExtent > maxTextExtent) { maxTextExtent = currentTextExtent ; } }
pBookmark = pBookmark->pBookmarkNext ; }
LBSetSelection (hWndBookmarks, 0) ;
iBookmarksNum = LBNumItems (hWndBookmarks) ; }
if (iBookmarksNum == 0) { DialogEnable (hDlg, IDD_TIMEFRAMEBOOKMARKS, FALSE) ; DialogEnable (hDlg, IDD_TIMEFRAMEBOOKMARKGRP, FALSE) ; DialogEnable (hDlg, IDD_TIMEFRAMESETSTART, FALSE) ; DialogEnable (hDlg, IDD_TIMEFRAMESETSTOP, FALSE) ; } else { LBSetHorzExtent (hWndBookmarks, maxTextExtent) ; }
if (hDC) { ReleaseDC (hWndBookmarks, hDC) ; }
if (TFrameRectWindow.right == TFrameRectWindow.left) { // we have not initialize this data yet.
// will get init. after the first time frame window invoke
WindowCenter (hDlg) ; } else { // show it in its previous position
MoveWindow (hDlg, TFrameRectWindow.left, TFrameRectWindow.top, TFrameRectWindow.right - TFrameRectWindow.left, TFrameRectWindow.bottom - TFrameRectWindow.top, TRUE) ; }
dwCurrentDlgID = HC_PM_idDlgEditTimeFrame ;
}
void static OnTLineInterval ( HDLG hDlg, int iInterval, SYSTEMTIME *pSystemTime ) { PLOGINDEX pIndex ;
pIndex = PlaybackIndexN (iInterval) ;
if (pIndex) *pSystemTime = pIndex->SystemTime ; else ClearSystemTime (pSystemTime) ; }
void static OnOK ( HDLG hDlg ) { LOGPOSITION lp ; int iIndex ; HWND hWndTLine = DialogControl (hDlg, IDD_TIMEFRAMETIMELINE) ;
iIndex = TLineStart (hWndTLine) ; if (LogPositionN (iIndex, &lp)) PlaybackLog.StartIndexPos = lp ;
iIndex = TLineStop (hWndTLine) ; if (LogPositionN (iIndex, &lp)) PlaybackLog.StopIndexPos = lp ;
PlaybackLog.iSelectedTics = PlaybackLog.StopIndexPos.iPosition - PlaybackLog.StartIndexPos.iPosition + 1 ;
PlaybackChart (hWndGraph) ; PlaybackAlert (hWndAlert, 0) ; PlaybackReport (hWndReport) ;
WindowInvalidate (PerfmonViewWindow ()) ;
GetWindowRect (hDlg, &TFrameRectWindow) ;
dwCurrentDlgID = 0 ; }
void static OnCancel ( HWND hWnd ) { HDC hGraphDC ; PGRAPHSTRUCT pGraph ;
hGraphDC = GetDC (hWndGraph) ; if (!hGraphDC) return; pGraph = GraphData (hWndGraph) ; if (!pGraph) { ReleaseDC(hWndGraph, hGraphDC); return ; }
TLineRedraw (hGraphDC, pGraph) ;
GetWindowRect (hWnd, &TFrameRectWindow) ;
dwCurrentDlgID = 0 ; }
void OnSetStartStop ( HWND hDlg, BOOL bSetStart ) { int iTic ; int iStopTic ; int iStartTic ; HWND hWndTLine = DialogControl (hDlg, IDD_TIMEFRAMETIMELINE) ; HWND hWndBookmarks = DialogControl (hDlg, IDD_TIMEFRAMEBOOKMARKS) ;
iStartTic = TLineStart (hWndTLine) ; iStopTic = TLineStop (hWndTLine) ;
iTic = (int)LBData (hWndBookmarks, LBSelection (hWndBookmarks)) ; if ((bSetStart && iStopTic <= iTic) || (!bSetStart && iStartTic >= iTic)) { DlgErrorBox (hDlg, ERR_STOPBEFORESTART) ; } else { if (bSetStart) { TLineSetStart (hWndTLine, iTic) ; } else { TLineSetStop (hWndTLine, iTic) ; } WindowInvalidate (hWndTLine) ; } }
//==========================================================================//
// Exported Functions //
//==========================================================================//
INT_PTR TimeframeDlgProc ( HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam ) { BOOL bHandled ;
bHandled = TRUE ; switch (iMessage) { case TL_INTERVAL: OnTLineInterval (hDlg, (int)wParam, (SYSTEMTIME *) lParam) ; break ;
case WM_INITDIALOG: OnInitDialog (hDlg) ; return (TRUE) ;
case WM_CLOSE: OnCancel (hDlg) ; EndDialog (hDlg, 0) ; break ;
case WM_COMMAND: switch (wParam) { case IDD_OK: SetHourglassCursor() ; OnOK (hDlg) ; SetArrowCursor() ; EndDialog (hDlg, 1) ; break ;
case IDD_TIMEFRAMESETSTART: case IDD_TIMEFRAMESETSTOP: OnSetStartStop (hDlg, wParam == IDD_TIMEFRAMESETSTART) ; break ;
case IDD_CANCEL: OnCancel (hDlg) ; GetWindowRect (hDlg, &TFrameRectWindow) ; EndDialog (hDlg, 0) ; break ;
case IDD_TIMEFRAMEHELP: CallWinHelp (dwCurrentDlgID, hDlg) ; break ;
default: bHandled = FALSE ; break; } break;
default: bHandled = FALSE ; break ; }
return (bHandled) ; }
BOOL SetTimeframe ( HWND hWndParent ) { if (DialogBox (hInstance, idDlgTimeframe, hWndParent, TimeframeDlgProc)) { return (TRUE) ; } return (FALSE) ; }
|