2
0

MyTextBox.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Runtime.CompilerServices;
  5. using System.Threading;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using Microsoft.VisualBasic;
  11. using Microsoft.VisualBasic.CompilerServices;
  12. namespace PCL
  13. {
  14. // Token: 0x020000A6 RID: 166
  15. public class MyTextBox : TextBox
  16. {
  17. // Token: 0x06000506 RID: 1286 RVA: 0x0002A0F0 File Offset: 0x000282F0
  18. public MyTextBox()
  19. {
  20. base.Loaded += delegate(object sender, RoutedEventArgs e)
  21. {
  22. this.Validate();
  23. };
  24. base.TextChanged += delegate(object sender, TextChangedEventArgs e)
  25. {
  26. this.MyTextBox_TextChanged((MyTextBox)sender, e);
  27. };
  28. base.IsEnabledChanged += delegate(object sender, DependencyPropertyChangedEventArgs e)
  29. {
  30. this.RefreshColor();
  31. };
  32. base.MouseEnter += delegate(object sender, MouseEventArgs e)
  33. {
  34. this.RefreshColor();
  35. };
  36. base.MouseLeave += delegate(object sender, MouseEventArgs e)
  37. {
  38. this.RefreshColor();
  39. };
  40. base.GotFocus += delegate(object sender, RoutedEventArgs e)
  41. {
  42. this.RefreshColor();
  43. };
  44. base.LostFocus += delegate(object sender, RoutedEventArgs e)
  45. {
  46. this.RefreshColor();
  47. };
  48. base.IsEnabledChanged += delegate(object sender, DependencyPropertyChangedEventArgs e)
  49. {
  50. this.RefreshTextColor();
  51. };
  52. this.HasAnimation = true;
  53. this.ShowValidateResult = true;
  54. this.bridgeBroadcaster = null;
  55. this.itemBroadcaster = null;
  56. this.reponseBroadcaster = ModBase.GetUuid();
  57. this._ExceptionBroadcaster = new List<RoutedEventHandler>();
  58. this.classBroadcaster = new Collection<Validate>();
  59. this.policyBroadcaster = MyTextBox.ValidateState.NotInited;
  60. this.producerBroadcaster = false;
  61. this.schemaBroadcaster = "";
  62. }
  63. // Token: 0x17000086 RID: 134
  64. // (get) Token: 0x06000507 RID: 1287 RVA: 0x00004B9E File Offset: 0x00002D9E
  65. // (set) Token: 0x06000508 RID: 1288 RVA: 0x00004BA6 File Offset: 0x00002DA6
  66. public bool HasAnimation { get; set; }
  67. // Token: 0x17000087 RID: 135
  68. // (get) Token: 0x06000509 RID: 1289 RVA: 0x00004BAF File Offset: 0x00002DAF
  69. // (set) Token: 0x0600050A RID: 1290 RVA: 0x00004BB7 File Offset: 0x00002DB7
  70. public bool ShowValidateResult { get; set; }
  71. // Token: 0x17000088 RID: 136
  72. // (get) Token: 0x0600050B RID: 1291 RVA: 0x0002A1EC File Offset: 0x000283EC
  73. private TextBlock labWrong
  74. {
  75. get
  76. {
  77. TextBlock result;
  78. if (base.Template == null)
  79. {
  80. result = null;
  81. }
  82. else
  83. {
  84. if (this.bridgeBroadcaster == null)
  85. {
  86. this.bridgeBroadcaster = (TextBlock)base.Template.FindName("labWrong", this);
  87. }
  88. result = this.bridgeBroadcaster;
  89. }
  90. return result;
  91. }
  92. }
  93. // Token: 0x17000089 RID: 137
  94. // (get) Token: 0x0600050C RID: 1292 RVA: 0x0002A234 File Offset: 0x00028434
  95. private TextBlock labHint
  96. {
  97. get
  98. {
  99. TextBlock result;
  100. if (base.Template == null)
  101. {
  102. result = null;
  103. }
  104. else
  105. {
  106. if (this.itemBroadcaster == null)
  107. {
  108. this.itemBroadcaster = (TextBlock)base.Template.FindName("labHint", this);
  109. }
  110. result = this.itemBroadcaster;
  111. }
  112. return result;
  113. }
  114. }
  115. // Token: 0x0600050D RID: 1293 RVA: 0x0002A27C File Offset: 0x0002847C
  116. public override void OnApplyTemplate()
  117. {
  118. base.OnApplyTemplate();
  119. if (Operators.CompareString(this.HintText, "", false) != 0 && Operators.CompareString(this.labHint.Text, "", false) == 0)
  120. {
  121. this.labHint.Text = ((Operators.CompareString(base.Text, "", false) == 0) ? this.HintText : "");
  122. }
  123. }
  124. // Token: 0x0600050E RID: 1294 RVA: 0x0002A2E8 File Offset: 0x000284E8
  125. [CompilerGenerated]
  126. public static void SortReader(MyTextBox.ValidateChangedEventHandler obj)
  127. {
  128. MyTextBox.ValidateChangedEventHandler validateChangedEventHandler = MyTextBox.m_GlobalBroadcaster;
  129. MyTextBox.ValidateChangedEventHandler validateChangedEventHandler2;
  130. do
  131. {
  132. validateChangedEventHandler2 = validateChangedEventHandler;
  133. MyTextBox.ValidateChangedEventHandler value = (MyTextBox.ValidateChangedEventHandler)Delegate.Combine(validateChangedEventHandler2, obj);
  134. validateChangedEventHandler = Interlocked.CompareExchange<MyTextBox.ValidateChangedEventHandler>(ref MyTextBox.m_GlobalBroadcaster, value, validateChangedEventHandler2);
  135. }
  136. while (validateChangedEventHandler != validateChangedEventHandler2);
  137. }
  138. // Token: 0x0600050F RID: 1295 RVA: 0x0002A31C File Offset: 0x0002851C
  139. [CompilerGenerated]
  140. public static void MapReader(MyTextBox.ValidateChangedEventHandler obj)
  141. {
  142. MyTextBox.ValidateChangedEventHandler validateChangedEventHandler = MyTextBox.m_GlobalBroadcaster;
  143. MyTextBox.ValidateChangedEventHandler validateChangedEventHandler2;
  144. do
  145. {
  146. validateChangedEventHandler2 = validateChangedEventHandler;
  147. MyTextBox.ValidateChangedEventHandler value = (MyTextBox.ValidateChangedEventHandler)Delegate.Remove(validateChangedEventHandler2, obj);
  148. validateChangedEventHandler = Interlocked.CompareExchange<MyTextBox.ValidateChangedEventHandler>(ref MyTextBox.m_GlobalBroadcaster, value, validateChangedEventHandler2);
  149. }
  150. while (validateChangedEventHandler != validateChangedEventHandler2);
  151. }
  152. // Token: 0x06000510 RID: 1296 RVA: 0x00004BC0 File Offset: 0x00002DC0
  153. public void SetupReader(RoutedEventHandler value)
  154. {
  155. this._ExceptionBroadcaster.Add(value);
  156. }
  157. // Token: 0x06000511 RID: 1297 RVA: 0x00004BCE File Offset: 0x00002DCE
  158. public void DestroyReader(RoutedEventHandler value)
  159. {
  160. this._ExceptionBroadcaster.Remove(value);
  161. }
  162. // Token: 0x06000512 RID: 1298 RVA: 0x0002A350 File Offset: 0x00028550
  163. private void raise_ValidatedTextChanged(object sender, TextChangedEventArgs e)
  164. {
  165. try
  166. {
  167. foreach (RoutedEventHandler routedEventHandler in this._ExceptionBroadcaster)
  168. {
  169. if (!Information.IsNothing(routedEventHandler))
  170. {
  171. routedEventHandler(RuntimeHelpers.GetObjectValue(sender), e);
  172. }
  173. }
  174. }
  175. finally
  176. {
  177. List<RoutedEventHandler>.Enumerator enumerator;
  178. ((IDisposable)enumerator).Dispose();
  179. }
  180. }
  181. // Token: 0x1700008A RID: 138
  182. // (get) Token: 0x06000513 RID: 1299 RVA: 0x00004BDD File Offset: 0x00002DDD
  183. // (set) Token: 0x06000514 RID: 1300 RVA: 0x00004BEF File Offset: 0x00002DEF
  184. public string ValidateResult
  185. {
  186. get
  187. {
  188. return Conversions.ToString(base.GetValue(MyTextBox.m_UtilsBroadcaster));
  189. }
  190. set
  191. {
  192. base.SetValue(MyTextBox.m_UtilsBroadcaster, value);
  193. }
  194. }
  195. // Token: 0x1700008B RID: 139
  196. // (get) Token: 0x06000515 RID: 1301 RVA: 0x00004BFD File Offset: 0x00002DFD
  197. // (set) Token: 0x06000516 RID: 1302 RVA: 0x00004C05 File Offset: 0x00002E05
  198. public Collection<Validate> ValidateRules
  199. {
  200. get
  201. {
  202. return this.classBroadcaster;
  203. }
  204. set
  205. {
  206. this.classBroadcaster = value;
  207. this.Validate();
  208. }
  209. }
  210. // Token: 0x06000517 RID: 1303 RVA: 0x0002A3B4 File Offset: 0x000285B4
  211. public void Validate()
  212. {
  213. MyTextBox._Closure$__36-0 CS$<>8__locals1 = new MyTextBox._Closure$__36-0(CS$<>8__locals1);
  214. CS$<>8__locals1.$VB$Me = this;
  215. this.ValidateResult = "";
  216. try
  217. {
  218. foreach (Validate validate in this.ValidateRules)
  219. {
  220. this.ValidateResult = validate.Validate(base.Text);
  221. if (Information.IsNothing(this.ValidateResult))
  222. {
  223. break;
  224. }
  225. if (Operators.CompareString(this.ValidateResult, "", false) != 0)
  226. {
  227. break;
  228. }
  229. }
  230. }
  231. finally
  232. {
  233. IEnumerator<Validate> enumerator;
  234. if (enumerator != null)
  235. {
  236. enumerator.Dispose();
  237. }
  238. }
  239. CS$<>8__locals1.$VB$Local_IsSuccessful = (Operators.CompareString(this.ValidateResult, "", false) == 0);
  240. if (this.policyBroadcaster != (CS$<>8__locals1.$VB$Local_IsSuccessful ? MyTextBox.ValidateState.Success : MyTextBox.ValidateState.FailedAndShowDetail))
  241. {
  242. if (base.IsLoaded && this.labWrong != null)
  243. {
  244. this.ChangeValidateResult(CS$<>8__locals1.$VB$Local_IsSuccessful, true);
  245. }
  246. else
  247. {
  248. ModBase.RunInNewThread(delegate
  249. {
  250. Thread.Sleep(30);
  251. ModBase.RunInUi((CS$<>8__locals1.$I1 == null) ? (CS$<>8__locals1.$I1 = delegate()
  252. {
  253. CS$<>8__locals1.$VB$Me.ChangeValidateResult(CS$<>8__locals1.$VB$Local_IsSuccessful, false);
  254. }) : CS$<>8__locals1.$I1, false);
  255. }, "DelayedValidate Change", ThreadPriority.Normal);
  256. }
  257. }
  258. if (this.ShowValidateResult && Operators.CompareString(this.ValidateResult, "", false) != 0)
  259. {
  260. if (base.IsLoaded && this.labWrong != null)
  261. {
  262. this.labWrong.Text = this.ValidateResult;
  263. return;
  264. }
  265. ModBase.RunInNewThread(delegate
  266. {
  267. MyTextBox._Closure$__36-1 CS$<>8__locals2 = new MyTextBox._Closure$__36-1(CS$<>8__locals2);
  268. CS$<>8__locals2.$VB$Me = this;
  269. CS$<>8__locals2.$VB$Local_IsFinished = false;
  270. while (!CS$<>8__locals2.$VB$Local_IsFinished)
  271. {
  272. Thread.Sleep(20);
  273. ModBase.RunInUiWait(delegate()
  274. {
  275. if (CS$<>8__locals2.$VB$Me.labWrong != null)
  276. {
  277. CS$<>8__locals2.$VB$Me.labWrong.Text = CS$<>8__locals2.$VB$Me.ValidateResult;
  278. CS$<>8__locals2.$VB$Local_IsFinished = true;
  279. }
  280. if (!CS$<>8__locals2.$VB$Me.IsLoaded)
  281. {
  282. CS$<>8__locals2.$VB$Local_IsFinished = true;
  283. }
  284. });
  285. }
  286. }, "DelayedValidate Text", ThreadPriority.Normal);
  287. }
  288. }
  289. // Token: 0x06000518 RID: 1304 RVA: 0x00004C14 File Offset: 0x00002E14
  290. public void ForceShowAsSuccess()
  291. {
  292. this.producerBroadcaster = false;
  293. this.ChangeValidateResult(Operators.CompareString(this.ValidateResult, "", false) == 0, true);
  294. }
  295. // Token: 0x06000519 RID: 1305 RVA: 0x0002A504 File Offset: 0x00028704
  296. private void ChangeValidateResult(bool IsSuccessful, bool IsLoaded)
  297. {
  298. if (IsLoaded && ModAnimation.CalcParser() == 0 && this.labWrong != null)
  299. {
  300. if (!IsSuccessful && this.producerBroadcaster)
  301. {
  302. if (this.ShowValidateResult)
  303. {
  304. this.policyBroadcaster = MyTextBox.ValidateState.FailedAndShowDetail;
  305. this.labWrong.Visibility = Visibility.Visible;
  306. ModAnimation.AniStart(new ModAnimation.AniData[]
  307. {
  308. ModAnimation.AaOpacity(this.labWrong, 1.0 - this.labWrong.Opacity, 170, 0, null, false),
  309. ModAnimation.AaHeight(this.labWrong, 21.0 - this.labWrong.Height, 300, 0, new ModAnimation.AniEaseOutBack(ModAnimation.AniEasePower.Weak), false)
  310. }, "MyTextBox Validate " + Conversions.ToString(this.reponseBroadcaster), false);
  311. }
  312. else
  313. {
  314. this.policyBroadcaster = MyTextBox.ValidateState.FailedAndHideDetail;
  315. }
  316. }
  317. else
  318. {
  319. this.policyBroadcaster = (IsSuccessful ? MyTextBox.ValidateState.Success : MyTextBox.ValidateState.FailedButTextNotChanged);
  320. ModAnimation.AniStart(new ModAnimation.AniData[]
  321. {
  322. ModAnimation.AaOpacity(this.labWrong, -this.labWrong.Opacity, 150, 0, null, false),
  323. ModAnimation.AaHeight(this.labWrong, -this.labWrong.Height, 150, 0, new ModAnimation.AniEaseOutFluent(ModAnimation.AniEasePower.Middle), false),
  324. ModAnimation.AaCode(delegate
  325. {
  326. this.labWrong.Visibility = Visibility.Collapsed;
  327. }, 0, true)
  328. }, "MyTextBox Validate " + Conversions.ToString(this.reponseBroadcaster), false);
  329. }
  330. }
  331. else
  332. {
  333. this.policyBroadcaster = MyTextBox.ValidateState.NotLoaded;
  334. }
  335. this.RefreshColor();
  336. MyTextBox.ValidateChangedEventHandler globalBroadcaster = MyTextBox.m_GlobalBroadcaster;
  337. if (globalBroadcaster != null)
  338. {
  339. globalBroadcaster(this, new EventArgs());
  340. }
  341. }
  342. // Token: 0x1700008C RID: 140
  343. // (get) Token: 0x0600051A RID: 1306 RVA: 0x00004C38 File Offset: 0x00002E38
  344. // (set) Token: 0x0600051B RID: 1307 RVA: 0x00004C40 File Offset: 0x00002E40
  345. public string HintText
  346. {
  347. get
  348. {
  349. return this.schemaBroadcaster;
  350. }
  351. set
  352. {
  353. this.schemaBroadcaster = value;
  354. if (this.labHint != null)
  355. {
  356. this.labHint.Text = ((Operators.CompareString(base.Text, "", false) == 0) ? this.HintText : "");
  357. }
  358. }
  359. }
  360. // Token: 0x0600051C RID: 1308 RVA: 0x0002A6B0 File Offset: 0x000288B0
  361. private void MyTextBox_TextChanged(MyTextBox sender, TextChangedEventArgs e)
  362. {
  363. try
  364. {
  365. if (this.labHint != null)
  366. {
  367. this.labHint.Text = ((Operators.CompareString(base.Text, "", false) == 0) ? this.HintText : "");
  368. }
  369. this.producerBroadcaster = base.IsLoaded;
  370. this.Validate();
  371. if (Operators.CompareString(this.ValidateResult, "", false) == 0)
  372. {
  373. this.raise_ValidatedTextChanged(sender, e);
  374. }
  375. }
  376. catch (Exception ex)
  377. {
  378. ModBase.Log(ex, "进行输入验证时出错", ModBase.LogLevel.Assert, "出现错误");
  379. }
  380. }
  381. // Token: 0x0600051D RID: 1309 RVA: 0x0002A750 File Offset: 0x00028950
  382. private void RefreshColor()
  383. {
  384. try
  385. {
  386. if (this.HasAnimation)
  387. {
  388. if (base.TemplatedParent == null || !(base.TemplatedParent is MyComboBox))
  389. {
  390. string text;
  391. string text2;
  392. int time;
  393. if (base.IsEnabled)
  394. {
  395. if (Operators.CompareString(this.ValidateResult, "", false) != 0 && this.producerBroadcaster)
  396. {
  397. text = "ColorBrushRedLight";
  398. text2 = "ColorBrushRedBack";
  399. time = 200;
  400. }
  401. else if (base.IsFocused)
  402. {
  403. text = "ColorBrush3";
  404. text2 = "ColorBrush7";
  405. time = 10;
  406. }
  407. else if (base.IsMouseOver)
  408. {
  409. text = "ColorBrush4";
  410. text2 = "ColorBrush7";
  411. time = 100;
  412. }
  413. else
  414. {
  415. text = "ColorBrushBg0";
  416. text2 = "ColorBrushHalfWhite";
  417. time = 100;
  418. }
  419. }
  420. else
  421. {
  422. text = "ColorBrushGray5";
  423. text2 = "ColorBrushGray6";
  424. time = 200;
  425. }
  426. if (base.IsLoaded && ModAnimation.CalcParser() == 0)
  427. {
  428. ModAnimation.AniStart(new ModAnimation.AniData[]
  429. {
  430. ModAnimation.AaColor(this, Control.BorderBrushProperty, text, time, 0, null, false),
  431. ModAnimation.AaColor(this, Control.BackgroundProperty, text2, time, 0, null, false)
  432. }, "MyTextBox Color " + Conversions.ToString(this.reponseBroadcaster), false);
  433. }
  434. else
  435. {
  436. ModAnimation.AniStop("MyTextBox Color " + Conversions.ToString(this.reponseBroadcaster));
  437. base.SetResourceReference(Control.BorderBrushProperty, text);
  438. base.SetResourceReference(Control.BackgroundProperty, text2);
  439. }
  440. }
  441. }
  442. }
  443. catch (Exception ex)
  444. {
  445. ModBase.Log(ex, "文本框颜色改变出错", ModBase.LogLevel.Debug, "出现错误");
  446. }
  447. }
  448. // Token: 0x0600051E RID: 1310 RVA: 0x0002A8E0 File Offset: 0x00028AE0
  449. private void RefreshTextColor()
  450. {
  451. ModBase.MyColor myColor = base.IsEnabled ? ModSecret.m_RefField : ModSecret.m_StateField;
  452. if ((double)((SolidColorBrush)base.Foreground).Color.R != myColor.m_ThreadError)
  453. {
  454. if (base.IsLoaded && ModAnimation.CalcParser() == 0 && Operators.CompareString(base.Text, "", false) != 0)
  455. {
  456. ModAnimation.AniStart(new ModAnimation.AniData[]
  457. {
  458. ModAnimation.AaColor(this, Control.ForegroundProperty, base.IsEnabled ? "ColorBrushGray1" : "ColorBrushGray4", 200, 0, null, false)
  459. }, "MyTextBox TextColor " + Conversions.ToString(this.reponseBroadcaster), false);
  460. return;
  461. }
  462. ModAnimation.AniStop("MyTextBox TextColor " + Conversions.ToString(this.reponseBroadcaster));
  463. base.Foreground = myColor;
  464. }
  465. }
  466. // Token: 0x04000294 RID: 660
  467. [CompilerGenerated]
  468. private bool m_ValueBroadcaster;
  469. // Token: 0x04000295 RID: 661
  470. [CompilerGenerated]
  471. private bool _ObjectBroadcaster;
  472. // Token: 0x04000296 RID: 662
  473. private TextBlock bridgeBroadcaster;
  474. // Token: 0x04000297 RID: 663
  475. private TextBlock itemBroadcaster;
  476. // Token: 0x04000298 RID: 664
  477. public int reponseBroadcaster;
  478. // Token: 0x04000299 RID: 665
  479. [CompilerGenerated]
  480. private static MyTextBox.ValidateChangedEventHandler m_GlobalBroadcaster;
  481. // Token: 0x0400029A RID: 666
  482. public List<RoutedEventHandler> _ExceptionBroadcaster;
  483. // Token: 0x0400029B RID: 667
  484. public static readonly DependencyProperty m_UtilsBroadcaster = DependencyProperty.Register("ValidateResult", typeof(string), typeof(MyTextBox), new PropertyMetadata(""));
  485. // Token: 0x0400029C RID: 668
  486. private Collection<Validate> classBroadcaster;
  487. // Token: 0x0400029D RID: 669
  488. private MyTextBox.ValidateState policyBroadcaster;
  489. // Token: 0x0400029E RID: 670
  490. private bool producerBroadcaster;
  491. // Token: 0x0400029F RID: 671
  492. private string schemaBroadcaster;
  493. // Token: 0x020000A7 RID: 167
  494. // (Invoke) Token: 0x0600052C RID: 1324
  495. public delegate void ValidateChangedEventHandler(object sender, EventArgs e);
  496. // Token: 0x020000A8 RID: 168
  497. private enum ValidateState
  498. {
  499. // Token: 0x040002A1 RID: 673
  500. NotInited,
  501. // Token: 0x040002A2 RID: 674
  502. Success,
  503. // Token: 0x040002A3 RID: 675
  504. FailedButTextNotChanged,
  505. // Token: 0x040002A4 RID: 676
  506. FailedAndShowDetail,
  507. // Token: 0x040002A5 RID: 677
  508. FailedAndHideDetail,
  509. // Token: 0x040002A6 RID: 678
  510. NotLoaded
  511. }
  512. }
  513. }