using FastReport.Forms; using FastReport.Utils; using System; using System.Windows.Forms; namespace FastReport.Design.PageDesigners.Code { internal class FRXPageDesigner : PageDesignerBase { #region Fields private SyntaxEditorBase edit; private bool editInitialized; private bool canModify; #endregion #region Properties public SyntaxEditorBase Edit { get { if (!editInitialized) CreateEdit(); return edit; } } public override Report Report => Designer.ActiveReport; #endregion #region Private Methods private void CreateEdit() { editInitialized = true; edit = SyntaxEditorClass.CreateInstance(SyntaxEditorKind.Xml); edit.Font = DrawUtils.FixedFont; edit.Dock = DockStyle.Fill; edit.BorderStyle = BorderStyle.None; edit.AllowDrop = true; Controls.Add(edit); edit.TextChanged += Edit_TextChanged; edit.ImeMode = ImeMode.On; edit.SyntaxType = SyntaxType.Xml; UpdateOptions(); UpdateFont(); } private void UpdateOptions() { Edit.ShowLineNumbers = true; Edit.ConvertTabsToSpaces = CodePageSettings.UseSpaces; Edit.IndentationSize = CodePageSettings.TabSize; } private void SetText() { canModify = false; Edit.Text = Report.SaveToString(); Edit.Modified = false; canModify = true; } private void Edit_TextChanged(object sender, EventArgs e) { if (canModify) Designer.SetModified(null, "no-undo"); } public void CommitChanges() { if (Edit.Modified) { Edit.Modified = false; Designer.ActiveReportTab.UpdateFromFRX(Edit.Text); } } #endregion #region Public Methods public void UpdateFont() { Edit.Font = this.LogicalToDevice(Storage.GetFont("CodePageDesigner,CodePage", DrawUtils.FixedFont)); } public override bool CanCopy() => true; public override void Copy() { Edit.Copy(); } public override void Cut() { Edit.Cut(); } public override bool CanPaste() => true; public override void Paste() { Edit.Paste(); } public override bool CanUndo() { return Edit.CanUndo; } public override void Undo() { Edit.Undo(); } public override bool CanRedo() { return Edit.CanRedo; } public override void Redo() { Edit.Redo(); } public override void SelectAll() { Edit.SelectAll(); } public override void ResetModified() { if (editInitialized) Edit.Modified = false; } public override void FillObjects(bool resetSelection) { // do nothing } public override void PageDeactivated() { base.PageDeactivated(); CommitChanges(); } public override void PageActivated() { base.PageActivated(); SetText(); Edit.Focus(); } #endregion #region IDesignerPlugin public override void SaveState() { FRXPageSettings.SaveState(); } public override void RestoreState() { } public override DesignerOptionsPage GetOptionsPage() { return new FRXPageOptions(this); } #endregion public FRXPageDesigner(Designer designer) : base(designer) { Name = "FRX"; } } }