mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
fixed thread list column settings
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4542 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
@@ -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
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user