6 * Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
7 * 2005 Klemens Friedl <frik85@reactos.at>
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26 UINT ColumnDataHints
[COLUMN_NMAX
];
28 #define DECLARE_COLUMN_PRESET(_name, _size, _state) \
29 { IDS_TAB_##_name, IDC_##_name, _size, _state },
31 const PresetColumnEntry ColumnPresets
[COLUMN_NMAX
] = {
32 DECLARE_COLUMN_PRESET(IMAGENAME
, 105, TRUE
)
33 DECLARE_COLUMN_PRESET(PID
, 50, TRUE
)
34 DECLARE_COLUMN_PRESET(USERNAME
, 107, FALSE
)
35 DECLARE_COLUMN_PRESET(SESSIONID
, 70, FALSE
)
36 DECLARE_COLUMN_PRESET(CPUUSAGE
, 35, TRUE
)
37 DECLARE_COLUMN_PRESET(CPUTIME
, 70, TRUE
)
38 DECLARE_COLUMN_PRESET(MEMORYUSAGE
, 70, TRUE
)
39 DECLARE_COLUMN_PRESET(PEAKMEMORYUSAGE
, 100, FALSE
)
40 DECLARE_COLUMN_PRESET(MEMORYUSAGEDELTA
, 70, FALSE
)
41 DECLARE_COLUMN_PRESET(PAGEFAULTS
, 70, FALSE
)
42 DECLARE_COLUMN_PRESET(PAGEFAULTSDELTA
, 70, FALSE
)
43 DECLARE_COLUMN_PRESET(VIRTUALMEMORYSIZE
, 70, FALSE
)
44 DECLARE_COLUMN_PRESET(PAGEDPOOL
, 70, FALSE
)
45 DECLARE_COLUMN_PRESET(NONPAGEDPOOL
, 70, FALSE
)
46 DECLARE_COLUMN_PRESET(BASEPRIORITY
, 60, FALSE
)
47 DECLARE_COLUMN_PRESET(HANDLECOUNT
, 60, FALSE
)
48 DECLARE_COLUMN_PRESET(THREADCOUNT
, 60, FALSE
)
49 DECLARE_COLUMN_PRESET(USEROBJECTS
, 60, FALSE
)
50 DECLARE_COLUMN_PRESET(GDIOBJECTS
, 60, FALSE
)
51 DECLARE_COLUMN_PRESET(IOREADS
, 70, FALSE
)
52 DECLARE_COLUMN_PRESET(IOWRITES
, 70, FALSE
)
53 DECLARE_COLUMN_PRESET(IOOTHER
, 70, FALSE
)
54 DECLARE_COLUMN_PRESET(IOREADBYTES
, 70, FALSE
)
55 DECLARE_COLUMN_PRESET(IOWRITEBYTES
, 70, FALSE
)
56 DECLARE_COLUMN_PRESET(IOOTHERBYTES
, 70, FALSE
)
57 DECLARE_COLUMN_PRESET(COMMANDLINE
, 450, FALSE
)
60 static int InsertColumn(int nCol
, LPCWSTR lpszColumnHeading
, int nFormat
, int nWidth
, int nSubItem
);
61 INT_PTR CALLBACK
ColumnsDialogWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
);
69 for (n
=0; n
<COLUMN_NMAX
; n
++) {
70 if (TaskManagerSettings
.Columns
[n
]) {
71 LoadStringW(hInst
, ColumnPresets
[n
].dwIdsName
, szTemp
, sizeof(szTemp
)/sizeof(WCHAR
));
72 InsertColumn(n
, szTemp
, LVCFMT_LEFT
, TaskManagerSettings
.ColumnSizeArray
[n
], -1);
76 size
= SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0);
77 SendMessageW(hProcessPageHeaderCtrl
, HDM_SETORDERARRAY
, (WPARAM
) size
, (LPARAM
) &TaskManagerSettings
.ColumnOrderArray
);
79 UpdateColumnDataHints();
82 static int InsertColumn(int nCol
, LPCWSTR lpszColumnHeading
, int nFormat
, int nWidth
, int nSubItem
)
86 column
.mask
= LVCF_TEXT
|LVCF_FMT
;
87 column
.pszText
= (LPWSTR
)lpszColumnHeading
;
92 column
.mask
|= LVCF_WIDTH
;
98 column
.mask
|= LVCF_SUBITEM
;
99 column
.iSubItem
= nSubItem
;
102 return ListView_InsertColumn(hProcessPageListCtrl
, nCol
, &column
);
105 void SaveColumnSettings(void)
113 /* Reset column data */
114 for (i
=0; i
<COLUMN_NMAX
; i
++) {
115 TaskManagerSettings
.ColumnOrderArray
[i
] = i
;
116 TaskManagerSettings
.Columns
[i
] = FALSE
;
117 TaskManagerSettings
.ColumnSizeArray
[i
] = ColumnPresets
[i
].size
;
120 /* Get header order */
121 size
= SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0);
122 SendMessageW(hProcessPageHeaderCtrl
, HDM_GETORDERARRAY
, (WPARAM
) size
, (LPARAM
) &TaskManagerSettings
.ColumnOrderArray
);
124 /* Get visible columns */
125 for (i
= 0; i
< SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0); i
++) {
126 memset(&hditem
, 0, sizeof(HDITEM
));
128 hditem
.mask
= HDI_TEXT
|HDI_WIDTH
;
129 hditem
.pszText
= text
;
130 hditem
.cchTextMax
= 260;
132 SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEM
, i
, (LPARAM
) &hditem
);
134 for (n
= 0; n
< COLUMN_NMAX
; n
++) {
135 LoadStringW(hInst
, ColumnPresets
[n
].dwIdsName
, szTemp
, sizeof(szTemp
)/sizeof(WCHAR
));
136 if (_wcsicmp(text
, szTemp
) == 0)
138 TaskManagerSettings
.Columns
[n
] = TRUE
;
139 TaskManagerSettings
.ColumnSizeArray
[n
] = hditem
.cxy
;
145 void ProcessPage_OnViewSelectColumns(void)
149 if (DialogBoxW(hInst
, MAKEINTRESOURCEW(IDD_COLUMNS_DIALOG
), hMainWnd
, ColumnsDialogWndProc
) == IDOK
)
151 for (i
=Header_GetItemCount(hProcessPageHeaderCtrl
)-1; i
>=0; i
--)
153 (void)ListView_DeleteColumn(hProcessPageListCtrl
, i
);
156 for (i
=0; i
<COLUMN_NMAX
; i
++) {
157 TaskManagerSettings
.ColumnOrderArray
[i
] = i
;
158 TaskManagerSettings
.ColumnSizeArray
[i
] = ColumnPresets
[i
].size
;
166 ColumnsDialogWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
174 for (i
=0; i
<COLUMN_NMAX
; i
++) {
175 if (TaskManagerSettings
.Columns
[i
])
176 CheckDlgButton(hDlg
, ColumnPresets
[i
].dwIdcCtrl
, BST_CHECKED
);
182 if (LOWORD(wParam
) == IDCANCEL
)
184 EndDialog(hDlg
, LOWORD(wParam
));
188 if (LOWORD(wParam
) == IDOK
)
190 for (i
=0; i
<COLUMN_NMAX
; i
++)
191 TaskManagerSettings
.Columns
[i
] = (BOOL
)IsDlgButtonChecked(hDlg
, ColumnPresets
[i
].dwIdcCtrl
);
193 EndDialog(hDlg
, LOWORD(wParam
));
203 void UpdateColumnDataHints(void)
212 uItems
= min(SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0), COLUMN_NMAX
);
214 for (Index
=0; Index
<uItems
; Index
++)
216 memset(&hditem
, 0, sizeof(HDITEM
));
218 hditem
.mask
= HDI_TEXT
;
219 hditem
.pszText
= text
;
220 hditem
.cchTextMax
= 260;
222 SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEM
, Index
, (LPARAM
) &hditem
);
224 for (i
=0; i
<COLUMN_NMAX
; i
++) {
225 LoadStringW(hInst
, ColumnPresets
[i
].dwIdsName
, szTemp
, sizeof(szTemp
)/sizeof(WCHAR
));
226 if (_wcsicmp(text
, szTemp
) == 0)
227 ColumnDataHints
[Index
] = i
;