LINTriggerSetControl.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using Uestc.Auto6.Dso.Core;
  11. using Uni_Trend.MSO7000X.Language;
  12. using Uni_Trend.MSO7000X.Common.Helper;
  13. using Uni_Trend.MSO7000X.UserControls;
  14. using Uestc.Auto6.Dso.ComModel;
  15. using Uestc.Auto6.Dso.Core.Decode;
  16. using System.Reflection;
  17. namespace Uestc.Auto6.Dso.Protocol.LIN
  18. {
  19. [System.ComponentModel.ToolboxItem(false)]
  20. public partial class LINTriggerSetControl : UserControl, ITriggerSerialView
  21. {
  22. #region 属性定义
  23. protected new Boolean DesignMode
  24. {
  25. get
  26. {
  27. Boolean rtnflag = false;
  28. #if DEBUG
  29. rtnflag = DesignTimeHelper.InDesignMode(this);
  30. #endif
  31. return rtnflag;
  32. }
  33. }
  34. public LINTrigSerialPrsnt Presenter
  35. {
  36. get => (LINTrigSerialPrsnt)(ParentForm as ITriggerView).Presenter;
  37. set => (ParentForm as ITriggerView).Presenter = value;
  38. }
  39. ITriggerPrsnt IView<ITriggerPrsnt>.Presenter
  40. {
  41. get => Presenter;
  42. set => Presenter = (LINTrigSerialPrsnt)value;
  43. }
  44. #endregion 属性定义
  45. public LINTriggerSetControl()
  46. {
  47. InitializeComponent();
  48. }
  49. protected override void OnLoad(EventArgs e)
  50. {
  51. base.OnLoad(e);
  52. InitView();
  53. Init();
  54. UpdateView();
  55. }
  56. private void InitView()
  57. {
  58. Uni_Trend.MSO7000X.UserControls.Style.DefaultStyleManager.Instance.RegisterControlRecursion(this, Uni_Trend.MSO7000X.UserControls.Style.StyleFlag.FontSize);
  59. }
  60. private void Init()
  61. {
  62. InitData();
  63. InitDataRelation();
  64. InitID();
  65. }
  66. private void InitDataRelation()
  67. {
  68. CbxDataRelation.DataSource = Enum.GetValues<ProtocolLIN.DataRelation>().GetEnumList();
  69. CbxDataRelation.DisplayMember = "Key";
  70. CbxDataRelation.ValueMember = "Value";
  71. CbxDataRelation.SelectedValueChanged += (_, _) =>
  72. {
  73. Presenter.DataRelation = (ProtocolLIN.DataRelation)CbxDataRelation.SelectedValue;
  74. };
  75. }
  76. private void InitID()
  77. {
  78. BtnID.Click += (_, _) =>
  79. {
  80. SetID();
  81. };
  82. }
  83. private void InitData()
  84. {
  85. BtnData.Click += (_, _) =>
  86. {
  87. SetData();
  88. };
  89. }
  90. private void SetData()
  91. {
  92. Boolean lastflag = true;
  93. if (this.FindForm() is FloatForm form)
  94. {
  95. lastflag = form.CanClose;
  96. form.CanClose = false;
  97. }
  98. FloatForm floatForm = new FloatForm();
  99. floatForm = new Uni_Trend.MSO7000X.UserControls.FloatForm();
  100. floatForm.BackColor = BackColor;
  101. floatForm.ForeColor = ForeColor;
  102. floatForm.Width = 380;
  103. floatForm.Height = 460 + floatForm.HeadHeight;
  104. floatForm.Title = "设置Data";
  105. Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard numberKeyboard = new Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard();
  106. numberKeyboard.Controls.Cast<Control>().ToList().ForEach(x => Uni_Trend.MSO7000X.UserControls.Style.DefaultStyleManager.Instance.RegisterControl(x));
  107. numberKeyboard.Top = floatForm.HeadHeight;
  108. numberKeyboard.Height = floatForm.Height - floatForm.HeadHeight;
  109. numberKeyboard.Width = floatForm.Width;
  110. numberKeyboard.ForeColor = ForeColor;
  111. numberKeyboard.BackColor = BackColor;
  112. numberKeyboard.Value = Presenter.Data;
  113. numberKeyboard.MinValue = Presenter.MinData;
  114. numberKeyboard.ValueType = HexNumberKeyboard.HexValueType.Hex;
  115. numberKeyboard.MaxValue = Presenter.MaxData;
  116. numberKeyboard.OkClick += (sender, args) =>
  117. {
  118. Presenter.ID = (Byte)args.Data;
  119. floatForm?.Close();
  120. };
  121. numberKeyboard.CancelClick += (sender, args) => floatForm?.Close();
  122. floatForm.Controls.Add(numberKeyboard);
  123. floatForm.FormClosing += (_, _) =>
  124. {
  125. if (this.FindForm() is FloatForm form)
  126. form.CanClose = lastflag;
  127. };
  128. floatForm.ShowDialogByPosition();
  129. }
  130. private void SetID()
  131. {
  132. Boolean lastflag = true;
  133. if (this.FindForm() is FloatForm form)
  134. {
  135. lastflag = form.CanClose;
  136. form.CanClose = false;
  137. }
  138. FloatForm floatForm = new FloatForm();
  139. floatForm = new Uni_Trend.MSO7000X.UserControls.FloatForm();
  140. floatForm.BackColor = BackColor;
  141. floatForm.ForeColor = ForeColor;
  142. floatForm.Width = 380;
  143. floatForm.Height = 460 + floatForm.HeadHeight;
  144. floatForm.Title = "设置ID";
  145. Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard numberKeyboard = new Uni_Trend.MSO7000X.UserControls.HexNumberKeyboard();
  146. numberKeyboard.Controls.Cast<Control>().ToList().ForEach(x => Uni_Trend.MSO7000X.UserControls.Style.DefaultStyleManager.Instance.RegisterControl(x));
  147. numberKeyboard.Top = floatForm.HeadHeight;
  148. numberKeyboard.Height = floatForm.Height - floatForm.HeadHeight;
  149. numberKeyboard.Width = floatForm.Width;
  150. numberKeyboard.ForeColor = ForeColor;
  151. numberKeyboard.BackColor = BackColor;
  152. numberKeyboard.Value = Presenter.ID;
  153. numberKeyboard.MinValue = Presenter.MinID;
  154. numberKeyboard.ValueType = HexNumberKeyboard.HexValueType.Hex;
  155. numberKeyboard.MaxValue = Presenter.MaxID;
  156. numberKeyboard.OkClick += (sender, args) =>
  157. {
  158. Presenter.ID = (Byte)args.Data;
  159. floatForm?.Close();
  160. };
  161. numberKeyboard.CancelClick += (sender, args) => floatForm?.Close();
  162. floatForm.Controls.Add(numberKeyboard);
  163. floatForm.FormClosing += (_, _) =>
  164. {
  165. if (this.FindForm() is FloatForm form)
  166. form.CanClose = lastflag;
  167. };
  168. floatForm.ShowDialogByPosition();
  169. }
  170. public void UpdateView(Object presenter, String propertyName)
  171. {
  172. if(String.IsNullOrEmpty(propertyName))
  173. {
  174. UpdateView();
  175. return;
  176. }
  177. this.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Where(x =>
  178. {
  179. var attr = x.GetCustomAttribute<UpdatePropertyAttribute>();
  180. return attr != null && attr.PropertyName == propertyName;
  181. }).FirstOrDefault()?.Invoke(this, null);
  182. }
  183. private void UpdateView()
  184. {
  185. this.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).Where(x => x.GetCustomAttribute<UpdatePropertyAttribute>() != null).ToList().ForEach(x => x?.Invoke(this, null));
  186. this.Refresh();
  187. }
  188. [UpdateProperty(nameof(LINTrigSerialPrsnt.Condition))]
  189. private void UpdateCondition()
  190. {
  191. switch(Presenter.Condition)
  192. {
  193. case ProtocolLIN.Condition.Data:
  194. LblDataRelation.Visible = true;
  195. CbxDataRelation.Visible = true;
  196. LblData.Visible = true;
  197. BtnData.Visible = true;
  198. LblID.Visible = false;
  199. BtnID.Visible = false;
  200. SetColnum(0, 2, LblDataRelation, CbxDataRelation);
  201. SetColnum(1, 2, LblData, BtnData);
  202. Visible = true;
  203. break;
  204. case ProtocolLIN.Condition.ID:
  205. LblDataRelation.Visible = true;
  206. CbxDataRelation.Visible = true;
  207. LblData.Visible = false;
  208. BtnData.Visible = false;
  209. LblID.Visible = true;
  210. BtnID.Visible = true;
  211. SetColnum(0, 2, LblDataRelation, CbxDataRelation);
  212. SetColnum(1, 2, LblID, BtnID);
  213. Visible = true;
  214. break;
  215. default:
  216. LblDataRelation.Visible = false;
  217. CbxDataRelation.Visible = false;
  218. LblData.Visible = false;
  219. BtnData.Visible = false;
  220. LblID.Visible = false;
  221. BtnID.Visible = false;
  222. Visible = false;
  223. break;
  224. }
  225. }
  226. private void SetColnum(Int32 colnum,Int32 maxColnumCount,params Control[] controls)
  227. {
  228. Array.ForEach(controls, x => x.Left = this.Width / maxColnumCount * colnum+14);
  229. }
  230. [UpdateProperty(nameof(LINTrigSerialPrsnt.DataRelation))]
  231. private void UpdateDataRelation()
  232. {
  233. CbxDataRelation.SelectedValue = Presenter.DataRelation;
  234. }
  235. [UpdateProperty(nameof(LINTrigSerialPrsnt.Data))]
  236. private void UpdateData()
  237. {
  238. BtnData.Text = $"0x{Presenter.Data:X2}";
  239. }
  240. [UpdateProperty(nameof(LINTrigSerialPrsnt.ID))]
  241. private void UpdateID()
  242. {
  243. BtnID.Text = $"0x{Presenter.ID:X2}";
  244. }
  245. }
  246. }