MatrixStyleListBox.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Windows.Forms;
  5. using System.Drawing;
  6. using System.ComponentModel;
  7. using FastReport.Matrix;
  8. using FastReport.Utils;
  9. namespace FastReport.Controls
  10. {
  11. internal class MatrixStyleListBox : ListBox
  12. {
  13. private bool updating;
  14. private MatrixStyleSheet styles;
  15. public event EventHandler StyleSelected;
  16. public string Style
  17. {
  18. get
  19. {
  20. if (SelectedIndex < 1)
  21. return "";
  22. return (string)Items[SelectedIndex];
  23. }
  24. set
  25. {
  26. updating = true;
  27. int i = Items.IndexOf(value);
  28. SelectedIndex = i != -1 ? i : 0;
  29. updating = false;
  30. }
  31. }
  32. public MatrixStyleSheet Styles
  33. {
  34. get { return styles; }
  35. set
  36. {
  37. styles = value;
  38. if (value != null)
  39. UpdateItems();
  40. }
  41. }
  42. protected override void OnDrawItem(DrawItemEventArgs e)
  43. {
  44. e.DrawBackground();
  45. Graphics g = e.Graphics;
  46. if (e.Index >= 0)
  47. {
  48. string name = (string)Items[e.Index];
  49. int styleIndex = styles.IndexOf(name);
  50. if (styleIndex != -1)
  51. name = Res.Get("ComponentsMisc,Matrix," + name);
  52. Image img = styleIndex == -1 ? this.GetImage(76) : Styles.GetStyleBitmap(styleIndex);
  53. this.DrawImageAndText(e, img, name);
  54. }
  55. }
  56. protected override void OnSelectedIndexChanged(EventArgs e)
  57. {
  58. base.OnSelectedIndexChanged(e);
  59. if (updating)
  60. return;
  61. if (StyleSelected != null)
  62. StyleSelected(this, EventArgs.Empty);
  63. }
  64. private void UpdateItems()
  65. {
  66. Items.Clear();
  67. Items.Add(Res.Get("Designer,Toolbar,Style,NoStyle"));
  68. foreach (StyleCollection s in styles)
  69. {
  70. Items.Add(s.Name);
  71. }
  72. }
  73. public MatrixStyleListBox()
  74. {
  75. DrawMode = DrawMode.OwnerDrawFixed;
  76. ItemHeight = 19;
  77. IntegralHeight = false;
  78. Size = new Size(150, 300);
  79. }
  80. }
  81. }