using FastReport.Controls; using FastReport.Design; using FastReport.Utils; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace FastReport.Forms { internal partial class DesignerOptionsForm : BaseDialogForm { private Designer designer; private List optionsPages; private List processedPluginTypes; private static int activePageIndex; private void AddPages(DesignerOptionsPage page) { if (page != null) { foreach (TabPage tab in page.tc1.TabPages) { PageControlPage panel = new PageControlPage(); panel.Text = tab.Text; panel.Dock = DockStyle.Fill; panel.BackColor = SystemColors.Window; while (tab.Controls.Count > 0) tab.Controls[0].Parent = panel; pageControl1.Controls.Add(panel); } optionsPages.Add(page); page.Init(); page.RestartRequiredChanged += (s, e) => { lblRestart.Visible = page.RestartRequired; }; } } private void ProcessPlugins(PluginCollection plugins) { foreach (IDesignerPlugin plugin in plugins) { if (processedPluginTypes.IndexOf(plugin.GetType()) != -1) continue; DesignerOptionsPage page = plugin.GetOptionsPage(); AddPages(page); processedPluginTypes.Add(plugin.GetType()); } } private void DesignerOptions_FormClosing(object sender, FormClosingEventArgs e) { foreach (DesignerOptionsPage page in optionsPages) { page.Done(DialogResult); page.Dispose(); } activePageIndex = pageControl1.ActivePageIndex; } public override void Localize() { base.Localize(); Text = Res.Get("Designer,Options"); lblRestart.Text = Res.Get("Forms,UIOptions,Restart"); } public override void UpdateDpiDependencies() { base.UpdateDpiDependencies(); foreach (DesignerOptionsPage page in optionsPages) { page.UpdateDpiDependencies(); } } public DesignerOptionsForm(Designer designer) { this.designer = designer; optionsPages = new List(); InitializeComponent(); Localize(); // add default pages AddPages(new PluginsOptions(designer)); processedPluginTypes = new List(); ProcessPlugins(this.designer.Plugins); if (this.designer.ActiveReportTab != null) ProcessPlugins(this.designer.ActiveReportTab.Plugins); pageControl1.ActivePageIndex = activePageIndex; UIUtils.CheckRTL(this); UpdateDpiDependencies(); } } }