Skip to content

Commit 5761346

Browse files
committed
Display parameter names in a structured way
Fixes #817
1 parent f9b61ee commit 5761346

File tree

5 files changed

+85
-11
lines changed

5 files changed

+85
-11
lines changed

src/StructuredLogViewer/themes/Generic.xaml

+37
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,28 @@
439439
</HierarchicalDataTemplate.Triggers>
440440
</HierarchicalDataTemplate>
441441

442+
<HierarchicalDataTemplate DataType="{x:Type l:TaskParameterItem}"
443+
ItemsSource="{Binding Children}">
444+
<StackPanel Orientation="Horizontal">
445+
<Path x:Name="icon"
446+
Data="{DynamicResource AddItemGeometry}"
447+
VerticalAlignment="Center"
448+
Width="14"
449+
Height="11"
450+
Margin="3,3,6,3"
451+
Stroke="{DynamicResource ItemStroke}"
452+
Fill="{DynamicResource ItemBrush}" />
453+
<TextBlock x:Name="label" Text="Add Item " />
454+
<TextBlock Text="{Binding Name}" />
455+
<TextBlock x:Name="parameterName" Text="{Binding ParameterName}" Foreground="Gray" Margin="16,0,0,0" />
456+
</StackPanel>
457+
<HierarchicalDataTemplate.Triggers>
458+
<DataTrigger Binding="{Binding IsSelected}" Value="False">
459+
<Setter TargetName="label" Property="Foreground" Value="{DynamicResource AddItemStroke}" />
460+
</DataTrigger>
461+
</HierarchicalDataTemplate.Triggers>
462+
</HierarchicalDataTemplate>
463+
442464
<HierarchicalDataTemplate DataType="{x:Type l:RemoveItem}"
443465
ItemsSource="{Binding Children}">
444466
<StackPanel Orientation="Horizontal">
@@ -571,11 +593,26 @@
571593
</DataTemplate.Triggers>
572594
</DataTemplate>
573595

596+
<DataTemplate DataType="{x:Type l:TaskParameterProperty}">
597+
<StackPanel Orientation="Horizontal">
598+
<Rectangle x:Name="icon" Style="{StaticResource NodeIcon}" Stroke="{DynamicResource PropertyStroke}" Fill="{DynamicResource PropertyBrush}" />
599+
<TextBlock x:Name="label" Text="{Binding NameAndEquals, Mode=OneTime}" />
600+
<TextBlock Text="{Binding ShortenedValue}" />
601+
<TextBlock x:Name="parameterName" Text="{Binding ParameterName}" Foreground="Gray" Margin="16,0,0,0" />
602+
</StackPanel>
603+
<DataTemplate.Triggers>
604+
<DataTrigger Binding="{Binding IsSelected}" Value="False">
605+
<Setter TargetName="label" Property="Foreground" Value="{DynamicResource PropertyStroke}" />
606+
</DataTrigger>
607+
</DataTemplate.Triggers>
608+
</DataTemplate>
609+
574610
<HierarchicalDataTemplate DataType="{x:Type l:Parameter}"
575611
ItemsSource="{Binding Children}">
576612
<StackPanel Orientation="Horizontal">
577613
<Rectangle x:Name="icon" Style="{StaticResource NodeIcon}" Stroke="{DynamicResource ParameterStroke}" Fill="{DynamicResource ParameterBrush}" />
578614
<TextBlock x:Name="name" Text="{Binding Name}" />
615+
<TextBlock x:Name="parameterName" Text="{Binding ParameterName}" Foreground="Gray" Margin="16,0,0,0" />
579616
</StackPanel>
580617
<HierarchicalDataTemplate.Triggers>
581618
<DataTrigger Binding="{Binding IsSelected}" Value="False">

src/StructuredLogger/Construction/MessageProcessor.cs

+36-11
Original file line numberDiff line numberDiff line change
@@ -198,11 +198,9 @@ private void ProcessTaskParameter(TaskParameterEventArgs args)
198198
parent = task.GetOrCreateNodeWithName<Folder>(folderName);
199199
parent.DisableChildrenCache = true;
200200

201-
string itemName = isOutput && parameterName is not null
202-
? $"{propertyName ?? itemType} from parameter {parameterName}"
203-
: propertyName ?? itemType;
201+
string itemName = propertyName ?? itemType;
204202

205-
node = CreateParameterNode(itemName, items, isOutput);
203+
node = CreateParameterNode(itemName, items, isOutput, parameterName);
206204
}
207205
else if (
208206
kind == TaskParameterMessageKind.AddItem ||
@@ -254,26 +252,53 @@ private void ProcessTaskParameter(TaskParameterEventArgs args)
254252
}
255253
}
256254

257-
private BaseNode CreateParameterNode(string itemName, IEnumerable items, bool isOutput = false)
255+
private BaseNode CreateParameterNode(string itemName, IEnumerable items, bool isOutput = false, string parameterName = null)
258256
{
259257
if (items is IList<ITaskItem> list && list.Count == 1 && list[0] is ITaskItem scalar && scalar.MetadataCount == 0)
260258
{
261-
var property = new Property
259+
BaseNode property;
260+
if (parameterName != null && parameterName != itemName)
262261
{
263-
Name = itemName,
264-
Value = scalar.ItemSpec
265-
};
262+
property = new TaskParameterProperty
263+
{
264+
Name = itemName,
265+
Value = scalar.ItemSpec,
266+
ParameterName = parameterName
267+
};
268+
}
269+
else
270+
{
271+
property = new Property
272+
{
273+
Name = itemName,
274+
Value = scalar.ItemSpec
275+
};
276+
}
277+
266278
return property;
267279
}
268280

269281
TreeNode parent;
270282
if (isOutput)
271283
{
272-
parent = new AddItem { Name = itemName };
284+
if (!string.IsNullOrEmpty(parameterName) && parameterName != itemName)
285+
{
286+
parent = new TaskParameterItem { Name = itemName, ParameterName = parameterName };
287+
}
288+
else
289+
{
290+
parent = new AddItem { Name = itemName };
291+
}
273292
}
274293
else
275294
{
276-
parent = new Parameter { Name = itemName };
295+
// no need to display the same string twice
296+
if (parameterName == itemName)
297+
{
298+
parameterName = null;
299+
}
300+
301+
parent = new Parameter { Name = itemName, ParameterName = parameterName };
277302
parent.DisableChildrenCache = true;
278303
}
279304

src/StructuredLogger/ObjectModel/AddItem.cs

+5
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,9 @@ public AddItem()
1111

1212
public int? LineNumber { get; set; }
1313
}
14+
15+
public class TaskParameterItem : AddItem
16+
{
17+
public string ParameterName { get; set; }
18+
}
1419
}

src/StructuredLogger/ObjectModel/Parameter.cs

+2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33
public class Parameter : NamedNode
44
{
55
public override string TypeName => nameof(Parameter);
6+
7+
public string ParameterName { get; set; }
68
}
79
}

src/StructuredLogger/ObjectModel/Property.cs

+5
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,9 @@ public class Property : NameValueNode
44
{
55
public override string TypeName => nameof(Property);
66
}
7+
8+
public class TaskParameterProperty : Property
9+
{
10+
public string ParameterName { get; set; }
11+
}
712
}

0 commit comments

Comments
 (0)