Skip to content

Commit 0f8b327

Browse files
author
Sébastien Geiser
committed
Find LanguageElement in progress
1 parent 0ef924b commit 0f8b327

12 files changed

+578
-558
lines changed
Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
namespace RegexDialog
22
{
3-
internal class RegexLanguageElement
3+
internal class RegexLanguageElement : NotifyPropertyChangedBaseClass
44
{
5-
public string Name
6-
{
7-
get;
8-
set;
9-
}
5+
public string Name { get; set; }
106

11-
public string Description
12-
{
13-
get;
14-
set;
15-
}
7+
public string Description { get; set; }
168

17-
public string Value
18-
{
19-
get;
20-
set;
21-
}
9+
public string Value { get; set; }
10+
11+
public bool Visible { get; set; } = true;
12+
13+
public bool IsExpanded { get; set; }
2214
}
2315
}

RegexDialog/Model/RegexLanguageElementGroup.cs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,16 @@
22

33
namespace RegexDialog
44
{
5-
internal class RegexLanguageElementGroup
5+
internal class RegexLanguageElementGroup : NotifyPropertyChangedBaseClass
66
{
7-
public string Name
8-
{
9-
get;
10-
set;
11-
}
7+
public string Name { get; set; }
128

13-
public string Description
14-
{
15-
get;
16-
set;
17-
}
9+
public string Description { get; set; }
1810

19-
public List<RegexLanguageElement> Elements
20-
{
21-
get;
22-
set;
23-
}
11+
public List<RegexLanguageElement> Elements { get; set; }
12+
13+
public bool IsExpanded { get; set; }
14+
15+
public bool Visible { get; set; } = true;
2416
}
2517
}

RegexDialog/Model/RegexLanguageElements.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

RegexDialog/Model/RegexResult.cs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace RegexDialog
77
{
8-
internal class RegexResult : INotifyPropertyChanged
8+
internal class RegexResult : NotifyPropertyChangedBaseClass
99
{
1010
public RegexResult(Regex regex, Capture regexElement, int regexElementNb, string fileName = "", int selectionIndex = 0)
1111
{
@@ -108,20 +108,5 @@ public virtual int Length
108108
return RegexElement?.Length ?? 0;
109109
}
110110
}
111-
112-
#region INotifyPropertyChanged Membres
113-
114-
/// <summary>
115-
/// Génère l'évènement PropertyChanged pour la propriété spécifiée
116-
/// </summary>
117-
/// <param name="propertyName"></param>
118-
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
119-
{
120-
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
121-
}
122-
123-
public event PropertyChangedEventHandler PropertyChanged;
124-
125-
#endregion
126111
}
127112
}

