Skip to content

Commit bbcd278

Browse files
committed
Reimplemented Regex Description as TreeView
1 parent 6e94c53 commit bbcd278

File tree

2 files changed

+85
-11
lines changed

2 files changed

+85
-11
lines changed

RetailCoder.VBE/UI/RegexAssistant/RegexAssistant.xaml

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
d:DesignHeight="300" Width="555"
99
d:DataContext="{d:DesignInstance {x:Type assistant:RegexAssistantViewModel}, IsDesignTimeCreatable=False}">
1010
<UserControl.Resources>
11+
<HierarchicalDataTemplate
12+
x:Key="RecursiveData" DataType="TreeViewItem" ItemsSource="{Binding Items}">
13+
</HierarchicalDataTemplate>
1114
</UserControl.Resources>
1215
<Grid>
1316
<ScrollViewer>
@@ -42,15 +45,11 @@
4245
Margin="15,5,5,5" IsChecked="{Binding IgnoreCaseFlag}"/>
4346
</StackPanel>
4447
<Label Content="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=RegexAssistant_DescriptionResultsLabel}"
45-
FontWeight="SemiBold" />
46-
47-
<!--<RichTextBox x:Name="Results" HorizontalAlignment="Left"
48-
MinHeight="165" VerticalAlignment="Top" MinWidth="250"
49-
Margin="15,5,5,5">
50-
</RichTextBox>-->
51-
<TextBlock MinHeight="165" VerticalAlignment="Top" MinWidth="250" TextWrapping="WrapWithOverflow"
52-
Margin="15,5,5,5" Text="{Binding DescriptionResults, Mode=OneWay}"/>
53-
48+
FontWeight="SemiBold" />
49+
50+
<TreeView x:Name="treeView" ItemTemplate="{StaticResource RecursiveData}"
51+
Height="145" VerticalAlignment="Stretch" Margin="15,10,10,10" HorizontalContentAlignment="Stretch"
52+
ItemsSource="{Binding ResultItems}" />
5453
</StackPanel>
5554
</Grid>
5655
</ScrollViewer>

RetailCoder.VBE/UI/RegexAssistant/RegexAssistantViewModel.cs

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
using Rubberduck.RegexAssistant;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using System.Windows.Controls;
26

37
namespace Rubberduck.UI.RegexAssistant
48
{
@@ -51,15 +55,38 @@ public string Pattern
5155
private bool _ignoreCaseFlag;
5256
private string _pattern;
5357

58+
private List<TreeViewItem> _resultItems;
59+
public List<TreeViewItem> ResultItems
60+
{
61+
get
62+
{
63+
return _resultItems;
64+
}
65+
set
66+
{
67+
_resultItems = value;
68+
OnPropertyChanged();
69+
}
70+
}
71+
5472
private void RecalculateDescription()
5573
{
5674
if (_pattern.Equals(string.Empty))
5775
{
5876
_description = "No Pattern given";
77+
var results = new List<TreeViewItem>();
78+
var rootTreeItem = new TreeViewItem();
79+
rootTreeItem.Header = _description;
80+
results.Add(rootTreeItem);
81+
ResultItems = results;
5982
return;
6083
}
61-
_description = new Pattern(_pattern, _ignoreCaseFlag, _ignoreCaseFlag).Description;
62-
base.OnPropertyChanged("DescriptionResults");
84+
var pattern = new Pattern(_pattern, _ignoreCaseFlag, _ignoreCaseFlag);
85+
//_description = pattern.Description;
86+
var resultItems = new List<TreeViewItem>();
87+
resultItems.Add(AsTreeViewItem((dynamic)pattern.RootExpression));
88+
ResultItems = resultItems;
89+
//base.OnPropertyChanged("DescriptionResults");
6390
}
6491

6592
public string DescriptionResults
@@ -69,5 +96,53 @@ public string DescriptionResults
6996
return _description;
7097
}
7198
}
99+
100+
private static TreeViewItem AsTreeViewItem(IRegularExpression expression)
101+
{
102+
var t = expression.GetType();
103+
104+
var result = new TreeViewItem();
105+
result.Header = "Some unknown IRegularExpression subtype was in the view";
106+
foreach (var subtree in expression.Subexpressions.Select(exp => AsTreeViewItem((dynamic)exp)))
107+
{
108+
result.Items.Add(subtree);
109+
}
110+
return result;
111+
}
112+
113+
private static TreeViewItem AsTreeViewItem(ConcatenatedExpression expression)
114+
{
115+
var result = new TreeViewItem();
116+
result.Header = expression.Description;
117+
foreach (var subtree in expression.Subexpressions.Select(exp => AsTreeViewItem((dynamic)exp)))
118+
{
119+
result.Items.Add(subtree);
120+
}
121+
return result;
122+
}
123+
124+
private static TreeViewItem AsTreeViewItem(AlternativesExpression expression)
125+
{
126+
var result = new TreeViewItem();
127+
result.Header = expression.Description;
128+
foreach (var subtree in expression.Subexpressions.Select(exp => AsTreeViewItem((dynamic)exp)))
129+
{
130+
result.Items.Add(subtree);
131+
}
132+
return result;
133+
}
134+
135+
private static TreeViewItem AsTreeViewItem(SingleAtomExpression expression)
136+
{
137+
var result = new TreeViewItem();
138+
result.Header = expression.Description;
139+
// no other Atom has Subexpressions we care about
140+
if (expression.Atom.GetType() == typeof(Group))
141+
{
142+
result.Items.Add(AsTreeViewItem((dynamic)((expression.Atom) as Group).Subexpression));
143+
}
144+
145+
return result;
146+
}
72147
}
73148
}

0 commit comments

Comments
 (0)