AWGPage.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Windows.Forms;
  6. using Uestc.Auto6.Dso.ComModel;
  7. using Uestc.Auto6.Dso.Core;
  8. using Uestc.Auto6.Dso.Core.Tools;
  9. using Uni_Trend.MSO7000X.Common.Default;
  10. using Uni_Trend.MSO7000X.Common.Helper;
  11. using Uni_Trend.MSO7000X.UserControls.Style;
  12. namespace Uestc.Auto6.Dso.U2.AWG
  13. {
  14. public partial class AWGPage : UserControl, IWfmGenView, IStylize
  15. {
  16. private Boolean _ArgToCtrl;
  17. public AWGPage()
  18. {
  19. InitializeComponent();
  20. Init();
  21. }
  22. private void Init()
  23. {
  24. NebFreqControlInit();
  25. NebAmpControlInit();
  26. Neb1LevelControlInit();
  27. Neb0LevelControlInit();
  28. NebPeriodControlInit();
  29. NebOffsetControlInit();
  30. NebDutyControlInit();
  31. NebAmpDepthControlInit();
  32. NebModFreqControlInit();
  33. NebFreqBiasControlInit();
  34. NebPhaseBiasControlInit();
  35. NebSweepStartFreqControlInit();
  36. NebSweepEndFreqControlInit();
  37. NebSweepDurationControlInit();
  38. NebNoiseControlInit();
  39. NebPhaseControlInit();
  40. }
  41. [Browsable(false)]
  42. public StyleFlag StyleFlags { get; set; } = StyleFlag.None;
  43. [Description("是否风格化"), Browsable(true), DefaultValue(typeof(Boolean)), Category(Const.Category)]
  44. public Boolean StylizeFlag { get; set; } = true;
  45. public ArbWfmGenPrsnt Presenter
  46. {
  47. get => (ArbWfmGenPrsnt)(ParentForm as IWfmGenView).Presenter;
  48. set => (ParentForm as IWfmGenView).Presenter = value;
  49. }
  50. IBadge IView<IBadge>.Presenter
  51. {
  52. get => Presenter;
  53. set => Presenter = (ArbWfmGenPrsnt)value;
  54. }
  55. public void UpdateView(Object prsnt, String propertyName)
  56. {
  57. if (String.IsNullOrEmpty(propertyName))
  58. {
  59. UpdateView();
  60. return;
  61. }
  62. _ArgToCtrl = true;
  63. switch (propertyName)
  64. {
  65. case nameof(Presenter.Mode):
  66. RdoMode.ChoosedButtonIndex = Presenter.Active ? (Int32)Presenter.Mode + 1 : 0;
  67. ChangeCtrlState();
  68. break;
  69. case nameof(Presenter.WfmType):
  70. ChangeCtrlState();
  71. CbxSignal.SelectedValue = Presenter.WfmType;
  72. NebFreq.UpdateValueString();
  73. NebPeriod.UpdateValueString();
  74. NebAmp.UpdateValueString();
  75. NebOffset.UpdateValueString();
  76. Neb0Level.UpdateValueString();
  77. Neb1Level.UpdateValueString();
  78. NebDuty.UpdateValueString();
  79. break;
  80. case nameof(Presenter.Frequency):
  81. NebFreq.UpdateValueString();
  82. NebPeriod.UpdateValueString();
  83. break;
  84. case nameof(Presenter.Amplitude):
  85. case nameof(Presenter.Offset):
  86. case nameof(Presenter.LowLevel):
  87. case nameof(Presenter.HighLevel):
  88. NebAmp.UpdateValueString();
  89. NebOffset.UpdateValueString();
  90. Neb0Level.UpdateValueString();
  91. Neb1Level.UpdateValueString();
  92. break;
  93. case nameof(Presenter.Duty):
  94. NebDuty.UpdateValueString();
  95. break;
  96. case nameof(Presenter.ModMethod):
  97. CbxModMethod.SelectedIndex = (Int32)Presenter.ModMethod;
  98. ChangeCtrlState();
  99. break;
  100. case nameof(Presenter.ModulatedWfm):
  101. CbxModulatedSignal.SelectedValue = Presenter.ModulatedWfm;
  102. ChangeCtrlState();
  103. NebModFreq.UpdateValueString();
  104. break;
  105. case nameof(Presenter.RampType):
  106. RdoModRamp.ChoosedButtonIndex = (Int32)Presenter.RampType;
  107. break;
  108. case nameof(Presenter.ModFreq):
  109. NebModFreq.UpdateValueString();
  110. break;
  111. case nameof(Presenter.AmpDepth):
  112. NebAmpDepth.UpdateValueString();
  113. break;
  114. case nameof(Presenter.FreqBias):
  115. NebFreqBias.UpdateValueString();
  116. break;
  117. case nameof(Presenter.PhaseBias):
  118. NebPhaseBias.UpdateValueString();
  119. break;
  120. case nameof(Presenter.SweepStartFreq):
  121. NebSweepStartFreq.UpdateValueString();
  122. break;
  123. case nameof(Presenter.SweepEndFreq):
  124. NebSweepEndFreq.UpdateValueString();
  125. break;
  126. case nameof(Presenter.SweepDuration):
  127. NebSweepDuration.UpdateValueString();
  128. break;
  129. case nameof(Presenter.SweepType):
  130. CbxSweepType.SelectedIndex = (Int32)Presenter.SweepType;
  131. break;
  132. case nameof(Presenter.Phase):
  133. NebPhase.UpdateValueString();
  134. break;
  135. case nameof(Presenter.Noise):
  136. NebNoise.UpdateValueString();
  137. break;
  138. case nameof(Presenter.Impedance):
  139. RdoImpedance.ChoosedButtonIndex = (Int32)Presenter.Impedance;
  140. NebAmp.UpdateValueString();
  141. NebOffset.UpdateValueString();
  142. Neb0Level.UpdateValueString();
  143. Neb1Level.UpdateValueString();
  144. break;
  145. case nameof(Presenter.Opposition):
  146. ChkOpposition.Checked = Presenter.Opposition;
  147. break;
  148. }
  149. _ArgToCtrl = false;
  150. }
  151. private void UpdateView()
  152. {
  153. if (!DesignMode)
  154. {
  155. _ArgToCtrl = true;
  156. ChangeCtrlState();
  157. RdoMode.ChoosedButtonIndex = Presenter.Active ? (Int32)Presenter.Mode + 1 : 0;
  158. CbxSignal.SelectedValue = Presenter.WfmType;
  159. NebFreq.UpdateValueString();
  160. NebPeriod.UpdateValueString();
  161. NebAmp.UpdateValueString();
  162. NebOffset.UpdateValueString();
  163. Neb0Level.UpdateValueString();
  164. Neb1Level.UpdateValueString();
  165. NebDuty.UpdateValueString();
  166. CbxModMethod.SelectedIndex = (Int32)Presenter.ModMethod;
  167. CbxModulatedSignal.SelectedValue = Presenter.ModulatedWfm;
  168. RdoModRamp.ChoosedButtonIndex = (Int32)Presenter.RampType;
  169. NebModFreq.UpdateValueString();
  170. NebFreqBias.UpdateValueString();
  171. NebAmpDepth.UpdateValueString();
  172. NebPhaseBias.UpdateValueString();
  173. CbxSweepType.SelectedIndex = (Int32)Presenter.WfmType;
  174. NebSweepStartFreq.UpdateValueString();
  175. NebSweepEndFreq.UpdateValueString();
  176. NebSweepDuration.UpdateValueString();
  177. ChkOpposition.Checked = Presenter.Opposition;
  178. RdoImpedance.ChoosedButtonIndex = (Int32)Presenter.Impedance;
  179. NebNoise.UpdateValueString();
  180. NebPhase.UpdateValueString();
  181. _ArgToCtrl = false;
  182. }
  183. }
  184. protected override void OnLoad(EventArgs e)
  185. {
  186. base.OnLoad(e);
  187. LoadModMethodList();
  188. LoadModulatedSignalList();
  189. UpdateView();
  190. }
  191. private void LoadSignalList(IEnumerable<ArbWfmType> types)
  192. {
  193. CbxSignal.DataSource = types.Select(x => new KeyValuePair<String, ArbWfmType>(EnumEx.GetDescription(x), x)).ToList();
  194. CbxSignal.DisplayMember = "Key";
  195. CbxSignal.ValueMember = "Value";
  196. CbxSignal.SelectedValueChanged += (_, _) =>
  197. {
  198. if (!_ArgToCtrl)
  199. {
  200. Presenter.WfmType = (ArbWfmType)CbxSignal.SelectedValue;
  201. }
  202. };
  203. }
  204. private void ChangeCtrlState()
  205. {
  206. BtnArbitrary.Visible = LblArbitrary.Visible = Presenter.WfmType == ArbWfmType.Arbitrary;
  207. LblDuty.Visible = NebDuty.Visible = Presenter.WfmType == ArbWfmType.Pulse || Presenter.WfmType == ArbWfmType.Ramp;
  208. BtnModArb.Visible = LblModArb.Visible = Presenter.ModulatedWfm == ArbWfmType.Arbitrary;
  209. LblModRamp.Visible = RdoModRamp.Visible = Presenter.ModulatedWfm == ArbWfmType.Ramp;
  210. LblPhase.Visible = NebPhase.Visible = Presenter.WfmType != ArbWfmType.Noise || Presenter.WfmType == ArbWfmType.DC;
  211. LblNoise.Visible = NebNoise.Visible = Presenter.WfmType != ArbWfmType.Noise;
  212. LblAmplitude.Visible = NebAmp.Visible
  213. = Lbl1Level.Visible = Neb1Level.Visible = Lbl0Level.Visible = Neb0Level.Visible = Presenter.WfmType != ArbWfmType.DC;
  214. switch (Presenter.Mode)
  215. {
  216. case WfmGenMode.Continuous:
  217. LoadSignalList(Enum.GetValues<ArbWfmType>());
  218. break;
  219. case WfmGenMode.Modulation:
  220. LoadSignalList(Presenter.CarrierSignalList);
  221. break;
  222. case WfmGenMode.Sweep:
  223. LoadSignalList(Presenter.SweepSignalList);
  224. break;
  225. }
  226. switch (Presenter.Mode)
  227. {
  228. case WfmGenMode.Modulation:
  229. PnlModOption.Visible = true;
  230. PnlSweepOption.Visible = false;
  231. TlpAwg.RowStyles[1].Height = 100;
  232. TlpAwg.RowStyles[2].Height = 0;
  233. break;
  234. case WfmGenMode.Sweep:
  235. PnlModOption.Visible = false;
  236. PnlSweepOption.Visible = true;
  237. TlpAwg.RowStyles[2].Height = 100;
  238. TlpAwg.RowStyles[1].Height = 0;
  239. break;
  240. default:
  241. PnlModOption.Visible = false;
  242. PnlSweepOption.Visible = false;
  243. break;
  244. }
  245. switch (Presenter.ModMethod)
  246. {
  247. case WfmModMethod.FSK:
  248. LblModFreq.Text = (LblModFreq.Tag as String).Split('#')[1];
  249. break;
  250. case WfmModMethod.FM:
  251. LblModFreq.Text = (LblModFreq.Tag as String).Split('#')[0];
  252. LblModParameter.Text = (LblModParameter.Tag as String).Split('#')[0];
  253. NebFreqBias.Visible = true;
  254. NebAmpDepth.Visible = false;
  255. NebPhaseBias.Visible = false;
  256. NebFreqBias.UpdateValueString();
  257. break;
  258. case WfmModMethod.AM:
  259. LblModFreq.Text = (LblModFreq.Tag as String).Split('#')[0];
  260. LblModParameter.Text = (LblModParameter.Tag as String).Split('#')[1];
  261. NebFreqBias.Visible = false;
  262. NebAmpDepth.Visible = true;
  263. NebPhaseBias.Visible = false;
  264. NebAmpDepth.UpdateValueString();
  265. break;
  266. case WfmModMethod.PM:
  267. LblModFreq.Text = (LblModFreq.Tag as String).Split('#')[0];
  268. LblModParameter.Text = (LblModParameter.Tag as String).Split('#')[2];
  269. NebFreqBias.Visible = false;
  270. NebAmpDepth.Visible = false;
  271. NebPhaseBias.Visible = true;
  272. NebPhaseBias.UpdateValueString();
  273. break;
  274. }
  275. }
  276. private void LoadModMethodList()
  277. {
  278. CbxModMethod.DataSource = Enum.GetValues<WfmModMethod>().Select(w => new KeyValuePair<String, WfmModMethod>(w.ToString(), w)).ToList();
  279. CbxModMethod.DisplayMember = "Key";
  280. CbxModMethod.ValueMember = "Value";
  281. CbxModMethod.SelectedIndexChanged += (_, _) =>
  282. {
  283. if (!_ArgToCtrl)
  284. {
  285. Presenter.ModMethod = (WfmModMethod)CbxModMethod.SelectedIndex;
  286. }
  287. };
  288. }
  289. private void LoadModulatedSignalList()
  290. {
  291. CbxModulatedSignal.DataSource = Presenter.ModulatedSignalList.Select(w => new KeyValuePair<String, ArbWfmType>(w.GetAlias(), w)).ToList();
  292. CbxModulatedSignal.DisplayMember = "Key";
  293. CbxModulatedSignal.ValueMember = "Value";
  294. CbxModulatedSignal.SelectedValueChanged += (_, _) =>
  295. {
  296. if (!_ArgToCtrl)
  297. {
  298. Presenter.ModulatedWfm = (ArbWfmType)CbxModulatedSignal.SelectedValue;
  299. }
  300. };
  301. }
  302. public void NebAmpDepthControlInit()
  303. {
  304. NebAmpDepth.AddClicked = (_, e) => Presenter.AdjAmpDepth(e.Step);
  305. NebAmpDepth.SubClicked = (_, e) => Presenter.AdjAmpDepth(e.Step);
  306. NebAmpDepth.StringFormatFunc = (_) => AmpDepthToString();
  307. NebAmpDepth.EditValueChicked = (_, _) =>
  308. {
  309. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  310. nkf.NumberKeyboard.UseSI = false;
  311. var onokclickeventaction = new Action<Double>((data) =>
  312. {
  313. Presenter.AmpDepth = (Int32)Math.Round(data);
  314. });
  315. nkf.SetKeyBoardValue(LblModParameter.Text, "%", 12, onokclickeventaction,
  316. Presenter.AmpDepth, Presenter.MaxAmpDepth, Presenter.MinAmpDepth);
  317. nkf.ShowDialogByPosition();
  318. };
  319. }
  320. public void NebPhaseBiasControlInit()
  321. {
  322. NebPhaseBias.AddClicked = (_, e) => Presenter.AdjPhaseBias(e.Step);
  323. NebPhaseBias.SubClicked = (_, e) => Presenter.AdjPhaseBias(e.Step);
  324. NebPhaseBias.StringFormatFunc = (_) => PhaseBiasToString();
  325. NebPhaseBias.EditValueChicked = (_, _) =>
  326. {
  327. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  328. nkf.NumberKeyboard.UseSI = false;
  329. var onokclickeventaction = new Action<Double>((data) =>
  330. Presenter.PhaseBias = (Int32)Math.Round(data * 100));
  331. nkf.SetKeyBoardValue(LblModParameter.Text, "°", 12, onokclickeventaction,
  332. Presenter.Phase / 100.0, Presenter.MaxPhase / 100.0, Presenter.MinPhase / 100.0);
  333. nkf.ShowDialogByPosition();
  334. };
  335. }
  336. public void NebFreqBiasControlInit()
  337. {
  338. NebFreqBias.AddClicked = (_, e) => Presenter.AdjFreqBias(e.Step);
  339. NebFreqBias.SubClicked = (_, e) => Presenter.AdjFreqBias(e.Step);
  340. NebFreqBias.StringFormatFunc = (_) => FreqBiasToString();
  341. NebFreqBias.EditValueChicked = (_, _) =>
  342. {
  343. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  344. //nkf.NumberKeyboard.UseSI = false;
  345. var onokclickeventaction = new Action<Double>((data) =>
  346. Presenter.FreqBias = (Int64)Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Micro));
  347. nkf.SetKeyBoardValue(LblModParameter.Text, "Hz", 12, onokclickeventaction,
  348. Quantity.ConvertByPrefix(Presenter.FreqBias, Prefix.Micro),
  349. Quantity.ConvertByPrefix(Presenter.MaxFreqBias, Prefix.Micro),
  350. Quantity.ConvertByPrefix(Presenter.MinFreqBias, Prefix.Micro));
  351. nkf.ShowDialogByPosition();
  352. };
  353. }
  354. public void NebModFreqControlInit()
  355. {
  356. NebModFreq.AddClicked = (_, e) => Presenter.AdjModFreq(e.Step);
  357. NebModFreq.SubClicked = (_, e) => Presenter.AdjModFreq(e.Step);
  358. NebModFreq.StringFormatFunc = (_) => ModFreqToString();
  359. NebModFreq.EditValueChicked = (_, _) =>
  360. {
  361. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  362. //nkf.NumberKeyboard.UseSI = false;
  363. var onokclickeventaction = new Action<Double>((data) =>
  364. Presenter.ModFreq = (Int64)Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Micro));
  365. nkf.SetKeyBoardValue(LblModFreq.Text, "Hz", 12, onokclickeventaction,
  366. Quantity.ConvertByPrefix(Presenter.ModFreq, Prefix.Micro),
  367. Quantity.ConvertByPrefix(Presenter.MaxModFreq, Prefix.Micro),
  368. Quantity.ConvertByPrefix(Presenter.MinModFreq, Prefix.Micro));
  369. nkf.ShowDialogByPosition();
  370. };
  371. }
  372. private void NebNoiseControlInit()
  373. {
  374. NebNoise.AddClicked = (_, e) => Presenter.AdjNoise(e.Step);
  375. NebNoise.SubClicked = (_, e) => Presenter.AdjNoise(e.Step);
  376. NebNoise.StringFormatFunc = (_) => NoiseToString();
  377. NebNoise.EditValueChicked = (_, _) =>
  378. {
  379. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  380. nkf.NumberKeyboard.UseSI = false;
  381. var onokclick = new Action<Double>((data) =>
  382. Presenter.Noise = Convert.ToInt32(data * 100.0));
  383. nkf.SetKeyBoardValue(LblNoise.Text, "%", 12, onokclick,
  384. Presenter.Noise / 100.0, Presenter.MaxNoise / 100.0, Presenter.MinNoise / 100.0);
  385. nkf.ShowDialogByPosition();
  386. };
  387. }
  388. private void NebPhaseControlInit()
  389. {
  390. NebPhase.AddClicked = (_, e) => Presenter.AdjPhase(e.Step);
  391. NebPhase.SubClicked = (_, e) => Presenter.AdjPhase(e.Step);
  392. NebPhase.StringFormatFunc = (_) => PhaseToString();
  393. NebPhase.EditValueChicked = (_, _) =>
  394. {
  395. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  396. nkf.NumberKeyboard.UseSI = false;
  397. var onokclick = new Action<Double>((data) =>
  398. Presenter.Phase = Convert.ToInt32(data * 100.0));
  399. nkf.SetKeyBoardValue(LblPhase.Text, "°", 12, onokclick,
  400. (Presenter.Opposition ? (Presenter.Phase + Presenter.HalfPhase) % 36000 : Presenter.Phase) / 100.0,
  401. Presenter.MaxPhase / 100.0,
  402. Presenter.MinPhase / 100.0);
  403. nkf.ShowDialogByPosition();
  404. };
  405. }
  406. private void NebFreqControlInit()
  407. {
  408. NebFreq.AddClicked = (_, e) => Presenter.AdjFrequency(e.Step);
  409. NebFreq.SubClicked = (_, e) => Presenter.AdjFrequency(e.Step);
  410. NebFreq.StringFormatFunc = (_) => FreqToString();
  411. NebFreq.EditValueChicked = (_, _) =>
  412. {
  413. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  414. //nkf.NumberKeyboard.UseSI = false;
  415. var onokclick = new Action<Double>((data) =>
  416. Presenter.Frequency = Convert.ToInt64(Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Micro)));
  417. nkf.SetKeyBoardValue(LblFreq.Text, "Hz", 12, onokclick,
  418. Quantity.ConvertByPrefix(Presenter.Frequency, Prefix.Micro),
  419. Quantity.ConvertByPrefix(Presenter.MaxFrequency, Prefix.Micro),
  420. Quantity.ConvertByPrefix(Presenter.MinFrequency, Prefix.Micro));
  421. nkf.ShowDialogByPosition();
  422. };
  423. }
  424. private void NebPeriodControlInit()
  425. {
  426. NebPeriod.AddClicked = (_, e) => Presenter.AdjPeriod(e.Step);
  427. NebPeriod.SubClicked = (_, e) => Presenter.AdjPeriod(e.Step);
  428. NebPeriod.StringFormatFunc = (_) => PeriodToString();
  429. NebPeriod.EditValueChicked = (_, _) =>
  430. {
  431. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  432. //nkf.NumberKeyboard.UseSI = false;
  433. var onokclick = new Action<Double>((data) =>
  434. Presenter.Frequency = (Int64)Math.Round(Quantity.ConvertByPrefix(Math.Round(1000 / data), Prefix.Empty, Prefix.Milli)));
  435. nkf.SetKeyBoardValue(LblPeriod.Text, "s", 12, onokclick,
  436. Quantity.ConvertByPrefix(1.0 / Presenter.Frequency, Prefix.Mega),
  437. Quantity.ConvertByPrefix(1.0 / Presenter.MinFrequency, Prefix.Mega),
  438. Quantity.ConvertByPrefix(1.0 / Presenter.MaxFrequency, Prefix.Mega));
  439. nkf.ShowDialogByPosition();
  440. };
  441. }
  442. private void NebDutyControlInit()
  443. {
  444. NebDuty.AddClicked = (_, e) => Presenter.AdjDuty(e.Step);
  445. NebDuty.SubClicked = (_, e) => Presenter.AdjDuty(e.Step);
  446. NebDuty.StringFormatFunc = (_) => DutyToString();
  447. NebDuty.EditValueChicked = (_, _) =>
  448. {
  449. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  450. nkf.NumberKeyboard.UseSI = false;
  451. var onokclick = new Action<Double>((data) =>
  452. Presenter.Duty = Convert.ToInt32(data * 100.0));
  453. nkf.SetKeyBoardValue(LblDuty.Text, "%", 12, onokclick,
  454. Presenter.Duty / 100.0, Presenter.MaxDuty / 100.0, Presenter.MinDuty / 100.0);
  455. nkf.ShowDialogByPosition();
  456. };
  457. }
  458. private void NebAmpControlInit()
  459. {
  460. NebAmp.AddClicked = (_, e) => Presenter.AdjAmplitude(e.Step);
  461. NebAmp.SubClicked = (_, e) => Presenter.AdjAmplitude(e.Step);
  462. NebAmp.StringFormatFunc = (_) => AmpToString();
  463. NebAmp.EditValueChicked = (_, _) =>
  464. {
  465. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  466. //nkf.NumberKeyboard.UseSI = false;
  467. var onokclick = new Action<Double>((data) =>
  468. Presenter.Amplitude = Convert.ToInt32(Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Milli)));
  469. nkf.SetKeyBoardValue(LblAmplitude.Text, "V", 12, onokclick,
  470. Quantity.ConvertByPrefix(Presenter.Amplitude, Prefix.Milli, Prefix.Empty),
  471. Quantity.ConvertByPrefix(Presenter.MaxAmplitude, Prefix.Milli, Prefix.Empty),
  472. Quantity.ConvertByPrefix(Presenter.MinAmplitude, Prefix.Milli, Prefix.Empty));
  473. nkf.ShowDialogByPosition();
  474. };
  475. }
  476. private void Neb1LevelControlInit()
  477. {
  478. Neb1Level.AddClicked = (_, e) => Presenter.AdjHighLevel(e.Step);
  479. Neb1Level.SubClicked = (_, e) => Presenter.AdjHighLevel(e.Step);
  480. Neb1Level.StringFormatFunc = (_) => HighLevelToString();
  481. Neb1Level.EditValueChicked = (_, _) =>
  482. {
  483. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  484. //nkf.NumberKeyboard.UseSI = false;
  485. var onokclick = new Action<Double>((data) =>
  486. Presenter.HighLevel = Convert.ToInt32(Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Milli)));
  487. nkf.SetKeyBoardValue(Lbl1Level.Text, "V", 12, onokclick,
  488. Quantity.ConvertByPrefix(Presenter.HighLevel, Prefix.Milli, Prefix.Empty),
  489. Quantity.ConvertByPrefix(Presenter.MaxOffset, Prefix.Milli, Prefix.Empty),
  490. Quantity.ConvertByPrefix(Presenter.MinOffset, Prefix.Milli, Prefix.Empty));
  491. nkf.ShowDialogByPosition();
  492. };
  493. }
  494. private void Neb0LevelControlInit()
  495. {
  496. Neb0Level.AddClicked = (_, e) => Presenter.AdjLowLevel(e.Step);
  497. Neb0Level.SubClicked = (_, e) => Presenter.AdjLowLevel(e.Step);
  498. Neb0Level.StringFormatFunc = (_) => LowLevelToString();
  499. Neb0Level.EditValueChicked = (_, _) =>
  500. {
  501. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  502. //nkf.NumberKeyboard.UseSI = false;
  503. var onokclick = new Action<Double>((data) =>
  504. Presenter.LowLevel = Convert.ToInt32(Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Milli)));
  505. nkf.SetKeyBoardValue(Lbl0Level.Text, "V", 12, onokclick,
  506. Quantity.ConvertByPrefix(Presenter.LowLevel, Prefix.Milli, Prefix.Empty),
  507. Quantity.ConvertByPrefix(Presenter.MaxOffset, Prefix.Milli, Prefix.Empty),
  508. Quantity.ConvertByPrefix(Presenter.MinOffset, Prefix.Milli, Prefix.Empty));
  509. nkf.ShowDialogByPosition();
  510. };
  511. }
  512. private void NebOffsetControlInit()
  513. {
  514. NebOffset.AddClicked = (_, e) => Presenter.AdjOffset(e.Step);
  515. NebOffset.SubClicked = (_, e) => Presenter.AdjOffset(e.Step);
  516. NebOffset.StringFormatFunc = (_) => OffsetToString();
  517. NebOffset.EditValueChicked = (_, _) =>
  518. {
  519. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  520. //nkf.NumberKeyboard.UseSI = false;
  521. var onokclick = new Action<Double>((data) =>
  522. Presenter.Offset = (Int32)Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Milli));
  523. nkf.SetKeyBoardValue(LblOffset.Text, "V", 12, onokclick
  524. , Quantity.ConvertByPrefix(Presenter.Offset, Prefix.Milli, Prefix.Empty)
  525. , Quantity.ConvertByPrefix(Presenter.MaxOffset, Prefix.Milli, Prefix.Empty)
  526. , Quantity.ConvertByPrefix(Presenter.MinOffset, Prefix.Milli, Prefix.Empty));
  527. nkf.ShowDialogByPosition();
  528. };
  529. }
  530. private void NebSweepStartFreqControlInit()
  531. {
  532. NebSweepStartFreq.AddClicked = (_, e) => Presenter.AdjSweepStartFreq(e.Step);
  533. NebSweepStartFreq.SubClicked = (_, e) => Presenter.AdjSweepStartFreq(e.Step);
  534. NebSweepStartFreq.StringFormatFunc = (_) => SweepStartFreqToString();
  535. NebSweepStartFreq.EditValueChicked = (_, _) =>
  536. {
  537. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  538. //nkf.NumberKeyboard.UseSI = false;
  539. var onokclickeventaction = new Action<Double>((data) =>
  540. Presenter.SweepStartFreq = Convert.ToInt64(Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Micro)));
  541. nkf.SetKeyBoardValue(LblSweepStartFreq.Text, "Hz", 12, onokclickeventaction,
  542. Quantity.ConvertByPrefix(Presenter.SweepStartFreq, Prefix.Micro),
  543. Quantity.ConvertByPrefix(Presenter.MaxSweepFreq, Prefix.Micro),
  544. Quantity.ConvertByPrefix(Presenter.MinSweepFreq, Prefix.Micro));
  545. nkf.ShowDialogByPosition();
  546. };
  547. }
  548. private void NebSweepEndFreqControlInit()
  549. {
  550. NebSweepEndFreq.AddClicked = (_, e) => Presenter.AdjSweepEndFreq(e.Step);
  551. NebSweepEndFreq.SubClicked = (_, e) => Presenter.AdjSweepEndFreq(e.Step);
  552. NebSweepEndFreq.StringFormatFunc = (_) => SweepEndFreqToString();
  553. NebSweepEndFreq.EditValueChicked = (_, _) =>
  554. {
  555. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  556. //nkf.NumberKeyboard.UseSI = false;
  557. var onokclickeventaction = new Action<Double>((data) =>
  558. Presenter.SweepEndFreq = Convert.ToInt64(Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Micro)));
  559. nkf.SetKeyBoardValue(LblSweepEndFreq.Text, "Hz", 12, onokclickeventaction,
  560. Quantity.ConvertByPrefix(Presenter.SweepEndFreq, Prefix.Micro),
  561. Quantity.ConvertByPrefix(Presenter.MaxSweepFreq, Prefix.Micro),
  562. Quantity.ConvertByPrefix(Presenter.MinSweepFreq, Prefix.Micro));
  563. nkf.ShowDialogByPosition();
  564. };
  565. }
  566. private void NebSweepDurationControlInit()
  567. {
  568. NebSweepDuration.AddClicked = (_, e) => Presenter.AdjSweepDuration(e.Step);
  569. NebSweepDuration.SubClicked = (_, e) => Presenter.AdjSweepDuration(e.Step);
  570. NebSweepDuration.StringFormatFunc = (_) => SweepDurationToString();
  571. NebSweepDuration.EditValueChicked = (_, _) =>
  572. {
  573. var nkf = new NumberKeybordForm().UniformInitKeyBoard(this);
  574. //nkf.NumberKeyboard.UseSI = false;
  575. var onokclickeventaction = new Action<Double>((data) =>
  576. Presenter.SweepDuration = Convert.ToInt64(Quantity.ConvertByPrefix(data, Prefix.Empty, Prefix.Micro)));
  577. nkf.SetKeyBoardValue(LblSweepDuration.Text, "s", 12, onokclickeventaction,
  578. Quantity.ConvertByPrefix(Presenter.SweepDuration, Prefix.Micro),
  579. Quantity.ConvertByPrefix(Presenter.MaxSweepDuration, Prefix.Micro),
  580. Quantity.ConvertByPrefix(Presenter.MinSweepDuration, Prefix.Micro));
  581. nkf.ShowDialogByPosition();
  582. };
  583. }
  584. private String FreqToString()
  585. {
  586. //return SIHelper.ValueChangeToSI(Presenter.Frequency / 1000_000f, 3, "Hz");
  587. //return new Quantity(Presenter.Frequency, Prefix.Micro, QuantityUnit.Hertz).ToString("##0.########", true, 11);
  588. return new Quantity(Presenter.Frequency, Prefix.Micro, QuantityUnit.Hertz).ToString(8, -1, true);
  589. }
  590. private String PeriodToString()
  591. {
  592. //return SIHelper.ValueChangeToSI(1E15 / Presenter.Frequency / 1000_000_000f, 3, "s");
  593. //return new Quantity(1.0 / Presenter.Frequency, Prefix.Mega, QuantityUnit.Second).ToString("##0.########", true, 11);
  594. return new Quantity(1.0 / Presenter.Frequency, Prefix.Mega, QuantityUnit.Second).ToString(8, -1, true);
  595. }
  596. private String AmpToString()
  597. {
  598. //return SIHelper.ValueChangeToSI(Presenter.Amplitude / 1000f, 3, "V");
  599. return new Quantity(Presenter.Amplitude, Prefix.Milli, QuantityUnit.Voltage).ToString("##0.###", true, 7);
  600. }
  601. private String OffsetToString()
  602. {
  603. //return Presenter.Offset == 0 ? "0.00V" : SIHelper.ValueChangeToSI(Presenter.Offset / 1000f, 3, "V");
  604. return new Quantity(Presenter.Offset, Prefix.Milli, QuantityUnit.Voltage).ToString("##0.###", true, 7);
  605. }
  606. private String HighLevelToString()
  607. {
  608. //return Presenter.HighLevel == 0 ? "0.00V" : SIHelper.ValueChangeToSI(Presenter.HighLevel / 1000f, 3, "V");
  609. return new Quantity(Presenter.HighLevel, Prefix.Milli, QuantityUnit.Voltage).ToString("##0.###", true, 7);
  610. }
  611. private String LowLevelToString()
  612. {
  613. //return Presenter.LowLevel == 0 ? "0.00V" : SIHelper.ValueChangeToSI(Presenter.LowLevel / 1000f, 3, "V");
  614. return new Quantity(Presenter.LowLevel, Prefix.Milli, QuantityUnit.Voltage).ToString("##0.###", true, 7);
  615. }
  616. private String DutyToString()
  617. {
  618. return (Presenter.Duty / 100.0).ToString(@"#0.00\%");
  619. }
  620. private String PhaseToString()
  621. {
  622. //return $"{(Presenter.Opposition ? (Presenter.Phase + Presenter.HalfPhase) % 36000 : Presenter.Phase) / 100f:F2}°";
  623. return (Presenter.Phase / 100.0).ToString("##0.00°");
  624. }
  625. private String NoiseToString()
  626. {
  627. return (Presenter.Noise / 100.0).ToString(@"##0.00\%");
  628. }
  629. private String ModFreqToString()
  630. {
  631. //return SIHelper.ValueChangeToSI(Presenter.ModFreq / 1000_000f, 3, "Hz");
  632. return new Quantity(Presenter.ModFreq, Prefix.Micro, "Hz").ToString("###,###,##0.#", true, 11);
  633. }
  634. private String FreqBiasToString()
  635. {
  636. //return SIHelper.ValueChangeToSI(Presenter.FreqBias / 1000_000f, 3, "Hz");
  637. return new Quantity(Presenter.FreqBias, Prefix.Micro, "Hz").ToString("###,###,##0.#", true, 11);
  638. }
  639. private String PhaseBiasToString()
  640. {
  641. //return $"{Presenter.PhaseBias / 1000_000f:F2}°";
  642. return (Presenter.PhaseBias / 100.0).ToString("##0.00°");
  643. }
  644. private String AmpDepthToString()
  645. {
  646. //return $"{Presenter.AmpDepth:F2}%";
  647. return Presenter.AmpDepth.ToString(@"#0\%");
  648. }
  649. private String SweepStartFreqToString()
  650. {
  651. //return SIHelper.ValueChangeToSI(Presenter.SweepStartFreq / 1000_000f, 0, "Hz");
  652. return new Quantity(Presenter.Frequency, Prefix.Micro, QuantityUnit.Hertz).ToString("###,###,##0.#", true, 11);
  653. }
  654. private String SweepDurationToString()
  655. {
  656. //return SIHelper.ValueChangeToSI(Presenter.SweepDuration / 1000_000f, 0, "s");
  657. return new Quantity(Presenter.SweepDuration, Prefix.Micro, QuantityUnit.Second).ToString("###,###,##0.###", true, 13);
  658. }
  659. private String SweepEndFreqToString()
  660. {
  661. //return SIHelper.ValueChangeToSI(Presenter.SweepEndFreq / 1000_000f, 0, "Hz");
  662. return new Quantity(Presenter.SweepEndFreq, Prefix.Micro, QuantityUnit.Hertz).ToString("###,###,##0.#", true, 11);
  663. }
  664. private void RdoMode_IndexChanged(object sender, EventArgs e)
  665. {
  666. if (!_ArgToCtrl)
  667. {
  668. if (RdoMode.ChoosedButtonIndex == 0)
  669. {
  670. Presenter.Active = false;
  671. }
  672. else
  673. {
  674. Presenter.Mode = (WfmGenMode)RdoMode.ChoosedButtonIndex - 1;
  675. Presenter.Active = true;
  676. }
  677. }
  678. }
  679. private void RdoImpedance_IndexChanged(object sender, EventArgs e)
  680. {
  681. if (!_ArgToCtrl)
  682. {
  683. Presenter.Impedance = (WfmGenImpedance)RdoImpedance.ChoosedButtonIndex;
  684. }
  685. }
  686. private void ChkOpposition_CheckedChangedEvent_1(object sender, EventArgs e)
  687. {
  688. if (!_ArgToCtrl)
  689. {
  690. Presenter.Opposition = ChkOpposition.Checked;
  691. }
  692. }
  693. private void CbxSweepType_SelectedIndexChanged(object sender, EventArgs e)
  694. {
  695. if (!_ArgToCtrl)
  696. {
  697. Presenter.SweepType = (SweepType)CbxSweepType.SelectedIndex;
  698. }
  699. }
  700. private void RdoModRamp_IndexChanged(object sender, EventArgs e)
  701. {
  702. if (!_ArgToCtrl)
  703. {
  704. Presenter.RampType = (WfmRampType)RdoModRamp.ChoosedButtonIndex;
  705. }
  706. }
  707. private void BtnArbitrary_Click(object sender, EventArgs e)
  708. {
  709. FileBrowserForm rdform = FileBrowserForm.Instance;
  710. rdform.SetFileFilter(Enum.GetValues<WfmFormat>().Where(x => x == WfmFormat.Binary));
  711. rdform.SetPath(Constants.WFM_DEF_PATH);
  712. if (rdform.ShowDialogByEvent() == DialogResult.Yes)
  713. {
  714. Presenter.FilePath = rdform.FullFileName;
  715. }
  716. }
  717. //private void NebNumFocused(TouchNeb touchNeb, Boolean focused = true)
  718. //{
  719. // //todo
  720. // return;
  721. // if (InvokeRequired)
  722. // {
  723. // BeginInvoke(() => NebNumFocused(touchNeb, focused));
  724. // }
  725. // else
  726. // {
  727. // var BorderFocusedColor = Color.FromArgb(145, 145, 145);
  728. // var ForeFocusedColor = Color.FromArgb(200, 200, 200);
  729. // var ForeColor = Color.FromArgb(185, 192, 199);
  730. // var BorderColor = Color.FromArgb(53, 54, 58);
  731. // touchNeb.BorderColor = focused ? BorderFocusedColor : BorderColor;
  732. // touchNeb.BorderThickness = focused ? 1 : 0;
  733. // touchNeb.ForeColor = focused ? ForeFocusedColor : ForeColor;
  734. // touchNeb.FocusBoederColor = focused ? BorderFocusedColor : BorderColor;
  735. // if (focused)
  736. // {
  737. // _FocusedNebNumObj = touchNeb;
  738. // }
  739. // }
  740. //}
  741. }
  742. }