using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using FastReport.Design;
using FastReport.Design.PageDesigners.Dialog;
using FastReport.Utils;
namespace FastReport.Dialog
{
partial class DialogPage
{
#region Private Fields
private Bitmap formBitmap;
#endregion Private Fields
#region Public Properties
///
[Browsable(false)]
public override float Left
{
get { return base.Left; }
set { base.Left = value; }
}
///
public override SizeF SnapSize
{
get { return new SizeF(DialogWorkspace.Grid.SnapSize, DialogWorkspace.Grid.SnapSize); }
}
///
[Browsable(false)]
public override float Top
{
get { return base.Top; }
set { base.Top = value; }
}
#endregion Public Properties
#region Internal Properties
[Browsable(false)]
internal Bitmap FormBitmap
{
get
{
if (formBitmap == null)
ResetFormBitmap();
return formBitmap;
}
}
#endregion Internal Properties
#region Public Methods
///
public override void DrawSelection(FRPaintEventArgs e)
{
float m = Form.DpiMultiplier();
Pen pen = e.Cache.GetPen(Color.Gray, m, DashStyle.Dot);
e.Graphics.DrawRectangle(pen, -Offset().X - 2 * m, -Offset().Y - 2 * m, Width + 3.5f * m, Height + 3.5f * m);
base.DrawSelection(e);
}
///
public override Type GetPageDesignerType()
{
return typeof(DialogPageDesigner);
}
///
public override ContextMenuBase GetContextMenu()
{
return new DialogPageMenu(Report.Designer);
}
///
public override void HandleDoubleClick()
{
Report.Designer.ActiveReportTab.SwitchToCode();
if (String.IsNullOrEmpty(LoadEvent))
{
string newEventName = Name + "_Load";
if (Report.CodeHelper.AddHandler(typeof(EventHandler), newEventName))
{
LoadEvent = newEventName;
Report.Designer.SetModified(null, "Change");
}
}
else
{
Report.CodeHelper.LocateHandler(LoadEvent);
}
}
///
public override void HandleMouseDown(FRMouseEventArgs e)
{
e.handled = true;
e.mode = WorkspaceMode2.SelectionRect;
e.activeObject = this;
}
///
public override void HandleMouseHover(FRMouseEventArgs e)
{
base.HandleMouseHover(e);
if (e.handled)
e.cursor = Cursors.Default;
}
///
public override void HandleMouseUp(FRMouseEventArgs e)
{
base.HandleMouseUp(e);
if (e.mode == WorkspaceMode2.SelectionRect)
{
SelectedObjectCollection selection = Report.Designer.SelectedObjects;
selection.Clear();
// find objects inside the selection rect
foreach (DialogComponentBase c in Controls)
{
e.handled = false;
c.HandleMouseUp(e);
// object is inside
if (e.handled)
selection.Add(c);
}
if (selection.Count == 0)
selection.Add(this);
}
}
///
public override void SetDefaults()
{
ButtonControl btnOk = new ButtonControl();
btnOk.Parent = this;
btnOk.Name = CreateButtonName("btnOk");
btnOk.Text = Res.Get("Buttons,OK");
btnOk.Location = new Point((int)ClientSize.Width - 166, (int)ClientSize.Height - 31);
btnOk.Size = new Size(75, 23);
btnOk.DialogResult = DialogResult.OK;
btnOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
ButtonControl btnCancel = new ButtonControl();
btnCancel.Parent = this;
btnCancel.Name = CreateButtonName("btnCancel");
btnCancel.Text = Res.Get("Buttons,Cancel");
btnCancel.Location = new Point((int)ClientSize.Width - 83, (int)ClientSize.Height - 31);
btnCancel.Size = new Size(75, 23);
btnCancel.DialogResult = DialogResult.Cancel;
btnCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
AcceptButton = btnOk;
CancelButton = btnCancel;
Form.AutoScaleDimensions = new SizeF(96f, 96f);
Form.AutoScaleMode = AutoScaleMode.Dpi;
base.SetDefaults();
}
#endregion Public Methods
#region Internal Methods
internal void ResetFormBitmap()
{
if (formBitmap != null)
{
formBitmap.Dispose();
formBitmap = null;
}
if (!IsDesigning)
return;
formBitmap = DrawUtils.DrawToBitmap(Form, false);
// form has round edges which are filled black (DrawToBitmap issue/bug).
DrawUtils.FloodFill(formBitmap, 0, 0, Color.FromArgb(0, 0, 0), Color.White);
DrawUtils.FloodFill(formBitmap, formBitmap.Width - 1, 0, Color.FromArgb(0, 0, 0), Color.White);
}
#endregion
#region Protected Methods
///
protected override SelectionPoint[] GetSelectionPoints()
{
return new SelectionPoint[] {
new SelectionPoint(Width - Offset().X + 1, Height - Offset().Y + 1, SizingPoint.RightBottom),
new SelectionPoint(Width / 2 - Offset().X, Height - Offset().Y + 1, SizingPoint.BottomCenter),
new SelectionPoint(Width - Offset().X + 1, Height / 2 - Offset().Y, SizingPoint.RightCenter) };
}
#endregion Protected Methods
#region Private Methods
private Point Offset()
{
Point offset = new Point(0, 0);
offset = Form.PointToScreen(offset);
offset.X -= Form.Left;
offset.Y -= Form.Top;
return offset;
}
private bool ShouldSerializeBackColor()
{
return BackColor != SystemColors.Control;
}
//private bool ShouldSerializeFont()
//{
// return Font.Name != "Tahoma" || Font.Size != 8 || Font.Style != FontStyle.Regular;
//}
#endregion Private Methods
}
internal class DialogPageMenu : ComponentBaseMenu
{
#region Private Methods
private void miCopy_Click(object sender, EventArgs e)
{
Designer.cmdCopyPage.Invoke();
}
private void miDelete_Click(object sender, EventArgs e)
{
Designer.cmdDeletePage.Invoke();
}
#endregion // Private Methods
#region Constructors
public DialogPageMenu(Designer designer) : base(designer)
{
miEdit.Visible = Designer.cmdEdit.Enabled;
miCut.Visible = false;
miPaste.Visible = true;
miBringToFront.Visible = false;
miSendToBack.Visible = false;
miCopy.BeginGroup = true;
miCopy.Enabled = Designer.cmdCopyPage.Enabled;
miPaste.Enabled = Designer.cmdPaste.Enabled;
miDelete.Enabled = Designer.cmdDeletePage.Enabled;
miCopy.Click += miCopy_Click;
miDelete.Click += miDelete_Click;
}
#endregion // Constructors
}
}