using System; using System.IO; using System.Linq; using InABox.Clients; using InABox.Core; using InABox.Mobile; using Xamarin.Forms; namespace PRS.Mobile { public class ImageViewerPageChangedEventArgs { public Document Document { get; private set; } public String AuditMessage { get; private set; } public ImageViewerPageChangedEventArgs(Document document, String auditmessage) { Document = document; AuditMessage = auditmessage; } } public delegate void ImageViewerPageImageChangedEvent(object sender, ImageViewerPageChangedEventArgs args); public partial class ImageViewerPage { private readonly Action? _deleteaction; private Document? _doc; public event ImageViewerPageImageChangedEvent? ImageChanged; public ImageViewerPage(ImageSource image, Action? ondelete) { InitializeComponent(); BindingContext = image; _deleteaction = ondelete; _delete.IsVisible = ondelete != null; } public ImageViewerPage(byte[] data, Action? ondelete) { InitializeComponent(); BindingContext = ImageSource.FromStream(() => new MemoryStream(data)); _deleteaction = ondelete; _delete.IsVisible = ondelete != null; } public ImageViewerPage(Guid id) { InitializeComponent(); Client.Query( new Filter(x => x.ID).IsEqualTo(id), Columns.All(), null, (o, e) => { _doc = o?.Rows.FirstOrDefault()?.ToObject(); if (_doc != null) { Dispatcher.BeginInvokeOnMainThread(() => { BindingContext = ImageSource.FromStream(() => new MemoryStream(_doc.Data)); _rotate.IsVisible = true; }); } } ); } private void DeleteBtn_Clicked(object sender, EventArgs e) { _deleteaction?.Invoke(); Navigation.PopAsync(); } private void _rotate_Clicked(object sender, MobileButtonClickEventArgs args) { if (_doc == null) return; _doc.Data = MobileUtils.ImageTools.RotateImage(_doc.Data,90F); _doc.CRC = CoreUtils.CalculateCRC(_doc.Data); var msg = "Image Rotated on Mobile Device"; new Client().Save(_doc, msg); BindingContext = ImageSource.FromStream(() => new MemoryStream(_doc.Data)); ImageChanged?.Invoke(this, new ImageViewerPageChangedEventArgs(_doc,msg)); } } }