ImageViewerPage.xaml.cs 2.9 KB

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