diff --git a/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml b/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml
index f54d4093..ee973cdd 100644
--- a/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml
+++ b/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml
@@ -22,6 +22,7 @@
@@ -43,6 +44,7 @@
BorderThickness="1"
GridLinesVisibility="All"
AutoGenerateColumns="False"
+ DoubleTapped="EditTemplateViewModel_DoubleTapped"
Items="{Binding ListItems}" >
diff --git a/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml.cs b/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml.cs
index 3a1447ff..98c001eb 100644
--- a/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml.cs
+++ b/Source/LibationAvalonia/Dialogs/EditTemplateDialog.axaml.cs
@@ -1,12 +1,9 @@
-using Avalonia.Data;
-using Avalonia.Data.Converters;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Dinah.Core;
using LibationFileManager;
using System;
using System.Collections.Generic;
-using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -17,22 +14,6 @@ using Avalonia.Controls;
namespace LibationAvalonia.Dialogs
{
- class BracketEscapeConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is string str && str[0] != '<' && str[^1] != '>')
- return $"<{str}>".Replace("->", "-\x200C>").Replace("<-", "<\x200C-");
- return new BindingNotification(new InvalidCastException(), BindingErrorType.Error);
- }
-
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is string str && str[0] == '<' && str[^1] == '>')
- return str[1..^2].Replace("-\x200C>", "->").Replace("<\x200C-", "<-");
- return new BindingNotification(new InvalidCastException(), BindingErrorType.Error);
- }
- }
public partial class EditTemplateDialog : DialogWindow
{
// final value. post-validity check
@@ -43,6 +24,7 @@ namespace LibationAvalonia.Dialogs
public EditTemplateDialog()
{
AvaloniaXamlLoader.Load(this);
+ userEditTbox = this.FindControl(nameof(userEditTbox));
if (Design.IsDesignMode)
{
AudibleUtilities.AudibleApiStorage.EnsureAccountsSettingsFileExists();
@@ -63,6 +45,18 @@ namespace LibationAvalonia.Dialogs
DataContext = _viewModel;
}
+
+ public void EditTemplateViewModel_DoubleTapped(object sender, Avalonia.Input.TappedEventArgs e)
+ {
+ var dataGrid = sender as DataGrid;
+
+ var item = dataGrid.SelectedItem as Tuple;
+ var text = userEditTbox.Text;
+
+ userEditTbox.Text = text.Insert(Math.Min(Math.Max(0, userEditTbox.CaretIndex), text.Length), item.Item1);
+ userEditTbox.CaretIndex += item.Item1.Length;
+ }
+
protected override async Task SaveAndCloseAsync()
{
if (!await _viewModel.Validate())
@@ -99,6 +93,7 @@ namespace LibationAvalonia.Dialogs
t.Description)
)
);
+
}
// hold the work-in-progress value. not guaranteed to be valid
diff --git a/Source/LibationWinForms/Dialogs/EditTemplateDialog.Designer.cs b/Source/LibationWinForms/Dialogs/EditTemplateDialog.Designer.cs
index 592c285d..23dbf089 100644
--- a/Source/LibationWinForms/Dialogs/EditTemplateDialog.Designer.cs
+++ b/Source/LibationWinForms/Dialogs/EditTemplateDialog.Designer.cs
@@ -103,13 +103,16 @@
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2});
- this.listView1.HideSelection = false;
+ this.listView1.FullRowSelect = true;
+ this.listView1.GridLines = true;
this.listView1.Location = new System.Drawing.Point(12, 56);
+ this.listView1.MultiSelect = false;
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(328, 283);
this.listView1.TabIndex = 3;
this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details;
+ this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
//
// columnHeader1
//
diff --git a/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs b/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs
index 55b47018..5167327d 100644
--- a/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs
+++ b/Source/LibationWinForms/Dialogs/EditTemplateDialog.cs
@@ -5,6 +5,7 @@ using System.IO;
using System.Windows.Forms;
using Dinah.Core;
using LibationFileManager;
+using System.Windows.Controls;
namespace LibationWinForms.Dialogs
{
@@ -59,7 +60,7 @@ namespace LibationWinForms.Dialogs
// populate list view
foreach (var tag in template.GetTemplateTags())
- listView1.Items.Add(new ListViewItem(new[] { $"<{tag.TagName}>", tag.Description }));
+ listView1.Items.Add(new System.Windows.Forms.ListViewItem(new[] { $"<{tag.TagName}>", tag.Description }));
}
private void resetToDefaultBtn_Click(object sender, EventArgs e) => resetTextBox(template.DefaultTemplate);
@@ -197,5 +198,16 @@ namespace LibationWinForms.Dialogs
this.DialogResult = DialogResult.Cancel;
this.Close();
}
+
+ private void listView1_DoubleClick(object sender, EventArgs e)
+ {
+ var item = listView1.SelectedItems[0];
+ var text = templateTb.Text;
+
+ var selStart = Math.Min(Math.Max(0, templateTb.SelectionStart), text.Length);
+
+ templateTb.Text = text.Insert(selStart, item.Text);
+ templateTb.SelectionStart = selStart + item.Text.Length;
+ }
}
}