Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencolumn.c
Go to the documentation of this file.
00001 /* 00002 * ReactOS Task Manager 00003 * 00004 * column.c 00005 * 00006 * Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org> 00007 * 2005 Klemens Friedl <frik85@reactos.at> 00008 * 00009 * This library is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU Lesser General Public 00011 * License as published by the Free Software Foundation; either 00012 * version 2.1 of the License, or (at your option) any later version. 00013 * 00014 * This library is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 * Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public 00020 * License along with this library; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00022 */ 00023 00024 #include <precomp.h> 00025 00026 UINT ColumnDataHints[COLUMN_NMAX]; 00027 00028 #define DECLARE_COLUMN_PRESET(_name, _size, _state) \ 00029 { IDS_TAB_##_name, IDC_##_name, _size, _state }, 00030 00031 const PresetColumnEntry ColumnPresets[COLUMN_NMAX] = { 00032 DECLARE_COLUMN_PRESET(IMAGENAME, 105, TRUE) 00033 DECLARE_COLUMN_PRESET(PID, 50, TRUE) 00034 DECLARE_COLUMN_PRESET(USERNAME, 107, FALSE) 00035 DECLARE_COLUMN_PRESET(SESSIONID, 70, FALSE) 00036 DECLARE_COLUMN_PRESET(CPUUSAGE, 35, TRUE) 00037 DECLARE_COLUMN_PRESET(CPUTIME, 70, TRUE) 00038 DECLARE_COLUMN_PRESET(MEMORYUSAGE, 70, TRUE) 00039 DECLARE_COLUMN_PRESET(PEAKMEMORYUSAGE, 100, FALSE) 00040 DECLARE_COLUMN_PRESET(MEMORYUSAGEDELTA, 70, FALSE) 00041 DECLARE_COLUMN_PRESET(PAGEFAULTS, 70, FALSE) 00042 DECLARE_COLUMN_PRESET(PAGEFAULTSDELTA, 70, FALSE) 00043 DECLARE_COLUMN_PRESET(VIRTUALMEMORYSIZE, 70, FALSE) 00044 DECLARE_COLUMN_PRESET(PAGEDPOOL, 70, FALSE) 00045 DECLARE_COLUMN_PRESET(NONPAGEDPOOL, 70, FALSE) 00046 DECLARE_COLUMN_PRESET(BASEPRIORITY, 60, FALSE) 00047 DECLARE_COLUMN_PRESET(HANDLECOUNT, 60, FALSE) 00048 DECLARE_COLUMN_PRESET(THREADCOUNT, 60, FALSE) 00049 DECLARE_COLUMN_PRESET(USEROBJECTS, 60, FALSE) 00050 DECLARE_COLUMN_PRESET(GDIOBJECTS, 60, FALSE) 00051 DECLARE_COLUMN_PRESET(IOREADS, 70, FALSE) 00052 DECLARE_COLUMN_PRESET(IOWRITES, 70, FALSE) 00053 DECLARE_COLUMN_PRESET(IOOTHER, 70, FALSE) 00054 DECLARE_COLUMN_PRESET(IOREADBYTES, 70, FALSE) 00055 DECLARE_COLUMN_PRESET(IOWRITEBYTES, 70, FALSE) 00056 DECLARE_COLUMN_PRESET(IOOTHERBYTES, 70, FALSE) 00057 }; 00058 00059 static int InsertColumn(int nCol, LPCWSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem); 00060 INT_PTR CALLBACK ColumnsDialogWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); 00061 00062 void AddColumns(void) 00063 { 00064 LRESULT size; 00065 WCHAR szTemp[256]; 00066 unsigned int n; 00067 00068 for (n=0; n<COLUMN_NMAX; n++) { 00069 if (TaskManagerSettings.Columns[n]) { 00070 LoadStringW(hInst, ColumnPresets[n].dwIdsName, szTemp, sizeof(szTemp)/sizeof(WCHAR)); 00071 InsertColumn(n, szTemp, LVCFMT_LEFT, TaskManagerSettings.ColumnSizeArray[n], -1); 00072 } 00073 } 00074 00075 size = SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEMCOUNT, 0, 0); 00076 SendMessageW(hProcessPageHeaderCtrl, HDM_SETORDERARRAY, (WPARAM) size, (LPARAM) &TaskManagerSettings.ColumnOrderArray); 00077 00078 UpdateColumnDataHints(); 00079 } 00080 00081 static int InsertColumn(int nCol, LPCWSTR lpszColumnHeading, int nFormat, int nWidth, int nSubItem) 00082 { 00083 LVCOLUMN column; 00084 00085 column.mask = LVCF_TEXT|LVCF_FMT; 00086 column.pszText = (LPWSTR)lpszColumnHeading; 00087 column.fmt = nFormat; 00088 00089 if (nWidth != -1) 00090 { 00091 column.mask |= LVCF_WIDTH; 00092 column.cx = nWidth; 00093 } 00094 00095 if (nSubItem != -1) 00096 { 00097 column.mask |= LVCF_SUBITEM; 00098 column.iSubItem = nSubItem; 00099 } 00100 00101 return ListView_InsertColumn(hProcessPageListCtrl, nCol, &column); 00102 } 00103 00104 void SaveColumnSettings(void) 00105 { 00106 HDITEM hditem; 00107 int i, n; 00108 WCHAR text[260]; 00109 WCHAR szTemp[256]; 00110 LRESULT size; 00111 00112 /* Reset column data */ 00113 for (i=0; i<COLUMN_NMAX; i++) { 00114 TaskManagerSettings.ColumnOrderArray[i] = i; 00115 TaskManagerSettings.Columns[i] = FALSE; 00116 TaskManagerSettings.ColumnSizeArray[i] = ColumnPresets[i].size; 00117 } 00118 00119 /* Get header order */ 00120 size = SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEMCOUNT, 0, 0); 00121 SendMessageW(hProcessPageHeaderCtrl, HDM_GETORDERARRAY, (WPARAM) size, (LPARAM) &TaskManagerSettings.ColumnOrderArray); 00122 00123 /* Get visible columns */ 00124 for (i = 0; i < SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEMCOUNT, 0, 0); i++) { 00125 memset(&hditem, 0, sizeof(HDITEM)); 00126 00127 hditem.mask = HDI_TEXT|HDI_WIDTH; 00128 hditem.pszText = text; 00129 hditem.cchTextMax = 260; 00130 00131 SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEM, i, (LPARAM) &hditem); 00132 00133 for (n = 0; n < COLUMN_NMAX; n++) { 00134 LoadStringW(hInst, ColumnPresets[n].dwIdsName, szTemp, sizeof(szTemp)/sizeof(WCHAR)); 00135 if (_wcsicmp(text, szTemp) == 0) 00136 { 00137 TaskManagerSettings.Columns[n] = TRUE; 00138 TaskManagerSettings.ColumnSizeArray[n] = hditem.cxy; 00139 } 00140 } 00141 } 00142 } 00143 00144 void ProcessPage_OnViewSelectColumns(void) 00145 { 00146 int i; 00147 00148 if (DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_COLUMNS_DIALOG), hMainWnd, ColumnsDialogWndProc) == IDOK) 00149 { 00150 for (i=Header_GetItemCount(hProcessPageHeaderCtrl)-1; i>=0; i--) 00151 { 00152 (void)ListView_DeleteColumn(hProcessPageListCtrl, i); 00153 } 00154 00155 for (i=0; i<COLUMN_NMAX; i++) { 00156 TaskManagerSettings.ColumnOrderArray[i] = i; 00157 TaskManagerSettings.ColumnSizeArray[i] = ColumnPresets[i].size; 00158 } 00159 00160 AddColumns(); 00161 } 00162 } 00163 00164 INT_PTR CALLBACK 00165 ColumnsDialogWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 00166 { 00167 unsigned int i; 00168 00169 switch (message) 00170 { 00171 case WM_INITDIALOG: 00172 00173 for (i=0; i<COLUMN_NMAX; i++) { 00174 if (TaskManagerSettings.Columns[i]) 00175 SendMessageW(GetDlgItem(hDlg, ColumnPresets[i].dwIdcCtrl), BM_SETCHECK, BST_CHECKED, 0); 00176 } 00177 return TRUE; 00178 00179 case WM_COMMAND: 00180 00181 if (LOWORD(wParam) == IDCANCEL) 00182 { 00183 EndDialog(hDlg, LOWORD(wParam)); 00184 return TRUE; 00185 } 00186 00187 if (LOWORD(wParam) == IDOK) 00188 { 00189 for (i=0; i<COLUMN_NMAX; i++) 00190 TaskManagerSettings.Columns[i] = (BOOL) SendMessageW(GetDlgItem(hDlg, ColumnPresets[i].dwIdcCtrl), BM_GETCHECK, 0, 0); 00191 00192 EndDialog(hDlg, LOWORD(wParam)); 00193 return TRUE; 00194 } 00195 00196 break; 00197 } 00198 00199 return 0; 00200 } 00201 00202 void UpdateColumnDataHints(void) 00203 { 00204 HDITEM hditem; 00205 WCHAR text[260]; 00206 ULONG Index; 00207 WCHAR szTemp[256]; 00208 unsigned int i; 00209 00210 for (Index=0; Index<(ULONG)SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEMCOUNT, 0, 0); Index++) 00211 { 00212 memset(&hditem, 0, sizeof(HDITEM)); 00213 00214 hditem.mask = HDI_TEXT; 00215 hditem.pszText = text; 00216 hditem.cchTextMax = 260; 00217 00218 SendMessageW(hProcessPageHeaderCtrl, HDM_GETITEM, Index, (LPARAM) &hditem); 00219 00220 for (i=0; i<COLUMN_NMAX; i++) { 00221 LoadStringW(hInst, ColumnPresets[i].dwIdsName, szTemp, sizeof(szTemp)/sizeof(WCHAR)); 00222 if (_wcsicmp(text, szTemp) == 0) 00223 ColumnDataHints[Index] = i; 00224 } 00225 } 00226 } Generated on Sun May 27 2012 04:17:45 for ReactOS by
1.7.6.1
|