DocumentEditor.xaml.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. using System.Collections.Generic;
  2. using System.ComponentModel;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using InABox.Core;
  8. using InABox.Wpf;
  9. namespace InABox.DynamicGrid
  10. {
  11. /// <summary>
  12. /// Interaction logic for PDFViewer.xaml
  13. /// </summary>
  14. public partial class DocumentEditor : ThemableWindow
  15. {
  16. private IEntityDocument[] _documents;
  17. private readonly bool bReady;
  18. public DocumentEditor(params IEntityDocument[] documents)
  19. {
  20. //PrintAllowed = false;
  21. SaveAllowed = false;
  22. InitializeComponent();
  23. _documents = documents;
  24. CreateTabs(CheckSuperceded(documents));
  25. bReady = true;
  26. Documents.SelectedIndex = -1;
  27. }
  28. private List<IEntityDocument> CheckSuperceded(IEntityDocument[] documents)
  29. {
  30. var docs = documents.ToList();
  31. if (docs.Count() > 1)
  32. {
  33. docs.Sort((x, y) => x.Superceded.CompareTo(y.Superceded)); //ascending
  34. }
  35. return docs;
  36. }
  37. private void CreateTabs(List<IEntityDocument> documents)
  38. {
  39. foreach (var doc in documents)
  40. {
  41. var tab = new DynamicTabItem();
  42. tab.Header = Path.GetFileName(doc.DocumentLink.FileName);
  43. tab.Tag = doc;
  44. Documents.Items.Add(tab);
  45. }
  46. }
  47. //public bool PrintAllowed { get; set; }
  48. public bool SaveAllowed { get; set; }
  49. public bool ButtonsVisible { get; set; }
  50. public string Watermark { get; set; }
  51. private bool bClosing = false;
  52. private void Documents_SelectionChanged(object sender, SelectionChangedEventArgs e)
  53. {
  54. if (!bReady || (!ButtonsVisible && bClosing))
  55. return;
  56. for (var i = 0; i < e.RemovedItems.Count; i++)
  57. {
  58. if (e.RemovedItems[i] is DynamicTabItem item)
  59. {
  60. if (item.Content is IDocumentEditor viewer)
  61. viewer.Document = null;
  62. item.Content = null;
  63. }
  64. }
  65. for (var i = 0; i < e.AddedItems.Count; i++)
  66. {
  67. var item = e.AddedItems[i] as DynamicTabItem;
  68. if (item != null)
  69. {
  70. var doc = item.Tag as IEntityDocument;
  71. if (doc != null)
  72. {
  73. Dispatcher.BeginInvoke(() =>
  74. {
  75. IDocumentEditor editor = null;
  76. var extension = Path.GetExtension(doc.DocumentLink.FileName).ToLower();
  77. if (extension.Equals(".pdf"))
  78. {
  79. var pdf = new PDFEditorControl();
  80. //pdf.PrintAllowed = PrintAllowed;
  81. pdf.SaveAllowed = SaveAllowed;
  82. pdf.ButtonsVisible = ButtonsVisible;
  83. pdf.Watermark = Watermark;
  84. editor = pdf;
  85. }
  86. else if (extension.Equals(".png") || extension.Equals(".bmp") || extension.Equals(".jpg") || extension.Equals(".jpeg"))
  87. {
  88. editor = new ImageEditorControl();
  89. }
  90. else if (extension.Equals(".xls") || extension.Equals(".xlsx"))
  91. {
  92. editor = new SpreadsheetEditorControl();
  93. }
  94. else if (extension.Equals(".doc") || extension.Equals(".docx") || extension.Equals(".rtf") || extension.Equals(".html") || extension.Equals(".htm") || extension.Equals(".txt"))
  95. {
  96. editor = new RTFEditorControl();
  97. }
  98. if (editor != null)
  99. {
  100. item.Content = editor;
  101. editor.Document = doc;
  102. }
  103. });
  104. }
  105. }
  106. }
  107. e.Handled = true;
  108. }
  109. protected override void OnClosing(CancelEventArgs e)
  110. {
  111. bClosing = true;
  112. base.OnClosing(e);
  113. Documents.SelectedIndex = -1;
  114. }
  115. private void Window_Loaded(object sender, RoutedEventArgs e)
  116. {
  117. //Editor.Document = _documents.FirstOrDefault();
  118. }
  119. private void OKButton_Click(object sender, RoutedEventArgs e)
  120. {
  121. //Editor.Document = null;
  122. DialogResult = true;
  123. Close();
  124. }
  125. private void CancelButton_Click(object sender, RoutedEventArgs e)
  126. {
  127. DialogResult = false;
  128. Close();
  129. }
  130. }
  131. }