diff --git a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml
index 28bba33b..e6df63ba 100644
--- a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml
+++ b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml
@@ -50,25 +50,25 @@
-
+
-
+
-
+
-
+
diff --git a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs
index 3feecbf1..37fdcb0a 100644
--- a/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs
+++ b/Source/LibationAvalonia/Dialogs/SearchSyntaxDialog.axaml.cs
@@ -1,10 +1,14 @@
+using Avalonia;
using LibationSearchEngine;
+using System;
using System.Linq;
+#nullable enable
namespace LibationAvalonia.Dialogs
{
public partial class SearchSyntaxDialog : DialogWindow
{
+ public event EventHandler? TagDoubleClicked;
public string StringUsage { get; }
public string NumberUsage { get; }
public string BoolUsage { get; }
@@ -51,5 +55,13 @@ namespace LibationAvalonia.Dialogs
DataContext = this;
}
+
+ private void ListBox_DoubleTapped(object? sender, Avalonia.Input.TappedEventArgs e)
+ {
+ if (e.Source is StyledElement { DataContext: string tag })
+ {
+ TagDoubleClicked?.Invoke(this, tag);
+ }
+ }
}
}
diff --git a/Source/LibationAvalonia/ViewModels/MainVM.Filters.cs b/Source/LibationAvalonia/ViewModels/MainVM.Filters.cs
index 2809585c..86600760 100644
--- a/Source/LibationAvalonia/ViewModels/MainVM.Filters.cs
+++ b/Source/LibationAvalonia/ViewModels/MainVM.Filters.cs
@@ -55,7 +55,7 @@ namespace LibationAvalonia.ViewModels
public void AddQuickFilterBtn() { if (SelectedNamedFilter != null) QuickFilters.Add(SelectedNamedFilter); }
public async Task FilterBtn(string filterString) => await PerformFilter(new(filterString, null));
- public async Task FilterHelpBtn() => await new LibationAvalonia.Dialogs.SearchSyntaxDialog().ShowDialog(MainWindow);
+ public void FilterHelpBtn() => MainWindow.ShowSearchSyntaxDialog();
public void ToggleFirstFilterIsDefault() => FirstFilterIsDefault = !FirstFilterIsDefault;
public async Task EditQuickFiltersAsync() => await new LibationAvalonia.Dialogs.EditQuickFilters().ShowDialog(MainWindow);
public async Task PerformFilter(QuickFilters.NamedFilter? namedFilter)
diff --git a/Source/LibationAvalonia/Views/MainWindow.axaml.cs b/Source/LibationAvalonia/Views/MainWindow.axaml.cs
index 8d08b264..37e9c016 100644
--- a/Source/LibationAvalonia/Views/MainWindow.axaml.cs
+++ b/Source/LibationAvalonia/Views/MainWindow.axaml.cs
@@ -223,5 +223,28 @@ namespace LibationAvalonia.Views
}
private void setProgressVisible(bool visible) => ViewModel.DownloadProgress = visible ? 0 : null;
+
+ public SearchSyntaxDialog ShowSearchSyntaxDialog()
+ {
+ var dialog = new SearchSyntaxDialog();
+ dialog.TagDoubleClicked += Dialog_TagDoubleClicked;
+ dialog.Closed += Dialog_Closed;
+ filterHelpBtn.IsEnabled = false;
+ dialog.Show(this);
+ return dialog;
+
+ void Dialog_Closed(object sender, EventArgs e)
+ {
+ dialog.TagDoubleClicked -= Dialog_TagDoubleClicked;
+ filterHelpBtn.IsEnabled = true;
+ }
+ void Dialog_TagDoubleClicked(object sender, string tag)
+ {
+ var text = filterSearchTb.Text;
+ filterSearchTb.Text = text.Insert(Math.Min(Math.Max(0, filterSearchTb.CaretIndex), text.Length), tag);
+ filterSearchTb.CaretIndex += tag.Length;
+ filterSearchTb.Focus();
+ }
+ }
}
}
diff --git a/Source/LibationAvalonia/Walkthrough.cs b/Source/LibationAvalonia/Walkthrough.cs
index 0c0b831a..e0eb9d2f 100644
--- a/Source/LibationAvalonia/Walkthrough.cs
+++ b/Source/LibationAvalonia/Walkthrough.cs
@@ -203,9 +203,10 @@ namespace LibationAvalonia
await displayControlAsync(MainForm.filterHelpBtn);
- var filterHelp = new SearchSyntaxDialog();
- await filterHelp.ShowDialog(MainForm);
-
+ var searchDialog = MainForm.ShowSearchSyntaxDialog();
+ var tcs = new TaskCompletionSource();
+ searchDialog.Closed += (_, _) => tcs.SetResult();
+ await tcs.Task;
return true;
}