DsoResultStrip.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  1. using EventBus;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Drawing;
  5. using System.Linq;
  6. using System.Windows.Forms;
  7. using Uestc.Auto6.Dso.ComModel;
  8. using Uestc.Auto6.Dso.Core;
  9. using Uestc.Auto6.Dso.Core.Tools;
  10. using Uni_Trend.MSO7000X.Common.Structs;
  11. using Uni_Trend.MSO7000X.UserControls;
  12. namespace Uestc.Auto6.Dso.U2
  13. {
  14. public partial class DsoResultStrip : UserControl, IMeasView, ICymometerView, IVoltmeterView
  15. {
  16. private readonly List<UestcListPage> _MeasureInfo = new();
  17. private Boolean _FirstSetParentflag = true;
  18. private readonly Size _CymometerNormalSize;
  19. private readonly Size _VoltmeterNormalSize;
  20. private readonly Size _MeasureNormalSize;
  21. private readonly Int32 _MinWidth;
  22. public DsoResultStrip()
  23. {
  24. InitializeComponent();
  25. InitItemControl();
  26. _CymometerNormalSize = LpCymometerItem.Size;
  27. _VoltmeterNormalSize = LpVoltmeterItem.Size;
  28. _MeasureNormalSize = LpMeasureItem1.Size;
  29. _MinWidth = _MeasureNormalSize.Width * _MeasureInfo.Count + _CymometerNormalSize.Width + _VoltmeterNormalSize.Width;
  30. }
  31. protected new Boolean DesignMode
  32. {
  33. get
  34. {
  35. Boolean rtnflag = false;
  36. #if DEBUG
  37. rtnflag = DesignTimeHelper.InDesignMode(this);
  38. #endif
  39. return rtnflag;
  40. }
  41. }
  42. protected override CreateParams CreateParams
  43. {
  44. get
  45. {
  46. CreateParams cp = base.CreateParams;
  47. cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
  48. return cp;
  49. }
  50. }
  51. private void InitItemControl()
  52. {
  53. _MeasureInfo.Add(LpMeasureItem1);
  54. _MeasureInfo.Add(LpMeasureItem2);
  55. _MeasureInfo.Add(LpMeasureItem3);
  56. _MeasureInfo.Add(LpMeasureItem4);
  57. _MeasureInfo.Add(LpMeasureItem5);
  58. _MeasureInfo.Add(LpMeasureItem6);
  59. _MeasureInfo.Add(LpMeasureItem7);
  60. _MeasureInfo.Add(LpMeasureItem8);
  61. _MeasureInfo.Add(LpMeasureItem9);
  62. _MeasureInfo.Add(LpMeasureItem10);
  63. for (Int32 i = 0; i < _MeasureInfo.Count; i++)
  64. {
  65. var measitem = _MeasureInfo[i];
  66. measitem.DashArray = null;
  67. //measitem.BackColor = Color.FromArgb(32, 32, 32);
  68. measitem.ValueForeColor = Color.FromArgb(192, 192, 192);
  69. measitem.AutoHide = false;
  70. //measitem.BorderThickness = 1;
  71. measitem.DisplayMember = "Key";
  72. measitem.ValueMember = "Value";
  73. measitem.DropBackOpacity = 85;
  74. measitem.Header = $"P{i + 1}";
  75. measitem.HeaderFont = AppStyleConfig.DefaultBoldFont;
  76. measitem.HeaderFont = AppStyleConfig.DefaultBoldFont;
  77. measitem.BackColor = AppStyleConfig.DefaultContextDarkBackColor;
  78. measitem.BorderColor = AppStyleConfig.DefaultContextDarkBackColor;
  79. measitem.HeaderBackColor = AppStyleConfig.DefaultContextBackColor;
  80. measitem.DisplayForeColor = AppStyleConfig.DefaultContextForeColor;
  81. measitem.HeaderForeColor = AppStyleConfig.DefaultContextForeColor;
  82. measitem.ValueForeColor = AppStyleConfig.DefaultTitleForeColor;
  83. measitem.MouseClick += LpMeasureItem_MouseClick;
  84. measitem.MouseDown += LpItemDragSource_MouseDown;
  85. measitem.MouseUp += LpItemDragSource_MouseUp;
  86. measitem.MouseMove += LpItemDragSource_MouseMove;
  87. measitem.GiveFeedback += LpItemDragSource_GiveFeedback;
  88. measitem.QueryContinueDrag += LpItemDragSource_QueryContinueDrag;
  89. }
  90. LpCymometerItem.HeaderFont = AppStyleConfig.DefaultBoldFont;
  91. LpCymometerItem.BackColor = AppStyleConfig.DefaultContextDarkBackColor;
  92. LpCymometerItem.BorderColor = AppStyleConfig.DefaultContextDarkBackColor;
  93. LpCymometerItem.HeaderBackColor = AppStyleConfig.DefaultContextBackColor;
  94. LpCymometerItem.DisplayForeColor = AppStyleConfig.DefaultContextForeColor;
  95. LpCymometerItem.HeaderForeColor = AppStyleConfig.DefaultContextForeColor;
  96. LpCymometerItem.ValueForeColor = AppStyleConfig.DefaultTitleForeColor;
  97. LpCymometerItem.MouseDown += LpItemDragSource_MouseDown;
  98. LpCymometerItem.MouseUp += LpItemDragSource_MouseUp;
  99. LpCymometerItem.MouseMove += LpItemDragSource_MouseMove;
  100. LpCymometerItem.GiveFeedback += LpItemDragSource_GiveFeedback;
  101. LpVoltmeterItem.HeaderFont = AppStyleConfig.DefaultBoldFont;
  102. LpVoltmeterItem.BackColor = AppStyleConfig.DefaultContextDarkBackColor;
  103. LpVoltmeterItem.BorderColor = AppStyleConfig.DefaultContextDarkBackColor;
  104. LpVoltmeterItem.HeaderBackColor = AppStyleConfig.DefaultContextBackColor;
  105. LpVoltmeterItem.DisplayForeColor = AppStyleConfig.DefaultContextForeColor;
  106. LpVoltmeterItem.HeaderForeColor = AppStyleConfig.DefaultContextForeColor;
  107. LpVoltmeterItem.ValueForeColor = AppStyleConfig.DefaultTitleForeColor;
  108. LpVoltmeterItem.MouseDown += LpItemDragSource_MouseDown;
  109. LpVoltmeterItem.MouseUp += LpItemDragSource_MouseUp;
  110. LpVoltmeterItem.MouseMove += LpItemDragSource_MouseMove;
  111. LpVoltmeterItem.GiveFeedback += LpItemDragSource_GiveFeedback;
  112. }
  113. public MeasPrsnt MeasPresenter
  114. {
  115. get;
  116. set;
  117. }
  118. IMeasPrsnt IView<IMeasPrsnt>.Presenter
  119. {
  120. get => MeasPresenter;
  121. set => MeasPresenter = (MeasPrsnt)value;
  122. }
  123. public CymometerPrsnt CymometerPresenter
  124. {
  125. get;
  126. set;
  127. }
  128. ICymometerPrsnt IView<ICymometerPrsnt>.Presenter
  129. {
  130. get => CymometerPresenter;
  131. set => CymometerPresenter = (CymometerPrsnt)value;
  132. }
  133. public VoltmeterPrsnt VoltmeterPresenter
  134. {
  135. get;
  136. set;
  137. }
  138. IBadge IView<IBadge>.Presenter
  139. {
  140. get => VoltmeterPresenter;
  141. set => VoltmeterPresenter = (VoltmeterPrsnt)value;
  142. }
  143. public void UpdateView(Object prsnt, String propertyName)
  144. {
  145. if (InvokeRequired)
  146. {
  147. BeginInvoke(new Action<Object, String>(Update), new[] { prsnt, propertyName });
  148. }
  149. else
  150. {
  151. Update(prsnt, propertyName);
  152. }
  153. }
  154. protected void Update(Object prsnt, String propertyName)
  155. {
  156. //switch (propertyName)
  157. //{
  158. // case nameof(MeasPresenter.Active):
  159. // case nameof(MeasPresenter.IsStatActive):
  160. // UpdateView();
  161. // break;
  162. //}
  163. if (propertyName.Contains("Active"))
  164. {
  165. UpdateView();
  166. SetParent();
  167. }
  168. }
  169. protected void UpdateView()
  170. {
  171. if (!DesignMode)
  172. {
  173. BtnAddMeasure.Visible = !MeasPresenter.IsAllActive() && MeasPresenter.Active;
  174. Boolean flag = false;
  175. for (Int32 i = 0; i < MeasPresenter.Length; i++)
  176. {
  177. if (MeasPresenter.Active && MeasPresenter[i].Active)
  178. {
  179. _MeasureInfo[i].MeasItemName = MeasureApp.Default.Candidates[MeasPresenter[i].Name].Text;
  180. _MeasureInfo[i].HeaderInfo = MeasPresenter[i].Source.ToString();
  181. _MeasureInfo[i].HeaderInfoForeColor = MeasPresenter[i].DrawColor;
  182. //_MeasureInfo[i].DisplayForeColor = MeasPresenter[i].SourceColor;
  183. //_MeasureInfo[i].HeaderBackColor = MeasPresenter[i].SourceColor;
  184. //_MeasureInfo[i].BorderColor = MeasPresenter[i].SourceColor;
  185. _MeasureInfo[i].ShowIndicator = MeasPresenter.Indicator == i + 1;
  186. //_MeasureInfo[i].ValueForeColor = Presenter[i].SourceColor;
  187. //_MeasureInfo[i].HeaderForeColor = Color.Black;
  188. #region Value
  189. var (pfx, unit) = MeasPresenter.GetPfxUnitString(i);
  190. var value = MeasPresenter.GetResult(i) ?? Double.NaN;
  191. var max = MeasPresenter.GetStatMax(i) ?? Double.NaN;
  192. var min = MeasPresenter.GetStatMin(i) ?? Double.NaN;
  193. var ave = MeasPresenter.GetStatAverage(i) ?? Double.NaN;
  194. var stddev = MeasPresenter.GetStatStddev(i) ?? Double.NaN;
  195. var pop = (Double)MeasPresenter.GetStatCount(i);
  196. List<KeyValuePair<String, String>> subitems = new();
  197. if (Width <= _MinWidth)
  198. {
  199. subitems.Add(new("v", $"{new Quantity(value, pfx, unit)}"));
  200. subitems.Add(new("M", $"{new Quantity(max, pfx, unit)}"));
  201. subitems.Add(new("m", $"{new Quantity(min, pfx, unit)}"));
  202. subitems.Add(new("μ", $"{new Quantity(ave, pfx, unit)}"));
  203. subitems.Add(new("σ", $"{new Quantity(stddev, pfx, unit)}"));
  204. subitems.Add(new("#", $"{new Quantity(pop, Prefix.Empty, QuantityUnit.Count.ToUnitString())}"));
  205. }
  206. else
  207. {
  208. subitems.Add(new(Properties.Resources.Statistic_VAL, $"{new Quantity(value, pfx, unit)}"));
  209. subitems.Add(new(Properties.Resources.Statistic_MAX, $"{new Quantity(max, pfx, unit)}"));
  210. subitems.Add(new(Properties.Resources.Statistic_MIN, $"{new Quantity(min, pfx, unit)}"));
  211. subitems.Add(new(Properties.Resources.Statistic_AVG, $"{new Quantity(ave, pfx, unit)}"));
  212. subitems.Add(new(Properties.Resources.Statistic_DEV, $"{new Quantity(stddev, pfx, unit)}"));
  213. subitems.Add(new(Properties.Resources.Statistic_POP, $"{new Quantity(pop, Prefix.Empty, QuantityUnit.Count.ToUnitString())}"));
  214. }
  215. _MeasureInfo[i].DataSource = subitems;
  216. #endregion
  217. _MeasureInfo[i].DroppedDown = MeasPresenter.IsStatActive;
  218. _MeasureInfo[i].Visible = true;
  219. flag = true;
  220. }
  221. else
  222. {
  223. _MeasureInfo[i].Visible = false;
  224. }
  225. //if (MeasPresenter.Active && MeasPresenter.IsAnyActive())
  226. //{
  227. // if (!BtnAddMeasure.Visible)
  228. // {
  229. // BtnAddMeasure.Visible = true;
  230. // }
  231. //}
  232. //else
  233. //{
  234. // if (BtnAddMeasure.Visible)
  235. // {
  236. // BtnAddMeasure.Visible = false;
  237. // }
  238. //}
  239. }
  240. if (CymometerPresenter.Active)
  241. {
  242. List<String> frequencystring = FrequencyToString();
  243. //LpCymometerItem.BackColor = Color.FromArgb(32, 32, 32);
  244. LpCymometerItem.HeaderInfo = CymometerPresenter.Source.ToString();
  245. LpCymometerItem.HeaderFont = AppStyleConfig.DefaultBoldFont;
  246. LpCymometerItem.MeasItemName = frequencystring?.Count > 0 ? frequencystring[0] : "";
  247. LpCymometerItem.DataSource = new List<KeyValuePair<String, String>>() { new(" ", frequencystring?.Count > 1 ? frequencystring[1] : "Hz") };
  248. LpCymometerItem.HeaderInfoForeColor = CymometerPresenter.DrawColor;
  249. LpCymometerItem.Visible = true;
  250. flag = true;
  251. }
  252. else
  253. {
  254. LpCymometerItem.Visible = false;
  255. }
  256. if (VoltmeterPresenter.Active)
  257. {
  258. //LpVoltmeterItem.BackColor = Color.FromArgb(32, 32, 32);
  259. LpVoltmeterItem.HeaderInfo = VoltmeterPresenter.Source.ToString();
  260. LpVoltmeterItem.HeaderFont = AppStyleConfig.DefaultBoldFont;
  261. LpVoltmeterItem.MeasItemName = VoltageToString();
  262. LpVoltmeterItem.DataSource = new List<KeyValuePair<String, String>>() { new(" ", CouplingToString()) };
  263. LpVoltmeterItem.HeaderInfoForeColor = CymometerPresenter.DrawColor;
  264. LpVoltmeterItem.Visible = true;
  265. flag = true;
  266. }
  267. else
  268. {
  269. LpVoltmeterItem.Visible = false;
  270. }
  271. //Visible = flag;
  272. TmUpdate.Enabled = flag;
  273. }
  274. }
  275. public override void Refresh()
  276. {
  277. base.Refresh();
  278. UpdateView();
  279. }
  280. protected override void OnLoad(EventArgs e)
  281. {
  282. base.OnLoad(e);
  283. Uni_Trend.MSO7000X.UserControls.Style.DefaultStyleManager.Instance.RegisterControlRecursion(this);
  284. //Disable UpdateView because MeasureApp is not initialized.
  285. //UpdateView();
  286. if (!DesignMode)
  287. {
  288. SizeChanged += DsoResultStrip_SizeChanged;
  289. }
  290. }
  291. private void DsoResultStrip_SizeChanged(Object sender, EventArgs args)
  292. {
  293. if (Width <= _MinWidth)
  294. {
  295. LpCymometerItem.Size = LpCymometerItem.MinimumSize;
  296. LpCymometerItem.ShowHeader = false;
  297. LpCymometerItem.BorderThickness = 0;
  298. LpVoltmeterItem.Size = LpVoltmeterItem.MinimumSize;
  299. LpVoltmeterItem.ShowHeader = false;
  300. LpVoltmeterItem.BorderThickness = 0;
  301. for (Int32 i = 0; i < _MeasureInfo.Count; i++)
  302. {
  303. _MeasureInfo[i].Size = _MeasureInfo[i].MinimumSize;
  304. _MeasureInfo[i].ShowHeader = false;
  305. _MeasureInfo[i].BorderThickness = 0;
  306. _MeasureInfo[i].Font = _MeasureInfo[i].DropedMeasNameItemFont = _MeasureInfo[i].DropedValueFont = new("Arial", 8);
  307. _MeasureInfo[i].Percentage = 0.2f;
  308. }
  309. }
  310. else
  311. {
  312. LpCymometerItem.Size = _CymometerNormalSize;
  313. LpCymometerItem.ShowHeader = true;
  314. LpCymometerItem.BorderThickness = 1;
  315. LpVoltmeterItem.Size = _VoltmeterNormalSize;
  316. LpVoltmeterItem.ShowHeader = true;
  317. LpVoltmeterItem.BorderThickness = 1;
  318. for (Int32 i = 0; i < _MeasureInfo.Count; i++)
  319. {
  320. _MeasureInfo[i].Size = _MeasureNormalSize;
  321. _MeasureInfo[i].ShowHeader = true;
  322. _MeasureInfo[i].BorderThickness = 1;
  323. _MeasureInfo[i].Font = _MeasureInfo[i].DropedMeasNameItemFont = _MeasureInfo[i].DropedValueFont = new("Arial", 10.5F);
  324. _MeasureInfo[i].Percentage = 0.45f;
  325. }
  326. }
  327. }
  328. private void TmUpdate_Tick(Object sender, EventArgs e)
  329. {
  330. UpdateView();
  331. if (_FirstSetParentflag)
  332. {
  333. SetParent();
  334. _FirstSetParentflag = false;
  335. }
  336. }
  337. private void SetParent()
  338. {
  339. for (int i = 0; i < _MeasureInfo.Count; i++)
  340. {
  341. if (MeasPresenter[i].Active && _MeasureInfo[i].DroppedDown)
  342. {
  343. if (_MeasureInfo[i].DroppedDown)
  344. {
  345. _MeasureInfo[i].SetParent();
  346. }
  347. }
  348. }
  349. }
  350. private void LpMeasureItem_MouseClick(Object sender, MouseEventArgs e)
  351. {
  352. if (e.Button == MouseButtons.Right)
  353. {
  354. return;
  355. }
  356. if (sender is UestcListPage measitempage)
  357. {
  358. Int32 pos = Int32.Parse(measitempage.Header[1..]) - 1;
  359. var point = new Point(0, 0);
  360. if (measitempage.DroppedDown)
  361. {
  362. point = new Point(measitempage.Location.X + measitempage.Width / 2, (ParentForm as DsoForm).ActiveControl.Location.Y - measitempage.DropDownPageHeight + (ParentForm as DsoForm).ActiveControl.Height);
  363. }
  364. else
  365. {
  366. point = new Point(measitempage.Location.X + measitempage.Width / 2, (ParentForm as DsoForm).ActiveControl.Location.Y);
  367. }
  368. point = (ParentForm as DsoForm).PointToScreen(point);
  369. (ParentForm as DsoForm)?.MakeOperateForm("MeasItemCfgForm", point, PopOrientation.Above, () =>
  370. {
  371. var mif = new MeasItemCfgForm(pos)
  372. {
  373. Presenter = MeasPresenter,
  374. Anchor = AnchorStyles.Bottom,
  375. };
  376. mif.Text = mif.Text + " " + measitempage.Header;
  377. mif.Presenter.TryAddView(mif);
  378. return mif;
  379. });
  380. }
  381. }
  382. private void LpCymometerItem_MouseClick(Object sender, MouseEventArgs e)
  383. {
  384. if (e.Button == MouseButtons.Right)
  385. {
  386. return;
  387. }
  388. (ParentForm as DsoForm)?.MakeOperateForm("Cymometer", GetPreferredLocation(sender as Control), PopOrientation.Above, () =>
  389. {
  390. var cf = new Cymometer.CymometerForm()
  391. {
  392. Presenter = CymometerPresenter,
  393. Anchor = AnchorStyles.Bottom,
  394. };
  395. cf.Presenter.TryAddView(cf);
  396. return cf;
  397. });
  398. }
  399. private void LpVoltmeterItem_MouseClick(Object sender, MouseEventArgs e)
  400. {
  401. if (e.Button == MouseButtons.Right)
  402. {
  403. return;
  404. }
  405. (ParentForm as DsoForm)?.MakeOperateForm("Voltmeter", GetPreferredLocation(sender as Control), PopOrientation.Above, () =>
  406. {
  407. var cf = new DVM.VoltmeterForm()
  408. {
  409. Presenter = VoltmeterPresenter,
  410. Anchor = AnchorStyles.Bottom,
  411. };
  412. cf.Presenter.TryAddView(cf);
  413. return cf;
  414. });
  415. }
  416. //private Point GetPreferredLocation(Int32 index)
  417. //{
  418. // if (index < 0)
  419. // {
  420. // index = TlpBody.ColumnCount + index;
  421. // }
  422. // if (index < TlpBody.ColumnCount)
  423. // {
  424. // var c = TlpBody.GetControlFromPosition(index + 1, 0);
  425. // if (c is not null)
  426. // {
  427. // return new(c.Left + c.Width / 2, Top);
  428. // }
  429. // }
  430. // return new(Left, Top);
  431. //}
  432. private Point GetPreferredLocation(Control c)
  433. {
  434. if (c is not null)
  435. {
  436. return new(c.Left + c.Width / 2, Top);
  437. }
  438. return new(Left, Top);
  439. }
  440. private List<String> FrequencyToString()
  441. {
  442. return new Quantity(CymometerPresenter.GetFrequency(), Prefix.Empty, QuantityUnit.Hertz).ToString("##0.0000000", true, 9, true);
  443. }
  444. private String CouplingToString()
  445. {
  446. return VoltmeterPresenter.Mode switch
  447. {
  448. VoltmeterMode.DC => "DC",
  449. VoltmeterMode.ACrms => "ACrms",
  450. VoltmeterMode.DCACrms => "DC+AC",
  451. _ => "",
  452. };
  453. }
  454. private String VoltageToString()
  455. {
  456. return new Quantity(VoltmeterPresenter.GetVoltBymV(), Prefix.Milli, VoltmeterPresenter.Unit).ToString("##0.000", true, 6);
  457. }
  458. #region ToolTip
  459. //public void SetToolTip(ToolTip toolTip)
  460. //{
  461. // toolTip.SetToolTip(SiCymometer, Properties.ToolTips.AboutCymometer);
  462. // toolTip.SetToolTip(SiVoltmeter, Properties.ToolTips.AboutVoltmeter);
  463. // foreach (var mi in _MeasureInfo)
  464. // {
  465. // toolTip.SetToolTip(mi, Properties.ToolTips.AboutMeasurement + " " + mi.Text);
  466. // }
  467. //}
  468. #endregion
  469. #region DragDrop
  470. //!!!Sample code for DragDrop, here the DsoResultStrip's AllowDrop must be true.
  471. private UestcListPage _DeletedItem;
  472. private Rectangle _DragBox;
  473. private void LpItemDragSource_MouseDown(Object sender, MouseEventArgs e)
  474. {
  475. if (e.Button == MouseButtons.Left)
  476. {
  477. if (sender is UestcListPage)
  478. {
  479. // Remember the point where the mouse down occurred. The DragSize indicates
  480. // the size that the mouse can move before a drag event should be started.
  481. Size ds = SystemInformation.DragSize;
  482. // Create a rectangle using the DragSize, with the mouse position being
  483. // at the center of the rectangle.
  484. _DragBox = new Rectangle(new Point(e.X - (ds.Width / 2), e.Y - (ds.Height / 2)), ds);
  485. }
  486. }
  487. }
  488. private void LpItemDragSource_MouseUp(Object sender, MouseEventArgs e)
  489. {
  490. if (e.Button == MouseButtons.Left)
  491. {
  492. _DragBox = Rectangle.Empty;
  493. }
  494. }
  495. private void LpItemDragSource_MouseMove(Object sender, MouseEventArgs e)
  496. {
  497. if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
  498. {
  499. // If the mouse moves outside the rectangle, start the drag.
  500. if (_DragBox != Rectangle.Empty && !_DragBox.Contains(e.X, e.Y))
  501. {
  502. // Proceed with the drag-and-drop, passing in the list item.
  503. _DeletedItem = sender as UestcListPage;
  504. if (_DeletedItem is not null)
  505. {
  506. DoDragDrop(_DeletedItem, DragDropEffects.Move);
  507. }
  508. }
  509. }
  510. }
  511. private void LpItemDragSource_GiveFeedback(Object sender, GiveFeedbackEventArgs e)
  512. {
  513. // Sets the custom cursor based upon the effect.
  514. e.UseDefaultCursors = false;
  515. if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move)
  516. {
  517. Cursor.Current = Cursors.Hand;
  518. }
  519. else
  520. {
  521. Cursor.Current = Cursors.Default;
  522. }
  523. }
  524. private void LpItemDragSource_QueryContinueDrag(Object sender, QueryContinueDragEventArgs e)
  525. {
  526. // Cancel the drag if the mouse moves off the form.
  527. if (_DeletedItem is not null)
  528. {
  529. if (e.EscapePressed)
  530. {
  531. e.Action = DragAction.Cancel;
  532. _DeletedItem = null;
  533. }
  534. }
  535. }
  536. //private void DsoResultStrip_DragLeave(object sender, EventArgs e)
  537. //{
  538. // if (_DeletedItem is not null)
  539. // {
  540. // if (_DeletedItem.Name.Contains("LpMeasure"))
  541. // {
  542. // Int32 idx = Int32.Parse(_DeletedItem.Header[1..]) - 1;
  543. // MeasPresenter[idx].Active = false;
  544. // }
  545. // else if (_DeletedItem.Name.Contains("LpCymometer"))
  546. // {
  547. // CymometerPresenter.Active = false;
  548. // }
  549. // else if (_DeletedItem.Name.Contains("LpVoltmeter"))
  550. // {
  551. // VoltmeterPresenter.Active = false;
  552. // }
  553. // _DeletedItem = null;
  554. // }
  555. //}
  556. #endregion
  557. //!!!Change focus to DsoResultStrip
  558. private void TlpBody_MouseDown(Object sender, MouseEventArgs e)
  559. {
  560. if (ActiveControl is null)
  561. {
  562. SelectNextControl(ActiveControl, true, true, true, true);
  563. }
  564. }
  565. private void BtnAddMeasure_Click(Object sender, EventArgs e)
  566. {
  567. var appenditem = MeasPresenter.SelectedItems.First(o => !o.Active);
  568. MeasSelectionForm msf = new(appenditem.Name, DsoPrsnt.FocusId, (n, s) =>
  569. {
  570. if (MeasPresenter.IsAllActive())
  571. {
  572. WeakTip.Default.Write("Measure", MsgTipId.NoMoreMeasuerLabel);
  573. return false;
  574. }
  575. var ai = MeasPresenter.SelectedItems.First(o => !o.Active);
  576. ai.Name = n;
  577. ai.Source = s;
  578. ai.Active = true;
  579. return true;
  580. })
  581. {
  582. StartPosition = FormStartPosition.CenterScreen,
  583. };
  584. msf.ShowDialogByEvent();
  585. //if (msf.DialogResult == DialogResult.Yes)
  586. //{
  587. // appenditem.Name = msf.SelectedItemName;
  588. // appenditem.Source = msf.Source;
  589. // appenditem.Active = true;
  590. //}
  591. }
  592. }
  593. }