using System.Drawing; using System.Windows.Forms; namespace Optimizer { public sealed class MoonTree : TreeView { string[] rootNodes = { "cpu", "ram", "mobo", "gpu", "disk", "inet", "audio", "dev" }; string _primaryItemTag = "_primary"; public MoonTree() { this.DrawMode = TreeViewDrawMode.OwnerDrawAll; this.BackColor = Color.FromArgb(20, 20, 20); this.ForeColor = Color.White; this.BorderStyle = BorderStyle.None; } private bool FindName(string name) { foreach (string x in rootNodes) { if (x == name) return true; } return false; } protected override void OnDrawNode(DrawTreeNodeEventArgs e) { Rectangle r = new Rectangle(); r.X = 0; r.Y = e.Bounds.Y; r.Height = e.Bounds.Height; r.Width = 100000; if (e.Node.IsSelected) { e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(50, 50, 50)), r); //e.Bounds } else { e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(20, 20, 20)), r); //e.Bounds } if (FindName(e.Node.Name)) TextRenderer.DrawText(e.Graphics, e.Node.Text, this.Font, e.Node.Bounds, Color.Silver); else if (e.Node.Tag != null && e.Node.Tag.ToString() == _primaryItemTag) TextRenderer.DrawText(e.Graphics, e.Node.Text, this.Font, e.Node.Bounds, OptionsHelper.ForegroundColor); else TextRenderer.DrawText(e.Graphics, e.Node.Text, this.Font, e.Node.Bounds, Color.White); if (this.ImageList != null && this.ImageList.Images.Count > 0 && e.Node.SelectedImageIndex > -1) { e.Graphics.DrawImage(this.ImageList.Images[e.Node.SelectedImageIndex], e.Bounds.Left + 15 * e.Node.Level + 5, e.Bounds.Top); } } } }