DynamicMapColumn.cs 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. Geofence = $"{CoreUtils.GetFullPropertyName(property, ".")}.{nameof(Address.Geofence)}";
  25. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Geofence));
  26. Image = MapImage;
  27. Action = MapClick;
  28. GetFilter = () => new StaticColumnFilter<bool>(HasLocation, [
  29. new("(Blank)", false),
  30. new("(Not Blank)", true)
  31. ]);
  32. }
  33. public DynamicMapColumn(DynamicGrid<T> grid, Expression<Func<T, Location>> property) : base(r => null)
  34. {
  35. Latitude = $"{CoreUtils.GetFullPropertyName(property, ".")}.{nameof(Location.Latitude)}";
  36. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Latitude));
  37. Longitude = CoreUtils.GetFullPropertyName(property, ".") + ".Longitude";
  38. grid.HiddenColumns.Add(CoreUtils.GetPropertyExpression<T>(Longitude));
  39. Image = MapImage;
  40. Action = MapClick;
  41. GetFilter = () => new StaticColumnFilter<bool>(HasLocation, [
  42. new("(Blank)", false),
  43. new("(Not Blank)", true)
  44. ]);
  45. }
  46. private bool HasLocation(CoreRow row)
  47. {
  48. var lat = row.Get<double>(Latitude);
  49. var lng = row.Get<double>(Longitude);
  50. return lat != 0.0F && lng != 0.0F;
  51. }
  52. private BitmapImage? MapImage(CoreRow? row)
  53. {
  54. return row is null || HasLocation(row) ? milestone : null;
  55. }
  56. private bool MapClick(CoreRow? row)
  57. {
  58. if (row is not null && HasLocation(row))
  59. {
  60. var mapform = new MapForm(row.Get<double>(Latitude), row.Get<double>(Longitude));
  61. mapform.ShowDialog();
  62. //var Address = new Address();
  63. //Address.Location.Latitude = row.Get<double>(Latitude);
  64. //Address.Location.Longitude = row.Get<double>(Longitude);
  65. //if (Geofence != null)
  66. // Address.Geofence = row.Get<string>(Geofence);
  67. //var form = new GeofenceEditor(Address, false);
  68. //form.ShowDialog();
  69. }
  70. return false;
  71. }
  72. }
  73. }