using FastReport.Utils; using System; using System.Drawing; using System.Windows.Forms; namespace FastReport.FastQueryBuilder { internal class LinkMenu { private ContextMenuStrip linkMenu; private ToolStripMenuItem linkMenuName; private ToolStripMenuItem linkMenuJoin; private ToolStripMenuItem linkMenuCondition; private ToolStripMenuItem linkMenuDelete; private Control owner; public Link CurrentLink { get; private set; } public event EventHandler DeleteLink; public LinkMenu(Control owner) { this.owner = owner; MyRes res = new MyRes("Forms,QueryBuilder"); linkMenu = new ContextMenuStrip(); linkMenuName = new ToolStripMenuItem(); linkMenuJoin = new ToolStripMenuItem(res.Get("Joins")); linkMenuCondition = new ToolStripMenuItem(res.Get("Condition")); linkMenuDelete = new ToolStripMenuItem(res.Get("Delete")); linkMenuDelete.Click += (s, e) => DeleteLink?.Invoke(this, e); linkMenu.Items.AddRange(new ToolStripItem[] { linkMenuName, new ToolStripSeparator(), linkMenuJoin, linkMenuCondition, linkMenuDelete }); // join types foreach (var joinType in QueryEnums.JoinTypesToStr) { var itm = new ToolStripMenuItem(joinType); itm.Click += (s, e) => linkMenu_SetJoinType(s); linkMenuJoin.DropDownItems.Add(itm); } // conditions res = new MyRes("Forms,QueryBuilder,Where"); var conditions = new string[] { res.Get("Equal"), res.Get("NotEqual"), res.Get("GtOrEqual"), res.Get("Gt"), res.Get("LtOrEqual"), res.Get("Lt"), res.Get("Like"), res.Get("NotLike") }; foreach (var condition in conditions) { var itm = new ToolStripMenuItem(condition); itm.Click += (s, e) => linkMenu_SetLinkCondition(s); linkMenuCondition.DropDownItems.Add(itm); } } public void UpdateDpiDependencies() { linkMenu.Font = owner.Font; linkMenuName.Font = new Font(owner.Font, FontStyle.Bold); linkMenuDelete.Image = owner.GetImage(51); } public void Show(Control c, Point point, Link link) { CurrentLink = link; UpdateLinkMenu(); linkMenu.Show(c, point); } private void UpdateLinkMenu() { linkMenuName.Text = CurrentLink.From.Name + " " + QueryEnums.WhereTypesToStr[(int)CurrentLink.Where] + " " + CurrentLink.To.Name; for (int i = 0; i < linkMenuJoin.DropDownItems.Count; i++) { var itm = linkMenuJoin.DropDownItems[i] as ToolStripMenuItem; itm.Checked = (int)CurrentLink.Join == i; } for (int i = 0; i < linkMenuCondition.DropDownItems.Count; i++) { var itm = linkMenuCondition.DropDownItems[i] as ToolStripMenuItem; itm.Checked = (int)CurrentLink.Where == i; } } private void linkMenu_SetJoinType(object sender) { var i = linkMenuJoin.DropDownItems.IndexOf((ToolStripMenuItem)sender); CurrentLink.Join = (QueryEnums.JoinTypes)i; } private void linkMenu_SetLinkCondition(object sender) { var i = linkMenuCondition.DropDownItems.IndexOf((ToolStripMenuItem)sender); CurrentLink.Where = (QueryEnums.WhereTypes)i; } } }