protected override void OnDrawNode(DrawTreeNodeEventArgs e) { if (e.Bounds.Height <= 0) { return; } TreeMenuNode node = (TreeMenuNode)e.Node; //DrawMenuNode(node); DrawMenuNode(e.Graphics, e.Bounds, (TreeMenuNode)e.Node, GetMenuState(e.State)); }
private void AddMenu(TreeMenuNode parent, IList<JToken> menus) { try { if (parent == null) { string menuStr = File.ReadAllText(Path.Combine(Application.StartupPath, @"../../mainMenu/mainMenu.txt")); JObject menuObj = JObject.Parse(menuStr); menus = menuObj["menus"].Children().ToList(); } foreach (JToken ret in menus) { if (ret["children"] != null) { IList<JToken> subMenus = ret["children"].Children().ToList(); MainMenuTag menuTag = JsonConvert.DeserializeObject<MainMenuTag>(ret.ToString()); menuTag.Type = MenuType.Folder; TreeMenuNode newNode = new TreeMenuNode(menuTag.Name, MenuType.Folder); newNode.Tag = menuTag; if(parent == null) { mainMenu.Nodes.Add(newNode); } else { parent.Nodes.Add(newNode); } AddMenu(newNode, subMenus); } else { MainMenuTag menuTag = JsonConvert.DeserializeObject<MainMenuTag>(ret.ToString()); menuTag.Type = MenuType.Leaf; TreeMenuNode newNode = new TreeMenuNode(menuTag.Name, MenuType.Leaf); newNode.Tag = menuTag; if (parent == null) { mainMenu.Nodes.Add(newNode); } else { parent.Nodes.Add(newNode); } } } } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); } }
private void DrawFolder(Graphics g, Rectangle rect, TreeMenuNode node, MenuState state) { Color colorFrom = GetGrandientColor(state, true, true); Color colorTo = GetGrandientColor(state, true, false); Brush br = new LinearGradientBrush(rect, colorFrom, colorTo, LinearGradientMode.Vertical); g.FillRectangle(br, rect.X, rect.Y, rect.Width, rect.Height); br.Dispose(); if (node.Text.Length > 0) { g.DrawString(node.Text, node.TreeView.Font, Brushes.Black, 10 + node.Level * 15, 10 + rect.Y); } }
//protected override void OnNodeMouseHover(TreeNodeMouseHoverEventArgs e) //{ // base.OnNodeMouseHover(e); // TreeMenuNode node = (TreeMenuNode)e.Node; //} #endregion private void DrawMenuNode(Graphics g, Rectangle rect, TreeMenuNode node, MenuState state) { if (node.Type == MenuType.Invalid) { return; } if (node.Type == MenuType.Folder) { DrawFolder(g, rect, node, state); } else if (node.Type == MenuType.Leaf) { DrawLeaf(g, rect, node, state); } }
private void DrawLeaf(Graphics g, Rectangle rect, TreeMenuNode node, MenuState state) { Color colorFrom = GetGrandientColor(state, false, true); Color colorTo = GetGrandientColor(state, false, false); Brush br = new LinearGradientBrush(rect, colorFrom, colorTo, 90f); g.FillRectangle(br, rect.X, rect.Y, rect.Width, rect.Height); br.Dispose(); if (node.Text.Length > 0) { g.DrawString(node.Text, node.TreeView.Font, Brushes.Black, 10 + node.Level * 15, 10 + rect.Y); } }
//protected override void OnNodeMouseHover(TreeNodeMouseHoverEventArgs e) //{ // base.OnNodeMouseHover(e); // TreeMenuNode node = (TreeMenuNode)e.Node; //} #endregion private void DrawMenuNode(Graphics g, Rectangle rect, TreeMenuNode node, MenuState state) { if (node.Type == MenuType.Invalid) return; if (node.Type == MenuType.Folder) { DrawFolder(g, rect, node, state); } else if (node.Type == MenuType.Leaf) { DrawLeaf(g, rect, node, state); } }