Author: ekohl
Date: Sun Apr 3 22:13:01 2016
New Revision: 71098
URL:
http://svn.reactos.org/svn/reactos?rev=71098&view=rev
Log:
[SERVMAN]
Improved column ordering.
Patch by Carlo Bramini.
CORE-10674 #resolve #comment Thanks a lot!
Modified:
trunk/reactos/base/applications/mscutils/servman/listview.c
trunk/reactos/base/applications/mscutils/servman/mainwnd.c
trunk/reactos/base/applications/mscutils/servman/precomp.h
trunk/reactos/base/applications/mscutils/servman/servman.c
Modified: trunk/reactos/base/applications/mscutils/servman/listview.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/listview.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/servman/listview.c [iso-8859-1] Sun Apr 3
22:13:01 2016
@@ -8,6 +8,27 @@
*/
#include "precomp.h"
+
+typedef struct _COLUMN_LIST
+{
+ int iSubItem;
+ int cx;
+ UINT idsText;
+} COLUMN_LIST;
+
+static const COLUMN_LIST Columns[] =
+{
+ /* name */
+ { LVNAME, 150, IDS_FIRSTCOLUMN },
+ /* description */
+ { LVDESC, 240, IDS_SECONDCOLUMN },
+ /* status */
+ { LVSTATUS, 55, IDS_THIRDCOLUMN },
+ /* startup type */
+ { LVSTARTUP, 80, IDS_FOURTHCOLUMN },
+ /* logon as */
+ { LVLOGONAS, 100, IDS_FITHCOLUMN },
+};
VOID
SetListViewStyle(HWND hListView,
@@ -336,6 +357,8 @@
{
LVCOLUMNW lvc = { 0 };
WCHAR szTemp[256];
+ HDITEM hdi;
+ int i, n;
Info->hListView = CreateWindowExW(WS_EX_CLIENTEDGE,
WC_LISTVIEWW,
@@ -356,72 +379,32 @@
return FALSE;
}
+ Info->hHeader = ListView_GetHeader(Info->hListView);
+
(void)ListView_SetExtendedListViewStyle(Info->hListView,
LVS_EX_FULLROWSELECT |
LVS_EX_HEADERDRAGDROP);/*LVS_EX_GRIDLINES |*/
lvc.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH | LVCF_FMT;
lvc.fmt = LVCFMT_LEFT;
+ lvc.pszText = szTemp;
/* Add columns to the list-view */
- /* name */
- lvc.iSubItem = LVNAME;
- lvc.cx = 150;
- LoadStringW(hInstance,
- IDS_FIRSTCOLUMN,
- szTemp,
- sizeof(szTemp) / sizeof(WCHAR));
- lvc.pszText = szTemp;
- (void)ListView_InsertColumn(Info->hListView,
- 0,
- &lvc);
-
- /* description */
- lvc.iSubItem = LVDESC;
- lvc.cx = 240;
- LoadStringW(hInstance,
- IDS_SECONDCOLUMN,
- szTemp,
- sizeof(szTemp) / sizeof(WCHAR));
- lvc.pszText = szTemp;
- (void)ListView_InsertColumn(Info->hListView,
- 1,
- &lvc);
-
- /* status */
- lvc.iSubItem = LVSTATUS;
- lvc.cx = 55;
- LoadStringW(hInstance,
- IDS_THIRDCOLUMN,
- szTemp,
- sizeof(szTemp) / sizeof(WCHAR));
- lvc.pszText = szTemp;
- (void)ListView_InsertColumn(Info->hListView,
- 2,
- &lvc);
-
- /* startup type */
- lvc.iSubItem = LVSTARTUP;
- lvc.cx = 80;
- LoadStringW(hInstance,
- IDS_FOURTHCOLUMN,
- szTemp,
- sizeof(szTemp) / sizeof(WCHAR));
- lvc.pszText = szTemp;
- (void)ListView_InsertColumn(Info->hListView,
- 3,
- &lvc);
-
- /* logon as */
- lvc.iSubItem = LVLOGONAS;
- lvc.cx = 100;
- LoadStringW(hInstance,
- IDS_FITHCOLUMN,
- szTemp,
- sizeof(szTemp) / sizeof(WCHAR));
- lvc.pszText = szTemp;
- (void)ListView_InsertColumn(Info->hListView,
- 4,
- &lvc);
+ for (n = 0; n < sizeof(Columns) / sizeof(Columns[0]); n++)
+ {
+ lvc.iSubItem = Columns[n].iSubItem;
+ lvc.cx = Columns[n].cx;
+
+ LoadStringW(hInstance,
+ Columns[n].idsText,
+ szTemp,
+ sizeof(szTemp) / sizeof(szTemp[0]));
+
+ i = ListView_InsertColumn(Info->hListView, Columns[n].iSubItem, &lvc);
+
+ hdi.mask = HDI_LPARAM;
+ hdi.lParam = ORD_ASCENDING;
+ (void)Header_SetItem(Info->hHeader, i, &hdi);
+ }
InitListViewImage(Info);
Modified: trunk/reactos/base/applications/mscutils/servman/mainwnd.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/mainwnd.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/servman/mainwnd.c [iso-8859-1] Sun Apr 3
22:13:01 2016
@@ -12,11 +12,6 @@
#include <windowsx.h>
static const WCHAR szMainWndClass[] = L"ServManWndClass";
-
-BOOL bSortAscending = TRUE;
-
-/* Temporary copy for access from list-view sort CompareFunc */
-HWND hListView;
/* Toolbar buttons */
static const TBBUTTON Buttons [] =
@@ -246,21 +241,13 @@
static INT CALLBACK
CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
+ PMAIN_WND_INFO Info = (PMAIN_WND_INFO)lParamSort;
WCHAR Item1[256], Item2[256];
- LVFINDINFO IndexInfo;
- INT Index;
-
- IndexInfo.flags = LVFI_PARAM;
-
- IndexInfo.lParam = lParam1;
- Index = ListView_FindItem(hListView, -1, &IndexInfo);
- ListView_GetItemText(hListView, Index, (INT)lParamSort, Item1, sizeof(Item1) /
sizeof(WCHAR));
-
- IndexInfo.lParam = lParam2;
- Index = ListView_FindItem(hListView, -1, &IndexInfo);
- ListView_GetItemText(hListView, Index, (INT)lParamSort, Item2, sizeof(Item2) /
sizeof(WCHAR));
-
- return bSortAscending ? wcscmp(Item1, Item2) : wcscmp(Item2, Item1);
+
+ ListView_GetItemText(Info->hListView, lParam1, Info->SortSelection, Item1,
sizeof(Item1) / sizeof(WCHAR));
+ ListView_GetItemText(Info->hListView, lParam2, Info->SortSelection, Item2,
sizeof(Item2) / sizeof(WCHAR));
+
+ return wcscmp(Item1, Item2) * Info->SortDirection;
}
@@ -737,23 +724,26 @@
case LVN_COLUMNCLICK:
{
- static int iLastSortColumn = 0;
LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam;
+ HDITEM hdi;
+
+ /* get pending sort direction for clicked column */
+ hdi.mask = HDI_LPARAM;
+ (void)Header_GetItem(Info->hHeader, pnmv->iSubItem, &hdi);
/* get new sort parameters */
- if (pnmv->iSubItem == iLastSortColumn)
- bSortAscending = !bSortAscending;
- else
- {
- iLastSortColumn = pnmv->iSubItem;
- bSortAscending = TRUE;
- }
-
- /* store a copy to have access from callback */
- hListView = Info->hListView;
- (void)ListView_SortItems(Info->hListView,
- CompareFunc,
- pnmv->iSubItem);
+ Info->SortSelection = pnmv->iSubItem;
+ Info->SortDirection = hdi.lParam;
+
+ /* set new sort direction and save */
+ hdi.lParam = (hdi.lParam == ORD_ASCENDING) ?
+ ORD_DESCENDING : ORD_ASCENDING;
+
+ (void)Header_SetItem(Info->hHeader, pnmv->iSubItem, &hdi);
+
+ (void)ListView_SortItemsEx(Info->hListView,
+ CompareFunc,
+ (LPARAM)Info);
}
break;
case LVN_ITEMCHANGED:
Modified: trunk/reactos/base/applications/mscutils/servman/precomp.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/precomp.h [iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/servman/precomp.h [iso-8859-1] Sun Apr 3
22:13:01 2016
@@ -46,12 +46,16 @@
#define ACTION_RESUME 4
#define ACTION_RESTART 5
+#define ORD_ASCENDING 1
+#define ORD_DESCENDING -1
+
typedef struct _MAIN_WND_INFO
{
HWND hMainWnd;
HWND hListView;
HWND hStatus;
HWND hTool;
+ HWND hHeader;
HMENU hShortcutMenu;
int nCmdShow;
@@ -59,6 +63,9 @@
ENUM_SERVICE_STATUS_PROCESS *pCurrentService;
INT SelectedItem;/* selection number in the list view */
+ INT SortSelection;
+ INT SortDirection;
+
BOOL bDlgOpen;
BOOL bInMenuLoop;
BOOL bIsUserAnAdmin;
Modified: trunk/reactos/base/applications/mscutils/servman/servman.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/applications/mscutils…
==============================================================================
--- trunk/reactos/base/applications/mscutils/servman/servman.c [iso-8859-1] (original)
+++ trunk/reactos/base/applications/mscutils/servman/servman.c [iso-8859-1] Sun Apr 3
22:13:01 2016
@@ -41,7 +41,7 @@
ProcessHeap = GetProcessHeap();
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
- icex.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES;
+ icex.dwICC = ICC_WIN95_CLASSES | ICC_COOL_CLASSES;
InitCommonControlsEx(&icex);
if (!AllocAndLoadString(&lpAppName,