|
|
1.1 root 1: #include "perfmon.h"
2: #include "cderr.h"
3:
4: #include "alert.h" // for OpenAlert
5: #include "fileutil.h" // for FileOpen, FileRead
6: #include "grafdata.h" // for OpenChart
7: #include "log.h" // for OpenLog
8: #include "report.h" // for OpenReport
9: #include "utils.h" // for strempty
10: #include "perfmops.h" // for OpenWorkspace
11: #include "pmhelpid.h" // Help IDs
12: #include <dlgs.h> // for pshHelp
13:
14: #define OptionsOFNStyle \
15: (OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_OVERWRITEPROMPT | OFN_ENABLEHOOK)
16:
17: #define ExportOptionsOFNStyle \
18: (OFN_ENABLETEMPLATE | OFN_HIDEREADONLY | \
19: OFN_SHOWHELP | OFN_ENABLEHOOK | OFN_OVERWRITEPROMPT)
20:
21: extern BOOL APIENTRY ExportOptionsHookProc (HWND hDlg, UINT iMessage,
22: WPARAM wParam, LPARAM lParam) ;
23:
24: BOOL APIENTRY FileOpenHookProc (HWND hDlg,
25: UINT iMessage,
26: WPARAM wParam,
27: LPARAM lParam)
28: {
29: BOOL bHandled = FALSE ;
30:
31: // only intercept the Help button and bring up our WinHelp data
32: if (iMessage == WM_COMMAND && wParam == pshHelp)
33: {
34: CallWinHelp (dwCurrentDlgID) ;
35: bHandled = TRUE ;
36: }
37: else if (iMessage == WM_INITDIALOG)
38: {
39: WindowCenter (hDlg) ;
40: bHandled = TRUE ;
41: }
42:
43: return (bHandled) ;
44: }
45:
46:
47:
48: BOOL FileOpen (HWND hWndParent, int nStringResourceID, LPTSTR lpInputFileName)
49: {
50: OPENFILENAME ofn ;
51: TCHAR szFileSpec [256] ;
52: TCHAR szFileTitle [80] ;
53: TCHAR szDialogTitle [80] ;
54: HANDLE hFile ;
55: PERFFILEHEADER FileHeader ;
56:
57: TCHAR aszOpenFilter[LongTextLen] ;
58: int StringLength ;
59: BOOL retCode ;
60: LPTSTR pFileName = NULL ;
61:
62: if (strempty(lpInputFileName))
63: {
64:
65: dwCurrentDlgID = HC_PM_idDlgFileOpen ;
66:
67: // get the file extension strings
68: LoadString (hInstance, nStringResourceID, aszOpenFilter,
69: sizeof(aszOpenFilter) / sizeof(TCHAR)) ;
70: StringLength = lstrlen (aszOpenFilter) + 1 ;
71: LoadString (hInstance, nStringResourceID+1,
72: &aszOpenFilter[StringLength],
73: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
74: StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
75:
76: #ifdef ADVANCED_PERFMON
77: // get workspace file extension strings
78: LoadString (hInstance, IDS_WORKSPACEFILE,
79: &aszOpenFilter[StringLength],
80: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
81: StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
82: LoadString (hInstance, IDS_WORKSPACEFILEEXT,
83: &aszOpenFilter[StringLength],
84: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
85: StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1;
86: #endif
87:
88: // get all file extension strings
89: LoadString (hInstance, IDS_ALLFILES,
90: &aszOpenFilter[StringLength],
91: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
92: StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
93: LoadString (hInstance, IDS_ALLFILESEXT,
94: &aszOpenFilter[StringLength],
95: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
96: StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
97:
98: // setup the end strings
99: aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
100:
101: strclr (szFileSpec) ;
102: strclr (szFileTitle) ;
103:
104: StringLoad (IDS_FILEOPEN_TITLE, szDialogTitle) ;
105: memset (&ofn, 0, sizeof(OPENFILENAME)) ;
106: ofn.lStructSize = sizeof(OPENFILENAME) ;
107: ofn.hwndOwner = hWndParent ;
108: ofn.hInstance = hInstance;
109: ofn.lpstrTitle = szDialogTitle ;
110: ofn.lpstrFilter = aszOpenFilter ;
111: ofn.nFilterIndex = 1L ;
112:
113: ofn.lpstrFile = szFileSpec;
114: ofn.nMaxFile = sizeof(szFileSpec);
115: ofn.lpstrFileTitle = szFileTitle;
116: ofn.nMaxFileTitle = sizeof(szFileTitle);
117: ofn.Flags = OFN_HIDEREADONLY | OFN_SHOWHELP | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK ;
118: ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
119:
120: if (!GetOpenFileName(&ofn))
121: {
122: dwCurrentDlgID = 0 ;
123: return (FALSE) ;
124: }
125:
126: dwCurrentDlgID = 0 ;
127:
128: hFile = FileHandleOpen (szFileSpec) ;
129: pFileName = szFileSpec ;
130:
131: } // NULL lpFileName
132:
133: else
134: {
135: // open the input file
136: hFile = FileHandleOpen (lpInputFileName) ;
137: if (hFile && hFile != INVALID_HANDLE_VALUE &&
138: SearchPath (NULL, lpInputFileName, NULL,
139: sizeof(szFileSpec)/sizeof(TCHAR) - 1,
140: szFileSpec, &pFileName))
141: {
142: pFileName = szFileSpec ;
143: }
144: else
145: {
146: pFileName = NULL ;
147: }
148: }
149:
150: if (!hFile || hFile == INVALID_HANDLE_VALUE)
151: {
152: return (FALSE) ;
153: }
154:
155: if (!FileRead (hFile, &FileHeader, sizeof (FileHeader)))
156: {
157: CloseHandle (hFile) ;
158: if (strempty(lpInputFileName))
159: {
160: DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
161: }
162: return (FALSE) ;
163: }
164:
165:
166: //=============================//
167: // Chart File? //
168: //=============================//
169:
170: if (strsame (FileHeader.szSignature, szPerfChartSignature))
171: {
172: retCode = OpenChart (hWndGraph,
173: hFile,
174: FileHeader.dwMajorVersion,
175: FileHeader.dwMinorVersion,
176: TRUE) ;
177: if (retCode)
178: {
179: ChangeSaveFileName (pFileName, IDM_VIEWCHART) ;
180: }
181: else
182: {
183: goto ErrExit ;
184: }
185: return (retCode) ;
186: }
187:
188: #ifdef ADVANCED_PERFMON
189: //=============================//
190: // Alert File? //
191: //=============================//
192:
193: if (strsame (FileHeader.szSignature, szPerfAlertSignature))
194: {
195: retCode = OpenAlert (hWndAlert,
196: hFile,
197: FileHeader.dwMajorVersion,
198: FileHeader.dwMinorVersion,
199: TRUE) ;
200: if (retCode)
201: {
202: ChangeSaveFileName (pFileName, IDM_VIEWALERT) ;
203: }
204: else
205: {
206: goto ErrExit ;
207: }
208:
209: return (retCode) ;
210: }
211:
212:
213: //=============================//
214: // Log File? //
215: //=============================//
216:
217: if (strsame (FileHeader.szSignature, szPerfLogSignature))
218: {
219: retCode = OpenLog (hWndLog,
220: hFile,
221: FileHeader.dwMajorVersion,
222: FileHeader.dwMinorVersion,
223: TRUE) ;
224: if (retCode)
225: {
226: ChangeSaveFileName (pFileName, IDM_VIEWLOG) ;
227: }
228: else
229: {
230: goto ErrExit ;
231: }
232:
233: return (retCode) ;
234: }
235:
236: //=============================//
237: // Report File? //
238: //=============================//
239:
240: if (strsame (FileHeader.szSignature, szPerfReportSignature))
241: {
242: retCode = OpenReport (hWndReport,
243: hFile,
244: FileHeader.dwMajorVersion,
245: FileHeader.dwMinorVersion,
246: TRUE) ;
247: if (retCode)
248: {
249: ChangeSaveFileName (pFileName, IDM_VIEWREPORT) ;
250: }
251: else
252: {
253: goto ErrExit ;
254: }
255:
256: return (retCode) ;
257: }
258:
259: //=============================//
260: // Workspace File? //
261: //=============================//
262:
263: if (strsame (FileHeader.szSignature, szPerfWorkspaceSignature))
264: {
265: retCode = OpenWorkspace (hFile,
266: FileHeader.dwMajorVersion,
267: FileHeader.dwMinorVersion) ;
268: if (retCode)
269: {
270: return (TRUE) ;
271: }
272: else
273: {
274: goto ErrExit ;
275: }
276: }
277: #endif
278:
279: //=============================//
280: // Unknown file type //
281: //=============================//
282: CloseHandle (hFile) ;
283:
284: ErrExit:
285:
286: DlgErrorBox (hWndParent, ERR_BAD_SETTING_FILE, pFileName) ;
287: return (FALSE) ;
288: } // FileOpen
289:
290:
291: BOOL FileGetName (HWND hWndParent, int nStringResourceID, LPTSTR lpFileName)
292: {
293: OPENFILENAME ofn ;
294: TCHAR szFileSpec [256] ;
295: TCHAR szFileTitle [80] ;
296: TCHAR szDialogTitle [80] ;
297: TCHAR aszOpenFilter[LongTextLen] ;
298: int StringLength ;
299:
300: if (lpFileName)
301: {
302:
303: // get the file extension strings
304: LoadString (hInstance, nStringResourceID,
305: aszOpenFilter,
306: sizeof(aszOpenFilter) / sizeof(TCHAR) ) ;
307: StringLength = lstrlen (aszOpenFilter) + 1 ;
308: LoadString (hInstance, nStringResourceID+1,
309: &aszOpenFilter[StringLength],
310: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
311:
312: if (nStringResourceID != IDS_EXPORTFILE)
313: {
314: StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
315: // get all file extension strings
316: LoadString (hInstance, IDS_ALLFILES,
317: &aszOpenFilter[StringLength],
318: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
319: StringLength += lstrlen (&aszOpenFilter[StringLength]) + 1 ;
320: LoadString (hInstance, IDS_ALLFILESEXT,
321: &aszOpenFilter[StringLength],
322: sizeof(aszOpenFilter) / sizeof(TCHAR) - StringLength) ;
323: }
324:
325: // setup the end strings
326: StringLength += lstrlen (&aszOpenFilter[StringLength]) ;
327: aszOpenFilter[StringLength+1] = aszOpenFilter[StringLength+2] = TEXT('\0') ;
328:
329: strclr (szFileSpec) ;
330: strclr (szFileTitle) ;
331:
332: if (nStringResourceID == IDS_EXPORTFILE)
333: {
334: dwCurrentDlgID = HC_PM_idDlgFileExport ;
335: StringLoad (IDS_EXPORTAS_TITLE, szDialogTitle) ;
336: }
337: else if (nStringResourceID == IDS_WORKSPACEFILE)
338: {
339: dwCurrentDlgID = HC_PM_idDlgFileSaveWorkSpace ;
340: StringLoad (IDS_SAVEASW_TITLE, szDialogTitle) ;
341: }
342: else
343: {
344: dwCurrentDlgID = HC_PM_idDlgFileSaveAs ;
345: StringLoad (IDS_SAVEAS_TITLE, szDialogTitle) ;
346: }
347:
348: memset (&ofn, 0, sizeof(OPENFILENAME)) ;
349: ofn.lStructSize = sizeof(OPENFILENAME) ;
350: ofn.hwndOwner = hWndParent ;
351: ofn.hInstance = hInstance;
352: ofn.lpstrTitle = szDialogTitle ;
353: ofn.lpstrFilter = aszOpenFilter ;
354: ofn.nFilterIndex = 1L ;
355:
356: ofn.lpstrFile = szFileSpec;
357: ofn.nMaxFile = sizeof(szFileSpec);
358: ofn.lpstrFileTitle = szFileTitle;
359: ofn.nMaxFileTitle = sizeof(szFileTitle);
360:
361: if (nStringResourceID == IDS_EXPORTFILE)
362: {
363: ofn.Flags = ExportOptionsOFNStyle ;
364: ofn.lpfnHook = (LPOFNHOOKPROC) ExportOptionsHookProc ;
365: ofn.lpTemplateName = idDlgExportOptions ;
366: }
367: else
368: {
369: ofn.Flags = OptionsOFNStyle ;
370: ofn.lpfnHook = (LPOFNHOOKPROC) FileOpenHookProc ;
371: }
372:
373: if (!GetSaveFileName(&ofn))
374: {
375: dwCurrentDlgID = 0 ;
376: return (FALSE) ;
377: }
378: dwCurrentDlgID = 0 ;
379: }
380: else
381: {
382: return (FALSE) ;
383: }
384:
385: lstrcpy (lpFileName, ofn.lpstrFile) ;
386:
387: return (TRUE) ;
388: } // FileGetName
389:
390:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.