using FastReport.Forms; using FastReport.Utils; using System.Windows.Forms; namespace FastReport.Design.PageDesigners { internal class PageDesignerBase : Panel, IDesignerPlugin { #region Properties public PageBase Page { get; set; } public Designer Designer { get; } public bool Locked { get; private set; } public bool IsInsertingObject { get; set; } public virtual Report Report => Page.Report; public string PluginName => Name; public virtual float Zoom { get { return 1; } set { } } private ControlStorageService storage; /// /// Gets storage service. /// public ControlStorageService Storage { get { if (storage == null) { // pass Designer as a control to get dpi from it (case: Avalonia can't get dpi correctly after disposing the control) storage = new ControlStorageService(Designer, "Designer," + Name); } return storage; } } #endregion #region Public Methods // this method is called when the page becomes active. You may, for example, modify the main menu // in this method. public virtual void PageActivated() { } // this method is called when the page becomes inactive. You should remove items added to the main menu // in this method. public virtual void PageDeactivated() { } public virtual void FillObjects(bool resetSelection) { Designer.Objects.Clear(); Designer.Objects.Add(Page.Report); Designer.Objects.Add(Page); foreach (Base b in Page.AllObjects) { Designer.Objects.Add(b); } if (resetSelection) { Designer.SelectedObjects.Clear(); Designer.SelectedObjects.Add(Page); } } public virtual bool CanCopy() { if (Designer.SelectedObjects.Count > 0) { // if at least one object can be copied, allow the operation foreach (Base c in Designer.SelectedObjects) { if (c.HasFlag(Flags.CanCopy)) return true; } } return false; } public virtual void Copy() { Designer.Clipboard.Copy(); } public virtual void Cut() { Designer.Clipboard.Cut(); } public virtual bool CanPaste() => Designer.Clipboard.CanPaste; public virtual void Paste() { Designer.Clipboard.Paste(); } public virtual bool CanUndo() => false; public virtual void Undo() { } public virtual bool CanRedo() => false; public virtual void Redo() { } public virtual void Paste(ObjectCollection list, InsertFrom source) { } public virtual void CancelPaste() { } public virtual void ResetModified() { } public virtual void SelectAll() { } public virtual void ZoomPageWidth() { } public virtual void ZoomWholePage() { } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) SaveState(); } #endregion #region IDesignerPlugin public virtual void Localize() { } public virtual void SaveState() { } public virtual void RestoreState() { } public virtual void SelectionChanged() { } public virtual void UpdateContent() { } public virtual void Lock() { Locked = true; } public virtual void Unlock() { Locked = false; UpdateContent(); } public virtual DesignerOptionsPage GetOptionsPage() { return null; } public virtual void UpdateUIStyle() { } public virtual void UpdateDpiDependencies() { } #endregion public PageDesignerBase(Designer designer) : base() { Designer = designer; IsInsertingObject = false; } } }