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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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
)
59 static int InsertColumn(int nCol
, LPCWSTR lpszColumnHeading
, int nFormat
, int nWidth
, int nSubItem
);
60 INT_PTR CALLBACK
ColumnsDialogWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
);
68 for (n
=0; n
<COLUMN_NMAX
; n
++) {
69 if (TaskManagerSettings
.Columns
[n
]) {
70 LoadStringW(hInst
, ColumnPresets
[n
].dwIdsName
, szTemp
, sizeof(szTemp
)/sizeof(WCHAR
));
71 InsertColumn(n
, szTemp
, LVCFMT_LEFT
, TaskManagerSettings
.ColumnSizeArray
[n
], -1);
75 size
= SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0);
76 SendMessageW(hProcessPageHeaderCtrl
, HDM_SETORDERARRAY
, (WPARAM
) size
, (LPARAM
) &TaskManagerSettings
.ColumnOrderArray
);
78 UpdateColumnDataHints();
81 static int InsertColumn(int nCol
, LPCWSTR lpszColumnHeading
, int nFormat
, int nWidth
, int nSubItem
)
85 column
.mask
= LVCF_TEXT
|LVCF_FMT
;
86 column
.pszText
= (LPWSTR
)lpszColumnHeading
;
91 column
.mask
|= LVCF_WIDTH
;
97 column
.mask
|= LVCF_SUBITEM
;
98 column
.iSubItem
= nSubItem
;
101 return ListView_InsertColumn(hProcessPageListCtrl
, nCol
, &column
);
104 void SaveColumnSettings(void)
112 /* Reset column data */
113 for (i
=0; i
<COLUMN_NMAX
; i
++) {
114 TaskManagerSettings
.ColumnOrderArray
[i
] = i
;
115 TaskManagerSettings
.Columns
[i
] = FALSE
;
116 TaskManagerSettings
.ColumnSizeArray
[i
] = ColumnPresets
[i
].size
;
119 /* Get header order */
120 size
= SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0);
121 SendMessageW(hProcessPageHeaderCtrl
, HDM_GETORDERARRAY
, (WPARAM
) size
, (LPARAM
) &TaskManagerSettings
.ColumnOrderArray
);
123 /* Get visible columns */
124 for (i
= 0; i
< SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0); i
++) {
125 memset(&hditem
, 0, sizeof(HDITEM
));
127 hditem
.mask
= HDI_TEXT
|HDI_WIDTH
;
128 hditem
.pszText
= text
;
129 hditem
.cchTextMax
= 260;
131 SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEM
, i
, (LPARAM
) &hditem
);
133 for (n
= 0; n
< COLUMN_NMAX
; n
++) {
134 LoadStringW(hInst
, ColumnPresets
[n
].dwIdsName
, szTemp
, sizeof(szTemp
)/sizeof(WCHAR
));
135 if (_wcsicmp(text
, szTemp
) == 0)
137 TaskManagerSettings
.Columns
[n
] = TRUE
;
138 TaskManagerSettings
.ColumnSizeArray
[n
] = hditem
.cxy
;
144 void ProcessPage_OnViewSelectColumns(void)
148 if (DialogBoxW(hInst
, MAKEINTRESOURCEW(IDD_COLUMNS_DIALOG
), hMainWnd
, ColumnsDialogWndProc
) == IDOK
)
150 for (i
=Header_GetItemCount(hProcessPageHeaderCtrl
)-1; i
>=0; i
--)
152 (void)ListView_DeleteColumn(hProcessPageListCtrl
, i
);
155 for (i
=0; i
<COLUMN_NMAX
; i
++) {
156 TaskManagerSettings
.ColumnOrderArray
[i
] = i
;
157 TaskManagerSettings
.ColumnSizeArray
[i
] = ColumnPresets
[i
].size
;
165 ColumnsDialogWndProc(HWND hDlg
, UINT message
, WPARAM wParam
, LPARAM lParam
)
173 for (i
=0; i
<COLUMN_NMAX
; i
++) {
174 if (TaskManagerSettings
.Columns
[i
])
175 SendMessageW(GetDlgItem(hDlg
, ColumnPresets
[i
].dwIdcCtrl
), BM_SETCHECK
, BST_CHECKED
, 0);
181 if (LOWORD(wParam
) == IDCANCEL
)
183 EndDialog(hDlg
, LOWORD(wParam
));
187 if (LOWORD(wParam
) == IDOK
)
189 for (i
=0; i
<COLUMN_NMAX
; i
++)
190 TaskManagerSettings
.Columns
[i
] = (BOOL
) SendMessageW(GetDlgItem(hDlg
, ColumnPresets
[i
].dwIdcCtrl
), BM_GETCHECK
, 0, 0);
192 EndDialog(hDlg
, LOWORD(wParam
));
202 void UpdateColumnDataHints(void)
210 for (Index
=0; Index
<(ULONG
)SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEMCOUNT
, 0, 0); Index
++)
212 memset(&hditem
, 0, sizeof(HDITEM
));
214 hditem
.mask
= HDI_TEXT
;
215 hditem
.pszText
= text
;
216 hditem
.cchTextMax
= 260;
218 SendMessageW(hProcessPageHeaderCtrl
, HDM_GETITEM
, Index
, (LPARAM
) &hditem
);
220 for (i
=0; i
<COLUMN_NMAX
; i
++) {
221 LoadStringW(hInst
, ColumnPresets
[i
].dwIdsName
, szTemp
, sizeof(szTemp
)/sizeof(WCHAR
));
222 if (_wcsicmp(text
, szTemp
) == 0)
223 ColumnDataHints
[Index
] = i
;