GalleryForm.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using FastReport.DataVisualization.Charting;
  6. using FastReport.Forms;
  7. using FastReport.Utils;
  8. using FastReport.Controls;
  9. namespace FastReport.MSChart
  10. {
  11. internal partial class GalleryForm : BaseDialogForm
  12. {
  13. private static int FLastCategoryIndex;
  14. private SeriesChartType FSelectedSeriesType;
  15. public SeriesChartType SelectedSeriesType
  16. {
  17. get { return FSelectedSeriesType; }
  18. }
  19. public bool NewArea
  20. {
  21. get { return cbNewArea.Checked; }
  22. }
  23. private void GalleryForm_Shown(object sender, EventArgs e)
  24. {
  25. pcPages.ActivePageIndex = FLastCategoryIndex;
  26. }
  27. private void PopulateCategories()
  28. {
  29. foreach (GalleryCategory category in ChartGallery.Categories)
  30. {
  31. PageControlPage page = new PageControlPage();
  32. page.Text = Res.Get("Forms,ChartGallery,Categories," + category.Name).Replace("&", "&&");
  33. page.Parent = pcPages;
  34. page.Dock = DockStyle.Fill;
  35. page.BackColor = SystemColors.Window;
  36. PopulateCategory(category, page);
  37. }
  38. }
  39. private void PopulateCategory(GalleryCategory category, PageControlPage page)
  40. {
  41. ListView listView = new ListView();
  42. listView.Parent = page;
  43. listView.Location = new Point(16, 32);
  44. listView.Size = new Size(page.Width - 16, page.Height - 32);
  45. listView.LargeImageList = ChartGallery.Images;
  46. listView.BorderStyle = BorderStyle.None;
  47. listView.SelectedIndexChanged += new EventHandler(listView_SelectedIndexChanged);
  48. listView.DoubleClick += new EventHandler(listView_DoubleClick);
  49. foreach (GalleryItem item in category.Items)
  50. {
  51. ListViewItem lvItem = listView.Items.Add(Res.Get("Forms,ChartGallery,Series," + item.Name));
  52. lvItem.ImageIndex = item.ImageIndex;
  53. lvItem.Tag = item.SeriesType;
  54. }
  55. }
  56. private void listView_SelectedIndexChanged(object sender, EventArgs e)
  57. {
  58. if ((sender as ListView).SelectedItems.Count > 0)
  59. FSelectedSeriesType = (SeriesChartType)(sender as ListView).SelectedItems[0].Tag;
  60. btnOk.Enabled = (sender as ListView).SelectedItems.Count > 0;
  61. }
  62. private void listView_DoubleClick(object sender, EventArgs e)
  63. {
  64. if (btnOk.Enabled)
  65. DialogResult = DialogResult.OK;
  66. }
  67. private void GalleryForm_FormClosed(object sender, FormClosedEventArgs e)
  68. {
  69. FLastCategoryIndex = pcPages.ActivePageIndex;
  70. }
  71. public override void Localize()
  72. {
  73. base.Localize();
  74. Text = Res.Get("Forms,ChartGallery");
  75. cbNewArea.Text = Res.Get("Forms,ChartGallery,NewArea");
  76. }
  77. public GalleryForm()
  78. {
  79. InitializeComponent();
  80. PopulateCategories();
  81. Localize();
  82. }
  83. }
  84. internal static class ChartGallery
  85. {
  86. public static List<GalleryCategory> Categories;
  87. public static ImageList Images;
  88. public static ImageList SmallImages;
  89. public static GalleryItem FindItem(SeriesChartType seriesType)
  90. {
  91. foreach (GalleryCategory category in Categories)
  92. {
  93. foreach (GalleryItem item in category.Items)
  94. {
  95. if (item.SeriesType == seriesType)
  96. return item;
  97. }
  98. }
  99. return null;
  100. }
  101. static ChartGallery()
  102. {
  103. Categories = new List<GalleryCategory>();
  104. Images = new ImageList();
  105. Size imagesize = new Size(96, 72);
  106. if (imagesize.Width > 256)
  107. imagesize.Width = 256;
  108. if (imagesize.Height > 256)
  109. imagesize.Height = 256;
  110. Images.ImageSize = imagesize;
  111. Images.ColorDepth = ColorDepth.Depth32Bit;
  112. SmallImages = new ImageList();
  113. SmallImages.ImageSize = new Size(48, 36);
  114. SmallImages.ColorDepth = ColorDepth.Depth32Bit;
  115. GalleryCategory category = new GalleryCategory("BarColumn");
  116. category.Items.Add(new GalleryItem(SeriesChartType.Bar, "Bar"));
  117. category.Items.Add(new GalleryItem(SeriesChartType.StackedBar, "StackedBar"));
  118. category.Items.Add(new GalleryItem(SeriesChartType.StackedBar100, "StackedBar100"));
  119. category.Items.Add(new GalleryItem(SeriesChartType.Column, "Column"));
  120. category.Items.Add(new GalleryItem(SeriesChartType.StackedColumn, "StackedColumn"));
  121. category.Items.Add(new GalleryItem(SeriesChartType.StackedColumn100, "StackedColumn100"));
  122. Categories.Add(category);
  123. category = new GalleryCategory("Area");
  124. category.Items.Add(new GalleryItem(SeriesChartType.Area, "Area"));
  125. category.Items.Add(new GalleryItem(SeriesChartType.SplineArea, "SplineArea"));
  126. category.Items.Add(new GalleryItem(SeriesChartType.StackedArea, "StackedArea"));
  127. category.Items.Add(new GalleryItem(SeriesChartType.StackedArea100, "StackedArea100"));
  128. Categories.Add(category);
  129. category = new GalleryCategory("Line");
  130. category.Items.Add(new GalleryItem(SeriesChartType.Line, "Line"));
  131. category.Items.Add(new GalleryItem(SeriesChartType.FastLine, "FastLine"));
  132. category.Items.Add(new GalleryItem(SeriesChartType.StepLine, "StepLine"));
  133. category.Items.Add(new GalleryItem(SeriesChartType.Spline, "Spline"));
  134. Categories.Add(category);
  135. category = new GalleryCategory("PointBubble");
  136. category.Items.Add(new GalleryItem(SeriesChartType.Bubble, "Bubble"));
  137. category.Items.Add(new GalleryItem(SeriesChartType.Point, "Point"));
  138. category.Items.Add(new GalleryItem(SeriesChartType.FastPoint, "FastPoint"));
  139. Categories.Add(category);
  140. category = new GalleryCategory("Pie");
  141. category.Items.Add(new GalleryItem(SeriesChartType.Pie, "Pie"));
  142. category.Items.Add(new GalleryItem(SeriesChartType.Doughnut, "Doughnut"));
  143. Categories.Add(category);
  144. category = new GalleryCategory("Circular");
  145. category.Items.Add(new GalleryItem(SeriesChartType.Polar, "Polar"));
  146. category.Items.Add(new GalleryItem(SeriesChartType.Radar, "Radar"));
  147. Categories.Add(category);
  148. category = new GalleryCategory("Financial");
  149. category.Items.Add(new GalleryItem(SeriesChartType.Stock, "Stock"));
  150. category.Items.Add(new GalleryItem(SeriesChartType.Candlestick, "Candlestick"));
  151. category.Items.Add(new GalleryItem(SeriesChartType.Kagi, "Kagi"));
  152. category.Items.Add(new GalleryItem(SeriesChartType.Renko, "Renko"));
  153. category.Items.Add(new GalleryItem(SeriesChartType.PointAndFigure, "PointAndFigure"));
  154. category.Items.Add(new GalleryItem(SeriesChartType.ThreeLineBreak, "ThreeLineBreak"));
  155. Categories.Add(category);
  156. category = new GalleryCategory("PyramidFunnel");
  157. category.Items.Add(new GalleryItem(SeriesChartType.Pyramid, "Pyramid"));
  158. category.Items.Add(new GalleryItem(SeriesChartType.Funnel, "Funnel"));
  159. Categories.Add(category);
  160. category = new GalleryCategory("Range");
  161. category.Items.Add(new GalleryItem(SeriesChartType.Range, "Range"));
  162. category.Items.Add(new GalleryItem(SeriesChartType.SplineRange, "SplineRange"));
  163. category.Items.Add(new GalleryItem(SeriesChartType.RangeColumn, "RangeColumn"));
  164. category.Items.Add(new GalleryItem(SeriesChartType.RangeBar, "RangeBar"));
  165. Categories.Add(category);
  166. }
  167. }
  168. internal class GalleryCategory
  169. {
  170. public string Name;
  171. public List<GalleryItem> Items;
  172. public GalleryCategory(string name)
  173. {
  174. Name = name;
  175. Items = new List<GalleryItem>();
  176. }
  177. }
  178. internal class GalleryItem
  179. {
  180. public SeriesChartType SeriesType;
  181. public string Name;
  182. public Bitmap Image;
  183. public int ImageIndex;
  184. public GalleryItem(SeriesChartType seriesType, string name)
  185. {
  186. SeriesType = seriesType;
  187. Name = name;
  188. Image = ResourceLoader.GetBitmap("MSChart." + name + ".png");
  189. ChartGallery.Images.Images.Add(Image);
  190. ChartGallery.SmallImages.Images.Add(Image.GetThumbnailImage(48, 36, null, IntPtr.Zero));
  191. ImageIndex = ChartGallery.Images.Images.Count - 1;
  192. }
  193. }
  194. }