using System.Collections.Generic; using System.IO; using System.Linq; using InABox.Core; using InABox.Mobile; using Xamarin.Forms; namespace PRS.Mobile { public class DigitalFormMultiImage : MobileCard, IDigitalFormField { private readonly CollectionView _images; private DFLayoutMultiImage _definition; public DFLayoutMultiImage Definition { get => _definition; set { _definition = value; Initialize(value ?? new DFLayoutMultiImage()); } } private DFLayoutEmbeddedMediaValues _value = new DFLayoutEmbeddedMediaValues(); public DFLayoutEmbeddedMediaValues Value { get => _value; set { _value = value; DoUpdateUI(); } } public bool IsEmpty => Value?.Any() != true; private void DoUpdateUI() => _images.ItemsSource = _value.Select(x => ImageSource.FromStream(() => new MemoryStream(x.Data))); private bool _readOnly; public bool ReadOnly { get => _readOnly; set { _readOnly = value; UpdateStatus(); } } public void Deserialize(string serialized) { _value = new DFLayoutEmbeddedMediaValues(serialized); _value.PropertyChanged += (sender, args) => DoUpdateUI(); DoUpdateUI(); } public string Serialize() { return _value?.ToString() ?? ""; } public event DigitalFormViewChangedHandler ValueChanged; public DigitalFormMultiImage() { _value = new DFLayoutEmbeddedMediaValues(); _value.PropertyChanged += (sender, args) => DoUpdateUI(); HeightRequest = 200; Padding = 5; Grid grid = new Grid(); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Star }); grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Star }); grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Star }); grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); _images = new CollectionView { ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal), BackgroundColor = Color.Red, ItemTemplate = new DataTemplate(() => { var image = new Image(); return image; }) }; _images.SetValue(Grid.RowProperty,0); _images.SetValue(Grid.ColumnProperty,0); _images.SetValue(Grid.ColumnSpanProperty,2); grid.Children.Add(_images); MobileButton camera = new MobileButton() { Image = ImageSource.FromFile("camera"), Text = "Take Photo", Orientation = StackOrientation.Horizontal }; camera.Clicked += (sender, args) => { }; camera.SetValue(Grid.RowProperty,1); camera.SetValue(Grid.ColumnProperty,0); grid.Children.Add(camera); MobileButton library = new MobileButton() { Image = ImageSource.FromFile("gallery"), Text = "Library", Orientation = StackOrientation.Horizontal }; library.Clicked += (sender, args) => { }; library.SetValue(Grid.RowProperty,1); library.SetValue(Grid.ColumnProperty,1); grid.Children.Add(library); Content = grid; } private void Initialize(DFLayoutMultiImage value) { UpdateStatus(); } private void UpdateStatus() { } } }