MasterDetailPanelPage.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using InABox.Core;
  5. using InABox.DynamicGrid;
  6. namespace InABox.Wpf;
  7. public interface IMasterDetailPanelPage
  8. {
  9. IBasePanel? Panel { get; }
  10. }
  11. public abstract class MasterDetailPanelPage<TMaster,TPanel> : MasterDetailPage<TMaster>, IMasterDetailPanelPage
  12. where TPanel : class, IBasePanel, IMasterDetailControl<TMaster>, new()
  13. {
  14. protected MasterDetailPanelPage(DynamicTabItem tab) : base(tab) { }
  15. public TPanel? Panel { get; set; }
  16. IBasePanel? IMasterDetailPanelPage.Panel => Panel;
  17. public override Dictionary<string, object[]>? Selected() => Panel?.Selected();
  18. protected abstract void DoRefresh(TPanel? panel);
  19. public override IDataModelSource? DataModelSource() => CheckPanel();
  20. protected override IDataModelSource? Refresh()
  21. {
  22. CheckPanel();
  23. DoRefresh(Panel);
  24. return Panel;
  25. }
  26. public override void CreateToolbarButtons(IPanelHost host)
  27. {
  28. CheckPanel().CreateToolbarButtons(host);
  29. }
  30. public override void Heartbeat(TimeSpan time)
  31. {
  32. Panel?.Heartbeat(time);
  33. }
  34. public override void Shutdown(CancelEventArgs? cancel)
  35. {
  36. Panel?.Shutdown(cancel);
  37. }
  38. private TPanel CheckPanel()
  39. {
  40. if (Panel == null)
  41. {
  42. Panel = PanelUtils.LoadPanel<TPanel>();
  43. Panel.OnUpdateDataModel += UpdateDataModel;
  44. Tab.Content = Panel;
  45. }
  46. Panel.Master = Master;
  47. return Panel;
  48. }
  49. }