LiveMapsMenu.xaml.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using InABox.Core;
  7. using InABox.Mobile;
  8. using Xamarin.Forms;
  9. using Xamarin.Forms.Xaml;
  10. namespace PRS.Mobile
  11. {
  12. public class LiveMapsMenuItem : BindableObject
  13. {
  14. public Guid ID { get; set; }
  15. public String Description { get; set; }
  16. public bool Selected { get; set; }
  17. public ImageSource SelectedImage =>
  18. Selected
  19. ? ImageSource.FromFile("checked")
  20. : ImageSource.FromFile("unchecked");
  21. }
  22. [XamlCompilation(XamlCompilationOptions.Compile)]
  23. public partial class LiveMapsMenu
  24. {
  25. private Task _data;
  26. private LiveMapsMenuItem[] _items;
  27. private Guid[] _selectedItems = new Guid[] { };
  28. public Guid[] SelectedItems
  29. {
  30. get => _selectedItems;
  31. set
  32. {
  33. _selectedItems = value;
  34. Refresh();
  35. }
  36. }
  37. public LiveMapsMenu()
  38. {
  39. _data = Task.Run(() => App.Data.EquipmentGroups.Refresh(false));
  40. InitializeComponent();
  41. _grid.Columns
  42. .BeginUpdate()
  43. .Clear()
  44. .Add(
  45. new MobileGridImageColumn<LiveMapsMenuItem>()
  46. {
  47. Column = x => x.SelectedImage,
  48. Width = 30,
  49. Margin = 5,
  50. Header = ImageSource.FromFile("checked"),
  51. Tapped = ToggleSelection
  52. })
  53. .Add(
  54. new MobileGridTextColumn<LiveMapsMenuItem>()
  55. {
  56. Column = x => x.Description,
  57. Caption = "Select Categories",
  58. Width = GridLength.Star,
  59. Alignment = TextAlignment.Start
  60. })
  61. .EndUpdate();
  62. }
  63. private void Refresh()
  64. {
  65. _data.Wait();
  66. _items = App.Data.EquipmentGroups.Items
  67. .Select(x =>
  68. new LiveMapsMenuItem()
  69. {
  70. ID = x.ID,
  71. Description = x.Description,
  72. Selected = _selectedItems.Contains(x.ID)
  73. })
  74. .Prepend(
  75. new LiveMapsMenuItem()
  76. {
  77. ID = CoreUtils.FullGuid,
  78. Description = "Job Locations",
  79. Selected = _selectedItems.Contains(CoreUtils.FullGuid)
  80. })
  81. .ToArray();
  82. _grid.ItemsSource = _items;
  83. }
  84. private void ToggleSelection(IMobileGridColumn column, object data)
  85. {
  86. if (data is LiveMapsMenuItem item)
  87. item.Selected = !item.Selected;
  88. _selectedItems = _items.Where(x => x.Selected).Select(x => x.ID).ToArray();
  89. DoChanged();
  90. }
  91. private void _selectall_Clicked(object sender, MobileButtonClickEventArgs args)
  92. {
  93. foreach (var item in _items)
  94. item.Selected = true;
  95. _selectedItems = _items.Where(x => x.Selected).Select(x => x.ID).ToArray();
  96. DoChanged();
  97. }
  98. private void _clearall_Clicked(object sender, MobileButtonClickEventArgs args)
  99. {
  100. foreach (var item in _items)
  101. item.Selected = false;
  102. _selectedItems = _items.Where(x => x.Selected).Select(x => x.ID).ToArray();
  103. DoChanged();
  104. }
  105. public event EventHandler Changed;
  106. private void DoChanged()
  107. {
  108. Changed?.Invoke(this,EventArgs.Empty);
  109. }
  110. }
  111. }