DrawingArrow.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. using Microsoft.VisualBasic.CompilerServices;
  2. using MuchInfo.Chart.Data;
  3. using MuchInfo.Chart.Data.EnumTypes;
  4. using MuchInfo.Chart.Infrastructure.Controls;
  5. using MuchInfo.Chart.Infrastructure.Helpers;
  6. using MuchInfo.Chart.Infrastructure.Utilities;
  7. using MuchInfo.Chart.WPF.Controls.Utilities;
  8. using MuchInfo.Chart.WPF.Helpers;
  9. using MuchInfo.Chart.WPF.Primitives.Interfaces;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Windows;
  13. using System.Windows.Controls;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Shapes;
  17. using System.Xml.Linq;
  18. namespace MuchInfo.Chart.WPF.Primitives.Drawing
  19. {
  20. public class DrawingArrow : Drawing1PointBase
  21. {
  22. #region Fields
  23. private double _angle;
  24. private Ellipse _angleGrab;
  25. private bool _angleGrabMouseDown;
  26. private bool _angleGrabMouseEnter;
  27. private Polygon _arrow;
  28. private bool _arrowMouseDown;
  29. private bool _arrowMove;
  30. private Canvas _canvas;
  31. private RotateTransform _canvasRotateTransform;
  32. private List<Polyline> _ploylineList;
  33. private Point _position;
  34. //鼠标移到上面时记录上次画线工具
  35. private IDrawingTool _preDrawingTool;
  36. private RotateTransform _rotateTransform;
  37. #endregion Fields
  38. #region Constructors
  39. public DrawingArrow()
  40. {
  41. this._angle = 0.0;
  42. this._ploylineList = new List<Polyline>();
  43. this._angleGrabMouseDown = false;
  44. this._angleGrabMouseEnter = false;
  45. this._arrowMouseDown = false;
  46. }
  47. #endregion Constructors
  48. #region Properties
  49. #region Public Properties
  50. public float Angle
  51. {
  52. get
  53. {
  54. return (float)this._angle;
  55. }
  56. set
  57. {
  58. bool flag = !this._angle.Equals(value);
  59. if (flag)
  60. {
  61. bool flag2 = value > 360f;
  62. if (flag2)
  63. {
  64. value -= 360f;
  65. }
  66. flag2 = (value < 0f);
  67. if (flag2)
  68. {
  69. value += 360f;
  70. }
  71. flag2 = (Math.Abs(value - 0f) < 10f);
  72. if (flag2)
  73. {
  74. this._angle = 0.0;
  75. }
  76. else
  77. {
  78. flag2 = (Math.Abs(value - 360f) < 10f);
  79. if (flag2)
  80. {
  81. this._angle = 0.0;
  82. }
  83. else
  84. {
  85. flag2 = (Math.Abs(value - 90f) < 10f);
  86. if (flag2)
  87. {
  88. this._angle = 90.0;
  89. }
  90. else
  91. {
  92. flag2 = (Math.Abs(value - 180f) < 10f);
  93. if (flag2)
  94. {
  95. this._angle = 180.0;
  96. }
  97. else
  98. {
  99. flag2 = (Math.Abs(value - 270f) < 10f);
  100. if (flag2)
  101. {
  102. this._angle = 270.0;
  103. }
  104. else
  105. {
  106. this._angle = (double)value;
  107. }
  108. }
  109. }
  110. }
  111. }
  112. this.PropertyChanged();
  113. }
  114. }
  115. }
  116. public virtual Ellipse AngleGrab
  117. {
  118. get
  119. {
  120. return this._angleGrab;
  121. }
  122. set
  123. {
  124. var mouseEventHandler = new MouseEventHandler(this.AngleGrab_MouseMove);
  125. var mouseButtonEventHandler = new MouseButtonEventHandler(this.AngleGrab_MouseLeftButtonUp);
  126. var mouseButtonEventHandler2 = new MouseButtonEventHandler(this.AngleGrab_MouseLeftButtonDown);
  127. var mouseEventHandler2 = new MouseEventHandler(this.AngleGrab_MouseLeave);
  128. var mouseEventHandler3 = new MouseEventHandler(this.AngleGrab_MouseEnter);
  129. var mouseEventHandler4 = new MouseEventHandler(this.AngleGrab_LostMouseCapture);
  130. bool flag = this._angleGrab != null;
  131. if (flag)
  132. {
  133. this._angleGrab.MouseMove -= (mouseEventHandler);
  134. this._angleGrab.MouseLeftButtonUp -= (mouseButtonEventHandler);
  135. this._angleGrab.MouseLeftButtonDown -= (mouseButtonEventHandler2);
  136. this._angleGrab.MouseLeave -= (mouseEventHandler2);
  137. this._angleGrab.MouseEnter -= (mouseEventHandler3);
  138. this._angleGrab.LostMouseCapture -= (mouseEventHandler4);
  139. }
  140. this._angleGrab = value;
  141. flag = (this._angleGrab != null);
  142. if (flag)
  143. {
  144. this._angleGrab.MouseMove += (mouseEventHandler);
  145. this._angleGrab.MouseLeftButtonUp += (mouseButtonEventHandler);
  146. this._angleGrab.MouseLeftButtonDown += (mouseButtonEventHandler2);
  147. this._angleGrab.MouseLeave += (mouseEventHandler2);
  148. this._angleGrab.MouseEnter += (mouseEventHandler3);
  149. this._angleGrab.LostMouseCapture += (mouseEventHandler4);
  150. }
  151. }
  152. }
  153. public virtual Polygon Arrow
  154. {
  155. get
  156. {
  157. return this._arrow;
  158. }
  159. set
  160. {
  161. var mouseEventHandler = new MouseEventHandler(this.Arrow_MouseLeave);
  162. var mouseEventHandler2 = new MouseEventHandler(this.Arrow_MouseEnter);
  163. var mouseEventHandler3 = new MouseEventHandler(this.Arrow_MouseMove);
  164. var mouseButtonEventHandler = new MouseButtonEventHandler(this.Arrow_MouseLeftButtonUp);
  165. var mouseEventHandler4 = new MouseEventHandler(this.Arrow_LostMouseCapture);
  166. var mouseButtonEventHandler2 = new MouseButtonEventHandler(this.Arrow_MouseLeftButtonDown);
  167. var mouseRightButtonUp = new MouseButtonEventHandler(this.Arrow_MouseRightButtonUp);
  168. bool flag = this._arrow != null;
  169. if (flag)
  170. {
  171. this._arrow.MouseLeave -= (mouseEventHandler);
  172. this._arrow.MouseEnter -= (mouseEventHandler2);
  173. this._arrow.MouseMove -= (mouseEventHandler3);
  174. this._arrow.MouseLeftButtonUp -= (mouseButtonEventHandler);
  175. this._arrow.LostMouseCapture -= (mouseEventHandler4);
  176. this._arrow.MouseLeftButtonDown -= (mouseButtonEventHandler2);
  177. this._arrow.MouseRightButtonDown -= mouseRightButtonUp;
  178. }
  179. this._arrow = value;
  180. flag = (this._arrow != null);
  181. if (flag)
  182. {
  183. this._arrow.MouseLeave += (mouseEventHandler);
  184. this._arrow.MouseEnter += (mouseEventHandler2);
  185. this._arrow.MouseMove += (mouseEventHandler3);
  186. this._arrow.MouseLeftButtonUp += (mouseButtonEventHandler);
  187. this._arrow.LostMouseCapture += (mouseEventHandler4);
  188. this._arrow.MouseLeftButtonDown += (mouseButtonEventHandler2);
  189. //Up弹出Popup,PopupManager里用Down关闭Popup
  190. this._arrow.MouseRightButtonUp += mouseRightButtonUp;
  191. }
  192. }
  193. }
  194. public override string RootName
  195. {
  196. get { return "DrawArrow"; }
  197. }
  198. #endregion Public Properties
  199. #endregion Properties
  200. #region Methods
  201. #region Public Methods
  202. public override string Abbreviation()
  203. {
  204. return MenuDescription();
  205. }
  206. public override List<ControlPair> AdditionalEditors()
  207. {
  208. var list = new List<ControlPair>()
  209. {
  210. new ControlPair()
  211. {
  212. ControlLeft = new TextBlock
  213. {
  214. Text = LanguageManager.FindResource(LanguageConst.DrawingTool_Edit_Angle)
  215. },
  216. ControlRight = new ChartSingleUpDown(this, "Angle", 0, 360, 5f)
  217. }
  218. };
  219. return list;
  220. }
  221. public override bool CanPlotOnAllSymbols()
  222. {
  223. return false;
  224. }
  225. public override bool CanSaveByPercent()
  226. {
  227. return false;
  228. }
  229. public override IDrawingTool Clone()
  230. {
  231. return new DrawingArrow
  232. {
  233. mColor = ColorHelper.Red
  234. };
  235. }
  236. public override string Description()
  237. {
  238. return this.MenuDescription();
  239. }
  240. public override ImageSource Icon()
  241. {
  242. ImageSource result;
  243. try
  244. {
  245. result = ImageHelper.GetImage("arrow_up_blue.png");
  246. }
  247. catch (Exception expr_3A)
  248. {
  249. ProjectData.SetProjectError(expr_3A);
  250. result = null;
  251. ProjectData.ClearProjectError();
  252. }
  253. return result;
  254. }
  255. public override string MenuDescription()
  256. {
  257. return LanguageManager.FindResource(LanguageConst.DrawingTool_Edit_Description_Arrow);
  258. }
  259. public override DrawingToolType ToolType()
  260. {
  261. return DrawingToolType.Arrow;
  262. }
  263. #endregion Public Methods
  264. #region Protected Methods
  265. protected override void AddFromInfo(DrawingToolInfo info)
  266. {
  267. base.AddFromInfo(info);
  268. try
  269. {
  270. XElement xElement = XElement.Parse(info.XML);
  271. bool flag = xElement.Name == "Root";
  272. if (flag)
  273. {
  274. bool flag2 = xElement.Attribute("Value1") != null;
  275. if (flag2)
  276. {
  277. this._angle = XMLHelp.ParseDouble(xElement.Attribute("Value1").Value);
  278. }
  279. }
  280. }
  281. catch (Exception expr_9C)
  282. {
  283. ProjectData.SetProjectError(expr_9C);
  284. ProjectData.ClearProjectError();
  285. }
  286. }
  287. protected override void AddFromXml(XElement xml)
  288. {
  289. bool flag = xml.Attribute("ANG") != null;
  290. if (flag)
  291. {
  292. this._angle = XMLHelp.ParseDouble(xml.Attribute("ANG").Value);
  293. }
  294. }
  295. protected override void AddToInfo(DrawingToolInfo info)
  296. {
  297. base.AddToInfo(info);
  298. XElement xElement = new XElement("Root");
  299. xElement.Add(new XAttribute("Value1", XMLHelp.NumToString(this._angle)));
  300. info.XML = xElement.ToString();
  301. }
  302. protected override void AddToXml(XElement xml, List<object> args)
  303. {
  304. xml.Add(new XAttribute("ANG", XMLHelp.NumToString(this._angle)));
  305. }
  306. protected override void ColorChanged()
  307. {
  308. bool flag = this.Arrow != null;
  309. if (flag)
  310. {
  311. this.Arrow.Fill = new SolidColorBrush(this.mColor);
  312. this.PropertyChanged();
  313. }
  314. }
  315. protected override List<FrameworkElement> GetDrawingPlots(Chart owner, ScaleLayer aScale, Rect aRect)
  316. {
  317. var list = new List<FrameworkElement>();
  318. bool flag = this.Arrow == null;
  319. if (flag)
  320. {
  321. this.Arrow = new Polygon { Fill = new SolidColorBrush(this.mColor) };
  322. this.Arrow.Points.Add(new Point(8.0, 0.0));
  323. this.Arrow.Points.Add(new Point(15.0, 9.0));
  324. this.Arrow.Points.Add(new Point(11.0, 9.0));
  325. this.Arrow.Points.Add(new Point(11.0, 16.0));
  326. this.Arrow.Points.Add(new Point(5.0, 16.0));
  327. this.Arrow.Points.Add(new Point(5.0, 9.0));
  328. this.Arrow.Points.Add(new Point(1.0, 9.0));
  329. this.Arrow.Cursor = Cursors.Hand;
  330. this._rotateTransform = new RotateTransform { CenterX = (8.0) };
  331. this.Arrow.RenderTransform = (this._rotateTransform);
  332. this.BuildCanvas();
  333. this.UpdatePloylines(Colors.Transparent);
  334. }
  335. this.MoveDrawingToNewLocations(aRect);
  336. list.Add(this._canvas);
  337. list.Add(this.Arrow);
  338. return list;
  339. }
  340. protected override void MoveDrawingToNewLocations(Rect aRect)
  341. {
  342. bool flag = this.Arrow != null;
  343. if (flag)
  344. {
  345. this._rotateTransform.Angle = (this._angle);
  346. this._canvasRotateTransform.Angle = (this._angle);
  347. this.Arrow.SetValue(Canvas.LeftProperty, this.mLastX1 - 7.5); //箭头宽15, 减去宽度一半
  348. this.Arrow.SetValue(Canvas.TopProperty, this.mLastY1);
  349. this._canvas.SetValue(Canvas.LeftProperty, this.mLastX1 - 2.0 - 7.5);//箭头宽15, 减去宽度一半
  350. this._canvas.SetValue(Canvas.TopProperty, this.mLastY1);
  351. var startPoint = new Point(this.mLastX1, this.mLastY1);
  352. GeometryHelper.PointFromAngleAndDistance(startPoint, this._angle, 22.0);
  353. }
  354. flag = (this.SelectionArea != null);
  355. if (flag)
  356. {
  357. this.SelectionArea.SetPosition(this.mLastX1, this.mLastY1, this.mLastX1, this.mLastY1);
  358. }
  359. }
  360. protected override bool ShowDragHandle()
  361. {
  362. return false;
  363. }
  364. #endregion Protected Methods
  365. #region Private Methods
  366. private void AngleGrab_LostMouseCapture(object sender, MouseEventArgs e)
  367. {
  368. this._angleGrabMouseDown = false;
  369. this.Chart.LockPainting = false;
  370. this.Chart.Refresh();
  371. bool flag = !this._angleGrabMouseEnter;
  372. if (flag)
  373. {
  374. this.UpdatePloylines(Colors.Transparent);
  375. }
  376. }
  377. private void AngleGrab_MouseEnter(object sender, MouseEventArgs e)
  378. {
  379. if (this.Chart != null && this.Chart.PointerType == PointerType.Drawing)
  380. {
  381. _preDrawingTool = this.Chart.CurrentDrawingTool;
  382. this.Chart.PointerType = PointerType.Cursor;
  383. this.Chart.SetCursorImagePos(true, e);
  384. }
  385. else
  386. {
  387. bool isDarkBackground = this.Chart.IsDarkBackground;
  388. this.UpdatePloylines(isDarkBackground ? Colors.Cyan : ColorHelper.DarkBlue);
  389. this._angleGrabMouseEnter = true;
  390. }
  391. }
  392. private void AngleGrab_MouseLeave(object sender, MouseEventArgs e)
  393. {
  394. if (_preDrawingTool == null)
  395. {
  396. this._angleGrabMouseEnter = false;
  397. bool flag = !this._angleGrabMouseDown;
  398. if (flag)
  399. {
  400. this.UpdatePloylines(Colors.Transparent);
  401. }
  402. }
  403. else
  404. {
  405. this.Chart.CurrentDrawingTool = _preDrawingTool;
  406. this.Chart.SetCursorImagePos(true, e);
  407. _preDrawingTool = null;
  408. }
  409. }
  410. private void AngleGrab_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  411. {
  412. bool flag = this.AngleGrab.CaptureMouse();
  413. if (flag)
  414. {
  415. this._angleGrabMouseDown = true;
  416. this.Chart.LockPainting = true;
  417. }
  418. }
  419. private void AngleGrab_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  420. {
  421. this._angleGrabMouseDown = false;
  422. this.AngleGrab.ReleaseMouseCapture();
  423. this.Chart.LockPainting = false;
  424. this.Chart.Refresh();
  425. }
  426. private void AngleGrab_MouseMove(object sender, MouseEventArgs e)
  427. {
  428. try
  429. {
  430. bool flag = this._angleGrabMouseDown;
  431. if (flag)
  432. {
  433. Point p = default(Point);
  434. p.X = (this.mLastX1 + 8.0);
  435. p.Y = (this.mLastY1);
  436. this.Angle = (float)GeometryHelper.AngleFromPoints(p, e.GetPosition((UIElement)this.Arrow.Parent));
  437. this.MoveDrawingToNewLocations(this.mLastRect);
  438. }
  439. }
  440. catch (Exception expr_92)
  441. {
  442. ProjectData.SetProjectError(expr_92);
  443. ProjectData.ClearProjectError();
  444. }
  445. }
  446. private void Arrow_LostMouseCapture(object sender, MouseEventArgs e)
  447. {
  448. this.Chart.LockPainting = false;
  449. this._arrowMouseDown = false;
  450. this._arrowMove = false;
  451. this.Chart.Refresh();
  452. }
  453. private void Arrow_MouseEnter(object sender, MouseEventArgs e)
  454. {
  455. if (this.Chart != null && this.Chart.PointerType == PointerType.Drawing)
  456. {
  457. _preDrawingTool = this.Chart.CurrentDrawingTool;
  458. this.Chart.PointerType = PointerType.Cursor;
  459. this.Chart.SetCursorImagePos(true, e);
  460. }
  461. else
  462. {
  463. bool isDarkBackground = this.Chart.IsDarkBackground;
  464. this.Arrow.Stroke = isDarkBackground
  465. ? new SolidColorBrush(Colors.White)
  466. : new SolidColorBrush(Colors.Black);
  467. this.UpdatePloylines(Colors.Gray);
  468. }
  469. }
  470. private void Arrow_MouseLeave(object sender, MouseEventArgs e)
  471. {
  472. if (_preDrawingTool == null)
  473. {
  474. this.Arrow.Stroke = null;
  475. this.UpdatePloylines(Colors.Transparent);
  476. }
  477. else
  478. {
  479. this.Chart.CurrentDrawingTool = _preDrawingTool;
  480. this.Chart.SetCursorImagePos(true, e);
  481. _preDrawingTool = null;
  482. }
  483. }
  484. private void Arrow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  485. {
  486. this.Chart.LockPainting = true;
  487. this._position = e.GetPosition((UIElement)this.Arrow.Parent);
  488. //加上左边纵坐标位移
  489. _position.X += this.Chart.GetChartPanelOffset();
  490. this._arrowMouseDown = true;
  491. this._arrowMove = false;
  492. this.Arrow.CaptureMouse();
  493. this.PrepareToMove();
  494. }
  495. private void Arrow_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  496. {
  497. this.Chart.LockPainting = false;
  498. bool flag = !this._arrowMove;
  499. if (flag)
  500. {
  501. bool flag2 = Chart.PointerType == PointerType.Erase;
  502. if (flag2)
  503. {
  504. this.Delete();
  505. }
  506. else
  507. {
  508. //右键菜单
  509. //this.ShowPopupMenu(e);
  510. }
  511. }
  512. else
  513. {
  514. var position = e.GetPosition((UIElement)this.Arrow.Parent);
  515. //加上左边纵坐标位移
  516. position.X += this.Chart.GetChartPanelOffset();
  517. this.MoveArrow(position);
  518. this.OwnerSpec.ToolChanged(this);
  519. this._arrowMouseDown = false;
  520. this.Chart.Refresh();
  521. }
  522. this.Arrow.ReleaseMouseCapture();
  523. this._arrowMouseDown = false;
  524. this._arrowMove = false;
  525. }
  526. /// <summary>
  527. /// Up弹出Popup,PopupManager里用Down关闭Popup
  528. /// </summary>
  529. /// <param name="sender">The source of the event.</param>
  530. /// <param name="e">The <see cref="MouseButtonEventArgs"/> instance containing the event data.</param>
  531. private void Arrow_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
  532. {
  533. ////使用上下文菜单代替Popup,以免以免父控件有右键菜单
  534. //this.ShowContextMenu(e);
  535. //修改popup父容器,即每个Chart提供RootPanel,不使用PopupRoot和TrueRootVisual
  536. //因为应用程序可能开多个图表窗口
  537. this.ShowPopupMenu(e);
  538. e.Handled = true;
  539. }
  540. private void Arrow_MouseMove(object sender, MouseEventArgs e)
  541. {
  542. bool flag = this.Chart != null && Chart.PointerType == PointerType.Erase;
  543. if (flag)
  544. {
  545. this.Chart.SetCursorImagePos(true, e);
  546. }
  547. flag = this._arrowMouseDown;
  548. if (flag)
  549. {
  550. Point position = e.GetPosition((UIElement)this.Arrow.Parent);
  551. //加上左边纵坐标位移
  552. position.X += this.Chart.GetChartPanelOffset();
  553. float num = GeometryHelper.DistanceBetweenPoints(this._position, position);
  554. flag = (num > 8f);
  555. if (flag)
  556. {
  557. this._arrowMove = true;
  558. }
  559. flag = this._arrowMove;
  560. if (flag)
  561. {
  562. this.MoveArrow(position);
  563. }
  564. }
  565. }
  566. private void BuildCanvas()
  567. {
  568. this._canvas = new Canvas();
  569. this._canvasRotateTransform = new RotateTransform { CenterX = (10.0) };
  570. this._canvas.RenderTransform = this._canvasRotateTransform;
  571. var polyline = new Polyline();
  572. polyline.Points.Add(new Point(1.0, 20.0));
  573. polyline.Points.Add(new Point(5.0, 22.0));
  574. polyline.Points.Add(new Point(10.0, 23.0));
  575. polyline.Points.Add(new Point(15.0, 22.0));
  576. polyline.Points.Add(new Point(19.0, 20.0));
  577. polyline.Stroke = new SolidColorBrush(Colors.White);
  578. polyline.StrokeThickness = 2.0;
  579. polyline.StrokeStartLineCap = PenLineCap.Triangle;
  580. polyline.StrokeEndLineCap = PenLineCap.Triangle;
  581. polyline.IsHitTestVisible = (false);
  582. this._canvas.Children.Add(polyline);
  583. this._ploylineList.Add(polyline);
  584. polyline = new Polyline();
  585. polyline.Points.Add(new Point(0.0, 20.0));
  586. polyline.Points.Add(new Point(5.0, 17.0));
  587. polyline.Points.Add(new Point(2.0, 25.0));
  588. polyline.Points.Add(new Point(0.0, 20.0));
  589. polyline.Fill = (new SolidColorBrush(Colors.White));
  590. polyline.IsHitTestVisible = (false);
  591. this._canvas.Children.Add(polyline);
  592. this._ploylineList.Add(polyline);
  593. polyline = new Polyline();
  594. polyline.Points.Add(new Point(20.0, 20.0));
  595. polyline.Points.Add(new Point(15.0, 17.0));
  596. polyline.Points.Add(new Point(18.0, 25.0));
  597. polyline.Points.Add(new Point(20.0, 20.0));
  598. polyline.Fill = new SolidColorBrush(Colors.White);
  599. polyline.IsHitTestVisible = (false);
  600. this._canvas.Children.Add(polyline);
  601. this._ploylineList.Add(polyline);
  602. this.AngleGrab = new Ellipse { Width = (20.0), Height = (10.0) };
  603. this.AngleGrab.SetValue(Canvas.TopProperty, 15.0);
  604. this.AngleGrab.Stroke = (null);
  605. this.AngleGrab.Fill = (new SolidColorBrush(Colors.Transparent));
  606. this._canvas.Children.Add(this.AngleGrab);
  607. }
  608. private void MoveArrow(Point curPos)
  609. {
  610. var frameworkElement = (FrameworkElement)this.Arrow.Parent;
  611. var num = (float)(frameworkElement.ActualHeight - 6.0);
  612. bool flag = num < 0f;
  613. if (flag)
  614. {
  615. num = 0f;
  616. }
  617. var num2 = (float)frameworkElement.ActualWidth;
  618. flag = (num2 < 0f);
  619. if (flag)
  620. {
  621. num2 = 0f;
  622. }
  623. flag = (curPos.X < 0.0);
  624. if (flag)
  625. {
  626. curPos.X = (0.0);
  627. }
  628. flag = (curPos.Y < 0.0);
  629. if (flag)
  630. {
  631. curPos.Y = (0.0);
  632. }
  633. flag = (curPos.X > (double)num2);
  634. if (flag)
  635. {
  636. curPos.X = ((double)num2);
  637. }
  638. flag = (curPos.Y > (double)num);
  639. if (flag)
  640. {
  641. curPos.Y = ((double)num);
  642. }
  643. this.MovePlot(this._position, curPos);
  644. }
  645. private void RemoveArrow(object sender, EventArgs e)
  646. {
  647. this.Delete();
  648. }
  649. private void ShowEditor(object sender, EventArgs e)
  650. {
  651. this.ShowEditor((MouseEventArgs)e);
  652. }
  653. private void ShowPopupMenu(MouseEventArgs e)
  654. {
  655. var popUpMenu = new PopupMenu(this.Chart.RootPanel) { FontSize = this.GetChartFontSize() };
  656. popUpMenu.AddItem(LanguageManager.FindResource(LanguageConst.DrawingTool_MenuItem_Edit), ImageHelper.GetImage("PropertiesHS.png"), new EventHandler(this.ShowEditor));
  657. popUpMenu.AddSeperator();
  658. popUpMenu.AddItem(LanguageManager.FindResource(LanguageConst.DrawingTool_MenuItem_Remove), ImageHelper.GetImage("DeleteHS.png"), new EventHandler(this.RemoveArrow));
  659. popUpMenu.Show(e, new Point(-5.0, -5.0));
  660. }
  661. /// <summary>
  662. /// Shows the context menu.
  663. /// </summary>
  664. /// <param name="e">The <see cref="MouseEventArgs"/> instance containing the event data.</param>
  665. private void ShowContextMenu(MouseEventArgs e)
  666. {
  667. var contextMenu = new ContextMenu();
  668. contextMenu.Items.Add(MenuItemHelper.CreateMenuItem(LanguageManager.FindResource(LanguageConst.DrawingTool_MenuItem_Edit), ImageHelper.GetImage("PropertiesHS.png"), new EventHandler(this.ShowEditor)));
  669. contextMenu.Items.Add(new Separator());
  670. contextMenu.Items.Add(MenuItemHelper.CreateMenuItem(LanguageManager.FindResource(LanguageConst.DrawingTool_MenuItem_Remove), ImageHelper.GetImage("DeleteHS.png"), new EventHandler(this.RemoveArrow)));
  671. this._canvas.ContextMenu = contextMenu;
  672. this._canvas.ContextMenu.IsOpen = true;
  673. }
  674. private void UpdatePloylines(Color aColor)
  675. {
  676. if (_ploylineList == null || _ploylineList.Count == 0) return;
  677. foreach (var current in _ploylineList)
  678. {
  679. if (current.Fill != null)
  680. {
  681. current.Fill = new SolidColorBrush(aColor);
  682. }
  683. if (current.Stroke != null)
  684. {
  685. current.Stroke = new SolidColorBrush(aColor);
  686. }
  687. }
  688. }
  689. #endregion Private Methods
  690. #endregion Methods
  691. }
  692. }