ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

column.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.