protected override void OnFigureMouseDoubleClick(MouseEventArgs e) { base.OnFigureMouseDoubleClick(e); _lineIndex = _figure.Value.GetVerticalLineIndex(e.Location); if (_lineIndex > -1) { TableFigureHelper.AdjustColumnSize(Host, _tableFigureProvider(), _lineIndex); } else { _lineIndex = _figure.Value.GetHorizontalLineIndex(e.Location); if (_lineIndex > -1) { TableFigureHelper.AdjustRowSize(Host, _tableFigureProvider(), _lineIndex); } } }
protected virtual void InitItems() { _export = new ToolStripMenuItem("取り出す(&E)"); var exportCsv = new ToolStripMenuItem("CSV(&C)..."); exportCsv.Click += (sender, e) => { var memoFile = _owner.Model; var dialog = new SaveFileDialog(); dialog.RestoreDirectory = true; dialog.ShowHelp = true; dialog.FileName = "Export.csv"; dialog.Filter = "Csv Files(*.csv)|*.csv"; if (dialog.ShowDialog() == DialogResult.OK) { var outputPath = dialog.FileName; _owner.Host.Parent.RequestExport("Csv", outputPath); } }; _export.DropDownItems.Add(exportCsv); _addPreviousColumn = new ToolStripMenuItem(); _addPreviousColumn.Text = "左に列を挿入(&L)"; _addPreviousColumn.Click += (sender, ev) => { var tableModel = GetTableModel(); var col = GetColumnIndex(); GetExecutor().Execute(new InsertTableColumnCommand(tableModel, col)); }; _addNextColumn = new ToolStripMenuItem(); _addNextColumn.Text = "右に列を挿入(&R)"; _addNextColumn.Click += (sender, ev) => { var tableModel = GetTableModel(); var col = GetColumnIndex(); GetExecutor().Execute(new InsertTableColumnCommand(tableModel, col + 1)); }; _addPreviousRow = new ToolStripMenuItem(); _addPreviousRow.Text = "上に行を挿入(&U)"; _addPreviousRow.Click += (sender, ev) => { var tableModel = GetTableModel(); var row = GetRowIndex(); GetExecutor().Execute(new InsertTableRowCommand(tableModel, row)); }; _addNextRow = new ToolStripMenuItem(); _addNextRow.Text = "下に行を挿入(&D)"; _addNextRow.Click += (sender, ev) => { var tableModel = GetTableModel(); var row = GetRowIndex(); GetExecutor().Execute(new InsertTableRowCommand(tableModel, row + 1)); }; _removeRow = new ToolStripMenuItem(); _removeRow.Text = "行を削除(&R)"; _removeRow.Click += (sender, ev) => { var rowIndex = GetRowIndex(); var host = _owner.Host; var tableEditor = host.Parent; var tableFig = GetTableFigure(); var tableData = tableFig.TableData; var cmd = default(ICommand); var unmerged = new HashSet <Cell <TableCellFigure> >(); var row = tableData.Rows.ElementAt(rowIndex); var colIndex = 0; foreach (var cell in row.Cells) { if (cell.IsMerging) { var rs = cell.RowSpan; var cs = cell.ColumnSpan; cmd = new MergeTableCellsCommand(tableEditor, colIndex, rowIndex, 1, 1); if (rowIndex < tableData.RowCount - 1) { cmd = cmd.Chain(new MergeTableCellsCommand(tableEditor, colIndex, rowIndex + 1, cs, rs - 1)); } unmerged.Add(cell); } else if (cell.IsMerged) { var merging = cell.Merging; if (!unmerged.Contains(merging)) { var mColIndex = tableData.GetColumnIndex(merging); var mRowIndex = tableData.GetRowIndex(merging); cmd = new MergeTableCellsCommand(tableEditor, mColIndex, mRowIndex, merging.ColumnSpan, merging.RowSpan - 1); } } ++colIndex; } var remove = new RemoveTableRowCommand(_owner.Host.Parent, rowIndex); cmd = cmd == null ? remove : cmd.Chain(remove); GetExecutor().Execute(cmd); }; _removeColumn = new ToolStripMenuItem(); _removeColumn.Text = "列を削除(&C)"; _removeColumn.Click += (sender, ev) => { var colIndex = GetColumnIndex(); var host = _owner.Host; var tableEditor = host.Parent; var tableFig = GetTableFigure(); var tableData = tableFig.TableData; var cmd = default(ICommand); var unmerged = new HashSet <Cell <TableCellFigure> >(); var col = tableData.Columns.ElementAt(colIndex); var rowIndex = 0; foreach (var cell in col.Cells) { if (cell.IsMerging) { var rs = cell.RowSpan; var cs = cell.ColumnSpan; cmd = new MergeTableCellsCommand(tableEditor, colIndex, rowIndex, 1, 1); if (colIndex < tableData.ColumnCount - 1) { cmd = cmd.Chain(new MergeTableCellsCommand(tableEditor, colIndex + 1, rowIndex, cs - 1, rs)); } unmerged.Add(cell); } else if (cell.IsMerged) { var merging = cell.Merging; if (!unmerged.Contains(merging)) { var mColIndex = tableData.GetColumnIndex(merging); var mRowIndex = tableData.GetRowIndex(merging); cmd = new MergeTableCellsCommand(tableEditor, mColIndex, mRowIndex, merging.ColumnSpan - 1, merging.RowSpan); } } ++rowIndex; } var remove = new RemoveTableColumnCommand(_owner.Host.Parent, colIndex); cmd = cmd == null ? remove : cmd.Chain(remove); GetExecutor().Execute(cmd); }; _removeTable = new ToolStripMenuItem(); _removeTable.Text = "表を削除(&T)"; _removeTable.Click += (sender, ev) => { var canvas = _owner.Host.Site.EditorCanvas; var oldCursor = canvas.Cursor; canvas.Cursor = Cursors.WaitCursor; /// ここでsite変数に入れておかないとRemoveRequest後には /// _ownerからはたどれなくなってしまう var site = _owner.Host.Site; try { _owner.Host.RequestSelect(SelectKind.False, true); site.SuppressUpdateHandleLayer = true; var parent = _owner.Host.Parent; parent.PerformRequest(new RemoveRequest()); site.SuppressUpdateHandleLayer = false; site.UpdateHandleLayer(); } finally { canvas.Cursor = oldCursor; } }; _adjustRowHeight = new ToolStripMenuItem("行の高さを調節(&H)"); _adjustRowHeight.Click += (sender, ev) => { var edi = GetTableEditor(); var fig = GetTableFigure(); using (edi.Site.CommandExecutor.BeginChain()) { int fr, lr, fc, lc; GetSelectedCellRange(out fr, out lr, out fc, out lc); for (int i = fr; i <= lr; ++i) { TableFigureHelper.AdjustRowSize(edi, fig, i); } } }; _adjustColumnWidth = new ToolStripMenuItem("列の幅を調節(&W)"); _adjustColumnWidth.Click += (sender, ev) => { var edi = GetTableEditor(); var fig = GetTableFigure(); using (edi.Site.CommandExecutor.BeginChain()) { int fr, lr, fc, lc; GetSelectedCellRange(out fr, out lr, out fc, out lc); for (int i = fc; i <= lc; ++i) { TableFigureHelper.AdjustColumnSize(edi, fig, i); } } }; _adjustRowHeightsAtEvenInterval = new ToolStripMenuItem("行の高さを揃える(&H)"); _adjustRowHeightsAtEvenInterval.Click += (sender, ev) => { var edi = GetTableEditor(); var fig = GetTableFigure(); using (edi.Site.CommandExecutor.BeginChain()) { int fr, lr, fc, lc; GetSelectedCellRange(out fr, out lr, out fc, out lc); TableFigureHelper.AdjustRowSizesAtEvenInterval(edi, fig, fr, lr); } }; _adjustColumnWidthsAtEvenInterval = new ToolStripMenuItem("列の幅を揃える(&W)"); _adjustColumnWidthsAtEvenInterval.Click += (sender, ev) => { var edi = GetTableEditor(); var fig = GetTableFigure(); using (edi.Site.CommandExecutor.BeginChain()) { int fr, lr, fc, lc; GetSelectedCellRange(out fr, out lr, out fc, out lc); TableFigureHelper.AdjustColumnSizesAtEvenInterval(edi, fig, fc, lc); } }; _mergeCells = new ToolStripMenuItem(); _mergeCells.Text = "セルを結合(&M)"; _mergeCells.Click += (sender, ev) => { var host = _owner.Host; var tableEditor = host.Parent; var tableFig = tableEditor.Figure as TableFigure; var tableData = tableFig.TableData; var tableModel = tableEditor.Model as MemoTable; var leftColIndex = -1; var rightColIndex = -1; var topRowIndex = -1; var bottomRowIndex = -1; var selecteds = host.Site.SelectionManager.SelectedEditors; foreach (var selected in selecteds) { var colIndex = tableData.GetColumnIndex(selected.Figure as TableCellFigure); var rowIndex = tableData.GetRowIndex(selected.Figure as TableCellFigure); leftColIndex = leftColIndex == -1? colIndex: Math.Min(leftColIndex, colIndex); rightColIndex = rightColIndex == -1? colIndex: Math.Max(rightColIndex, colIndex); topRowIndex = topRowIndex == -1? rowIndex: Math.Min(topRowIndex, rowIndex); bottomRowIndex = bottomRowIndex == -1? rowIndex : Math.Max(bottomRowIndex, rowIndex); } GetExecutor().Execute( new MergeTableCellsCommand( tableEditor, leftColIndex, topRowIndex, rightColIndex - leftColIndex + 1, bottomRowIndex - topRowIndex + 1 ) ); var cell = tableData.GetCell(topRowIndex, leftColIndex); var cellEditor = cell.Value.GetEditor(); cellEditor.RequestSelect(SelectKind.True, true); }; _unmergeCells = new ToolStripMenuItem(); _unmergeCells.Text = "セルを分割(&U)"; _unmergeCells.Click += (sender, ev) => { var host = _owner.Host; var tableEditor = host.Parent; var tableFig = tableEditor.Figure as TableFigure; var tableData = tableFig.TableData; var tableModel = tableEditor.Model as MemoTable; var leftColIndex = -1; var topRowIndex = -1; var selecteds = host.Site.SelectionManager.SelectedEditors; foreach (var selected in selecteds) { var colIndex = tableData.GetColumnIndex(selected.Figure as TableCellFigure); var rowIndex = tableData.GetRowIndex(selected.Figure as TableCellFigure); leftColIndex = leftColIndex == -1? colIndex: Math.Min(leftColIndex, colIndex); topRowIndex = topRowIndex == -1? rowIndex: Math.Min(topRowIndex, rowIndex); } GetExecutor().Execute( new MergeTableCellsCommand( tableEditor, leftColIndex, topRowIndex, 1, 1 ) ); var cell = tableData.GetCell(topRowIndex, leftColIndex); var cellEditor = cell.Value.GetEditor(); cellEditor.RequestSelect(SelectKind.True, true); }; _copyTable = new ToolStripMenuItem(); _copyTable.Text = "表をコピー(&C)"; _copyTable.Click += (sender, ev) => { var tableEditor = GetTableEditor(); if (tableEditor != null) { var req = new CopyRequest(new [] { tableEditor }); tableEditor.PerformRequest(req); } }; }