DesignerOptionsForm.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using FastReport.Controls;
  2. using FastReport.Design;
  3. using FastReport.Utils;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Drawing;
  7. using System.Windows.Forms;
  8. namespace FastReport.Forms
  9. {
  10. internal partial class DesignerOptionsForm : BaseDialogForm
  11. {
  12. private Designer designer;
  13. private List<DesignerOptionsPage> optionsPages;
  14. private List<Type> processedPluginTypes;
  15. private static int activePageIndex;
  16. private void AddPages(DesignerOptionsPage page)
  17. {
  18. if (page != null)
  19. {
  20. foreach (TabPage tab in page.tc1.TabPages)
  21. {
  22. PageControlPage panel = new PageControlPage();
  23. panel.Text = tab.Text;
  24. panel.Dock = DockStyle.Fill;
  25. panel.BackColor = SystemColors.Window;
  26. while (tab.Controls.Count > 0)
  27. tab.Controls[0].Parent = panel;
  28. pageControl1.Controls.Add(panel);
  29. }
  30. optionsPages.Add(page);
  31. page.Init();
  32. page.RestartRequiredChanged += (s, e) =>
  33. {
  34. lblRestart.Visible = page.RestartRequired;
  35. };
  36. }
  37. }
  38. private void ProcessPlugins(PluginCollection plugins)
  39. {
  40. foreach (IDesignerPlugin plugin in plugins)
  41. {
  42. if (processedPluginTypes.IndexOf(plugin.GetType()) != -1)
  43. continue;
  44. DesignerOptionsPage page = plugin.GetOptionsPage();
  45. AddPages(page);
  46. processedPluginTypes.Add(plugin.GetType());
  47. }
  48. }
  49. private void DesignerOptions_FormClosing(object sender, FormClosingEventArgs e)
  50. {
  51. foreach (DesignerOptionsPage page in optionsPages)
  52. {
  53. page.Done(DialogResult);
  54. page.Dispose();
  55. }
  56. activePageIndex = pageControl1.ActivePageIndex;
  57. }
  58. public override void Localize()
  59. {
  60. base.Localize();
  61. Text = Res.Get("Designer,Options");
  62. lblRestart.Text = Res.Get("Forms,UIOptions,Restart");
  63. }
  64. public override void UpdateDpiDependencies()
  65. {
  66. base.UpdateDpiDependencies();
  67. foreach (DesignerOptionsPage page in optionsPages)
  68. {
  69. page.UpdateDpiDependencies();
  70. }
  71. }
  72. public DesignerOptionsForm(Designer designer)
  73. {
  74. this.designer = designer;
  75. optionsPages = new List<DesignerOptionsPage>();
  76. InitializeComponent();
  77. Localize();
  78. // add default pages
  79. AddPages(new PluginsOptions(designer));
  80. processedPluginTypes = new List<Type>();
  81. ProcessPlugins(this.designer.Plugins);
  82. if (this.designer.ActiveReportTab != null)
  83. ProcessPlugins(this.designer.ActiveReportTab.Plugins);
  84. pageControl1.ActivePageIndex = activePageIndex;
  85. UIUtils.CheckRTL(this);
  86. UpdateDpiDependencies();
  87. }
  88. }
  89. }