using System; using System.Windows.Forms; using System.Drawing; using FastReport.Utils; using FastReport.Forms; namespace FastReport { partial class HtmlObject : IHasEditor { #region Fields private TextBox textBox; internal bool dragAccept; #endregion #region Properties /// public override float Left { get { return base.Left; } set { base.Left = value; if (IsEditing) UpdateEditorPosition(); } } /// public override float Top { get { return base.Top; } set { base.Top = value; if (IsEditing) UpdateEditorPosition(); } } /// public override float Width { get { return base.Width; } set { base.Width = value; if (IsEditing) UpdateEditorPosition(); } } /// public override float Height { get { return base.Height; } set { base.Height = value; if (IsEditing) UpdateEditorPosition(); } } private bool IsEditing { get { return IsDesigning && textBox != null; } } #endregion #region Private Methods private void UpdateEditorPosition() { textBox.Location = new Point((int)Math.Round(AbsLeft * Report.Designer.ZoomDpi) + 1, (int)Math.Round(AbsTop * Report.Designer.ZoomDpi) + 1); textBox.Size = new Size((int)Math.Round(Width * Report.Designer.ZoomDpi) - 1, (int)Math.Round(Height * Report.Designer.ZoomDpi) - 1); } private void FTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) FinishEdit(false); if (e.Control && e.KeyCode == Keys.Enter) FinishEdit(true); } private void DrawDesign(FRPaintEventArgs e) { if (dragAccept) DrawDragAcceptFrame(e, Color.Silver); } #endregion #region Public Methods /// public override void HandleDragOver(FRMouseEventArgs e) { if (PointInObject(new PointF(e.x, e.y)) && e.DragSource is TextObject) e.handled = true; dragAccept = e.handled; } /// public override void HandleDragDrop(FRMouseEventArgs e) { Text = (e.DragSource as TextObject).Text; dragAccept = false; } /// public override void HandleKeyDown(Control sender, KeyEventArgs e) { if (IsSelected && e.KeyCode == Keys.Enter && HasFlag(Flags.CanEdit) && !HasRestriction(Restrictions.DontEdit)) { textBox = new TextBox(); textBox.Font = DrawUtils.DefaultTextObjectFont; textBox.BorderStyle = BorderStyle.None; textBox.Multiline = true; textBox.AcceptsTab = true; if (Fill is SolidFill) textBox.BackColor = Color.FromArgb(255, (Fill as SolidFill).Color); textBox.ForeColor = Color.FromArgb(255, Color.Black); textBox.Text = Text; textBox.KeyDown += new KeyEventHandler(FTextBox_KeyDown); UpdateEditorPosition(); sender.Controls.Add(textBox); textBox.SelectAll(); textBox.Focus(); e.Handled = true; } } /// public override void SelectionChanged() { FinishEdit(true); } /// public override ContextMenuBase GetContextMenu() { return new HtmlObjectMenu(Report.Designer); } /// public override SmartTagBase GetSmartTag() { return new HtmlObjectSmartTag(this); } /// public virtual bool InvokeEditor() { using (TextEditorForm form = new TextEditorForm(Report)) { form.ExpressionText = Text; form.Brackets = Brackets; if (form.ShowDialog() == DialogResult.OK) { Text = form.ExpressionText; return true; } } return false; } internal virtual void FinishEdit(bool accept) { if (textBox == null) return; if (textBox.Modified && accept) { Text = textBox.Text; if (Report != null) Report.Designer.SetModified(null, "Change", Name); } textBox.Dispose(); textBox = null; } #endregion } }