LinkMenu.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using FastReport.Utils;
  2. using System;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. namespace FastReport.FastQueryBuilder
  6. {
  7. internal class LinkMenu
  8. {
  9. private ContextMenuStrip linkMenu;
  10. private ToolStripMenuItem linkMenuName;
  11. private ToolStripMenuItem linkMenuJoin;
  12. private ToolStripMenuItem linkMenuCondition;
  13. private ToolStripMenuItem linkMenuDelete;
  14. private Control owner;
  15. public Link CurrentLink { get; private set; }
  16. public event EventHandler DeleteLink;
  17. public LinkMenu(Control owner)
  18. {
  19. this.owner = owner;
  20. MyRes res = new MyRes("Forms,QueryBuilder");
  21. linkMenu = new ContextMenuStrip();
  22. linkMenuName = new ToolStripMenuItem();
  23. linkMenuJoin = new ToolStripMenuItem(res.Get("Joins"));
  24. linkMenuCondition = new ToolStripMenuItem(res.Get("Condition"));
  25. linkMenuDelete = new ToolStripMenuItem(res.Get("Delete"));
  26. linkMenuDelete.Click += (s, e) => DeleteLink?.Invoke(this, e);
  27. linkMenu.Items.AddRange(new ToolStripItem[] { linkMenuName, new ToolStripSeparator(), linkMenuJoin, linkMenuCondition, linkMenuDelete });
  28. // join types
  29. foreach (var joinType in QueryEnums.JoinTypesToStr)
  30. {
  31. var itm = new ToolStripMenuItem(joinType);
  32. itm.Click += (s, e) => linkMenu_SetJoinType(s);
  33. linkMenuJoin.DropDownItems.Add(itm);
  34. }
  35. // conditions
  36. res = new MyRes("Forms,QueryBuilder,Where");
  37. var conditions = new string[] {
  38. res.Get("Equal"),
  39. res.Get("NotEqual"),
  40. res.Get("GtOrEqual"),
  41. res.Get("Gt"),
  42. res.Get("LtOrEqual"),
  43. res.Get("Lt"),
  44. res.Get("Like"),
  45. res.Get("NotLike") };
  46. foreach (var condition in conditions)
  47. {
  48. var itm = new ToolStripMenuItem(condition);
  49. itm.Click += (s, e) => linkMenu_SetLinkCondition(s);
  50. linkMenuCondition.DropDownItems.Add(itm);
  51. }
  52. }
  53. public void UpdateDpiDependencies()
  54. {
  55. linkMenu.Font = owner.Font;
  56. linkMenuName.Font = new Font(owner.Font, FontStyle.Bold);
  57. linkMenuDelete.Image = owner.GetImage(51);
  58. }
  59. public void Show(Control c, Point point, Link link)
  60. {
  61. CurrentLink = link;
  62. UpdateLinkMenu();
  63. linkMenu.Show(c, point);
  64. }
  65. private void UpdateLinkMenu()
  66. {
  67. linkMenuName.Text = CurrentLink.From.Name + " " + QueryEnums.WhereTypesToStr[(int)CurrentLink.Where] + " " + CurrentLink.To.Name;
  68. for (int i = 0; i < linkMenuJoin.DropDownItems.Count; i++)
  69. {
  70. var itm = linkMenuJoin.DropDownItems[i] as ToolStripMenuItem;
  71. itm.Checked = (int)CurrentLink.Join == i;
  72. }
  73. for (int i = 0; i < linkMenuCondition.DropDownItems.Count; i++)
  74. {
  75. var itm = linkMenuCondition.DropDownItems[i] as ToolStripMenuItem;
  76. itm.Checked = (int)CurrentLink.Where == i;
  77. }
  78. }
  79. private void linkMenu_SetJoinType(object sender)
  80. {
  81. var i = linkMenuJoin.DropDownItems.IndexOf((ToolStripMenuItem)sender);
  82. CurrentLink.Join = (QueryEnums.JoinTypes)i;
  83. }
  84. private void linkMenu_SetLinkCondition(object sender)
  85. {
  86. var i = linkMenuCondition.DropDownItems.IndexOf((ToolStripMenuItem)sender);
  87. CurrentLink.Where = (QueryEnums.WhereTypes)i;
  88. }
  89. }
  90. }