|
|
1.1 root 1:
2: //==========================================================================//
3: // Includes //
4: //==========================================================================//
5:
6: #include "perfmon.h"
7: #include "datasrc.h" // External declarations for this file
8:
9: #include "fileutil.h" // for FileErrorMessageBox (whatever)
10: #include "grafdata.h" // for ResetGraph
11: #include "alert.h" // for ResetAlert
12: #include "log.h" // for ResetLog
13: #include "report.h" // for ResetReport
14: #include "playback.h"
15: #include "status.h"
16: #include "utils.h"
17: #include "pmhelpid.h" // Help IDs
18: #include "fileopen.h" // FileOpneHookProc
19: #include "pmemory.h" // for MemoryAllocate & MemoryFree
20:
21: //==========================================================================//
22: // Local Data //
23: //==========================================================================//
24:
25:
26: BOOL bIgnoreFirstChange ;
27: BOOL bDataSourceNow ;
28: BOOL bDataSourcePrevious ;
29: BOOL bLogFileNameChanged ;
30:
31: LPTSTR pszLogFilePath ;
32: LPTSTR pszLogFileTitle ;
33:
34:
35: //==========================================================================//
36: // Local Functions //
37: //==========================================================================//
38:
39:
40:
41: void static UpdateLogName (HDLG hDlg)
42: {
43: DialogSetString (hDlg, IDD_DATASOURCEFILENAME, pszLogFileTitle) ;
44: }
45:
46:
47:
48: void OnChangeLog (HWND hWndParent)
49: { // OnChangeLog
50: OPENFILENAME ofn ;
51: TCHAR szOpenLog [WindowCaptionLen + 1] ;
52: TCHAR aszOpenFilter[LongTextLen] ;
53: TCHAR szMyLogFilePath [FilePathLen + 1] ;
54: int StringLength ;
55: DWORD SaveCurrentDlgID = dwCurrentDlgID ;
56:
57: //=============================//
58: // Get Log File //
59: //=============================//
60:
61: StringLoad (IDS_OPENLOG, szOpenLog) ;
62: StringLoad (IDS_SAVELOGFILEEXT, szMyLogFilePath) ;
63:
64: // load the log file extension
65: LoadString (hInstance, IDS_SAVELOGFILE, aszOpenFilter,
66: sizeof(aszOpenFilter) / sizeof(TCHAR)) ;
67: StringLength = lstrlen (aszOpenFilter) + 1 ;
68: LoadString (hInstance, IDS_SAVELOGFILEEXT,
69: &aszOpenFilter[StringLength],
70: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
71: StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
72:
73: // setup the end strings
74: aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
75:
76:
77: ofn.lStructSize = sizeof (OPENFILENAME) ;
78: ofn.hwndOwner = hWndParent ;
79: ofn.hInstance = hInstance ;
80: ofn.lpstrFilter = aszOpenFilter ;
81: ofn.lpstrCustomFilter = NULL ;
82: ofn.nMaxCustFilter = 0 ;
83: ofn.nFilterIndex = 1;
84: ofn.lpstrFile = szMyLogFilePath ;
85: ofn.nMaxFile = FilePathLen * sizeof (TCHAR) ;
86: ofn.lpstrFileTitle = pszLogFileTitle ;
87: ofn.nMaxFileTitle = FilePathLen * sizeof (TCHAR) ;
88: ofn.lpstrInitialDir = NULL ;
89: ofn.lpstrTitle = szOpenLog ;
90: ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
91: OFN_PATHMUSTEXIST | OFN_SHOWHELP | OFN_ENABLEHOOK ;
92: ofn.lCustData = 0L ;
93: ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
94: ofn.lpstrDefExt = (LPTSTR)NULL;
95:
96: dwCurrentDlgID = HC_PM_idDlgOptionOpenLogFile ;
97: if (GetOpenFileName (&ofn))
98: {
99: if (!strsame(pszLogFilePath, szMyLogFilePath))
100: {
101: int FileNameOffset ;
102: LPTSTR pFileName ;
103:
104: bLogFileNameChanged |= TRUE ;
105: lstrcpy (pszLogFilePath, szMyLogFilePath) ;
106: lstrcpy (pszLogFileTitle, ofn.lpstrFileTitle) ;
107:
108: pFileName = ExtractFileName (szMyLogFilePath) ;
109: if (pFileName != szMyLogFilePath)
110: {
111: FileNameOffset = pFileName - szMyLogFilePath ;
112: szMyLogFilePath[FileNameOffset] = TEXT('\0') ;
113: SetCurrentDirectory (szMyLogFilePath) ;
114: }
115: UpdateLogName (hWndParent) ;
116: }
117: }
118:
119: // restore the global before exit
120: dwCurrentDlgID = SaveCurrentDlgID ;
121: } // OnChangeLog
122:
123:
124: //==========================================================================//
125: // Message Handlers //
126: //==========================================================================//
127:
128:
129: void static OnInitDialog (HDLG hDlg)
130: {
131: bLogFileNameChanged = FALSE ;
132:
133: bIgnoreFirstChange = TRUE ;
134:
135: bDataSourcePrevious = bDataSourceNow = !PlayingBackLog () ;
136:
137: CheckRadioButton (hDlg, IDD_DATASOURCENOW, IDD_DATASOURCEFILE,
138: bDataSourceNow ? IDD_DATASOURCENOW : IDD_DATASOURCEFILE) ;
139: UpdateLogName (hDlg) ;
140:
141: EditSetLimit (GetDlgItem(hDlg, IDD_DATASOURCEFILENAME),
142: FilePathLen - 1) ;
143:
144: WindowCenter (hDlg) ;
145:
146: dwCurrentDlgID = HC_PM_idDlgOptionDataFrom ;
147: }
148:
149:
150: void /*static*/ OnDataSourceOK (HDLG hDlg)
151: { // OnOK
152: BOOL bHaveResetPerfmon ;
153: INT RetCode = 0 ;
154:
155: bHaveResetPerfmon = FALSE;
156: if (!BoolEqual (bDataSourceNow, bDataSourcePrevious) ||
157: (bLogFileNameChanged && !bDataSourceNow) )
158: {
159: if (PlayingBackLog () && bDataSourceNow | bLogFileNameChanged)
160: {
161: CloseInputLog (hWndMain) ;
162: bHaveResetPerfmon = TRUE ;
163: }
164:
165: if (!bDataSourceNow)
166: {
167: if (!bHaveResetPerfmon)
168: {
169: ResetGraphView (hWndGraph) ;
170: ResetAlertView (hWndAlert) ;
171: ResetLogView (hWndLog) ;
172: ResetReportView (hWndReport) ;
173: }
174:
175: GetDlgItemText (hDlg, IDD_DATASOURCEFILENAME,
176: pszLogFilePath, FilePathLen - 1) ;
177: lstrcpy (pszLogFileTitle, pszLogFilePath);
178:
179: if (RetCode = OpenPlayback (pszLogFilePath, pszLogFileTitle))
180: {
181: DlgErrorBox (hDlg, RetCode, pszLogFileTitle) ;
182: }
183: }
184:
185: StatusLineReady (hWndStatus) ;
186: }
187:
188: if (RetCode == 0)
189: {
190: EndDialog (hDlg, 1) ;
191: }
192: } // OnOK
193:
194:
195:
196: //==========================================================================//
197: // Exported Functions //
198: //==========================================================================//
199:
200:
201: int FAR WINAPI DataSourceDlgProc (HWND hDlg,
202: unsigned iMessage,
203: WPARAM wParam,
204: LPARAM lParam)
205: {
206: BOOL bHandled ;
207:
208: bHandled = TRUE ;
209: switch (iMessage)
210: {
211: case WM_INITDIALOG:
212: OnInitDialog (hDlg) ;
213: return (TRUE) ;
214:
215: case WM_CLOSE:
216: dwCurrentDlgID = 0 ;
217: EndDialog (hDlg, 0) ;
218: break ;
219:
220: case WM_COMMAND:
221: switch(LOWORD(wParam))
222: {
223: case IDD_DATASOURCEFILENAME:
224: if (bIgnoreFirstChange)
225: {
226: bIgnoreFirstChange = FALSE;
227: }
228:
229: else if (HIWORD(wParam) == EN_UPDATE && !bLogFileNameChanged)
230: {
231: bLogFileNameChanged = TRUE;
232: CheckRadioButton (hDlg,
233: IDD_DATASOURCENOW,
234: IDD_DATASOURCEFILE,
235: IDD_DATASOURCEFILE) ;
236: bDataSourceNow = FALSE ;
237: }
238: break ;
239:
240: case IDD_DATASOURCECHANGEFILE:
241: OnChangeLog (hDlg) ;
242: if (bLogFileNameChanged)
243: {
244: CheckRadioButton (hDlg,
245: IDD_DATASOURCENOW,
246: IDD_DATASOURCEFILE,
247: IDD_DATASOURCEFILE) ;
248: bDataSourceNow = FALSE ;
249: }
250: break ;
251:
252: case IDD_DATASOURCEFILE:
253: bDataSourceNow = FALSE ;
254: break ;
255:
256: case IDD_DATASOURCENOW:
257: bDataSourceNow = TRUE ;
258: break ;
259:
260: case IDD_OK:
261: dwCurrentDlgID = 0 ;
262: OnDataSourceOK (hDlg) ;
263: break ;
264:
265: case IDD_CANCEL:
266: dwCurrentDlgID = 0 ;
267: EndDialog (hDlg, 0) ;
268: break ;
269:
270: case IDD_DATASOURCEHELP:
271: CallWinHelp (dwCurrentDlgID) ;
272: break ;
273:
274: default:
275: bHandled = FALSE ;
276: break;
277: }
278: break;
279:
280:
281: default:
282: bHandled = FALSE ;
283: break ;
284: } // switch
285:
286: return (bHandled) ;
287: } // DataSourceDlgProc
288:
289:
290:
291: BOOL DisplayDataSourceOptions (HWND hWndParent)
292: /*
293: Effect: Put up Perfmon's Data Source Options Display dialog,
294: which allows
295: the user to select the source of data input: real
296: time or log file.
297: */
298: { // DisplayDisplayOptions
299: BOOL retCode ;
300:
301: pszLogFilePath = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ;
302: pszLogFileTitle = (LPTSTR) MemoryAllocate (FilePathLen * sizeof(TCHAR)) ;
303:
304: lstrcpy (pszLogFilePath, PlaybackLog.szFilePath) ;
305: lstrcpy (pszLogFileTitle, PlaybackLog.szFileTitle) ;
306:
307: retCode = DialogBox (hInstance, idDlgDataSource,
308: hWndParent, (DLGPROC) DataSourceDlgProc) ;
309:
310: MemoryFree (pszLogFilePath) ;
311: MemoryFree (pszLogFileTitle) ;
312:
313: return (retCode) ;
314:
315: } // DisplayDisplayOptions
316:
317:
318:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.