using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media.Imaging; using InABox.Core; using InABox.WPF; using Microsoft.Win32; namespace InABox.DynamicGrid { /// /// Interaction logic for KanbanAttachments.xaml /// public partial class Attachments : UserControl { private readonly List> Items = new(); private readonly List ViewedFiles = new(); public Attachments(Type type, Guid reference) { InitializeComponent(); FileList.Items.Clear(); FileList.ItemsSource = Items; //for (int i = 0; i < files.Count(); i++) //{ // var file = files[i]; // Items.Add(new Tuple(file.FileName, GetBitmapImage(file.FileName), file.Data, i)); //} } private BitmapImage GetBitmapImage(string filename) { var bmp = Wpf.Resources.doc_misc; var ext = Path.GetExtension(filename).ToUpper(); if (ext.Equals(".PDF")) bmp = Wpf.Resources.doc_pdf; else if (ext.Equals(".DOC") || ext.Equals(".DOCX") || ext.Equals(".RTF")) bmp = Wpf.Resources.doc_rtf; else if (ext.Equals(".XLS") || ext.Equals(".XLSX")) bmp = Wpf.Resources.doc_xls; else if (ext.Equals(".TXT")) bmp = Wpf.Resources.doc_txt; else if (ext.Equals(".BMP")) bmp = Wpf.Resources.doc_bmp; else if (ext.Equals(".PNG")) bmp = Wpf.Resources.doc_png; else if (ext.Equals(".JPG") || ext.Equals(".JPEG")) bmp = Wpf.Resources.doc_jpg; return bmp.AsBitmapImage().Resize(64, 64); } // public void UnloadAttachments(List files) // { // // First remove any deleted files // for (int i = files.Count - 1; i >= 0; i--) // { // if (!Items.Where(x => x.Item4.Equals(i)).Any()) // files.RemoveAt(i); // } // // now add new files // foreach (var item in Items) // { // if (item.Item4.Equals(-1)) // files.Add(new MiscellaneousDataFile() { FileName = item.Item1, Data = item.Item3 }); // } //} ~Attachments() { foreach (var file in ViewedFiles) if (File.Exists(file)) try { File.Delete(file); } catch (Exception e) { Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace)); } } private void AddFile_Click(object sender, RoutedEventArgs e) { var dlg = new OpenFileDialog(); dlg.Filter = ""; // new MiscellaneousDataFile().Filter(); if (dlg.ShowDialog() == true) { var tuple = new Tuple( Path.GetFileName(dlg.FileName), GetBitmapImage(dlg.FileName), File.ReadAllBytes(dlg.FileName), -1 ); Items.Add(tuple); FileList.ItemsSource = null; FileList.ItemsSource = Items; } } private void ViewFile(object tag) { if (tag is Tuple) { var tuple = (Tuple)tag; var filename = Path.ChangeExtension(Path.GetTempFileName(), Path.GetExtension(tuple.Item1)); File.WriteAllBytes(filename, tuple.Item3); ViewedFiles.Add(filename); var gsProcessInfo = new ProcessStartInfo(); gsProcessInfo.Verb = "open"; gsProcessInfo.WindowStyle = ProcessWindowStyle.Normal; gsProcessInfo.FileName = filename; gsProcessInfo.UseShellExecute = true; Process.Start(gsProcessInfo); } } private void ViewFile_Click(object sender, RoutedEventArgs e) { var tag = (sender as MenuItem).Tag; ViewFile(tag); } private void DeleteFile_Click(object sender, RoutedEventArgs e) { var tag = (sender as MenuItem).Tag; if (tag is Tuple) { var tuple = (Tuple)tag; if (MessageBox.Show("Are you sure you wish to delete this file?", "Confirm File Delete", MessageBoxButton.YesNo) .Equals(MessageBoxResult.Yes)) { Items.Remove(tuple); FileList.ItemsSource = null; FileList.ItemsSource = Items; } } } private void Item_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left && e.ClickCount == 2) { var tag = (sender as FrameworkElement).Tag; ViewFile(tag); } } } }