PopupEditorControl.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using System.Windows.Media;
  7. using InABox.Clients;
  8. using InABox.Core;
  9. namespace InABox.DynamicGrid
  10. {
  11. public class PopupEditorControl : DynamicEditorControl<Guid>, IPopupEditorControl
  12. {
  13. private Type? _type;
  14. private Guid _value = Guid.Empty;
  15. private TextBox Editor;
  16. //public event DefineFilter OnDefineFilter;
  17. public PopupEditorControl()
  18. {
  19. OtherColumns = new Dictionary<string, string>();
  20. }
  21. public Dictionary<string, string> OtherColumns { get; }
  22. public event OnDefineFilter? OnDefineFilter;
  23. public event OnUpdateOtherEditorHandler OnUpdateOtherEditor;
  24. protected override FrameworkElement CreateEditor()
  25. {
  26. var Grid = new Grid
  27. {
  28. VerticalAlignment = VerticalAlignment.Stretch,
  29. HorizontalAlignment = HorizontalAlignment.Stretch
  30. };
  31. Grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
  32. Grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(30, GridUnitType.Pixel) });
  33. Grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(50, GridUnitType.Pixel) });
  34. Editor = new TextBox
  35. {
  36. VerticalAlignment = VerticalAlignment.Stretch,
  37. VerticalContentAlignment = VerticalAlignment.Center,
  38. HorizontalAlignment = HorizontalAlignment.Stretch,
  39. IsReadOnly = true
  40. };
  41. Editor.SetValue(Grid.ColumnProperty, 0);
  42. Editor.SetValue(Grid.RowProperty, 0);
  43. Grid.Children.Add(Editor);
  44. var Select = new Button
  45. {
  46. VerticalAlignment = VerticalAlignment.Stretch,
  47. VerticalContentAlignment = VerticalAlignment.Center,
  48. HorizontalAlignment = HorizontalAlignment.Stretch,
  49. Content = "..",
  50. Margin = new Thickness(5, 0, 0, 0),
  51. Focusable = false
  52. };
  53. Select.SetValue(Grid.ColumnProperty, 1);
  54. Select.SetValue(Grid.RowProperty, 0);
  55. Select.Click += Select_Click;
  56. Grid.Children.Add(Select);
  57. var Clear = new Button
  58. {
  59. VerticalAlignment = VerticalAlignment.Stretch,
  60. VerticalContentAlignment = VerticalAlignment.Center,
  61. HorizontalAlignment = HorizontalAlignment.Stretch,
  62. Content = "Clear",
  63. Margin = new Thickness(5, 0, 0, 0),
  64. Focusable = false
  65. };
  66. Clear.SetValue(Grid.ColumnProperty, 2);
  67. Clear.SetValue(Grid.RowProperty, 0);
  68. Clear.Click += Clear_Click;
  69. Grid.Children.Add(Clear);
  70. return Grid;
  71. }
  72. private void Select_Click(object sender, RoutedEventArgs e)
  73. {
  74. if (_type != null)
  75. {
  76. var list = new PopupList(_type, _value, OtherColumns.Keys.ToArray());
  77. list.OnDefineFilter += (o, e) => { return OnDefineFilter?.Invoke(o, e); };
  78. //list.OnDefineFilter += (o, t) => { return OnDefineFilter?.Invoke(o, t); };
  79. if (list.ShowDialog() == true)
  80. {
  81. _value = list.ID;
  82. //Dictionary<String, String> fieldmap = new Dictionary<String, String>();
  83. foreach (var key in OtherColumns.Keys)
  84. //String[] comps = othercolumn.Split(new String[] { "->" }, StringSplitOptions.None);
  85. //String field = comps.Last();
  86. //fieldmap[comps.First()] = field;
  87. OtherValues[OtherColumns[key]] = list.OtherValues[key];
  88. //fieldmap[OtherColumns[key]] = list.OtherValues[othercolumn]
  89. CheckChanged();
  90. var display = new List<string?>();
  91. //var columns = Entity.DefaultLookupColumns(_type) as IColumns;
  92. var columns = LookupFactory.DefineColumns(_type);
  93. foreach (var column in columns.ColumnNames())
  94. if (list.OtherValues.ContainsKey(column))
  95. display.Add(list.OtherValues[column]?.ToString());
  96. Editor.Text = string.Join(" / ", display.Where(x => x != null && !string.IsNullOrWhiteSpace(x.ToString())));
  97. }
  98. }
  99. }
  100. private void Clear_Click(object sender, RoutedEventArgs e)
  101. {
  102. if (_type != null)
  103. {
  104. _value = Guid.Empty;
  105. foreach (var otherfield in OtherColumns.Keys)
  106. OtherValues[OtherColumns[otherfield]] = null;
  107. CheckChanged();
  108. Editor.Text = "";
  109. }
  110. }
  111. public override int DesiredHeight()
  112. {
  113. return 25;
  114. }
  115. public override int DesiredWidth()
  116. {
  117. return int.MaxValue;
  118. }
  119. protected override Guid RetrieveValue()
  120. {
  121. return _value;
  122. }
  123. protected override void UpdateValue(Guid value)
  124. {
  125. _value = value;
  126. if (_type is null)
  127. {
  128. Logger.Send(LogType.Error, "", "PopupEditorControl.UpdateValue(): _type is null!");
  129. return;
  130. }
  131. var client = ClientFactory.CreateClient(_type);
  132. var columns = LookupFactory.DefineColumns(_type);
  133. var sort = LookupFactory.DefineSort(_type);
  134. var filter = Filter.Create(_type);
  135. filter.Expression = CoreUtils.GetMemberExpression(_type, "ID");
  136. filter.Operator = Operator.IsEqualTo;
  137. filter.Value = value;
  138. var lookup = client.Query(filter, columns, sort);
  139. var display = new List<object?>();
  140. if (lookup.Rows.Any())
  141. foreach (var col in lookup.Columns.Where(x => !x.ColumnName.Equals("ID")))
  142. display.Add(lookup.Rows.First()[col.ColumnName]);
  143. Editor.Text = string.Join(" / ", display.Where(x => x != null && !string.IsNullOrWhiteSpace(x.ToString())));
  144. }
  145. public override void Configure()
  146. {
  147. base.Configure();
  148. _type = (EditorDefinition as PopupEditor)?.Type;
  149. }
  150. public override void SetFocus()
  151. {
  152. Editor.Focus();
  153. }
  154. public override void SetColor(Color color)
  155. {
  156. Editor.Background = new SolidColorBrush(color);
  157. }
  158. }
  159. }