DynamicGridCommon.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Windows.Controls;
  5. using InABox.Core;
  6. namespace InABox.DynamicGrid;
  7. public abstract class DynamicColumnBase : BaseObject, IDynamicColumnBase
  8. {
  9. public void DoEntityChanged(string columnname, Dictionary<string,object?> changes)
  10. {
  11. EntityChanged?.Invoke(this, new DynamicColumnEntityChangedEventArgs(columnname, changes));
  12. }
  13. public event DynamicColumnEntityChangedEvent? EntityChanged;
  14. public object? Tag { get; set;
  15. }
  16. }
  17. public enum DynamicGridOption
  18. {
  19. AddRows,
  20. EditRows,
  21. DeleteRows,
  22. FilterRows,
  23. SelectColumns,
  24. ExportData,
  25. ImportData,
  26. MultiSelect,
  27. DragSource,
  28. DragTarget,
  29. DirectEdit,
  30. ShowHelp,
  31. Print,
  32. RecordCount,
  33. HideDatabaseFilters,
  34. HideDirectEditButton
  35. }
  36. public class DynamicGridOptions
  37. {
  38. public event Action? OnChanged;
  39. private int _enabled = 0;
  40. private bool _changed = false;
  41. public bool Enabled
  42. {
  43. get => _enabled == 0;
  44. set
  45. {
  46. if (value)
  47. EndUpdate();
  48. else
  49. BeginUpdate();
  50. }
  51. }
  52. public DynamicGridOptions Clear()
  53. {
  54. BeginUpdate();
  55. AddRows = false;
  56. EditRows = false;
  57. DeleteRows = false;
  58. FilterRows = false;
  59. SelectColumns = false;
  60. ExportData = false;
  61. ImportData = false;
  62. MultiSelect = false;
  63. DragSource = false;
  64. DragTarget = false;
  65. DirectEdit = false;
  66. ShowHelp = false;
  67. Print = false;
  68. RecordCount = false;
  69. HideDatabaseFilters = false;
  70. HideDirectEditButton = false;
  71. PageSize = 0;
  72. return EndUpdate();
  73. }
  74. public DynamicGridOptions BeginUpdate()
  75. {
  76. ++_enabled;
  77. return this;
  78. }
  79. private DynamicGridOptions Changed()
  80. {
  81. if (_enabled == 0)
  82. {
  83. _changed = false;
  84. OnChanged?.Invoke();
  85. }
  86. else
  87. {
  88. _changed = true;
  89. }
  90. return this;
  91. }
  92. public DynamicGridOptions EndUpdate()
  93. {
  94. --_enabled;
  95. if(_changed)
  96. {
  97. Changed();
  98. }
  99. return this;
  100. }
  101. private bool _addRows;
  102. public bool AddRows
  103. {
  104. get => _addRows;
  105. set
  106. {
  107. if(_addRows != value)
  108. {
  109. _addRows = value;
  110. Changed();
  111. }
  112. }
  113. }
  114. private bool _editRows;
  115. public bool EditRows
  116. {
  117. get => _editRows;
  118. set
  119. {
  120. if(_editRows != value)
  121. {
  122. _editRows = value;
  123. Changed();
  124. }
  125. }
  126. }
  127. private bool _deleteRows;
  128. public bool DeleteRows
  129. {
  130. get => _deleteRows;
  131. set
  132. {
  133. if(_deleteRows != value)
  134. {
  135. _deleteRows = value;
  136. Changed();
  137. }
  138. }
  139. }
  140. private bool _filterRows;
  141. public bool FilterRows
  142. {
  143. get => _filterRows;
  144. set
  145. {
  146. if(_filterRows != value)
  147. {
  148. _filterRows = value;
  149. Changed();
  150. }
  151. }
  152. }
  153. private bool _selectColumns;
  154. public bool SelectColumns
  155. {
  156. get => _selectColumns;
  157. set
  158. {
  159. if(_selectColumns != value)
  160. {
  161. _selectColumns = value;
  162. Changed();
  163. }
  164. }
  165. }
  166. private bool _exportData;
  167. public bool ExportData
  168. {
  169. get => _exportData;
  170. set
  171. {
  172. if(_exportData != value)
  173. {
  174. _exportData = value;
  175. Changed();
  176. }
  177. }
  178. }
  179. private bool _importData;
  180. public bool ImportData
  181. {
  182. get => _importData;
  183. set
  184. {
  185. if(_importData != value)
  186. {
  187. _importData = value;
  188. Changed();
  189. }
  190. }
  191. }
  192. private bool _multiSelect;
  193. public bool MultiSelect
  194. {
  195. get => _multiSelect;
  196. set
  197. {
  198. if(_multiSelect != value)
  199. {
  200. _multiSelect = value;
  201. Changed();
  202. }
  203. }
  204. }
  205. private bool _dragSource;
  206. public bool DragSource
  207. {
  208. get => _dragSource;
  209. set
  210. {
  211. if(_dragSource != value)
  212. {
  213. _dragSource = value;
  214. Changed();
  215. }
  216. }
  217. }
  218. private bool _dragTarget;
  219. public bool DragTarget
  220. {
  221. get => _dragTarget;
  222. set
  223. {
  224. if(_dragTarget != value)
  225. {
  226. _dragTarget = value;
  227. Changed();
  228. }
  229. }
  230. }
  231. private bool _directEdit;
  232. public bool DirectEdit
  233. {
  234. get => _directEdit;
  235. set
  236. {
  237. if(_directEdit != value)
  238. {
  239. _directEdit = value;
  240. Changed();
  241. }
  242. }
  243. }
  244. private bool _showHelp;
  245. public bool ShowHelp
  246. {
  247. get => _showHelp;
  248. set
  249. {
  250. if(_showHelp != value)
  251. {
  252. _showHelp = value;
  253. Changed();
  254. }
  255. }
  256. }
  257. private bool _print;
  258. public bool Print
  259. {
  260. get => _print;
  261. set
  262. {
  263. if(_print != value)
  264. {
  265. _print = value;
  266. Changed();
  267. }
  268. }
  269. }
  270. private bool _recordCount;
  271. public bool RecordCount
  272. {
  273. get => _recordCount;
  274. set
  275. {
  276. if(_recordCount != value)
  277. {
  278. _recordCount = value;
  279. Changed();
  280. }
  281. }
  282. }
  283. private bool _hideDatabaseFilters;
  284. public bool HideDatabaseFilters
  285. {
  286. get => _hideDatabaseFilters;
  287. set
  288. {
  289. if(_hideDatabaseFilters != value)
  290. {
  291. _hideDatabaseFilters = value;
  292. Changed();
  293. }
  294. }
  295. }
  296. private bool _hideDirectEditButton;
  297. public bool HideDirectEditButton
  298. {
  299. get => _hideDirectEditButton;
  300. set
  301. {
  302. if(_hideDirectEditButton != value)
  303. {
  304. _hideDirectEditButton = value;
  305. Changed();
  306. }
  307. }
  308. }
  309. private int _pageSize = 0;
  310. /// <summary>
  311. /// The page size for loading data in pages; set to 0 for no paging functionality.
  312. /// </summary>
  313. public int PageSize
  314. {
  315. get => _pageSize;
  316. set
  317. {
  318. if(_pageSize != value)
  319. {
  320. _pageSize = value;
  321. Changed();
  322. }
  323. }
  324. }
  325. }
  326. public delegate bool OnFilterRecord(CoreRow row);
  327. public delegate void OnCreateItem(object sender, BaseObject item);
  328. public delegate bool OnAfterCreateItem(object sender, BaseObject item);
  329. public delegate T OnCreateItem<T>();
  330. public delegate void OnDefineLookup(ILookupEditorControl editor);
  331. public delegate void OnGridCustomiseEditor(DynamicEditorGrid sender, DynamicGridColumn column, BaseEditor editor);
  332. public delegate void OnFormCustomiseEditor(IDynamicEditorForm sender, object[] items, DynamicGridColumn column, BaseEditor editor);
  333. public delegate void ValidateEvent<T>(DynamicGrid<T> sender, T[] items, List<string> errors)
  334. where T : BaseObject, new();
  335. /// <summary>
  336. ///
  337. /// </summary>
  338. /// <typeparam name="T"></typeparam>
  339. /// <param name="sender"></param>
  340. /// <param name="items">The array of items being edited; <see langword="null"/> is synonymous with an empty array.</param>
  341. /// <param name="column"></param>
  342. /// <param name="editor"></param>
  343. public delegate void OnCustomiseEditor<T>(IDynamicEditorForm sender, T[]? items, DynamicGridColumn column, BaseEditor editor);
  344. public delegate void OnLoadEditorButtons<T>(T item, DynamicEditorButtons buttons);
  345. public delegate void OnReconfigureEditors(DynamicEditorGrid sender);
  346. public class AfterEditorValueChangedArgs
  347. {
  348. public string ColumnName { get; set; }
  349. public Dictionary<string, object?> ChangedValues { get; set; }
  350. public AfterEditorValueChangedArgs(string columnName, Dictionary<string, object?> changedValues)
  351. {
  352. ColumnName = columnName;
  353. ChangedValues = changedValues;
  354. }
  355. }
  356. public delegate Dictionary<string, object?>? OnAfterEditorValueChanged(DynamicEditorGrid sender, AfterEditorValueChangedArgs args);
  357. //public delegate void OnGridChanged(IDynamicGrid sender);
  358. public delegate void OnLoadPage(IDynamicEditorPage page);
  359. public delegate void OnSelectPage(DynamicEditorGrid sender, BaseObject[]? items);
  360. public delegate void OnUnloadPage(IDynamicEditorPage page, bool saved);
  361. public delegate void OnCustomiseColumns(object sender, DynamicGridColumns columns);
  362. public delegate BaseEditor? OnGetEditor(DynamicGridColumn column);
  363. public delegate decimal OnGetEditorSequence(DynamicGridColumn column);
  364. public delegate IFilter? OnDefineLookupFilter(Type type, string column);
  365. public delegate IFilter? OnDefineFilter(Type type);
  366. public delegate IList<string>? OnValidateData(IDynamicEditorForm sender, BaseObject[] items);
  367. public delegate void OnPrintData(object sender);
  368. public delegate void EntitySaveEvent(IDynamicEditorForm editor, BaseObject[] items);
  369. public delegate bool DynamicGridButtonClickEvent(Button button, CoreRow[] rows);
  370. public delegate void OnContextMenuOpening(CoreTreeNode? node, ContextMenu menu);
  371. public class DynamicGridSelectionEventArgs : CancelEventArgs
  372. {
  373. public DynamicGridSelectionEventArgs(CoreRow[]? rows)
  374. {
  375. Rows = rows;
  376. }
  377. public CoreRow[]? Rows { get; }
  378. }
  379. public delegate void SelectItemHandler(object sender, DynamicGridSelectionEventArgs e);
  380. public delegate void OnDoubleClick(object sender, HandledEventArgs args);
  381. public class DynamicGridCellClickEventArgs : HandledEventArgs
  382. {
  383. public CoreRow? Row { get; set; }
  384. public DynamicColumnBase? Column { get; set; }
  385. public DynamicGridCellClickEventArgs(CoreRow? row, DynamicColumnBase? column)
  386. {
  387. Row = row;
  388. Column = column;
  389. }
  390. }
  391. public delegate void OnCellDoubleClick(object sender, DynamicGridCellClickEventArgs args);
  392. public class BeforeRefreshEventArgs : CancelEventArgs { }
  393. public delegate void BeforeRefreshEventHandler(object sender, BeforeRefreshEventArgs args);
  394. public class AfterRefreshEventArgs : EventArgs { }
  395. public delegate void AfterRefreshEventHandler(object sender, AfterRefreshEventArgs args);