JsonEditorControl.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Media;
  9. using InABox.Core;
  10. namespace InABox.DynamicGrid;
  11. internal class DynamicJsonGrid<T> : DynamicGrid<T> where T : BaseObject, new()
  12. {
  13. private int rowindex = -1;
  14. public override void DeleteItems(params CoreRow[] rows)
  15. {
  16. var indexes = rows.Select(x => x.Index).OrderBy(x => x).ToArray();
  17. foreach (var index in indexes)
  18. Data.Rows.RemoveAt(index);
  19. }
  20. public override T LoadItem(CoreRow row)
  21. {
  22. rowindex = row.Index;
  23. return row.ToObject<T>();
  24. }
  25. protected override void Reload(
  26. Filters<T> criteria, Columns<T> columns, ref SortOrder<T>? sort,
  27. CancellationToken token, Action<CoreTable?, Exception?> action)
  28. {
  29. }
  30. public override void SaveItem(T item)
  31. {
  32. CoreRow row;
  33. if (rowindex == -1)
  34. {
  35. row = Data.NewRow();
  36. Data.Rows.Add(row);
  37. }
  38. else
  39. {
  40. row = Data.Rows[rowindex];
  41. }
  42. Data.FillRow(row, item);
  43. }
  44. }
  45. internal class JsonEditorControl : DynamicEditorControl<string, JsonEditor>
  46. {
  47. static JsonEditorControl()
  48. {
  49. //DynamicEditorControlFactory.Register<JsonEditorControl, JsonEditor>();
  50. }
  51. private Button _button;
  52. private string _value = "";
  53. public JsonEditorControl()
  54. {
  55. Width = 150;
  56. }
  57. public override int DesiredHeight()
  58. {
  59. return 25;
  60. }
  61. public override int DesiredWidth()
  62. {
  63. return 150;
  64. }
  65. public override void SetColor(Color color)
  66. {
  67. _button.Background = new SolidColorBrush(color);
  68. }
  69. public override void SetFocus()
  70. {
  71. // Not Sure what to do here?
  72. }
  73. public override void Configure()
  74. {
  75. }
  76. protected override FrameworkElement CreateEditor()
  77. {
  78. _button = new Button();
  79. _button.Content = "Edit";
  80. _button.Click += _button_Click;
  81. return _button;
  82. }
  83. private void _button_Click(object sender, RoutedEventArgs e)
  84. {
  85. var type = (EditorDefinition as JsonEditor).Type;
  86. var listtype = typeof(List<>).MakeGenericType(type);
  87. var list = Activator.CreateInstance(listtype) as IList;
  88. if (!string.IsNullOrWhiteSpace(_value))
  89. Serialization.DeserializeInto(_value, list);
  90. var array = new object[list.Count];
  91. list.CopyTo(array, 0);
  92. var data = new CoreTable();
  93. data.LoadColumns(type);
  94. data.LoadRows(array);
  95. /*var gridtype = typeof(DynamicJsonGrid<>).MakeGenericType(type);
  96. var grid = Activator.CreateInstance(gridtype) as IDynamicGrid;
  97. grid.Data = data;
  98. if (grid.DirectEdit(data))
  99. {
  100. var saved = data.Rows.Select(x => x.ToObject(type)).ToArray();
  101. _value = Serialization.Serialize(saved, true);
  102. CheckChanged();
  103. }*/
  104. }
  105. protected override string RetrieveValue()
  106. {
  107. return _value;
  108. }
  109. protected override void UpdateValue(string value)
  110. {
  111. _value = "";
  112. }
  113. }