BaseEditor.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. using System.Linq;
  3. namespace InABox.Core
  4. {
  5. public interface IBaseEditor
  6. {
  7. Visible Visible { get; set; }
  8. Editable Editable { get; set; }
  9. string ToolTip { get; set; }
  10. Alignment Alignment { get; set; }
  11. int Width { get; set; }
  12. string Format { get; set; }
  13. int ColumnSequence { get; set; }
  14. int EditorSequence { get; set; }
  15. string Caption { get; set; }
  16. string? Page { get; set; }
  17. Summary Summary { get; set; }
  18. SecurityAttribute[] Security { get; set; }
  19. BaseEditor CloneEditor();
  20. public object Clone();
  21. }
  22. public abstract class BaseEditor : Attribute, IEnclosedEntity, ICloneable, IBaseEditor
  23. {
  24. private BaseObject _linkedParent;
  25. private string _linkedPath;
  26. public void SetLinkedParent(BaseObject parent)
  27. {
  28. _linkedParent = parent;
  29. }
  30. public void SetLinkedPath(string path)
  31. {
  32. _linkedPath = path;
  33. }
  34. public BaseObject GetLinkedParent() => _linkedParent;
  35. public string GetLinkedPath() => _linkedPath;
  36. protected BaseEditor()
  37. {
  38. Editable = Editable.Enabled;
  39. Visible = Visible.Optional;
  40. Alignment = Alignment.MiddleLeft;
  41. Width = 0;
  42. Format = "";
  43. ColumnSequence = 0;
  44. EditorSequence = 0;
  45. Caption = "";
  46. Summary = Summary.None;
  47. ToolTip = "";
  48. Security = Array.Empty<SecurityAttribute>();
  49. }
  50. [EnumLookupEditor(typeof(Visible))]
  51. public Visible Visible { get; set; }
  52. [EnumLookupEditor(typeof(Editable))]
  53. public Editable Editable { get; set; }
  54. [NullEditor]
  55. public string ToolTip { get; set; }
  56. [NullEditor]
  57. public Alignment Alignment { get; set; }
  58. [NullEditor]
  59. public int Width { get; set; }
  60. [NullEditor]
  61. public string Format { get; set; }
  62. [NullEditor]
  63. public int ColumnSequence { get; set; }
  64. [NullEditor]
  65. public int EditorSequence { get; set; }
  66. [NullEditor]
  67. public string Caption { get; set; }
  68. [NullEditor]
  69. public string? Page { get; set; }
  70. [NullEditor]
  71. public Summary Summary { get; set; }
  72. [NullEditor]
  73. public SecurityAttribute[] Security { get; set; }
  74. public BaseEditor CloneEditor()
  75. {
  76. var result = DoClone();
  77. result.Visible = Visible;
  78. result.Editable = Editable;
  79. result.Alignment = Alignment;
  80. result.Width = Width;
  81. result.Format = Format;
  82. result.ColumnSequence = ColumnSequence;
  83. result.EditorSequence = EditorSequence;
  84. result.Caption = Caption;
  85. result.Page = Page;
  86. result.Summary = Summary;
  87. result.ToolTip = ToolTip;
  88. result.Security = Security.Select(x => x.Clone()).ToArray();
  89. return result;
  90. }
  91. public object Clone() => CloneEditor();
  92. protected abstract BaseEditor DoClone();
  93. }
  94. }