Skip to content

Commit 8394f2d

Browse files
JeremyFarmerDHGRoemer
authored andcommitted
Added ability to Invoke on controls that support the invoke pattern via the UI
1 parent ac1fbaf commit 8394f2d

File tree

4 files changed

+41
-5
lines changed

4 files changed

+41
-5
lines changed

src/FlaUInspect/Core/PatternItemsFactory.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public class PatternItemsFactory(AutomationBase? automationBase) {
4242
new (TextPattern.Pattern, AddTextPatternDetails),
4343
new (TogglePattern.Pattern, AddTogglePatternDetails),
4444
new (ValuePattern.Pattern, AddValuePatternDetails),
45-
new (WindowPattern.Pattern, AddWindowPatternDetails)
45+
new (WindowPattern.Pattern, AddWindowPatternDetails),
46+
new (InvokePattern.Pattern, AddInvokePatternDetails)
4647
];
4748

4849
private readonly KeyValuePair<PatternId, Func<AutomationElement, IEnumerable<PatternItem>>>[] _patternsUia3Func =
@@ -59,7 +60,8 @@ public class PatternItemsFactory(AutomationBase? automationBase) {
5960
new (FlaUI.UIA3.Patterns.TextPattern.Pattern, AddTextPatternDetails),
6061
new (FlaUI.UIA3.Patterns.TogglePattern.Pattern, AddTogglePatternDetails),
6162
new (FlaUI.UIA3.Patterns.ValuePattern.Pattern, AddValuePatternDetails),
62-
new (FlaUI.UIA3.Patterns.WindowPattern.Pattern, AddWindowPatternDetails)
63+
new (FlaUI.UIA3.Patterns.WindowPattern.Pattern, AddWindowPatternDetails),
64+
new (FlaUI.UIA3.Patterns.InvokePattern.Pattern, AddInvokePatternDetails)
6365
];
6466

6567
public IDictionary<string, PatternItem[]> CreatePatternItemsForElement(AutomationElement element, HashSet<PatternId> allSupportedPatterns) {
@@ -286,6 +288,15 @@ private static IEnumerable<PatternItem> AddGridItemPatternDetails(AutomationElem
286288
yield return new PatternItem("ContainingGrid", pattern.ContainingGrid.ToString());
287289
}
288290

291+
private static IEnumerable<PatternItem> AddInvokePatternDetails(AutomationElement? element) {
292+
if (element == null) {
293+
yield break;
294+
}
295+
296+
IInvokePattern pattern = element.Patterns.Invoke.Pattern;
297+
yield return new PatternItem("Invoke", "Invoke", pattern.Invoke);
298+
}
299+
289300
private static string GetTextAttribute<T>(AutomationElement element, ITextPattern pattern,
290301
TextAttributeId textAttribute, object mixedValue, Func<T, string> func) {
291302
object value = pattern.DocumentRange.GetAttributeValue(textAttribute);

src/FlaUInspect/ViewModels/PatternItem.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace FlaUInspect.ViewModels;
66

7-
public class PatternItem(string key, string? value) : ObservableObject {
7+
public class PatternItem(string key, string? value, Action? action = null) : ObservableObject {
88
private string _key = key;
99
private string? _value = value;
1010

@@ -16,6 +16,10 @@ public string? Value {
1616
get => _value;
1717
set => SetProperty(ref _value, value);
1818
}
19+
public bool HasExecutableAction {
20+
get => Action != null;
21+
}
22+
public Action? Action { get; } = action;
1923

2024
public static PatternItem FromAutomationProperty<T>(string key, IAutomationProperty<T> value) {
2125
return new PatternItem(key, value!.ToDisplayText());

src/FlaUInspect/Views/MainWindow.xaml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,7 @@
322322
ItemsSource="{Binding Children}">
323323
<ItemsControl.ItemTemplate>
324324
<DataTemplate>
325-
<Border Margin="0"
326-
Padding="0">
325+
<Border Margin="0" Padding="0">
327326
<Border.Background>
328327
<MultiBinding Converter="{StaticResource AlternationToColorConverter}">
329328
<Binding Path="(ItemsControl.AlternationIndex)"
@@ -371,6 +370,18 @@
371370
</Style>
372371
</TextBox.Style>
373372
</TextBox>
373+
<Button Grid.Column="1" Click="InvokePatternActionHandler" Content="{Binding Value}">
374+
<Button.Style>
375+
<Style TargetType="{x:Type Button}">
376+
<Setter Property="Visibility" Value="Hidden"/>
377+
<Style.Triggers>
378+
<DataTrigger Binding="{Binding HasExecutableAction}" Value="True">
379+
<Setter Property="Visibility" Value="Visible"/>
380+
</DataTrigger>
381+
</Style.Triggers>
382+
</Style>
383+
</Button.Style>
384+
</Button>
374385
</Grid>
375386
</Border>
376387
</DataTemplate>

src/FlaUInspect/Views/MainWindow.xaml.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,14 @@ private void TreeView_OnSelectedItemChanged(object sender, RoutedPropertyChanged
2626
}
2727
}
2828
}
29+
30+
private void InvokePatternActionHandler(object sender, RoutedEventArgs e) {
31+
var vm = (PatternItem)((Button)sender).DataContext;
32+
if (vm.Action != null) {
33+
Task.Run(() =>
34+
{
35+
vm.Action();
36+
});
37+
}
38+
}
2939
}

0 commit comments

Comments
 (0)