From 53961c97cb95eac01f077c19b647d74a4fc3a691 Mon Sep 17 00:00:00 2001 From: wj32 Date: Thu, 25 Aug 2011 07:43:47 +0000 Subject: [PATCH] fixed thread list column settings git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4542 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/ProcessHacker/colmgr.c | 143 ++++++++++++++++------- 2.x/trunk/ProcessHacker/hndllist.c | 2 +- 2.x/trunk/ProcessHacker/include/colmgr.h | 5 +- 2.x/trunk/ProcessHacker/modlist.c | 2 +- 2.x/trunk/ProcessHacker/netlist.c | 2 +- 2.x/trunk/ProcessHacker/proctree.c | 2 +- 2.x/trunk/ProcessHacker/settings.c | 3 +- 2.x/trunk/ProcessHacker/srvlist.c | 2 +- 2.x/trunk/ProcessHacker/thrdlist.c | 10 +- 9 files changed, 115 insertions(+), 56 deletions(-) diff --git a/2.x/trunk/ProcessHacker/colmgr.c b/2.x/trunk/ProcessHacker/colmgr.c index 4dec54c37..d0e2685ce 100644 --- a/2.x/trunk/ProcessHacker/colmgr.c +++ b/2.x/trunk/ProcessHacker/colmgr.c @@ -260,7 +260,7 @@ BOOLEAN PhCmLoadSettings( BOOLEAN PhCmLoadSettingsEx( __in HWND TreeNewHandle, __in_opt PPH_CM_MANAGER Manager, - __reserved ULONG Flags, + __in ULONG Flags, __in PPH_STRINGREF Settings, __in_opt PPH_STRINGREF SortSettings ) @@ -339,10 +339,20 @@ BOOLEAN PhCmLoadSettingsEx( PhSplitStringRefAtChar(&columnPart, ',', &valuePart, &columnPart); - if (valuePart.Length == 0 || !PhStringToInteger64(&valuePart, 10, &integer)) - goto CleanupExit; + if (!(Flags & PH_CM_COLUMN_WIDTHS_ONLY)) + { + if (valuePart.Length == 0 || !PhStringToInteger64(&valuePart, 10, &integer)) + goto CleanupExit; - displayIndex = (ULONG)integer; + displayIndex = (ULONG)integer; + } + else + { + if (valuePart.Length != 0) + goto CleanupExit; + + displayIndex = -1; + } // Width @@ -377,21 +387,32 @@ BOOLEAN PhCmLoadSettingsEx( { columnPtr = (PPH_TREENEW_COLUMN *)PhFindItemSimpleHashtable(columnHashtable, (PVOID)i); - if (columnPtr) + if (!(Flags & PH_CM_COLUMN_WIDTHS_ONLY)) { - setColumn.Visible = TRUE; - setColumn.Width = (*columnPtr)->Width; - TreeNew_SetColumn(TreeNewHandle, TN_COLUMN_FLAG_VISIBLE | TN_COLUMN_WIDTH, &setColumn); + if (columnPtr) + { + setColumn.Visible = TRUE; + setColumn.Width = (*columnPtr)->Width; + TreeNew_SetColumn(TreeNewHandle, TN_COLUMN_FLAG_VISIBLE | TN_COLUMN_WIDTH, &setColumn); - // For compatibility reasons, normal columns have their display indicies stored - // one higher than usual (so they start from 1, not 0). Fix that here. - if (hasFixedColumn && !setColumn.Fixed && (*columnPtr)->DisplayIndex != 0) - (*columnPtr)->DisplayIndex--; + // For compatibility reasons, normal columns have their display indicies stored + // one higher than usual (so they start from 1, not 0). Fix that here. + if (hasFixedColumn && !setColumn.Fixed && (*columnPtr)->DisplayIndex != 0) + (*columnPtr)->DisplayIndex--; + } + else if (!setColumn.Fixed) // never hide the fixed column + { + setColumn.Visible = FALSE; + TreeNew_SetColumn(TreeNewHandle, TN_COLUMN_FLAG_VISIBLE, &setColumn); + } } - else if (!setColumn.Fixed) // never hide the fixed column + else { - setColumn.Visible = FALSE; - TreeNew_SetColumn(TreeNewHandle, TN_COLUMN_FLAG_VISIBLE, &setColumn); + if (columnPtr) + { + setColumn.Width = (*columnPtr)->Width; + TreeNew_SetColumn(TreeNewHandle, TN_COLUMN_WIDTH, &setColumn); + } } count++; @@ -400,38 +421,41 @@ BOOLEAN PhCmLoadSettingsEx( i++; } - // Do a second pass to create the order array. This is because the ViewIndex of each column - // were unstable in the previous pass since we were both adding and removing columns. - - PhBeginEnumHashtable(columnHashtable, &enumContext); - maxOrder = 0; - - while (pair = PhNextEnumHashtable(&enumContext)) + if (!(Flags & PH_CM_COLUMN_WIDTHS_ONLY)) { - PPH_TREENEW_COLUMN column; - PH_TREENEW_COLUMN tempColumn; + // Do a second pass to create the order array. This is because the ViewIndex of each column + // were unstable in the previous pass since we were both adding and removing columns. - column = pair->Value; + PhBeginEnumHashtable(columnHashtable, &enumContext); + maxOrder = 0; - if (!TreeNew_GetColumn(TreeNewHandle, column->Id, &tempColumn)) - continue; - - if (tempColumn.Fixed) - continue; // fixed column cannot be re-ordered - - if (column->DisplayIndex < PH_CM_ORDER_LIMIT) + while (pair = PhNextEnumHashtable(&enumContext)) { - orderArray[column->DisplayIndex] = tempColumn.s.ViewIndex; + PPH_TREENEW_COLUMN column; + PH_TREENEW_COLUMN tempColumn; - if ((ULONG)maxOrder < column->DisplayIndex + 1) - maxOrder = column->DisplayIndex + 1; + column = pair->Value; + + if (!TreeNew_GetColumn(TreeNewHandle, column->Id, &tempColumn)) + continue; + + if (tempColumn.Fixed) + continue; // fixed column cannot be re-ordered + + if (column->DisplayIndex < PH_CM_ORDER_LIMIT) + { + orderArray[column->DisplayIndex] = tempColumn.s.ViewIndex; + + if ((ULONG)maxOrder < column->DisplayIndex + 1) + maxOrder = column->DisplayIndex + 1; + } } + + // Set the order array. + + TreeNew_SetColumnOrderArray(TreeNewHandle, maxOrder, orderArray); } - // Set the order array. - - TreeNew_SetColumnOrderArray(TreeNewHandle, maxOrder, orderArray); - TreeNew_SetRedraw(TreeNewHandle, TRUE); result = TRUE; @@ -496,12 +520,13 @@ PPH_STRING PhCmSaveSettings( __in HWND TreeNewHandle ) { - return PhCmSaveSettingsEx(TreeNewHandle, NULL, NULL); + return PhCmSaveSettingsEx(TreeNewHandle, NULL, 0, NULL); } PPH_STRING PhCmSaveSettingsEx( __in HWND TreeNewHandle, __in_opt PPH_CM_MANAGER Manager, + __in ULONG Flags, __out_opt PPH_STRING *SortSettings ) { @@ -525,15 +550,44 @@ PPH_STRING PhCmSaveSettingsEx( { if (TreeNew_GetColumn(TreeNewHandle, i, &column)) { - if (column.Visible) + if (!(Flags & PH_CM_COLUMN_WIDTHS_ONLY)) + { + if (column.Visible) + { + if (!Manager || i < Manager->MinId) + { + PhAppendFormatStringBuilder( + &stringBuilder, + L"%u,%u,%u|", + i, + column.Fixed ? 0 : column.DisplayIndex + increment, + column.Width + ); + } + else + { + PPH_CM_COLUMN cmColumn; + + cmColumn = column.Context; + PhAppendFormatStringBuilder( + &stringBuilder, + L"+%s+%u,%u,%u|", + cmColumn->Plugin->Name, + cmColumn->SubId, + column.DisplayIndex + increment, + column.Width + ); + } + } + } + else { if (!Manager || i < Manager->MinId) { PhAppendFormatStringBuilder( &stringBuilder, - L"%u,%u,%u|", + L"%u,,%u|", i, - column.Fixed ? 0 : column.DisplayIndex + increment, column.Width ); } @@ -544,10 +598,9 @@ PPH_STRING PhCmSaveSettingsEx( cmColumn = column.Context; PhAppendFormatStringBuilder( &stringBuilder, - L"+%s+%u,%u,%u|", + L"+%s+%u,,%u|", cmColumn->Plugin->Name, cmColumn->SubId, - column.DisplayIndex + increment, column.Width ); } diff --git a/2.x/trunk/ProcessHacker/hndllist.c b/2.x/trunk/ProcessHacker/hndllist.c index d5d8ece0a..7d00d6e9a 100644 --- a/2.x/trunk/ProcessHacker/hndllist.c +++ b/2.x/trunk/ProcessHacker/hndllist.c @@ -161,7 +161,7 @@ VOID PhSaveSettingsHandleList( PPH_STRING settings; PPH_STRING sortSettings; - settings = PhCmSaveSettingsEx(Context->TreeNewHandle, &Context->Cm, &sortSettings); + settings = PhCmSaveSettingsEx(Context->TreeNewHandle, &Context->Cm, 0, &sortSettings); PhSetStringSetting2(L"HandleTreeListColumns", &settings->sr); PhSetStringSetting2(L"HandleTreeListSort", &sortSettings->sr); PhDereferenceObject(settings); diff --git a/2.x/trunk/ProcessHacker/include/colmgr.h b/2.x/trunk/ProcessHacker/include/colmgr.h index 8fd180dbc..e404c072e 100644 --- a/2.x/trunk/ProcessHacker/include/colmgr.h +++ b/2.x/trunk/ProcessHacker/include/colmgr.h @@ -79,10 +79,12 @@ PhCmLoadSettings( __in PPH_STRINGREF Settings ); +#define PH_CM_COLUMN_WIDTHS_ONLY 0x1 + BOOLEAN PhCmLoadSettingsEx( __in HWND TreeNewHandle, __in_opt PPH_CM_MANAGER Manager, - __reserved ULONG Flags, + __in ULONG Flags, __in PPH_STRINGREF Settings, __in_opt PPH_STRINGREF SortSettings ); @@ -97,6 +99,7 @@ PhCmSaveSettings( PPH_STRING PhCmSaveSettingsEx( __in HWND TreeNewHandle, __in_opt PPH_CM_MANAGER Manager, + __in ULONG Flags, __out_opt PPH_STRING *SortSettings ); diff --git a/2.x/trunk/ProcessHacker/modlist.c b/2.x/trunk/ProcessHacker/modlist.c index 1f86ea450..75dba30dc 100644 --- a/2.x/trunk/ProcessHacker/modlist.c +++ b/2.x/trunk/ProcessHacker/modlist.c @@ -172,7 +172,7 @@ VOID PhSaveSettingsModuleList( PPH_STRING settings; PPH_STRING sortSettings; - settings = PhCmSaveSettingsEx(Context->TreeNewHandle, &Context->Cm, &sortSettings); + settings = PhCmSaveSettingsEx(Context->TreeNewHandle, &Context->Cm, 0, &sortSettings); PhSetStringSetting2(L"ModuleTreeListColumns", &settings->sr); PhSetStringSetting2(L"ModuleTreeListSort", &sortSettings->sr); PhDereferenceObject(settings); diff --git a/2.x/trunk/ProcessHacker/netlist.c b/2.x/trunk/ProcessHacker/netlist.c index ef540f015..a925a47a4 100644 --- a/2.x/trunk/ProcessHacker/netlist.c +++ b/2.x/trunk/ProcessHacker/netlist.c @@ -169,7 +169,7 @@ VOID PhSaveSettingsNetworkTreeList( PPH_STRING settings; PPH_STRING sortSettings; - settings = PhCmSaveSettingsEx(NetworkTreeListHandle, &NetworkTreeListCm, &sortSettings); + settings = PhCmSaveSettingsEx(NetworkTreeListHandle, &NetworkTreeListCm, 0, &sortSettings); PhSetStringSetting2(L"NetworkTreeListColumns", &settings->sr); PhSetStringSetting2(L"NetworkTreeListSort", &sortSettings->sr); PhDereferenceObject(settings); diff --git a/2.x/trunk/ProcessHacker/proctree.c b/2.x/trunk/ProcessHacker/proctree.c index 580d51ddb..038d9197b 100644 --- a/2.x/trunk/ProcessHacker/proctree.c +++ b/2.x/trunk/ProcessHacker/proctree.c @@ -248,7 +248,7 @@ VOID PhSaveSettingsProcessTreeList( PPH_STRING settings; PPH_STRING sortSettings; - settings = PhCmSaveSettingsEx(ProcessTreeListHandle, &ProcessTreeListCm, &sortSettings); + settings = PhCmSaveSettingsEx(ProcessTreeListHandle, &ProcessTreeListCm, 0, &sortSettings); PhSetStringSetting2(L"ProcessTreeListColumns", &settings->sr); PhSetStringSetting2(L"ProcessTreeListSort", &sortSettings->sr); PhDereferenceObject(settings); diff --git a/2.x/trunk/ProcessHacker/settings.c b/2.x/trunk/ProcessHacker/settings.c index 894e162e0..285dcc648 100644 --- a/2.x/trunk/ProcessHacker/settings.c +++ b/2.x/trunk/ProcessHacker/settings.c @@ -66,7 +66,7 @@ VOID PhSettingsInitialization( sizeof(PH_SETTING), PhpSettingsHashtableCompareFunction, PhpSettingsHashtableHashFunction, - 128 + 256 ); PhIgnoredSettings = PhCreateList(4); @@ -153,6 +153,7 @@ VOID PhSettingsInitialization( PhpAddIntegerSetting(L"SysInfoWindowOneGraphPerCpu", L"0"); PhpAddIntegerPairSetting(L"SysInfoWindowPosition", L"200,200"); PhpAddIntegerPairSetting(L"SysInfoWindowSize", L"620,590"); + PhpAddStringSetting(L"ThreadTreeListColumns", L""); PhpAddStringSetting(L"ThreadTreeListSort", L"1,2"); // 1, DescendingSortOrder PhpAddStringSetting(L"ThreadStackListViewColumns", L""); PhpAddIntegerPairSetting(L"ThreadStackWindowSize", L"420,380"); diff --git a/2.x/trunk/ProcessHacker/srvlist.c b/2.x/trunk/ProcessHacker/srvlist.c index e98296bf6..8c4c53994 100644 --- a/2.x/trunk/ProcessHacker/srvlist.c +++ b/2.x/trunk/ProcessHacker/srvlist.c @@ -172,7 +172,7 @@ VOID PhSaveSettingsServiceTreeList( PPH_STRING settings; PPH_STRING sortSettings; - settings = PhCmSaveSettingsEx(ServiceTreeListHandle, &ServiceTreeListCm, &sortSettings); + settings = PhCmSaveSettingsEx(ServiceTreeListHandle, &ServiceTreeListCm, 0, &sortSettings); PhSetStringSetting2(L"ServiceTreeListColumns", &settings->sr); PhSetStringSetting2(L"ServiceTreeListSort", &sortSettings->sr); PhDereferenceObject(settings); diff --git a/2.x/trunk/ProcessHacker/thrdlist.c b/2.x/trunk/ProcessHacker/thrdlist.c index f0046fb29..c54b1e77f 100644 --- a/2.x/trunk/ProcessHacker/thrdlist.c +++ b/2.x/trunk/ProcessHacker/thrdlist.c @@ -140,7 +140,7 @@ VOID PhLoadSettingsThreadList( __inout PPH_THREAD_LIST_CONTEXT Context ) { - PH_STRINGREF settings; + PPH_STRING settings; PPH_STRING sortSettings; PH_TREENEW_COLUMN column; ULONG sortColumn; @@ -160,9 +160,10 @@ VOID PhLoadSettingsThreadList( TreeNew_SetColumn(Context->TreeNewHandle, TN_COLUMN_FLAG_VISIBLE, &column); } - PhInitializeEmptyStringRef(&settings); + settings = PhGetStringSetting(L"ThreadTreeListColumns"); sortSettings = PhGetStringSetting(L"ThreadTreeListSort"); - PhCmLoadSettingsEx(Context->TreeNewHandle, &Context->Cm, 0, &settings, &sortSettings->sr); + PhCmLoadSettingsEx(Context->TreeNewHandle, &Context->Cm, PH_CM_COLUMN_WIDTHS_ONLY, &settings->sr, &sortSettings->sr); + PhDereferenceObject(settings); PhDereferenceObject(sortSettings); TreeNew_GetSort(Context->TreeNewHandle, &sortColumn, &sortOrder); @@ -181,7 +182,8 @@ VOID PhSaveSettingsThreadList( PPH_STRING settings; PPH_STRING sortSettings; - settings = PhCmSaveSettingsEx(Context->TreeNewHandle, &Context->Cm, &sortSettings); + settings = PhCmSaveSettingsEx(Context->TreeNewHandle, &Context->Cm, PH_CM_COLUMN_WIDTHS_ONLY, &sortSettings); + PhSetStringSetting2(L"ThreadTreeListColumns", &settings->sr); PhSetStringSetting2(L"ThreadTreeListSort", &sortSettings->sr); PhDereferenceObject(settings); PhDereferenceObject(sortSettings);