RegexDialog/RegExToolDialog.xaml

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -535,25 +535,42 @@
535535
<RowDefinition Height="5" />
536536
<RowDefinition Height="0.1*" MinHeight="20"/>
537537
</Grid.RowDefinitions>
538-
<TreeView Name="RegexLanguagesElementsTreeView"
538+
<DockPanel>
539+
<Grid DockPanel.Dock="Top">
540+
<TextBlock Text="Find..."
541+
VerticalAlignment="Center"
542+
Margin="2,0"
543+
Foreground="Gray" />
544+
<TextBox x:Name="FindLanguageElementTextBox"
545+
Background="Transparent"
546+
TextChanged="FindLanguageElementTextBox_TextChanged"
547+
IsKeyboardFocusedChanged="FindLanguageElementTextBox_IsKeyboardFocusedChanged"/>
548+
</Grid>
549+
<TreeView Name="RegexLanguagesElementsTreeView"
539550
SelectedItemChanged="RegexLanguagesElementsTreeView_SelectedItemChanged">
540-
<TreeView.Resources>
541-
<HierarchicalDataTemplate DataType="{x:Type local:RegexLanguageElementGroup}" ItemsSource="{Binding Elements}">
542-
<StackPanel Background="Transparent" Orientation="Horizontal" ToolTip="{Binding Description}">
543-
<Image Source="{StaticResource RegexLanguageElementsGroupPicture}" Width="16" Height="16" Margin="3,0"/>
544-
<TextBlock Text="{Binding Name}"/>
545-
<TextBlock Text="{Binding Value}" Foreground="Blue"/>
546-
</StackPanel>
547-
</HierarchicalDataTemplate>
548-
<HierarchicalDataTemplate DataType="{x:Type local:RegexLanguageElement}">
549-
<StackPanel Background="Transparent" Orientation="Horizontal" ToolTip="{Binding Description}" MouseDown="RegexLanguageElement_StackPanel_MouseDown" MouseUp="RegexLanguageElement_StackPanel_MouseUp">
550-
<Image Source="{StaticResource RegexLanguageElementPicture}" Width="16" Height="16" Margin="3,0"/>
551-
<TextBlock Text="{Binding Name}"/>
552-
<TextBlock Text="{Binding Value}" Foreground="Blue"/>
553-
</StackPanel>
554-
</HierarchicalDataTemplate>
555-
</TreeView.Resources>
556-
</TreeView>
551+
<TreeView.Resources>
552+
<Style TargetType="{x:Type TreeViewItem}">
553+
<Setter Property="IsExpanded" Value="{Binding IsExpanded}" />
554+
<Setter Property="Visibility" Value="{Binding Visible, Converter={converters:CustomBoolToVisibilityConverter}}" />
555+
</Style>
556+
<HierarchicalDataTemplate DataType="{x:Type local:RegexLanguageElementGroup}"
557+
ItemsSource="{Binding Elements}">
558+
<StackPanel Background="Transparent" Orientation="Horizontal" ToolTip="{Binding Description}">
559+
<Image Source="{StaticResource RegexLanguageElementsGroupPicture}" Width="16" Height="16" Margin="3,0"/>
560+
<TextBlock Text="{Binding Name}"/>
561+
<TextBlock Text="{Binding Value}" Foreground="Blue"/>
562+
</StackPanel>
563+
</HierarchicalDataTemplate>
564+
<HierarchicalDataTemplate DataType="{x:Type local:RegexLanguageElement}">
565+
<StackPanel Background="Transparent" Orientation="Horizontal" ToolTip="{Binding Description}" MouseDown="RegexLanguageElement_StackPanel_MouseDown" MouseUp="RegexLanguageElement_StackPanel_MouseUp">
566+
<Image Source="{StaticResource RegexLanguageElementPicture}" Width="16" Height="16" Margin="3,0"/>
567+
<TextBlock Text="{Binding Name}"/>
568+
<TextBlock Text="{Binding Value}" Foreground="Blue"/>
569+
</StackPanel>
570+
</HierarchicalDataTemplate>
571+
</TreeView.Resources>
572+
</TreeView>
573+
</DockPanel>
557574
<GridSplitter
558575
Grid.Row="1"
559576
VerticalAlignment="Stretch"

RegexDialog/RegExToolDialog.xaml.cs

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
using System.Diagnostics;
1111
using System.IO;
1212
using System.Linq;
13-
using System.Reflection;
1413
using System.Text;
1514
using System.Text.RegularExpressions;
1615
using System.Windows;
@@ -60,6 +59,8 @@ public partial class RegExToolDialog : Window
6059
private static readonly Regex cSharpReplaceAfterPartRegex = new Regex(@"(?<=^|\s)\#after(?=\s)(?<after>.*)(?<=\s)\#endafter(?=\s|$)", RegexOptions.Singleline | RegexOptions.Compiled);
6160
private static readonly Regex cSharpScriptsStartOfLinesForAddingTabs = new Regex(@"(?<start>^)(?<notend>[^\r\n])", RegexOptions.Multiline | RegexOptions.Compiled);
6261

