SignalPreviewViewModel.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using Avalonia.Collections;
  2. using CommunityToolkit.Mvvm.Input;
  3. using IViewModel.ViewModels;
  4. using Shaker.Model;
  5. using Shaker.Models;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Diagnostics;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Input;
  13. namespace Dynamicloadsimulationdevice.ViewModels
  14. {
  15. internal sealed class SignalPreviewViewModel:DisplayViewModelBase, IDataPreview
  16. {
  17. public override bool AppendSeparator => true;
  18. public override string IconKey => nameof(IconResourceValueViewModel.SignalViewGeometry);
  19. public override string MenuKey => nameof(LanguageValueViewModel.SignalPreview);
  20. public override string MenuParentKey => nameof(LanguageValueViewModel.MenuDevice);
  21. public AvaloniaList<AnalogSignalPreviewViewModel> SignalPreviews { get; } = new AvaloniaList<AnalogSignalPreviewViewModel>();
  22. private bool upSignalData;
  23. private int rowCount = 2;
  24. private int columnCount = 2;
  25. private bool showLayout = false;
  26. private SignalPreviewViewModel()
  27. {
  28. Title = nameof(LanguageValueViewModel.SignalPreview);
  29. this.ButtonVisibily = false;
  30. Content = typeof(Views.SignalPreviewView);
  31. Enum.GetValues<ResultChannelType>()
  32. .Where(x => x != ResultChannelType.None)
  33. .ToList()
  34. .ForEach(x =>
  35. {
  36. SignalPreviews.Add(new AnalogSignalPreviewViewModel(x));
  37. });
  38. timer.AutoReset = false;
  39. timer.Elapsed += (_, _) =>
  40. {
  41. ShowLayout = true;
  42. };
  43. timer.Enabled = false;
  44. timer.Stop();
  45. }
  46. static SignalPreviewViewModel()
  47. {
  48. }
  49. public ICommand OneCommnad => new RelayCommand(One);
  50. private void One()
  51. {
  52. RowCount = 1;
  53. ColumnCount = 1;
  54. ShowLayout = false;
  55. }
  56. public ICommand OneTwoCommand=>new RelayCommand(OneTwo);
  57. private void OneTwo()
  58. {
  59. RowCount = 1;
  60. ColumnCount = 2;
  61. ShowLayout = false;
  62. }
  63. public ICommand TwoOneCommand=>new RelayCommand(TwoOne);
  64. private void TwoOne()
  65. {
  66. RowCount = 2;
  67. ColumnCount = 1;
  68. ShowLayout = false;
  69. }
  70. public ICommand TwoTwoCommand=>new RelayCommand(TwoTwo);
  71. private void TwoTwo()
  72. {
  73. RowCount = 2;
  74. ColumnCount = 2;
  75. ShowLayout = false;
  76. }
  77. public bool ShowLayout { get => showLayout; set =>SetProperty(ref showLayout , value); }
  78. private System.Timers.Timer timer = new System.Timers.Timer(1000);
  79. private bool buttonPointerOver;
  80. private bool panelPointerOver;
  81. public ICommand PointerExitedCommand=>new RelayCommand(PointerExited);
  82. private void PointerExited()
  83. {
  84. ButtonPointerOver = false;
  85. timer.Stop();
  86. }
  87. public bool ButtonPointerOver
  88. {
  89. get => buttonPointerOver;
  90. set
  91. {
  92. SetProperty(ref buttonPointerOver, value);
  93. ShowLayout = ShowLayout ? PanelPointerOver : (ButtonPointerOver || PanelPointerOver);
  94. }
  95. }
  96. public bool PanelPointerOver
  97. {
  98. get => panelPointerOver;
  99. set
  100. {
  101. SetProperty(ref panelPointerOver, value);
  102. ShowLayout = ShowLayout ? PanelPointerOver : (ButtonPointerOver || PanelPointerOver);
  103. }
  104. }
  105. public ICommand ControlPointerEnteredCommand=>new RelayCommand(ControlPointerEntered);
  106. private void ControlPointerEntered()
  107. {
  108. PanelPointerOver = true;
  109. }
  110. public ICommand ControlPointerExitedCommand => new RelayCommand(ControlPointerExited);
  111. private void ControlPointerExited()
  112. {
  113. PanelPointerOver = false;
  114. }
  115. public ICommand PointerEnteredCommand=>new RelayCommand(PointerEntered);
  116. private void PointerEntered()
  117. {
  118. ButtonPointerOver = true;
  119. ShowLayout = false;
  120. timer.Start();
  121. }
  122. public int RowCount { get => rowCount; set =>SetProperty(ref rowCount , value); }
  123. public int ColumnCount { get => columnCount; set =>SetProperty(ref columnCount , value); }
  124. public static SignalPreviewViewModel Instance { get; } = new SignalPreviewViewModel();
  125. public bool UpSignalData
  126. {
  127. get => upSignalData;
  128. set
  129. {
  130. upSignalData = value;
  131. foreach (var item in SignalPreviews)
  132. {
  133. item.UpSignalData = value;
  134. }
  135. }
  136. }
  137. }
  138. }