FRXPageDesigner.WPF.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using FastReport.Forms;
  2. using FastReport.Utils;
  3. using System;
  4. using System.Windows.Forms;
  5. namespace FastReport.Design.PageDesigners.Code
  6. {
  7. internal class FRXPageDesigner : PageDesignerBase
  8. {
  9. #region Fields
  10. private SyntaxEditorBase edit;
  11. private bool editInitialized;
  12. private bool canModify;
  13. #endregion
  14. #region Properties
  15. public SyntaxEditorBase Edit
  16. {
  17. get
  18. {
  19. if (!editInitialized)
  20. CreateEdit();
  21. return edit;
  22. }
  23. }
  24. public override Report Report => Designer.ActiveReport;
  25. #endregion
  26. #region Private Methods
  27. private void CreateEdit()
  28. {
  29. editInitialized = true;
  30. edit = SyntaxEditorClass.CreateInstance(SyntaxEditorKind.Xml);
  31. edit.Font = DrawUtils.FixedFont;
  32. edit.Dock = DockStyle.Fill;
  33. edit.BorderStyle = BorderStyle.None;
  34. edit.AllowDrop = true;
  35. Controls.Add(edit);
  36. edit.TextChanged += Edit_TextChanged;
  37. edit.ImeMode = ImeMode.On;
  38. edit.SyntaxType = SyntaxType.Xml;
  39. UpdateOptions();
  40. UpdateFont();
  41. }
  42. private void UpdateOptions()
  43. {
  44. Edit.ShowLineNumbers = true;
  45. Edit.ConvertTabsToSpaces = CodePageSettings.UseSpaces;
  46. Edit.IndentationSize = CodePageSettings.TabSize;
  47. }
  48. private void SetText()
  49. {
  50. canModify = false;
  51. Edit.Text = Report.SaveToString();
  52. Edit.Modified = false;
  53. canModify = true;
  54. }
  55. private void Edit_TextChanged(object sender, EventArgs e)
  56. {
  57. if (canModify)
  58. Designer.SetModified(null, "no-undo");
  59. }
  60. public void CommitChanges()
  61. {
  62. if (Edit.Modified)
  63. {
  64. Edit.Modified = false;
  65. Designer.ActiveReportTab.UpdateFromFRX(Edit.Text);
  66. }
  67. }
  68. #endregion
  69. #region Public Methods
  70. public void UpdateFont()
  71. {
  72. Edit.Font = this.LogicalToDevice(Storage.GetFont("CodePageDesigner,CodePage", DrawUtils.FixedFont));
  73. }
  74. public override bool CanCopy() => true;
  75. public override void Copy()
  76. {
  77. Edit.Copy();
  78. }
  79. public override void Cut()
  80. {
  81. Edit.Cut();
  82. }
  83. public override bool CanPaste() => true;
  84. public override void Paste()
  85. {
  86. Edit.Paste();
  87. }
  88. public override bool CanUndo()
  89. {
  90. return Edit.CanUndo;
  91. }
  92. public override void Undo()
  93. {
  94. Edit.Undo();
  95. }
  96. public override bool CanRedo()
  97. {
  98. return Edit.CanRedo;
  99. }
  100. public override void Redo()
  101. {
  102. Edit.Redo();
  103. }
  104. public override void SelectAll()
  105. {
  106. Edit.SelectAll();
  107. }
  108. public override void ResetModified()
  109. {
  110. if (editInitialized)
  111. Edit.Modified = false;
  112. }
  113. public override void FillObjects(bool resetSelection)
  114. {
  115. // do nothing
  116. }
  117. public override void PageDeactivated()
  118. {
  119. base.PageDeactivated();
  120. CommitChanges();
  121. }
  122. public override void PageActivated()
  123. {
  124. base.PageActivated();
  125. SetText();
  126. Edit.Focus();
  127. }
  128. #endregion
  129. #region IDesignerPlugin
  130. public override void SaveState()
  131. {
  132. FRXPageSettings.SaveState();
  133. }
  134. public override void RestoreState()
  135. {
  136. }
  137. public override DesignerOptionsPage GetOptionsPage()
  138. {
  139. return new FRXPageOptions(this);
  140. }
  141. #endregion
  142. public FRXPageDesigner(Designer designer) : base(designer)
  143. {
  144. Name = "FRX";
  145. }
  146. }
  147. }