62+
List<RegexLanguageElementGroup> languageElementGroups;
63+
6364
private string InjectInReplaceScript(string replaceScript)
6465
{
6566
Match beforeMatch = cSharpReplaceBeforePartRegex.Match(ReplaceEditor.Text);
@@ -327,8 +328,8 @@ private void BuildRegexOptionsCheckBoxs()
327328

328329
private void BuildRegexLanguageElements()
329330
{
330-
RegexLanguageElements root = JsonConvert.DeserializeObject<RegexLanguageElements>(Res.RegexLanguageElements);
331-
RegexLanguagesElementsTreeView.ItemsSource = root.Data;
331+
languageElementGroups = JsonConvert.DeserializeObject<List<RegexLanguageElementGroup>>(Res.RegexLanguageElements);
332+
RegexLanguagesElementsTreeView.ItemsSource = languageElementGroups;
332333
}
333334

334335
private void BuildReplaceLanguageElements()
@@ -2215,5 +2216,40 @@ private void ExportToVisualStudio_Click(object sender, RoutedEventArgs e)
22152216
Process.Start($"\"{solutionFile}\"");
22162217
}
22172218
}
2219+
2220+
private void FindLanguageElementTextBox_TextChanged(object sender, TextChangedEventArgs e)
2221+
{
2222+
ChangeFindLanguageElementTextBoxBackgroundIfNeeded();
2223+
2224+
if(string.IsNullOrEmpty(FindLanguageElementTextBox.Text))
2225+
{
2226+
languageElementGroups.ForEach(languageElementGroup =>
2227+
{
2228+
languageElementGroup.Visible = true;
2229+
languageElementGroup.IsExpanded = false;
2230+
languageElementGroup.Elements.ForEach(regexLanguageElement => regexLanguageElement.Visible = true);
2231+
});
2232+
}
2233+
else
2234+
{
2235+
languageElementGroups.ForEach(languageElementGroup =>
2236+
{
2237+
languageElementGroup.Elements.ForEach(regexLanguageElement => regexLanguageElement.Visible =
2238+
regexLanguageElement.Name.IndexOf(FindLanguageElementTextBox.Text, StringComparison.OrdinalIgnoreCase) >= 0
2239+
|| regexLanguageElement.Description.IndexOf(FindLanguageElementTextBox.Text, StringComparison.OrdinalIgnoreCase) >= 0);
2240+
languageElementGroup.Visible = languageElementGroup.Elements.Any(regexLanguageElement => regexLanguageElement.Visible);
2241+
languageElementGroup.IsExpanded = languageElementGroup.Visible;
2242+
});
2243+
}
2244+
}
2245+
2246+
private void FindLanguageElementTextBox_IsKeyboardFocusedChanged(object sender, DependencyPropertyChangedEventArgs e) => ChangeFindLanguageElementTextBoxBackgroundIfNeeded();
2247+
2248+
private void ChangeFindLanguageElementTextBoxBackgroundIfNeeded()
2249+
{
2250+
FindLanguageElementTextBox.Background = string.IsNullOrEmpty(FindLanguageElementTextBox.Text) && FindLanguageElementTextBox.IsFocused
2251+
? Brushes.Transparent
2252+
: Brushes.White;
2253+
}
22182254
}
22192255
}

