MutiValueToVisibility.cs 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. namespace HistoryView.Converters;
  2. public class MutiValueToVisibility : IMultiValueConverter
  3. {
  4. public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  5. {
  6. if (values is null || values.Length < 6)
  7. return Visibility.Collapsed;
  8. if (parameter is not string status)
  9. return Visibility.Collapsed;
  10. if (values[0] is not float caps)
  11. return Visibility.Collapsed;
  12. if (values[1] is not float floor)
  13. return Visibility.Collapsed;
  14. if (values[2] is not float current)
  15. return Visibility.Collapsed;
  16. if (values[3] is not Inhibit mode)
  17. return Visibility.Collapsed;
  18. if (values[4] is not ChannelMode channelMode)
  19. return Visibility.Collapsed;
  20. if (values[5] is not bool IsEnable || !IsEnable)
  21. return Visibility.Collapsed;
  22. if (values[6] is not bool IsConnected || !IsConnected)
  23. return Visibility.Collapsed;
  24. if (mode != Inhibit.Enable)
  25. return Visibility.Collapsed;
  26. if (channelMode == ChannelMode.Monitor)
  27. return Visibility.Collapsed;
  28. switch (channelMode)
  29. {
  30. case ChannelMode.Control:
  31. break;
  32. case ChannelMode.Monitor:
  33. case ChannelMode.UnUsed:
  34. default:
  35. return Visibility.Collapsed;
  36. }
  37. switch (status)
  38. {
  39. case "Over":
  40. if (current > caps)
  41. return Visibility.Visible;
  42. break;
  43. case "Normal":
  44. if (current <= caps && current >= floor)
  45. return Visibility.Visible;
  46. break;
  47. case "Under":
  48. if (current < floor)
  49. return Visibility.Visible;
  50. break;
  51. default:
  52. break;
  53. }
  54. return Visibility.Collapsed;
  55. }
  56. public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
  57. {
  58. throw new NotImplementedException();
  59. }
  60. }
  61. public class StatusToVisibility : IValueConverter
  62. {
  63. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  64. {
  65. if (value is not Inhibit mode)
  66. return Visibility.Visible;
  67. return mode switch
  68. {
  69. Inhibit.Enable => Visibility.Visible,
  70. Inhibit.Disable => Visibility.Visible,
  71. _ => Visibility.Hidden
  72. };
  73. }
  74. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  75. {
  76. throw new NotImplementedException();
  77. }
  78. }
  79. public class TcBrockenToVisibility : IMultiValueConverter
  80. {
  81. public object? Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  82. {
  83. if (values.Length < 2)
  84. return Visibility.Collapsed;
  85. if (values[0] is not ChannelMode mode)
  86. return Visibility.Collapsed;
  87. if (values[1] is not TcBorken tcBorken)
  88. return Visibility.Collapsed;
  89. switch (mode)
  90. {
  91. case ChannelMode.Control:
  92. case ChannelMode.Monitor:
  93. break;
  94. case ChannelMode.UnUsed:
  95. default:
  96. return Visibility.Collapsed;
  97. }
  98. return tcBorken switch
  99. {
  100. TcBorken.Error => Visibility.Visible,
  101. TcBorken.Normal => Visibility.Collapsed,
  102. _ => Visibility.Collapsed
  103. };
  104. }
  105. public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
  106. {
  107. throw new NotImplementedException();
  108. }
  109. }
  110. public class AutoTuntToVisibility : IMultiValueConverter
  111. {
  112. public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  113. {
  114. if (values.Length < 3)
  115. return Visibility.Collapsed;
  116. if (values[0] is not Inhibit inhibit)
  117. return Visibility.Collapsed;
  118. if (inhibit == Inhibit.Disable)
  119. return Visibility.Collapsed;
  120. if (values[1] is not AutoTuneStatus autoTune)
  121. return Visibility.Collapsed;
  122. if (values[2] is not ActiveTuneSet active)
  123. return Visibility.Collapsed;
  124. if (active == ActiveTuneSet.Running)
  125. return Visibility.Collapsed;
  126. return autoTune switch
  127. {
  128. AutoTuneStatus.Triggered => Visibility.Visible,
  129. AutoTuneStatus.Tuning => Visibility.Visible,
  130. AutoTuneStatus.Complete => Visibility.Visible,
  131. AutoTuneStatus.Timeout => Visibility.Visible,
  132. AutoTuneStatus.Overflow => Visibility.Visible,
  133. _ => (object)Visibility.Collapsed,
  134. };
  135. }
  136. public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
  137. {
  138. throw new NotImplementedException();
  139. }
  140. }
  141. public class ChannelModeToVisbility : IValueConverter
  142. {
  143. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  144. {
  145. if (value is not ChannelMode channelMode)
  146. return Visibility.Collapsed;
  147. return channelMode switch
  148. {
  149. ChannelMode.Control => Visibility.Collapsed,
  150. ChannelMode.Monitor => Visibility.Visible,
  151. ChannelMode.UnUsed => Visibility.Visible,
  152. _ => Visibility.Collapsed
  153. };
  154. }
  155. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  156. {
  157. throw new NotImplementedException();
  158. }
  159. }
  160. public class ChannelModeToChannelDisplay : IValueConverter
  161. {
  162. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  163. {
  164. if (value is not ChannelMode channelMode)
  165. return Visibility.Visible;
  166. return channelMode switch
  167. {
  168. ChannelMode.Control => Visibility.Visible,
  169. ChannelMode.Monitor => Visibility.Visible,
  170. ChannelMode.UnUsed => Visibility.Hidden,
  171. _ => Visibility.Visible
  172. };
  173. }
  174. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  175. {
  176. throw new NotImplementedException();
  177. }
  178. }
  179. public class StatusToBrush : IMultiValueConverter
  180. {
  181. public object? Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
  182. {
  183. if (values is null || values.Length < 4)
  184. return default;
  185. if (parameter is not string light)
  186. light = "Bright";
  187. if (values[0] is not Inhibit mode)
  188. return default;
  189. if (values[1] is not Mini8Status mini8Status)
  190. return default;
  191. if (values[2] is not ChannelSuatus status)
  192. return default;
  193. if (values[3] is not bool isConnected)
  194. return default;
  195. if (!isConnected)
  196. {
  197. return light switch
  198. {
  199. "Bright" => App.Current.Resources["DisableColor"],
  200. "Light" => App.Current.Resources["LightDisableColor"],
  201. _ => default,
  202. };
  203. }
  204. if (values.Length >= 5)
  205. {
  206. if (values[4] is not AutoTuneStatus autoTuneStatus)
  207. return default;
  208. switch (autoTuneStatus)
  209. {
  210. case AutoTuneStatus.Ready:
  211. case AutoTuneStatus.Triggered:
  212. case AutoTuneStatus.Tuning:
  213. case AutoTuneStatus.Complete:
  214. case AutoTuneStatus.Aborted:
  215. default:
  216. break;
  217. case AutoTuneStatus.Unavailable:
  218. case AutoTuneStatus.Timeout:
  219. case AutoTuneStatus.Overflow:
  220. return App.Current.Resources["EmergencyColor"];
  221. }
  222. }
  223. switch (mini8Status)
  224. {
  225. case Mini8Status.Normal:
  226. case Mini8Status.Error:
  227. case Mini8Status.Warning:
  228. break;
  229. case Mini8Status.LostConnection:
  230. case Mini8Status.Unknow:
  231. case Mini8Status.Disabled:
  232. default:
  233. return light switch
  234. {
  235. "Bright" => App.Current.Resources["DisableColor"],
  236. "Light" => App.Current.Resources["LightDisableColor"],
  237. _ => default,
  238. };
  239. }
  240. switch (mode)
  241. {
  242. case Inhibit.Enable:
  243. if (status == ChannelSuatus.Error)
  244. {
  245. return light switch
  246. {
  247. "Bright" => App.Current.Resources["EmergencyColor"],
  248. "Light" => App.Current.Resources["LightEmergencyColor"],
  249. _ => default,
  250. };
  251. }
  252. if (status == ChannelSuatus.Warning)
  253. {
  254. return light switch
  255. {
  256. "Bright" => App.Current.Resources["WarningColor"],
  257. "Light" => App.Current.Resources["LightWarningColor"],
  258. _ => default,
  259. };
  260. }
  261. return light switch
  262. {
  263. "Bright" => App.Current.Resources["NormalColor"],
  264. "Light" => App.Current.Resources["LightNormalColor"],
  265. _ => default,
  266. };
  267. case Inhibit.Disable:
  268. return light switch
  269. {
  270. "Bright" => App.Current.Resources["DisableColor"],
  271. "Light" => App.Current.Resources["LightDisableColor"],
  272. _ => default,
  273. };
  274. default:
  275. return default;
  276. }
  277. }
  278. public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
  279. {
  280. throw new NotImplementedException();
  281. }
  282. }