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:
wj32
2011-08-25 07:43:47 +00:00
parent 223fb91950
commit 53961c97cb
9 changed files with 115 additions and 56 deletions
+98 -45
View File
@@ -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
);
}
+1 -1
View File
@@ -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);
+4 -1
View File
@@ -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
);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
+2 -1
View File
@@ -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");
+1 -1
View File
@@ -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);
+6 -4
View File
@@ -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);