RegexDialog/RegexDialog.csproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@
4444
<StartupObject />
4545
</PropertyGroup>
4646
<ItemGroup>
47-
<Reference Include="CSScriptLibrary, Version=3.28.7.0, Culture=neutral, PublicKeyToken=70fcc3d18c749033, processorArchitecture=MSIL">
48-
<HintPath>..\packages\CS-Script.bin.3.28.7\lib\net46\CSScriptLibrary.dll</HintPath>
47+
<Reference Include="CSScriptLibrary, Version=3.29.0.0, Culture=neutral, PublicKeyToken=70fcc3d18c749033, processorArchitecture=MSIL">
48+
<HintPath>..\packages\CS-Script.lib.3.29.0\lib\CSScriptLibrary.dll</HintPath>
4949
</Reference>
5050
<Reference Include="CSSRoslynProvider, Version=3.28.3.0, Culture=neutral, processorArchitecture=MSIL">
5151
<HintPath>..\packages\CS-Script.RoslynProvider.3.28.7\lib\net46\CSSRoslynProvider.dll</HintPath>
5252
</Reference>
53-
<Reference Include="EPPlus, Version=4.5.3.1, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
54-
<HintPath>..\packages\EPPlus.4.5.3.1\lib\net40\EPPlus.dll</HintPath>
53+
<Reference Include="EPPlus, Version=4.5.3.2, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
54+
<HintPath>..\packages\EPPlus.4.5.3.2\lib\net40\EPPlus.dll</HintPath>
5555
</Reference>
5656
<Reference Include="ICSharpCode.AvalonEdit, Version=5.0.3.0, Culture=neutral, PublicKeyToken=9cc39be672370310, processorArchitecture=MSIL">
5757
<HintPath>..\packages\AvalonEdit.5.0.4\lib\Net40\ICSharpCode.AvalonEdit.dll</HintPath>
@@ -90,13 +90,13 @@
9090
<HintPath>..\packages\Microsoft.SDK.Expression.Blend.1.0.0\lib\net45\Microsoft.SDK.Expression.Blend.dll</HintPath>
9191
</Reference>
9292
<Reference Include="Mono.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
93-
<HintPath>..\packages\CS-Script.bin.3.28.7\lib\net46\Mono.CSharp.dll</HintPath>
93+
<HintPath>..\packages\CS-Script.bin.3.29.0\lib\net46\Mono.CSharp.dll</HintPath>
9494
</Reference>
9595
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
9696
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
9797
</Reference>
98-
<Reference Include="Ookii.Dialogs.WinForms, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
99-
<HintPath>..\packages\Ookii.Dialogs.WinForms.1.0.0\lib\net45\Ookii.Dialogs.WinForms.dll</HintPath>
98+
<Reference Include="Ookii.Dialogs.WinForms, Version=1.0.0.0, Culture=neutral, PublicKeyToken=66aa232afad40158, processorArchitecture=MSIL">
99+
<HintPath>..\packages\Ookii.Dialogs.WinForms.1.1.0\lib\net45\Ookii.Dialogs.WinForms.dll</HintPath>
100100
</Reference>
101101
<Reference Include="Ookii.Dialogs.Wpf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0c15020868fd6249, processorArchitecture=MSIL">
102102
<HintPath>..\packages\Ookii.Dialogs.1.0\lib\net35\Ookii.Dialogs.Wpf.dll</HintPath>
@@ -278,13 +278,13 @@
278278
<Compile Include="Utils\ExpressionEvaluator.cs" />
279279
<Compile Include="Utils\IniFile.cs" />
280280
<Compile Include="Utils\NamespacesForExpressionEvalConverters.cs" />
281+
<Compile Include="Utils\NotifyPropertyChangedBaseClass.cs" />
281282
<Compile Include="Utils\ObservableDictionary.cs" />
282283
<Compile Include="Utils\PathUtils.cs" />
283284
<Compile Include="Model\RegexLanguageElement.cs" />
284285
<Compile Include="Model\RegexLanguageElementGroup.cs" />
285286
<Compile Include="Model\ReplaceLanguageElements.cs" />
286287
<Compile Include="Model\ReplaceLanguageElement.cs" />
287-
<Compile Include="Model\RegexLanguageElements.cs" />
288288
<Compile Include="Model\RegexMatchResult.cs" />
289289
<Compile Include="Model\RegExOptionModel.cs" />
290290
<Compile Include="Model\RegexResult.cs" />

0 commit comments

Comments
 (0)