ImageViewerPage.xaml.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using InABox.Clients;
  5. using InABox.Core;
  6. using InABox.Mobile;
  7. using Xamarin.Forms;
  8. namespace PRS.Mobile
  9. {
  10. public class ImageViewerPageChangedEventArgs
  11. {
  12. public Document Document { get; private set; }
  13. public String AuditMessage { get; private set; }
  14. public ImageViewerPageChangedEventArgs(Document document, String auditmessage)
  15. {
  16. Document = document;
  17. AuditMessage = auditmessage;
  18. }
  19. }
  20. public delegate void ImageViewerPageImageChangedEvent(object sender, ImageViewerPageChangedEventArgs args);
  21. public partial class ImageViewerPage
  22. {
  23. private readonly Action? _deleteaction;
  24. private Document? _doc;
  25. public event ImageViewerPageImageChangedEvent? ImageChanged;
  26. public ImageViewerPage(ImageSource image, Action? ondelete)
  27. {
  28. InitializeComponent();
  29. BindingContext = image;
  30. _deleteaction = ondelete;
  31. _delete.IsVisible = ondelete != null;
  32. }
  33. public ImageViewerPage(byte[] data, Action? ondelete)
  34. {
  35. InitializeComponent();
  36. BindingContext = ImageSource.FromStream(() => new MemoryStream(data));
  37. _deleteaction = ondelete;
  38. _delete.IsVisible = ondelete != null;
  39. }
  40. public ImageViewerPage(Guid id)
  41. {
  42. InitializeComponent();
  43. Client.Query(
  44. new Filter<Document>(x => x.ID).IsEqualTo(id),
  45. Columns.All<Document>(),
  46. null,
  47. (o, e) =>
  48. {
  49. _doc = o?.Rows.FirstOrDefault()?.ToObject<Document>();
  50. if (_doc != null)
  51. {
  52. Dispatcher.BeginInvokeOnMainThread(() =>
  53. {
  54. BindingContext = ImageSource.FromStream(() => new MemoryStream(_doc.Data));
  55. _rotate.IsVisible = true;
  56. });
  57. }
  58. }
  59. );
  60. }
  61. private void DeleteBtn_Clicked(object sender, EventArgs e)
  62. {
  63. _deleteaction?.Invoke();
  64. Navigation.PopAsync();
  65. }
  66. private void _rotate_Clicked(object sender, MobileButtonClickEventArgs args)
  67. {
  68. if (_doc == null)
  69. return;
  70. _doc.Data = MobileUtils.ImageTools.RotateImage(_doc.Data,90F);
  71. _doc.CRC = CoreUtils.CalculateCRC(_doc.Data);
  72. var msg = "Image Rotated on Mobile Device";
  73. new Client<Document>().Save(_doc, msg);
  74. BindingContext = ImageSource.FromStream(() => new MemoryStream(_doc.Data));
  75. ImageChanged?.Invoke(this, new ImageViewerPageChangedEventArgs(_doc,msg));
  76. }
  77. }
  78. }