From 756ea17d21b8d1861bcdf01e0722e03c29e416be Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Thu, 2 Jun 2022 12:52:03 +0200
Subject: [PATCH] add file drag&drop functionality to xml file selector user
 controls

---
 .../ViewModel/UserControl/XMLFileSelector.cs       |  2 ++
 .../Views/UserControl/VectoXMLFileSelector.xaml    |  6 +++---
 .../Views/UserControl/VectoXMLFileSelector.xaml.cs | 14 ++++++++++++++
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/HashingTool/ViewModel/UserControl/XMLFileSelector.cs b/HashingTool/ViewModel/UserControl/XMLFileSelector.cs
index 30d3d6be33..1bcf23c1cc 100644
--- a/HashingTool/ViewModel/UserControl/XMLFileSelector.cs
+++ b/HashingTool/ViewModel/UserControl/XMLFileSelector.cs
@@ -177,6 +177,8 @@ namespace HashingTool.ViewModel.UserControl
 			}
 
 			try {
+				_source = fileName;
+				RaisePropertyChanged("Source");
 				using (var stream = File.OpenRead(fileName)) {
 					await LoadXMLFile(stream);
 				}
diff --git a/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml b/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml
index c47a857620..a50c8504ea 100644
--- a/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml
+++ b/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml
@@ -7,12 +7,12 @@
 	xmlns:userControl="clr-namespace:HashingTool.ViewModel.UserControl"
 	x:Class="HashingTool.Views.VectoXMLFileSelector"
 	mc:Ignorable="d" d:DesignWidth="456" MinHeight="32"
-	d:DataContext="{d:DesignInstance views:VectoXMLFileSelector}">
+	d:DataContext="{d:DesignInstance views:VectoXMLFileSelector}" >
 	<UserControl.Resources>
 		<BooleanToVisibilityConverter x:Key="BoolToVis" />
 	</UserControl.Resources>
 	<StackPanel Margin="0,5" HorizontalAlignment="Stretch">
-		<DockPanel HorizontalAlignment="Stretch" Height="Auto" Margin="0" VerticalAlignment="Top">
+        <DockPanel HorizontalAlignment="Stretch" Height="Auto" Margin="0" VerticalAlignment="Top" AllowDrop="True" Drop="XMLFileBrowser_Drop">
 
 			<!--<ContentControl DockPanel.Dock="Right"
 							Visibility="{Binding XMLFile.HasContentValidation, Converter={StaticResource BoolToVis}}" Width="40" Height="40"
@@ -75,7 +75,7 @@
 					VerticalAlignment="Top" HorizontalAlignment="Right" Width="75" />
 
 			<TextBox DockPanel.Dock="Left" HorizontalAlignment="Stretch" VerticalAlignment="Top" Height="23"
-					Margin="0,0,10,0" TextWrapping="NoWrap" Text="{Binding XMLFile.Source, Mode=OneWay}" IsReadOnly="True">
+					Margin="0,0,10,0" TextWrapping="NoWrap" Text="{Binding XMLFile.Source, Mode=OneWay}" IsReadOnly="True" PreviewDragOver="XMLFileBrowser_DragOver">
 				<TextBox.InputBindings>
 					<KeyBinding Command="{Binding XMLFile.SetXMLFileCommnd}" Key="Return" />
 				</TextBox.InputBindings>
diff --git a/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml.cs b/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml.cs
index 1b163bbdb7..1bd88e28ce 100644
--- a/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml.cs
+++ b/HashingTool/Views/UserControl/VectoXMLFileSelector.xaml.cs
@@ -63,5 +63,19 @@ namespace HashingTool.Views
 			dialog.ErrorCount = XMLFile.XMLValidationErrors.Count;
 			dialog.ShowDialog();
 		}
+		
+		private void XMLFileBrowser_Drop(object sender, DragEventArgs e)
+        {
+            if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
+                var files = (string[])e.Data.GetData(DataFormats.FileDrop);
+                XMLFile.SetXMLFileCommnd.Execute(files?[0]);
+            }
+		}
+
+        private void XMLFileBrowser_DragOver(object sender, DragEventArgs e)
+		{
+			if (e.Data.GetDataPresent(DataFormats.FileDrop))
+				e.Handled = true;
+		}
 	}
 }
-- 
GitLab