using System; using System.ComponentModel; using System.Runtime.CompilerServices; using Xamarin.Forms; namespace InABox.Mobile { public class ModuleMenuItemTappedArgs :EventArgs { } public delegate void ModuleMenuItemTapped(MobileModuleItem sender, ModuleMenuItemTappedArgs args); public interface IModuleMenuItem { String Header { get; set; } String Description { get; set; } ImageSource Thumbnail { get; set; } bool IsEnabled { get; set; } bool IsVisible { get; set; } event ModuleMenuItemTapped Tapped; string Alert { get; set; } void Tap(); } public class MobileModuleItem : BindableObject, IModuleMenuItem { public static readonly BindableProperty HeaderProperty = BindableProperty.Create(nameof(Header), typeof(String), typeof(MobileModuleItem), ""); public string Header { get => (String)GetValue(HeaderProperty); set => SetValue(HeaderProperty, value); } public static readonly BindableProperty DescriptionProperty = BindableProperty.Create(nameof(Description), typeof(String), typeof(MobileModuleItem), ""); public string Description { get => (String)GetValue(DescriptionProperty); set => SetValue(DescriptionProperty, value); } public static readonly BindableProperty ThumbnailProperty = BindableProperty.Create(nameof(Thumbnail), typeof(ImageSource), typeof(MobileModuleItem), null); public ImageSource Thumbnail { get => (ImageSource)GetValue(ThumbnailProperty); set => SetValue(ThumbnailProperty, value); } public static readonly BindableProperty BackgroundColorProperty = BindableProperty.Create( nameof(BackgroundColor), typeof(Color), typeof(MobileModuleItem), XF.Material.Forms.Material.Color.Surface); public Color BackgroundColor { get => (Color)GetValue(BackgroundColorProperty); set => SetValue(BackgroundColorProperty, value); } public static readonly BindableProperty BorderColorProperty = BindableProperty.Create( nameof(BorderColor), typeof(Color), typeof(MobileModuleItem), XF.Material.Forms.Material.Color.SecondaryVariant); public Color BorderColor { get => (Color)GetValue(BorderColorProperty); set => SetValue(BorderColorProperty, value); } public static readonly BindableProperty TextColorProperty = BindableProperty.Create( nameof(TextColor), typeof(Color), typeof(MobileModuleItem), XF.Material.Forms.Material.Color.OnSurface); public Color TextColor { get => (Color)GetValue(TextColorProperty); set => SetValue(TextColorProperty, value); } public static readonly BindableProperty IsEnabledProperty = BindableProperty.Create(nameof(IsEnabled), typeof(bool), typeof(MobileModuleItem), true); public bool IsEnabled { get => (bool)GetValue(IsEnabledProperty); set => SetValue(IsEnabledProperty, value); } public static readonly BindableProperty IsVisibleProperty = BindableProperty.Create(nameof(IsVisible), typeof(bool), typeof(MobileModuleItem), true); public bool IsVisible { get => (bool)GetValue(IsVisibleProperty); set => SetValue(IsVisibleProperty, value); } public static readonly BindableProperty AlertProperty = BindableProperty.Create( nameof(Alert), typeof(string), typeof(MobileModuleItem), null); public string Alert { get { return (string)GetValue(AlertProperty); } set { SetValue(AlertProperty, value); OnPropertyChanged(nameof(AlertVisible)); } } public bool AlertVisible => !String.IsNullOrWhiteSpace(Alert); public event ModuleMenuItemTapped Tapped; public void Tap() => Tapped?.Invoke(this, new ModuleMenuItemTappedArgs()); } }