|
|
1.1 root 1:
2: //==========================================================================//
3: // Includes //
4: //==========================================================================//
5:
6: #include "perfmon.h"
7: #include "utils.h"
8: #include "log.h"
9: #include "pmemory.h" // for MemoryXXX (malloc-like) routines
10: #include "perfdata.h"
11: #include "perfmops.h"
12: #include "system.h" // for SystemGet
13: #include "playback.h" // for PlayingBackLog & DataFromIndexPosition
14: #include "pmhelpid.h" // Help IDs
15:
16: //==========================================================================//
17: // External Data //
18: //==========================================================================//
19:
20: extern HWND hWndLogEntries ;
21:
22: BOOL ComputerChange ;
23: static PPERFDATA pPerfData ;
24:
25:
26: //==========================================================================//
27: // Local Functions //
28: //==========================================================================//
29:
30:
31: BOOL /* static */ LogComputerChanged (HDLG hDlg)
32: { // LogComputerChanged
33: PLOG pLog ;
34: HWND hWndObjects ;
35: PPERFSYSTEM pSysInfo;
36: DWORD iObjectType ;
37: DWORD iObjectNum ;
38:
39: pLog = LogData (hDlg) ;
40: hWndObjects = DialogControl (hDlg, IDD_ADDLOGOBJECT) ;
41:
42: if (!pPerfData)
43: {
44: LBReset (hWndObjects) ;
45: return FALSE ;
46: }
47:
48: SetHourglassCursor() ;
49:
50: pSysInfo = GetComputer (hDlg,
51: IDD_ADDLOGCOMPUTER,
52: TRUE,
53: &pPerfData,
54: &pLog->pSystemFirst) ;
55:
56: if (!pPerfData || !pSysInfo)
57: {
58: LBReset (hWndObjects) ;
59: SetArrowCursor() ;
60: return FALSE ;
61: }
62: else
63: {
64: LBLoadObjects (hWndObjects,
65: pPerfData,
66: pSysInfo,
67: pLog->dwDetailLevel,
68: NULL,
69: FALSE) ;
70:
71: iObjectNum = (DWORD) LBNumItems (hWndObjects) ;
72: for (iObjectType = 0 ;
73: iObjectType < iObjectNum ;
74: iObjectType++)
75: { // for
76: LBSetSelection (hWndObjects, iObjectType) ;
77: } // for
78:
79: }
80:
81: ComputerChange = FALSE ;
82: DialogEnable (hDlg, IDD_ADDLOGADD, TRUE) ;
83:
84: SetArrowCursor() ;
85:
86: return TRUE ;
87: } // LogComputerChanged
88:
89:
90: void /*static*/ OnLogDestroy (HDLG hDlg)
91: { // OnLogDestroy
92:
93: dwCurrentDlgID = 0 ;
94:
95: if (!PlayingBackLog ())
96: MemoryFree (pPerfData) ;
97:
98: bAddLineInProgress = FALSE ;
99: } // OnLogDestroy
100:
101:
102: //==========================================================================//
103: // Message Handlers //
104: //==========================================================================//
105:
106:
107: void /* static */ OnInitAddLogDialog (HDLG hDlg)
108: { // OnInitAddLogDialog
109: TCHAR szRemoteComputerName[MAX_COMPUTERNAME_LENGTH + 3] ;
110:
111: bAddLineInProgress = TRUE ;
112: if (PlayingBackLog())
113: {
114: pPerfData = DataFromIndexPosition (&(PlaybackLog.StartIndexPos), NULL) ;
115: GetPerfComputerName(pPerfData, szRemoteComputerName);
116: DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, szRemoteComputerName);
117: DialogEnable (hDlg, IDD_ADDLOGELLIPSES, TRUE) ;
118: }
119: else
120: {
121: pPerfData = MemoryAllocate (STARTING_SYSINFO_SIZE) ;
122: DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, LocalComputerName) ;
123: DialogEnable (hDlg, IDD_ADDLOGELLIPSES, FALSE) ;
124: }
125:
126: LogComputerChanged (hDlg) ;
127:
128: DialogEnable (hDlg, IDD_ADDLOGOBJECTTEXT, TRUE) ;
129: DialogEnable (hDlg, IDD_ADDLOGOBJECT, TRUE) ;
130:
131: WindowCenter (hDlg) ;
132:
133: dwCurrentDlgID = HC_PM_idDlgEditAddToLog ;
134:
135: } // OnInitAddLogDialog
136:
137:
138: void /* static */ OnLogComputer (HDLG hDlg)
139: /*
140: Effect: Put up the select Domain/Computer dialog. Allow the user
141: to select the computer. Check for user entering a domain
142: instead. Place the selected computer in the readonly
143: edit box.
144: */
145: { // OnLogComputer
146: TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH + 1] ;
147:
148: if (ChooseComputer (hDlg, szComputer))
149: {
150: DialogSetString (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
151: LogComputerChanged (hDlg) ;
152: } // if
153: } // OnLogComputer
154:
155:
156:
157: void /* static */ OnAddToLog (HDLG hDlg)
158: /*
159: Effect: Perform all actions needed when the user clicks on
160: the add button. In particular, determine if the required
161: fields of the dialog have valid values. If so, go ahead
162: and add a LOGENTRY record in the log. If the computer
163: being logged is not already logged, add a LOGSYSTEMENTRY
164: as well.
165:
166: Assert: We have valid values for computer and object, since we
167: always control these fields.
168: */
169: { // OnAddToLog
170: TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH + 1] ;
171: TCHAR szObjectType [PerfObjectLen + 1] ;
172: DWORD iObjectType ;
173: DWORD iObjectNum ;
174: HWND hWndObjectTypes ;
175: PPERF_OBJECT_TYPE pObject ;
176: PLOG pLog ;
177:
178: pLog = LogData (hWndLog) ;
179:
180: DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
181:
182: if (ComputerChange)
183: {
184: // if computer has changed, don't want to continue
185: // because the perfdata may have changed
186: LogComputerChanged (hDlg) ;
187: return ;
188: }
189:
190: hWndObjectTypes = DialogControl(hDlg, IDD_ADDLOGOBJECT) ;
191:
192: iObjectNum = (DWORD) LBNumItems (hWndObjectTypes) ;
193:
194: LBSetRedraw (hWndLogEntries, FALSE) ;
195:
196: for (iObjectType = 0 ;
197: iObjectType < iObjectNum ;
198: iObjectType++)
199: { // for
200: // NOTE: for now, we don't check for duplicate lines
201: if (LBSelected (hWndObjectTypes, iObjectType))
202: { // if
203: LBString (hWndObjectTypes, iObjectType, szObjectType) ;
204: pObject = (PPERF_OBJECT_TYPE) LBData (hWndObjectTypes, iObjectType) ;
205:
206: // eliminate duplicates here
207: if (LogFindEntry(szComputer, pObject->ObjectNameTitleIndex) ==
208: LOG_ENTRY_NOT_FOUND)
209: {
210: LogAddEntry (hWndLogEntries,
211: szComputer,
212: szObjectType,
213: pObject->ObjectNameTitleIndex) ;
214: }
215: } // if
216: } // for
217:
218: LBSetRedraw (hWndLogEntries, TRUE) ;
219:
220: DialogSetText (hDlg, IDD_ADDLOGDONE, IDS_DONE) ;
221:
222: if (pLog->iStatus == iPMStatusCollecting)
223: {
224: LogWriteSystemCounterNames (hWndLog, pLog) ;
225: }
226: } // OnAddToLog
227:
228:
229:
230: int FAR WINAPI AddLogDlgProc (HWND hDlg, WORD msg,
231: WPARAM wParam, LONG lParam)
232: { // AddLogDlg
233: switch(msg)
234: {
235: case WM_INITDIALOG:
236: OnInitAddLogDialog (hDlg) ;
237: return(TRUE);
238:
239: case WM_COMMAND:
240: switch(LOWORD(wParam))
241: {
242: // case IDD_OK:
243: case IDD_CANCEL:
244: EndDialog(hDlg,0);
245: return(TRUE);
246:
247: case IDD_OK:
248: case IDD_ADDLOGADD:
249: SetHourglassCursor() ;
250: OnAddToLog (hDlg) ;
251: SetArrowCursor() ;
252: break ;
253:
254: case IDD_ADDLOGDONE:
255: EndDialog (hDlg, 0) ;
256: break ;
257:
258: case IDD_ADDLOGELLIPSES:
259: SetHourglassCursor() ;
260: OnLogComputer (hDlg) ;
261: SetArrowCursor() ;
262: break ;
263:
264:
265: case IDD_ADDLOGCOMPUTER:
266: if (HIWORD (wParam) == EN_UPDATE)
267: {
268: ComputerChange = TRUE ;
269: DialogEnable (hDlg, IDD_ADDLOGADD, FALSE) ;
270: }
271: else if (HIWORD (wParam) == EN_KILLFOCUS)
272: {
273: if (ComputerChange)
274: {
275: TCHAR szComputer [MAX_SYSTEM_NAME_LENGTH + 3] ;
276:
277: DialogText (hDlg, IDD_ADDLOGCOMPUTER, szComputer) ;
278: LogComputerChanged (hDlg) ;
279: }
280: }
281: break ;
282:
283: case IDD_ADDLOGHELP:
284: CallWinHelp (dwCurrentDlgID) ;
285: break ;
286:
287: default:
288: break;
289: }
290: break;
291:
292: case WM_DESTROY:
293: OnLogDestroy (hDlg) ;
294: break ;
295:
296: default:
297: break;
298: }
299:
300: return (FALSE);
301: } // AddLogDlgProc
302:
303:
304:
305: BOOL AddLog (HWND hWndParent)
306: { // AddLog
307: if (DialogBox (hInstance, idDlgAddLog,
308: hWndParent, (DLGPROC) AddLogDlgProc))
309: { // if
310: return (TRUE) ;
311: } // if
312: return (FALSE) ;
313: } // AddLog
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.