JsonEditorControl.cs 3.7 KB

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