using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Drawing; using System.ComponentModel; using System.Drawing.Drawing2D; using System.Windows.Forms; using FastReport.Design; using FastReport.Utils; using FastReport.Engine; using FastReport.Preview; using FastReport.Design.PageDesigners.Page; using FastReport.Data; using FastReport.Controls; using System.Linq; using System.Runtime.CompilerServices; namespace FastReport.Table { partial class TableObject { #region Fields private TableCell dragCell; private SelectedObjectCollection itemsBeforeMDown; private bool isResizing; #endregion #region Public Methods /// public override void Draw(FRPaintEventArgs e) { base.Draw(e); if (dragCell != null) dragCell.DrawDragAcceptFrame(e, Color.Silver); DrawDesign(e); } /// public override void HandleDragOver(FRMouseEventArgs e) { dragCell = null; if (!(e.DragSource is TextObject)) return; for (int y = 0; y < Rows.Count; y++) { for (int x = 0; x < Columns.Count; x++) { TableCell cell = this[x, y]; if (!IsInsideSpan(cell) && cell.PointInObject(new PointF(e.x, e.y))) { dragCell = cell; e.handled = true; break; } } } } /// public override void HandleMouseDown(FRMouseEventArgs e) { base.HandleMouseDown(e); HandleMouseHover(e); if (IsSelected && new RectangleF(AbsRight + 1, AbsBottom + 1, 16, 16).Contains(new PointF(e.x, e.y))) { e.handled = true; e.mode = WorkspaceMode2.Size; if (itemsBeforeMDown == null) itemsBeforeMDown = new SelectedObjectCollection(); Report.Designer.SelectedObjects.CopyTo(itemsBeforeMDown); Report.Designer.SelectedObjects.Clear(); foreach (ComponentBase line in ChildObjects) { if (line is TableColumn) Report.Designer.SelectedObjects.Add(line); } e.activeObject = this.Rows[0].ChildObjects[0] as TableCell; isResizing = true; e.cursor = Cursors.PanSW; } } /// public override void HandleMouseUp(FRMouseEventArgs e) { base.HandleMouseUp(e); if (itemsBeforeMDown != null && itemsBeforeMDown.Count != 0) { Report.Designer.SelectedObjects.Clear(); foreach(ComponentBase item in itemsBeforeMDown) { if (AllObjects.Contains(item)) Report.Designer.SelectedObjects.Add(item); } if (Report.Designer.SelectedObjects.Count == 0) Report.Designer.SelectedObjects.Add(this); itemsBeforeMDown.Clear(); } isResizing = false; } /// public override void HandleMouseMove(FRMouseEventArgs e) { base.HandleMouseMove(e); if (IsSelected && new RectangleF(AbsRight + 2, AbsBottom + 3, 16, 16).Contains(new PointF(e.x, e.y))) { e.cursor = Cursors.PanSE; e.handled = true; } if (!(e.mode == WorkspaceMode2.Size && e.activeObject == this.Rows[0].ChildObjects[0] as TableCell && isResizing)) return; float longestHeigh = (Rows.ToArray().ToList().Last() as TableRow).ChildObjects.ToArray().ToList().Max((x => (x as TableCell).Height)); float longestWidth = (Rows.ToArray().ToList().Last() as TableRow).ChildObjects.ToArray().ToList().Max((x => (x as TableCell).Width)); System.Diagnostics.Debug.WriteLine(longestHeigh); bool wasChanged = false; if (e.y > AbsBottom + 19) { TableRow row = new TableRow(); Rows.Insert(Rows.Count, row); CreateUniqueNames(); wasChanged = true; } else if (e.y < AbsBottom - longestHeigh && Rows.Count > 1) { wasChanged = true; Rows.RemoveAt(Rows.Count - 1); } if (e.x > AbsRight + longestWidth) { TableColumn column = new TableColumn(); Columns.Insert(Columns.Count, column); CreateUniqueNames(); wasChanged = true; } else if (e.x < AbsRight - longestWidth && Columns.Count > 1) { wasChanged = true; Columns.RemoveAt(Columns.Count - 1); } if (wasChanged) { Report.Designer.SelectedObjects.Clear(); foreach (ComponentBase line in ChildObjects) { if (line is TableColumn) Report.Designer.SelectedObjects.Add(line); } } } /// public override void HandleDragDrop(FRMouseEventArgs e) { dragCell.Text = (e.DragSource as TextObject).Text; dragCell = null; } internal override ContextMenuBase GetColumnContextMenu(TableColumn column) { return new TableColumnMenu(Report.Designer); } internal override ContextMenuBase GetRowContextMenu(TableRow row) { return new TableRowMenu(Report.Designer); } internal override ContextMenuBase GetCellContextMenu(TableCell cell) { return new TableCellMenu(Report.Designer); } internal override SmartTagBase GetCellSmartTag(TableCell cell) { return new TextObjectSmartTag(cell); } internal override void HandleCellDoubleClick(TableCell cell) { if (!cell.HasRestriction(Restrictions.DontEdit) && cell.InvokeEditor()) Report.Designer.SetModified(this, "Change"); } #endregion #region private methods private void DrawDesign(FRPaintEventArgs e) { if (IsDesigning && IsSelected) e.Graphics.DrawImage(Report.Designer.GetImage(152), (int)(AbsRight * e.ScaleX + 2), (int)(AbsBottom * e.ScaleY + 3)); } #endregion } }