using FastReport.Controls; using FastReport.Utils; using FastReport.Wizards; using System; using System.Collections.Generic; using System.Windows.Forms; namespace FastReport.Design.RibbonDesigner { internal class RibbonStandardGroup : RibbonGroup { #region Fields public ToolbarNewButton btnNew; public ToolbarOpenButton btnOpen; public ToolbarButton btnPreview; private Timer previewTimer; #endregion #region Private Methods private void UpdateControls() { btnNew.Enabled = Designer.cmdNew.Enabled; btnOpen.Enabled = Designer.cmdOpen.Enabled; btnPreview.Enabled = Designer.cmdPreview.Enabled; } private void btnPreview_Click(object sender, EventArgs e) { previewTimer.Start(); } #endregion #region Protected Methods protected override void Dispose(bool disposing) { if (disposing) { previewTimer.Dispose(); } base.Dispose(disposing); } #endregion #region Public Methods public override void SelectionChanged() { base.SelectionChanged(); Throttle.Execute(UpdateControls); } public override void UpdateContent() { base.UpdateContent(); Throttle.Execute(UpdateControls); } public override void Localize() { base.Localize(); MyRes res = new MyRes("Designer,Menu,File"); Text = Res.Get("Designer,Ribbon,Report"); SetItemText(btnNew, res.Get("New")); SetItemText(btnOpen, res.Get("Open")); SetItemText(btnPreview, res.Get("Preview1")); } public override void UpdateDpiDependencies() { if (State == GroupState.Collapsed) return; base.UpdateDpiDependencies(); btnNew.Image = Designer.GetImage("Ribbon.New.png"); btnOpen.Image = Designer.GetImage("Ribbon.Open.png"); btnPreview.Image = Designer.GetImage("Ribbon.Report.png"); } #endregion public RibbonStandardGroup(Designer designer) : base(designer) { Name = "StandardGroup"; CollapsedImageName = "Ribbon.New.png"; Priority = GroupPriority.Medium; btnNew = new ToolbarNewButton(designer); btnNew.MakeBig(); btnOpen = new ToolbarOpenButton(designer, "btnStdOpen", 1); btnOpen.MakeBig(); btnPreview = new ToolbarButton("btnStdPreview", 3, btnPreview_Click); btnPreview.MakeBig(120); Panel.AddItems( btnNew, btnOpen, btnPreview); Localize(); UpdateDpiDependencies(); previewTimer = new Timer(); previewTimer.Interval = 20; previewTimer.Tick += (s, e) => { previewTimer.Stop(); Designer.cmdPreview.Invoke(s, e); }; } } internal class ToolbarNewButton : ToolStripSplitButton, IToolbarItem { public Designer Designer { get; } public bool BeginGroup { get; set; } private void btnNew_DropDownOpening(object sender, EventArgs e) { DropDown.Items.Clear(); List objects = new List(); RegisteredObjects.Objects.EnumItems(objects); foreach (ObjectInfo info in objects) { if (info.Object != null) { if (info.Object.IsSubclassOf(typeof(EasterEggWizard))) continue; if (info.Object.IsSubclassOf(typeof(WizardBase)) && info.Flags != 1) { var item = new ToolStripMenuItem(Res.TryGet(info.Text)) { Font = DrawUtils.DefaultFont, Tag = info }; item.Image = Designer.GetImage(info.ImageIndex); DropDown.Items.Add(item); } } } } private void btnNew_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) { DropDown.Close(); var wizard = Activator.CreateInstance((e.ClickedItem.Tag as ObjectInfo).Object) as WizardBase; wizard.Run(Designer); } private void btnNew_ButtonClick(object sender, EventArgs e) { new BlankReportWizard().Run(Designer); } public ToolbarNewButton(Designer designer) { Designer = designer; DropDownOpening += btnNew_DropDownOpening; ButtonClick += btnNew_ButtonClick; DropDownItemClicked += btnNew_DropDownItemClicked; } } internal class ToolbarPreviewButton : ToolStripSplitButton, IToolbarItem { public Designer Designer { get; } public bool BeginGroup { get; set; } public ToolbarPreviewButton(Designer designer) { Designer = designer; } } }