MoonTree.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Drawing;
  2. using System.Windows.Forms;
  3. namespace Optimizer
  4. {
  5. public sealed class MoonTree : TreeView
  6. {
  7. string[] rootNodes =
  8. {
  9. "cpu", "ram", "mobo", "gpu", "disk", "inet", "audio", "dev"
  10. };
  11. string _primaryItemTag = "_primary";
  12. public MoonTree()
  13. {
  14. this.DrawMode = TreeViewDrawMode.OwnerDrawAll;
  15. this.BackColor = Color.FromArgb(20, 20, 20);
  16. this.ForeColor = Color.White;
  17. this.BorderStyle = BorderStyle.None;
  18. }
  19. private bool FindName(string name)
  20. {
  21. foreach (string x in rootNodes)
  22. {
  23. if (x == name) return true;
  24. }
  25. return false;
  26. }
  27. protected override void OnDrawNode(DrawTreeNodeEventArgs e)
  28. {
  29. Rectangle r = new Rectangle();
  30. r.X = 0;
  31. r.Y = e.Bounds.Y;
  32. r.Height = e.Bounds.Height;
  33. r.Width = 100000;
  34. if (e.Node.IsSelected)
  35. {
  36. e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(50, 50, 50)), r); //e.Bounds
  37. }
  38. else
  39. {
  40. e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(20, 20, 20)), r); //e.Bounds
  41. }
  42. if (FindName(e.Node.Name)) TextRenderer.DrawText(e.Graphics, e.Node.Text, this.Font, e.Node.Bounds, Color.Silver);
  43. 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);
  44. else TextRenderer.DrawText(e.Graphics, e.Node.Text, this.Font, e.Node.Bounds, Color.White);
  45. if (this.ImageList != null && this.ImageList.Images.Count > 0 && e.Node.SelectedImageIndex > -1)
  46. {
  47. e.Graphics.DrawImage(this.ImageList.Images[e.Node.SelectedImageIndex], e.Bounds.Left + 15 * e.Node.Level + 5, e.Bounds.Top);
  48. }
  49. }
  50. }
  51. }