DialogPage.DesignExt.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. using System;
  2. using System.ComponentModel;
  3. using System.Drawing;
  4. using System.Drawing.Drawing2D;
  5. using System.Windows.Forms;
  6. using FastReport.Design;
  7. using FastReport.Design.PageDesigners.Dialog;
  8. using FastReport.Utils;
  9. namespace FastReport.Dialog
  10. {
  11. partial class DialogPage
  12. {
  13. #region Private Fields
  14. private Bitmap formBitmap;
  15. #endregion Private Fields
  16. #region Public Properties
  17. /// <inheritdoc/>
  18. [Browsable(false)]
  19. public override float Left
  20. {
  21. get { return base.Left; }
  22. set { base.Left = value; }
  23. }
  24. /// <inheritdoc/>
  25. public override SizeF SnapSize
  26. {
  27. get { return new SizeF(DialogWorkspace.Grid.SnapSize, DialogWorkspace.Grid.SnapSize); }
  28. }
  29. /// <inheritdoc/>
  30. [Browsable(false)]
  31. public override float Top
  32. {
  33. get { return base.Top; }
  34. set { base.Top = value; }
  35. }
  36. #endregion Public Properties
  37. #region Internal Properties
  38. [Browsable(false)]
  39. internal Bitmap FormBitmap
  40. {
  41. get
  42. {
  43. if (formBitmap == null)
  44. ResetFormBitmap();
  45. return formBitmap;
  46. }
  47. }
  48. #endregion Internal Properties
  49. #region Public Methods
  50. /// <inheritdoc/>
  51. public override void DrawSelection(FRPaintEventArgs e)
  52. {
  53. float m = Form.DpiMultiplier();
  54. Pen pen = e.Cache.GetPen(Color.Gray, m, DashStyle.Dot);
  55. e.Graphics.DrawRectangle(pen, -Offset().X - 2 * m, -Offset().Y - 2 * m, Width + 3.5f * m, Height + 3.5f * m);
  56. base.DrawSelection(e);
  57. }
  58. /// <inheritdoc/>
  59. public override Type GetPageDesignerType()
  60. {
  61. return typeof(DialogPageDesigner);
  62. }
  63. /// <inheritdoc/>
  64. public override ContextMenuBase GetContextMenu()
  65. {
  66. return new DialogPageMenu(Report.Designer);
  67. }
  68. /// <inheritdoc/>
  69. public override void HandleDoubleClick()
  70. {
  71. Report.Designer.ActiveReportTab.SwitchToCode();
  72. if (String.IsNullOrEmpty(LoadEvent))
  73. {
  74. string newEventName = Name + "_Load";
  75. if (Report.CodeHelper.AddHandler(typeof(EventHandler), newEventName))
  76. {
  77. LoadEvent = newEventName;
  78. Report.Designer.SetModified(null, "Change");
  79. }
  80. }
  81. else
  82. {
  83. Report.CodeHelper.LocateHandler(LoadEvent);
  84. }
  85. }
  86. /// <inheritdoc/>
  87. public override void HandleMouseDown(FRMouseEventArgs e)
  88. {
  89. e.handled = true;
  90. e.mode = WorkspaceMode2.SelectionRect;
  91. e.activeObject = this;
  92. }
  93. /// <inheritdoc/>
  94. public override void HandleMouseHover(FRMouseEventArgs e)
  95. {
  96. base.HandleMouseHover(e);
  97. if (e.handled)
  98. e.cursor = Cursors.Default;
  99. }
  100. /// <inheritdoc/>
  101. public override void HandleMouseUp(FRMouseEventArgs e)
  102. {
  103. base.HandleMouseUp(e);
  104. if (e.mode == WorkspaceMode2.SelectionRect)
  105. {
  106. SelectedObjectCollection selection = Report.Designer.SelectedObjects;
  107. selection.Clear();
  108. // find objects inside the selection rect
  109. foreach (DialogComponentBase c in Controls)
  110. {
  111. e.handled = false;
  112. c.HandleMouseUp(e);
  113. // object is inside
  114. if (e.handled)
  115. selection.Add(c);
  116. }
  117. if (selection.Count == 0)
  118. selection.Add(this);
  119. }
  120. }
  121. /// <inheritdoc/>
  122. public override void SetDefaults()
  123. {
  124. ButtonControl btnOk = new ButtonControl();
  125. btnOk.Parent = this;
  126. btnOk.Name = CreateButtonName("btnOk");
  127. btnOk.Text = Res.Get("Buttons,OK");
  128. btnOk.Location = new Point((int)ClientSize.Width - 166, (int)ClientSize.Height - 31);
  129. btnOk.Size = new Size(75, 23);
  130. btnOk.DialogResult = DialogResult.OK;
  131. btnOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
  132. ButtonControl btnCancel = new ButtonControl();
  133. btnCancel.Parent = this;
  134. btnCancel.Name = CreateButtonName("btnCancel");
  135. btnCancel.Text = Res.Get("Buttons,Cancel");
  136. btnCancel.Location = new Point((int)ClientSize.Width - 83, (int)ClientSize.Height - 31);
  137. btnCancel.Size = new Size(75, 23);
  138. btnCancel.DialogResult = DialogResult.Cancel;
  139. btnCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
  140. AcceptButton = btnOk;
  141. CancelButton = btnCancel;
  142. Form.AutoScaleDimensions = new SizeF(96f, 96f);
  143. Form.AutoScaleMode = AutoScaleMode.Dpi;
  144. base.SetDefaults();
  145. }
  146. #endregion Public Methods
  147. #region Internal Methods
  148. internal void ResetFormBitmap()
  149. {
  150. if (formBitmap != null)
  151. {
  152. formBitmap.Dispose();
  153. formBitmap = null;
  154. }
  155. if (!IsDesigning)
  156. return;
  157. formBitmap = DrawUtils.DrawToBitmap(Form, false);
  158. // form has round edges which are filled black (DrawToBitmap issue/bug).
  159. DrawUtils.FloodFill(formBitmap, 0, 0, Color.FromArgb(0, 0, 0), Color.White);
  160. DrawUtils.FloodFill(formBitmap, formBitmap.Width - 1, 0, Color.FromArgb(0, 0, 0), Color.White);
  161. }
  162. #endregion
  163. #region Protected Methods
  164. /// <inheritdoc/>
  165. protected override SelectionPoint[] GetSelectionPoints()
  166. {
  167. return new SelectionPoint[] {
  168. new SelectionPoint(Width - Offset().X + 1, Height - Offset().Y + 1, SizingPoint.RightBottom),
  169. new SelectionPoint(Width / 2 - Offset().X, Height - Offset().Y + 1, SizingPoint.BottomCenter),
  170. new SelectionPoint(Width - Offset().X + 1, Height / 2 - Offset().Y, SizingPoint.RightCenter) };
  171. }
  172. #endregion Protected Methods
  173. #region Private Methods
  174. private Point Offset()
  175. {
  176. Point offset = new Point(0, 0);
  177. offset = Form.PointToScreen(offset);
  178. offset.X -= Form.Left;
  179. offset.Y -= Form.Top;
  180. return offset;
  181. }
  182. private bool ShouldSerializeBackColor()
  183. {
  184. return BackColor != SystemColors.Control;
  185. }
  186. //private bool ShouldSerializeFont()
  187. //{
  188. // return Font.Name != "Tahoma" || Font.Size != 8 || Font.Style != FontStyle.Regular;
  189. //}
  190. #endregion Private Methods
  191. }
  192. internal class DialogPageMenu : ComponentBaseMenu
  193. {
  194. #region Private Methods
  195. private void miCopy_Click(object sender, EventArgs e)
  196. {
  197. Designer.cmdCopyPage.Invoke();
  198. }
  199. private void miDelete_Click(object sender, EventArgs e)
  200. {
  201. Designer.cmdDeletePage.Invoke();
  202. }
  203. #endregion // Private Methods
  204. #region Constructors
  205. public DialogPageMenu(Designer designer) : base(designer)
  206. {
  207. miEdit.Visible = Designer.cmdEdit.Enabled;
  208. miCut.Visible = false;
  209. miPaste.Visible = true;
  210. miBringToFront.Visible = false;
  211. miSendToBack.Visible = false;
  212. miCopy.BeginGroup = true;
  213. miCopy.Enabled = Designer.cmdCopyPage.Enabled;
  214. miPaste.Enabled = Designer.cmdPaste.Enabled;
  215. miDelete.Enabled = Designer.cmdDeletePage.Enabled;
  216. miCopy.Click += miCopy_Click;
  217. miDelete.Click += miDelete_Click;
  218. }
  219. #endregion // Constructors
  220. }
  221. }