123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- using FastReport.Design;
- using FastReport.Forms;
- using FastReport.Utils;
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- namespace FastReport.Table
- {
- internal class TableCellMenu : TableMenuBase
- {
- #region Fields
- private SelectedObjectCollection selection;
- private TableBase table;
- private TableCell topCell;
- private ContextMenuItem miFormat;
- private ContextMenuItem miMergeSplit;
- private ContextMenuItem miClear;
- private ContextMenuItem miCut;
- private ContextMenuItem miCopy;
- private ContextMenuItem miPaste;
- private ContextMenuItem miInsert;
- private ContextMenuItem miRemove;
- private ContextMenuItem miAddColumnLeft;
- private ContextMenuItem miAddColumnRight;
- private ContextMenuItem miAddRowTop;
- private ContextMenuItem miAddRowBottom;
- private ContextMenuItem miRemoveRow;
- private ContextMenuItem miRemoveColumn;
- private ContextMenuItem miStyle;
- #endregion
- #region Private Methods
- private void miFormat_Click(object sender, EventArgs e)
- {
- using (FormatEditorForm form = new FormatEditorForm())
- {
- form.TextObject = topCell;
- if (form.ShowDialog() == DialogResult.OK)
- {
- SelectedTextBaseObjects components = new SelectedTextBaseObjects(Designer);
- components.Update();
- components.SetFormat(form.Formats);
- Change();
- }
- }
- }
- private void miMergeSplit_Click(object sender, EventArgs e)
- {
- if (miMergeSplit.Checked)
- {
- Rectangle rect = table.GetSelectionRect();
- // reset spans inside selection
- for (int x = 0; x < rect.Width; x++)
- {
- for (int y = 0; y < rect.Height; y++)
- {
- TableCell cell = table[x + rect.X, y + rect.Y];
- cell.ColSpan = 1;
- cell.RowSpan = 1;
- if (cell != topCell)
- cell.Text = "";
- }
- }
- topCell.ColSpan = rect.Width;
- topCell.RowSpan = rect.Height;
- selection.Clear();
- selection.Add(topCell);
- }
- else
- {
- topCell.ColSpan = 1;
- topCell.RowSpan = 1;
- }
- Change();
- }
- private void miClear_Click(object sender, EventArgs e)
- {
- foreach (Base c in selection)
- {
- if (c is TableCell)
- (c as TableCell).Text = "";
- }
- Change();
- }
- private void miCut_Click(object sender, EventArgs e)
- {
- table.Clipboard.CutCells(table.GetSelectionRect());
- table.CreateUniqueNames();
- Change();
- }
- private void miCopy_Click(object sender, EventArgs e)
- {
- table.Clipboard.CopyCells(table.GetSelectionRect());
- }
- private void miPaste_Click(object sender, EventArgs e)
- {
- table.Clipboard.PasteCells(topCell.Address);
- table.CreateUniqueNames();
- selection.Clear();
- selection.Add(table);
- Change();
- }
- private void miAddColumnLeft_Click(object sender, EventArgs e)
- {
- Rectangle rect = table.GetSelectionRect();
- int pos = rect.Left;
- int countNewColumns = rect.Width;
- selection.Clear();
- for (int i = 0; i < countNewColumns; i++)
- {
- TableColumn column = new TableColumn();
- table.Columns.Insert(pos, column);
- table.CreateUniqueNames();
- selection.Add(column);
- }
- Change();
- }
- private void miAddColumnRight_Click(object sender, EventArgs e)
- {
- Rectangle rect = table.GetSelectionRect();
- int pos = rect.Right;
- int countNewColumns = rect.Width;
- selection.Clear();
- for (int i = 0; i < countNewColumns; i++)
- {
- TableColumn column = new TableColumn();
- table.Columns.Insert(pos, column);
- table.CreateUniqueNames();
- selection.Add(column);
- }
- Change();
- }
- private void miAddRowTop_Click(object sender, EventArgs e)
- {
- Rectangle rect = table.GetSelectionRect();
- int pos = rect.Top;
- int countNewRows = rect.Height;
- selection.Clear();
- for (int i = 0; i < countNewRows; i++)
- {
- TableRow row = new TableRow();
- table.Rows.Insert(pos, row);
- table.CreateUniqueNames();
- selection.Add(row);
- }
- Change();
- }
- private void miAddRowBottom_Click(object sender, EventArgs e)
- {
- Rectangle rect = table.GetSelectionRect();
- int pos = rect.Bottom;
- int countNewRows = rect.Height;
- selection.Clear();
- for (int i = 0; i < countNewRows; i++)
- {
- TableRow row = new TableRow();
- table.Rows.Insert(pos, row);
- table.CreateUniqueNames();
- selection.Add(row);
- }
- Change();
- }
- private void miRemoveColumn_Click(object sender, EventArgs e)
- {
- Rectangle rect = table.GetSelectionRect();
- int pos = rect.Left;
- for (int i = 0; i < rect.Width; i++)
- {
- if (table.Columns[pos].IsAncestor)
- {
- FRMessageBox.Error(String.Format(Res.Get("Messages,DeleteAncestor"), table.Columns[pos].Name));
- break;
- }
- else
- table.Columns.RemoveAt(pos);
- }
- selection.Clear();
- selection.Add(table);
- Change();
- }
- private void miRemoveRow_Click(object sender, EventArgs e)
- {
- Rectangle rect = table.GetSelectionRect();
- int pos = rect.Top;
- for (int i = 0; i < rect.Height; i++)
- {
- if (table.Rows[pos].IsAncestor)
- {
- FRMessageBox.Error(String.Format(Res.Get("Messages,DeleteAncestor"), table.Rows[pos].Name));
- break;
- }
- else
- table.Rows.RemoveAt(pos);
- }
- selection.Clear();
- selection.Add(table);
- Change();
- }
- private void miStyle_Click(object sender, EventArgs e)
- {
- if (sender is ContextMenuItem menuItem)
- Designer.SelectedReportComponents.SetStyle(menuItem.Text);
- }
- #endregion
- public TableCellMenu(Designer designer) : base(designer)
- {
- selection = Designer.SelectedObjects;
- topCell = selection[0] as TableCell;
- table = topCell.Parent.Parent as TableBase;
- miFormat = CreateMenuItem(168, Res.Get("ComponentMenu,TextObject,Format"), new EventHandler(miFormat_Click));
- miMergeSplit = CreateMenuItem(217, Res.Get("ComponentMenu,TableCell,Merge"), new EventHandler(miMergeSplit_Click));
- miMergeSplit.CheckOnClick = true;
- miClear = CreateMenuItem(82, Res.Get("ComponentMenu,TextObject,Clear"), new EventHandler(miClear_Click));
- miCut = CreateMenuItem(5, Res.Get("Designer,Menu,Edit,Cut"), new EventHandler(miCut_Click));
- miCut.BeginGroup = true;
- miCopy = CreateMenuItem(6, Res.Get("Designer,Menu,Edit,Copy"), new EventHandler(miCopy_Click));
- miPaste = CreateMenuItem(7, Res.Get("Designer,Menu,Edit,Paste"), new EventHandler(miPaste_Click));
- miAddColumnLeft = CreateMenuItem(220, Res.Get("ComponentMenu,TableColumn,InsertToLeft"), new EventHandler(miAddColumnLeft_Click));
- miAddColumnRight = CreateMenuItem(221, Res.Get("ComponentMenu,TableColumn,InsertToRight"), new EventHandler(miAddColumnRight_Click));
- miAddRowTop = CreateMenuItem(218, Res.Get("ComponentMenu,TableRow,InsertAbove"), new EventHandler(miAddRowTop_Click));
- miAddRowBottom = CreateMenuItem(219, Res.Get("ComponentMenu,TableRow,InsertBelow"), new EventHandler(miAddRowBottom_Click));
- miInsert = CreateMenuItem(Res.Get("ComponentMenu,TableCell,Insert"));
- miInsert.DropDownItems.AddRange(new ContextMenuItem[] {
- miAddColumnLeft, miAddColumnRight, miAddRowTop, miAddRowBottom });
- miRemoveRow = CreateMenuItem(Res.Get("ComponentMenu,TableCell,RemoveRow"), new EventHandler(miRemoveRow_Click));
- miRemoveColumn = CreateMenuItem(Res.Get("ComponentMenu,TableCell,RemoveColumn"), new EventHandler(miRemoveColumn_Click));
- miRemove = CreateMenuItem(51, Res.Get("ComponentMenu,TableCell,Remove"), null);
- miRemove.DropDownItems.AddRange(new ContextMenuItem[] {
- miRemoveRow, miRemoveColumn });
- miStyle = CreateMenuItem(87, Res.Get("ComponentMenu,TableCell,Styles"), null);
- miStyle.Visible = table.Report.Styles.Count > 0;
- miStyle.BeginGroup = true;
- foreach (Style style in table.Report.Styles)
- {
- miStyle.DropDownItems.Add(CreateMenuItem(style.Name, new EventHandler(miStyle_Click)));
- }
- // QAT items
- miCut.QatItem = miCopy.QatItem = miPaste.QatItem = true;
- bool canJoin = selection.Count > 1;
- bool canSplit = selection.Count == 1 && topCell != null && (topCell.ColSpan > 1 || topCell.RowSpan > 1);
- miMergeSplit.Enabled = canJoin || canSplit;
- miMergeSplit.Checked = canSplit;
- if (miMergeSplit.Checked)
- miMergeSplit.Text = Res.Get("ComponentMenu,TableCell,Split");
- miPaste.Enabled = table.Clipboard.CanPasteCells;
- Items.AddRange(new ContextMenuItem[] {
- miFormat, miMergeSplit, miClear, miInsert, miRemove, miStyle,
- miCut, miCopy, miPaste });
- }
- }
- }
|