DataLookupEditor.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using InABox.Clients;
  5. namespace InABox.Core
  6. {
  7. public abstract class DataLookupEditor : BaseEditor, ILookupEditor
  8. {
  9. public DataLookupEditor(Type type, params string[] othercolumns)
  10. {
  11. Type = type;
  12. Visible = Visible.Hidden;
  13. LookupWidth = int.MaxValue;
  14. var name = type.Name;
  15. OtherColumns = new Dictionary<string, string>();
  16. foreach (var othercolumn in othercolumns)
  17. {
  18. var map = othercolumn.Split('=');
  19. if (map.Length == 2)
  20. OtherColumns[map.First()] = map.Last();
  21. else if (map.Length == 1)
  22. OtherColumns[map.First()] = map.First();
  23. }
  24. }
  25. public Dictionary<string, string> OtherColumns { get; }
  26. public Type Type { get; }
  27. public int LookupWidth { get; set; }
  28. public EditorButton[]? Buttons { get; set; }
  29. public virtual CoreTable Values(Type parent, string columnname, BaseObject[]? items)
  30. {
  31. var client = ClientFactory.CreateClient(Type);
  32. var filter = LookupFactory.DefineLookupFilter(parent, Type, columnname, items ?? (Array.CreateInstance(parent, 0) as BaseObject[])!);
  33. var columns = LookupFactory.DefineLookupColumns(parent, Type, columnname);
  34. foreach (var key in OtherColumns.Keys)
  35. columns.Add(key);
  36. var sort = LookupFactory.DefineSort(Type);
  37. var result = client.Query(filter, columns, sort);
  38. result.Columns.Add(new CoreColumn { ColumnName = "Display", DataType = typeof(string) });
  39. foreach (var row in result.Rows)
  40. {
  41. var values = row.ToDictionary(new[] { "Display" });
  42. row["Display"] = LookupFactory.FormatLookup(Type, values, Array.Empty<string>());
  43. }
  44. return result;
  45. }
  46. public void Clear()
  47. {
  48. }
  49. protected BaseEditor CloneDataLookupEditor()
  50. {
  51. var result = (Activator.CreateInstance(GetType(), Type) as DataLookupEditor)!;
  52. foreach (var key in OtherColumns.Keys)
  53. result.OtherColumns[key] = OtherColumns[key];
  54. result.LookupWidth = LookupWidth;
  55. return result;
  56. }
  57. }
  58. }