DynamicMapColumn.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4. using System.Windows.Media.Imaging;
  5. using InABox.Core;
  6. using InABox.DynamicGrid;
  7. using InABox.WPF;
  8. using InABox.Wpf.DynamicGrid;
  9. using PRSDesktop.Forms;
  10. namespace PRSDesktop
  11. {
  12. internal class DynamicMapColumn<T> : DynamicImageColumn where T : Entity, new()
  13. {
  14. private readonly string Latitude;
  15. private readonly string Longitude;
  16. private readonly BitmapImage milestone = Resources.map.AsBitmapImage();
  17. private readonly string Geofence;
  18. public DynamicMapColumn(DynamicGrid<T> grid, Expression<Func<T, Address>> property) : base(r => null)
  19. {
  20. Latitude = $"{CoreUtils.GetFullPropertyName(property, ".")}.{nameof(Address.Location)}.{nameof(Address.Location.Latitude)}";
  21. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Latitude));
  22. Longitude = $"{CoreUtils.GetFullPropertyName(property, ".")}.{nameof(Address.Location)}.{nameof(Address.Location.Longitude)}";
  23. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Longitude));
  24. try
  25. {
  26. Geofence = $"{CoreUtils.GetFullPropertyName(property, ".")}.{nameof(Address.Geofence)}";
  27. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Geofence));
  28. }
  29. catch (Exception e)
  30. {
  31. Geofence = "";
  32. }
  33. Image = MapImage;
  34. Action = MapClick;
  35. GetFilter = () => new StaticColumnFilter<bool>(HasLocation, [
  36. new("(Blank)", false),
  37. new("(Not Blank)", true)
  38. ]);
  39. }
  40. public DynamicMapColumn(DynamicGrid<T> grid, Expression<Func<T, Location>> property) : base(r => null)
  41. {
  42. Latitude = $"{CoreUtils.GetFullPropertyName(property, ".")}.{nameof(Location.Latitude)}";
  43. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Latitude));
  44. Longitude = CoreUtils.GetFullPropertyName(property, ".") + ".Longitude";
  45. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Longitude));
  46. try
  47. {
  48. Geofence = $"{CoreUtils.GetFullPropertyName(property, ".")}.{nameof(Address.Geofence)}";
  49. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Geofence));
  50. }
  51. catch (Exception e)
  52. {
  53. Geofence = "";
  54. }
  55. Image = MapImage;
  56. Action = MapClick;
  57. GetFilter = () => new StaticColumnFilter<bool>(HasLocation, [
  58. new("(Blank)", false),
  59. new("(Not Blank)", true)
  60. ]);
  61. }
  62. private bool HasLocation(CoreRow row)
  63. {
  64. var lat = row.Get<double>(Latitude);
  65. var lng = row.Get<double>(Longitude);
  66. return lat != 0.0F && lng != 0.0F;
  67. }
  68. private BitmapImage? MapImage(CoreRow? row)
  69. {
  70. return row is null || HasLocation(row) ? milestone : null;
  71. }
  72. private bool MapClick(CoreRow? row)
  73. {
  74. if (row is not null && HasLocation(row))
  75. {
  76. var geofence = (!String.IsNullOrWhiteSpace(Geofence)
  77. ? Serialization.Deserialize<GeoFenceDefinition>(row.Get<string>(Geofence))
  78. : null)
  79. ?? new GeoFenceDefinition();
  80. var mapform = new MapForm(row.Get<double>(Latitude), row.Get<double>(Longitude),geofence);
  81. mapform.ShowDialog();
  82. //var Address = new Address();
  83. //Address.Location.Latitude = row.Get<double>(Latitude);
  84. //Address.Location.Longitude = row.Get<double>(Longitude);
  85. //if (Geofence != null)
  86. // Address.Geofence = row.Get<string>(Geofence);
  87. //var form = new GeofenceEditor(Address, false);
  88. //form.ShowDialog();
  89. }
  90. return false;
  91. }
  92. }
  93. }