MeetingTreeView.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4. using System.Windows;
  5. using System.Windows.Controls;
  6. using System.Windows.Forms;
  7. using Comal.Classes;
  8. using InABox.Clients;
  9. using InABox.Core;
  10. using InABox.DynamicGrid;
  11. using InABox.Wpf;
  12. using InABox.WPF;
  13. namespace PRSDesktop;
  14. public class MeetingItemTree : DynamicDataGrid<MeetingItem>
  15. {
  16. protected override IDynamicGridUIComponent<MeetingItem> CreateUIComponent()
  17. {
  18. var component = new DynamicGridTreeUIComponent<MeetingItem>(
  19. x => x.ID,
  20. x => x.Parent.ID)
  21. {
  22. Parent = this,
  23. ShowHeader = false,
  24. MaxRowHeight = 30,
  25. ShowNumbers = true
  26. };
  27. component.OnContextMenuOpening += MeetingItemTree_OnContextMenuOpening;
  28. return component;
  29. }
  30. protected override DynamicGridColumns LoadColumns()
  31. {
  32. var columns = new DynamicGridColumns();
  33. columns.Add<MeetingItem, string>(x => x.Title, 0, "Title", "", Alignment.MiddleLeft);
  34. return columns;
  35. }
  36. public MeetingModel? Model { get; set; }
  37. private void MeetingItemTree_OnContextMenuOpening(CoreTreeNode? node, ContextMenu menu)
  38. {
  39. if(node is not null && node.ID != CoreUtils.FullGuid && Options.Contains(DynamicGridOption.AddRows))
  40. {
  41. menu.AddItem("Add Child Item", null, node, (n) =>
  42. {
  43. var item = CreateItem();
  44. item.Parent.ID = n.ID;
  45. if (EditItems(new[] { item }))
  46. {
  47. DoChanged();
  48. Refresh(false, true);
  49. }
  50. });
  51. }
  52. }
  53. protected override void Reload(Filters<MeetingItem> criteria, Columns<MeetingItem> columns, ref SortOrder<MeetingItem>? sort, Action<CoreTable?, Exception?> action)
  54. {
  55. if(Model != null)
  56. {
  57. criteria.Add(new Filter<MeetingItem>(x => x.Meeting.ID).IsEqualTo(Model.ID));
  58. }
  59. base.Reload(criteria, columns, ref sort, action);
  60. }
  61. protected override bool CanCreateItems()
  62. {
  63. if (Model is null)
  64. {
  65. MessageWindow.ShowMessage("Please select a meeting first!", "No meeting selected");
  66. return false;
  67. }
  68. else
  69. {
  70. return base.CanCreateItems();
  71. }
  72. }
  73. public override MeetingItem CreateItem()
  74. {
  75. var item = base.CreateItem();
  76. item.Meeting.ID = Model.ID;
  77. item.Title = "New Agenda Item";
  78. return item;
  79. }
  80. }