summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Jung <phil.jung@free.fr>2015-05-20 17:27:08 +0200
committerYousuf Philips <philipz85@hotmail.com>2015-05-31 17:59:25 +0000
commit285b5ef45817fe20d3bf9613e0247d395b7c880d (patch)
tree332003d9e5b710713b5b01869623f8dbbeab242c
parentf97beeef352fdd9fd4f157a7a4c4f6af8341cbe6 (diff)
Calc: Insert row/col before/after [2/2]
This part adds features to add rows/cols after the selection which is a new behaviour. Change-Id: Iec1201ae56970cd3dd0622c2ffa1eb6e46ad7446 Reviewed-on: https://gerrit.libreoffice.org/15831 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Yousuf Philips <philipz85@hotmail.com>
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu22
-rw-r--r--sc/inc/sc.hrc4
-rw-r--r--sc/inc/sccommands.h2
-rw-r--r--sc/sdi/cellsh.sdi2
-rw-r--r--sc/sdi/scalc.sdi50
-rw-r--r--sc/source/ui/docshell/docfunc.cxx51
-rw-r--r--sc/source/ui/src/hdrcont.src12
-rw-r--r--sc/source/ui/undo/undoblk.cxx8
-rw-r--r--sc/source/ui/view/cellsh.cxx2
-rw-r--r--sc/source/ui/view/cellsh1.cxx10
-rw-r--r--sc/source/ui/view/tabview3.cxx2
-rw-r--r--sc/source/ui/view/viewfunc.cxx4
-rw-r--r--sc/uiconfig/scalc/menubar/menubar.xml2
-rw-r--r--sc/uiconfig/scalc/toolbar/insertcellsbar.xml2
-rw-r--r--sc/uiconfig/scalc/toolbar/standardbar.xml2
15 files changed, 152 insertions, 23 deletions
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
index f3db21fa0538..1d8490f094d7 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
@@ -1097,6 +1097,28 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:InsertRowsAfter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Insert ~Rows Below</value>
+ </prop>
+ <prop oor:name="ContextLabel" oor:type="xs:string">
+ <value xml:lang="en-US">Rows ~Below</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:InsertColumnsAfter" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Insert Co~lumns Right</value>
+ </prop>
+ <prop oor:name="ContextLabel" oor:type="xs:string">
+ <value xml:lang="en-US">Columns ~Right</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
<node oor:name=".uno:Insert" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Insert ~Sheet...</value>
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index 6def9ba206f6..2cbd8d14ab77 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -334,7 +334,9 @@
#define FID_ADD_NAME (INSERT_MENU_START + 16)
#define FID_INS_CELLSDOWN (INSERT_MENU_START + 18)
#define FID_INS_CELLSRIGHT (INSERT_MENU_START + 19)
-#define INSERT_MENU_END (INSERT_MENU_START + 20)
+#define FID_INS_ROWS_AFTER (INSERT_MENU_START + 20)
+#define FID_INS_COLUMNS_AFTER (INSERT_MENU_START + 21)
+#define INSERT_MENU_END (INSERT_MENU_START + 22)
#define FORMAT_MENU_START (INSERT_MENU_END)
#define FID_CELL_FORMAT (FORMAT_MENU_START)
diff --git a/sc/inc/sccommands.h b/sc/inc/sccommands.h
index ba8f94cfcdd4..e931c1939615 100644
--- a/sc/inc/sccommands.h
+++ b/sc/inc/sccommands.h
@@ -44,8 +44,10 @@
#define CMD_FID_INS_TABLE ".uno:Insert"
#define CMD_FID_INS_CELL ".uno:InsertCell"
#define CMD_FID_INS_COLBRK ".uno:InsertColumnBreak"
+#define CMD_FID_INS_COLUMNS_AFTER ".uno:InsertColumnsAfter"
#define CMD_FID_INS_COLUMNS_BEFORE ".uno:InsertColumnsBefore"
#define CMD_FID_INS_ROWBRK ".uno:InsertRowBreak"
+#define CMD_FID_INS_ROWS_AFTER ".uno:InsertRowsAfter"
#define CMD_FID_INS_ROWS_BEFORE ".uno:InsertRowsBefore"
#define CMD_FID_MERGE_ON ".uno:MergeCells"
#define CMD_FID_MERGE_OFF ".uno:SplitCell"
diff --git a/sc/sdi/cellsh.sdi b/sc/sdi/cellsh.sdi
index 3e6fc6ea4528..d780e988181d 100644
--- a/sc/sdi/cellsh.sdi
+++ b/sc/sdi/cellsh.sdi
@@ -118,6 +118,8 @@ interface CellSelection
SID_INSERT_CURRENT_TIME [ ExecMethod = ExecuteEdit; StateMethod = GetState; ]
FID_INS_ROWS_BEFORE [ ExecMethod = ExecuteEdit; StateMethod = GetBlockState; ]
FID_INS_COLUMNS_BEFORE [ ExecMethod = ExecuteEdit; StateMethod = GetBlockState; ]
+ FID_INS_ROWS_AFTER [ ExecMethod = ExecuteEdit; StateMethod = GetBlockState; ]
+ FID_INS_COLUMNS_AFTER [ ExecMethod = ExecuteEdit; StateMethod = GetBlockState; ]
FID_INS_CELLSDOWN [ ExecMethod = ExecuteEdit; StateMethod = GetBlockState; ]
FID_INS_CELLSRIGHT [ ExecMethod = ExecuteEdit; StateMethod = GetBlockState; ]
SID_DEL_ROWS [ ExecMethod = ExecuteEdit; StateMethod = GetBlockState; ]
diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi
index bb9b1b6519d4..b59a7ad7e5f6 100644
--- a/sc/sdi/scalc.sdi
+++ b/sc/sdi/scalc.sdi
@@ -4133,6 +4133,31 @@ SfxVoidItem InsertColumnsBefore FID_INS_COLUMNS_BEFORE
]
+SfxVoidItem InsertColumnsAfter FID_INS_COLUMNS_AFTER
+()
+[
+ /* flags: */
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Synchron;
+
+ /* config: */
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = TRUE,
+ GroupId = GID_INSERT;
+]
+
+
SfxVoidItem InsertContents FID_INS_CELL_CONTENTS
(SfxStringItem Flags FID_INS_CELL_CONTENTS,SfxUInt16Item FormulaCommand FN_PARAM_1,SfxBoolItem SkipEmptyCells FN_PARAM_2,SfxBoolItem Transpose FN_PARAM_3,SfxBoolItem AsLink FN_PARAM_4,SfxInt16Item MoveMode FN_PARAM_5)
[
@@ -4435,6 +4460,31 @@ SfxVoidItem InsertRowsBefore FID_INS_ROWS_BEFORE
]
+SfxVoidItem InsertRowsAfter FID_INS_ROWS_AFTER
+()
+[
+ /* flags: */
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Synchron;
+
+ /* config: */
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = TRUE,
+ GroupId = GID_INSERT;
+]
+
+
SfxUInt16Item InsObjCtrl SID_TBXCTL_INSOBJ
[
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index aed72151b53b..9be99b626c84 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -1637,12 +1637,23 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
{
ScDocShellModificator aModificator( rDocShell );
- SCCOL nStartCol = rRange.aStart.Col();
- SCROW nStartRow = rRange.aStart.Row();
- SCTAB nStartTab = rRange.aStart.Tab();
- SCCOL nEndCol = rRange.aEnd.Col();
- SCROW nEndRow = rRange.aEnd.Row();
- SCTAB nEndTab = rRange.aEnd.Tab();
+ ScRange aTargetRange( rRange );
+
+ // If insertion is for full cols/rows and after the current
+ // selection, then shift the range accordingly
+ if ( eCmd == INS_INSROWS_AFTER ) {
+ aTargetRange.Move(0, rRange.aEnd.Row() - rRange.aStart.Row() + 1, 0);
+ }
+ if ( eCmd == INS_INSCOLS_AFTER ) {
+ aTargetRange.Move(rRange.aEnd.Col() - rRange.aStart.Col() + 1, 0, 0);
+ }
+
+ SCCOL nStartCol = aTargetRange.aStart.Col();
+ SCROW nStartRow = aTargetRange.aStart.Row();
+ SCTAB nStartTab = aTargetRange.aStart.Tab();
+ SCCOL nEndCol = aTargetRange.aEnd.Col();
+ SCROW nEndRow = aTargetRange.aEnd.Row();
+ SCTAB nEndTab = aTargetRange.aEnd.Tab();
if ( !ValidRow(nStartRow) || !ValidRow(nEndRow) )
{
@@ -1707,9 +1718,9 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
SCCOL nMergeTestEndCol = nEndCol;
SCROW nMergeTestEndRow = nEndRow;
- ScRange aExtendMergeRange( rRange );
+ ScRange aExtendMergeRange( aTargetRange );
- if( rRange.aStart == rRange.aEnd && rDoc.HasAttrib(rRange, HASATTR_MERGED) )
+ if( aTargetRange.aStart == aTargetRange.aEnd && rDoc.HasAttrib(aTargetRange, HASATTR_MERGED) )
{
rDoc.ExtendMerge( aExtendMergeRange );
rDoc.ExtendOverlapped( aExtendMergeRange );
@@ -1719,12 +1730,12 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
nPaintEndRow = nMergeTestEndRow;
}
- if ( eCmd == INS_INSROWS_BEFORE )
+ if ( eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSROWS_AFTER )
{
nMergeTestStartCol = 0;
nMergeTestEndCol = MAXCOL;
}
- if ( eCmd == INS_INSCOLS_BEFORE )
+ if ( eCmd == INS_INSCOLS_BEFORE || eCmd == INS_INSCOLS_AFTER )
{
nMergeTestStartRow = 0;
nMergeTestEndRow = MAXROW;
@@ -1736,8 +1747,8 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
bool bNeedRefresh = false;
- SCCOL nEditTestEndCol = (eCmd==INS_INSCOLS_BEFORE) ? MAXCOL : nMergeTestEndCol;
- SCROW nEditTestEndRow = (eCmd==INS_INSROWS_BEFORE) ? MAXROW : nMergeTestEndRow;
+ SCCOL nEditTestEndCol = (eCmd==INS_INSCOLS_BEFORE || eCmd==INS_INSCOLS_AFTER) ? MAXCOL : nMergeTestEndCol;
+ SCROW nEditTestEndRow = (eCmd==INS_INSROWS_BEFORE || eCmd==INS_INSROWS_AFTER) ? MAXROW : nMergeTestEndRow;
ScEditableTester aTester( &rDoc, nMergeTestStartCol, nMergeTestStartRow, nEditTestEndCol, nEditTestEndRow, aMark );
if (!aTester.IsEditable())
{
@@ -1747,7 +1758,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
}
// Check if this insertion is allowed with respect to pivot table.
- if (!canInsertCellsByPivot(rRange, aMark, eCmd, &rDoc))
+ if (!canInsertCellsByPivot(aTargetRange, aMark, eCmd, &rDoc))
{
if (!bApi)
rDocShell.ErrorMessage(STR_NO_INSERT_DELETE_OVER_PIVOT_TABLE);
@@ -1853,7 +1864,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
if( bInsertMerge )
{
- if( eCmd == INS_INSROWS_BEFORE || eCmd == INS_CELLSDOWN )
+ if( eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSROWS_AFTER || eCmd == INS_CELLSDOWN )
{
nStartRow = aExtendMergeRange.aStart.Row();
nEndRow = aExtendMergeRange.aEnd.Row();
@@ -1866,7 +1877,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
nEndCol = MAXCOL;
}
}
- else if( eCmd == INS_CELLSRIGHT || eCmd == INS_INSCOLS_BEFORE )
+ else if( eCmd == INS_CELLSRIGHT || eCmd == INS_INSCOLS_BEFORE || eCmd == INS_INSCOLS_AFTER )
{
nStartCol = aExtendMergeRange.aStart.Col();
@@ -1912,6 +1923,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
nPaintEndRow = MAXROW;
break;
case INS_INSROWS_BEFORE:
+ case INS_INSROWS_AFTER:
bSuccess = rDoc.InsertRow( 0, 0, MAXCOL, MAXTAB, nStartRow, static_cast<SCSIZE>(nEndRow-nStartRow+1), pRefUndoDoc, &aFullMark );
nPaintStartCol = 0;
nPaintEndCol = MAXCOL;
@@ -1923,6 +1935,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
nPaintEndCol = MAXCOL;
break;
case INS_INSCOLS_BEFORE:
+ case INS_INSCOLS_AFTER:
bSuccess = rDoc.InsertCol( 0, 0, MAXROW, MAXTAB, nStartCol, static_cast<SCSIZE>(nEndCol-nStartCol+1), pRefUndoDoc, &aFullMark );
nPaintStartRow = 0;
nPaintEndRow = MAXROW;
@@ -1977,10 +1990,12 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
{
case INS_CELLSDOWN:
case INS_INSROWS_BEFORE:
+ case INS_INSROWS_AFTER:
aRange.aEnd.IncRow(static_cast<SCsCOL>(nEndRow-nStartRow+1));
break;
case INS_CELLSRIGHT:
case INS_INSCOLS_BEFORE:
+ case INS_INSCOLS_AFTER:
aRange.aEnd.IncCol(static_cast<SCsCOL>(nEndCol-nStartCol+1));
break;
default:
@@ -2009,7 +2024,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
else
rDoc.RefreshAutoFilter( nMergeTestStartCol, nMergeTestStartRow, nMergeTestEndCol, nMergeTestEndRow, i );
- if ( eCmd == INS_INSROWS_BEFORE ||eCmd == INS_INSCOLS_BEFORE )
+ if ( eCmd == INS_INSROWS_BEFORE ||eCmd == INS_INSCOLS_BEFORE || eCmd == INS_INSROWS_AFTER ||eCmd == INS_INSCOLS_AFTER )
rDoc.UpdatePageBreaks( i );
sal_uInt16 nExtFlags = 0;
@@ -2020,7 +2035,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
for( SCTAB j = i+1; j<nTabCount && rDoc.IsScenario(j); j++ )
nScenarioCount ++;
- bool bAdjusted = ( eCmd == INS_INSROWS_BEFORE ) ?
+ bool bAdjusted = ( eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSROWS_AFTER ) ?
AdjustRowHeight(ScRange(0, nStartRow, i, MAXCOL, nEndRow, i+nScenarioCount )) :
AdjustRowHeight(ScRange(0, nPaintStartRow, i, MAXCOL, nPaintEndRow, i+nScenarioCount ));
if (bAdjusted)
@@ -2049,7 +2064,7 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark,
if( pViewSh )
{
- pViewSh->MarkRange( rRange, false );
+ pViewSh->MarkRange( aTargetRange, false );
pViewSh->SetCursor( nCursorCol, nCursorRow );
}
}
diff --git a/sc/source/ui/src/hdrcont.src b/sc/source/ui/src/hdrcont.src
index 8379cb9bf045..ef715632151f 100644
--- a/sc/source/ui/src/hdrcont.src
+++ b/sc/source/ui/src/hdrcont.src
@@ -77,6 +77,12 @@ Menu RID_POPUP_ROWHEADER
};
MenuItem
{
+ Identifier = FID_INS_ROWS_AFTER ;
+ HelpId = CMD_FID_INS_ROWS_AFTER ;
+ Text [ en-US ] = "Insert Rows ~Below" ;
+ };
+ MenuItem
+ {
Identifier = SID_DEL_ROWS ;
HelpId = CMD_SID_DEL_ROWS ;
Text [ en-US ] = "~Delete Selected Rows" ;
@@ -146,6 +152,12 @@ Menu RID_POPUP_COLHEADER
};
MenuItem
{
+ Identifier = FID_INS_COLUMNS_AFTER ;
+ HelpId = CMD_FID_INS_COLUMNS_AFTER ;
+ Text [ en-US ] = "Insert Columns ~Right" ;
+ };
+ MenuItem
+ {
Identifier = SID_DEL_COLS ;
HelpId = CMD_SID_DEL_COLS ;
Text [ en-US ] = "~Delete Selected Columns" ;
diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx
index 29d14e5a608a..379d213e3213 100644
--- a/sc/source/ui/undo/undoblk.cxx
+++ b/sc/source/ui/undo/undoblk.cxx
@@ -97,13 +97,13 @@ ScUndoInsertCells::ScUndoInsertCells( ScDocShell* pNewDocShell,
bPartOfPaste( bNewPartOfPaste ),
pPasteUndo( NULL )
{
- if (eCmd == INS_INSROWS_BEFORE ) // whole row?
+ if (eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSROWS_AFTER) // whole row?
{
aEffRange.aStart.SetCol(0);
aEffRange.aEnd.SetCol(MAXCOL);
}
- if (eCmd == INS_INSCOLS_BEFORE ) // whole column?
+ if (eCmd == INS_INSCOLS_BEFORE || eCmd == INS_INSCOLS_AFTER) // whole column?
{
aEffRange.aStart.SetRow(0);
aEffRange.aEnd.SetRow(MAXROW);
@@ -180,6 +180,7 @@ void ScUndoInsertCells::DoChange( const bool bUndo )
switch (eCmd)
{
case INS_INSROWS_BEFORE:
+ case INS_INSROWS_AFTER:
case INS_CELLSDOWN:
for( i=0; i<nCount; i++ )
{
@@ -192,6 +193,7 @@ void ScUndoInsertCells::DoChange( const bool bUndo )
}
break;
case INS_INSCOLS_BEFORE:
+ case INS_INSCOLS_AFTER:
case INS_CELLSRIGHT:
for( i=0; i<nCount; i++ )
{
@@ -230,6 +232,7 @@ void ScUndoInsertCells::DoChange( const bool bUndo )
switch (eCmd)
{
case INS_INSROWS_BEFORE:
+ case INS_INSROWS_AFTER:
nPaint |= PAINT_LEFT;
aWorkRange.aEnd.SetRow(MAXROW);
break;
@@ -246,6 +249,7 @@ void ScUndoInsertCells::DoChange( const bool bUndo )
}
break;
case INS_INSCOLS_BEFORE:
+ case INS_INSCOLS_AFTER:
nPaint |= PAINT_TOP; // top bar
case INS_CELLSRIGHT:
for( i=0; i<nCount; i++ )
diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx
index 0b33924e54da..3bfc41315c27 100644
--- a/sc/source/ui/view/cellsh.cxx
+++ b/sc/source/ui/view/cellsh.cxx
@@ -208,11 +208,13 @@ void ScCellShell::GetBlockState( SfxItemSet& rSet )
break;
case FID_INS_ROWS_BEFORE: // insert rows
+ case FID_INS_ROWS_AFTER:
case FID_INS_CELLSDOWN:
bDisable = (!bSimpleArea) || GetViewData()->SimpleColMarked();
break;
case FID_INS_COLUMNS_BEFORE: // insert columns
+ case FID_INS_COLUMNS_AFTER:
case FID_INS_CELLSRIGHT:
bDisable = (!bSimpleArea) || GetViewData()->SimpleRowMarked();
break;
diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index 869777932555..b9dd9e3f55ed 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -152,6 +152,16 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
rReq.Done();
break;
+ case FID_INS_ROWS_AFTER:
+ pTabViewShell->InsertCells(INS_INSROWS_AFTER);
+ rReq.Done();
+ break;
+
+ case FID_INS_COLUMNS_AFTER:
+ pTabViewShell->InsertCells(INS_INSCOLS_AFTER);
+ rReq.Done();
+ break;
+
case FID_INS_CELLSDOWN:
pTabViewShell->InsertCells(INS_CELLSDOWN);
rReq.Done();
diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx
index a1054fc893f1..2f2cc9d03558 100644
--- a/sc/source/ui/view/tabview3.cxx
+++ b/sc/source/ui/view/tabview3.cxx
@@ -409,6 +409,8 @@ void ScTabView::SelectionChanged()
rBindings.Invalidate( FID_INS_ROWS_BEFORE );
rBindings.Invalidate( FID_INS_COLUMNS_BEFORE );
+ rBindings.Invalidate( FID_INS_ROWS_AFTER );
+ rBindings.Invalidate( FID_INS_COLUMNS_AFTER );
rBindings.Invalidate( FID_INS_CELL );
rBindings.Invalidate( FID_INS_CELLSDOWN );
rBindings.Invalidate( FID_INS_CELLSRIGHT );
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 35b22ff63636..d00898d7b82d 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -1461,9 +1461,9 @@ bool ScViewFunc::InsertCells( InsCellCmd eCmd, bool bRecord, bool bPartOfPaste )
CellContentChanged();
ResetAutoSpell();
- if ( eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSCOLS_BEFORE )
+ if ( eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSCOLS_BEFORE || eCmd == INS_INSROWS_AFTER || eCmd == INS_INSCOLS_AFTER )
{
- OUString aOperation = ( eCmd == INS_INSROWS_BEFORE ) ?
+ OUString aOperation = ( eCmd == INS_INSROWS_BEFORE || eCmd == INS_INSROWS_AFTER ) ?
OUString("insert-rows"):
OUString("insert-columns");
HelperNotifyChanges::NotifyIfChangesListeners(*pDocSh, aRange, aOperation);
diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index 3843434fffe9..4fd05e56ad5e 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -184,11 +184,13 @@
<menu:menu menu:id=".uno:InsertRowsMenu">
<menu:menupopup>
<menu:menuitem menu:id=".uno:InsertRowsBefore"/>
+ <menu:menuitem menu:id=".uno:InsertRowsAfter"/>
</menu:menupopup>
</menu:menu>
<menu:menu menu:id=".uno:InsertColumnsMenu">
<menu:menupopup>
<menu:menuitem menu:id=".uno:InsertColumnsBefore"/>
+ <menu:menuitem menu:id=".uno:InsertColumnsAfter"/>
</menu:menupopup>
</menu:menu>
<menu:menuitem menu:id=".uno:Insert"/>
diff --git a/sc/uiconfig/scalc/toolbar/insertcellsbar.xml b/sc/uiconfig/scalc/toolbar/insertcellsbar.xml
index a91b10b8adf6..f7e6866f1236 100644
--- a/sc/uiconfig/scalc/toolbar/insertcellsbar.xml
+++ b/sc/uiconfig/scalc/toolbar/insertcellsbar.xml
@@ -21,5 +21,7 @@
<toolbar:toolbaritem xlink:href=".uno:InsertCellsDown"/>
<toolbar:toolbaritem xlink:href=".uno:InsertCellsRight"/>
<toolbar:toolbaritem xlink:href=".uno:InsertRowsBefore"/>
+ <toolbar:toolbaritem xlink:href=".uno:InsertRowsAfter"/>
<toolbar:toolbaritem xlink:href=".uno:InsertColumnsBefore"/>
+ <toolbar:toolbaritem xlink:href=".uno:InsertColumnsAfter"/>
</toolbar:toolbar>
diff --git a/sc/uiconfig/scalc/toolbar/standardbar.xml b/sc/uiconfig/scalc/toolbar/standardbar.xml
index 7848c3582f05..6984740c9da0 100644
--- a/sc/uiconfig/scalc/toolbar/standardbar.xml
+++ b/sc/uiconfig/scalc/toolbar/standardbar.xml
@@ -47,7 +47,9 @@
<toolbar:toolbaritem xlink:href=".uno:Navigator" toolbar:visible="false"/>
<toolbar:toolbarseparator/>
<toolbar:toolbaritem xlink:href=".uno:InsertRowsBefore"/>
+ <toolbar:toolbaritem xlink:href=".uno:InsertRowsAfter" toolbar:visible="false"/>
<toolbar:toolbaritem xlink:href=".uno:InsertColumnsBefore"/>
+ <toolbar:toolbaritem xlink:href=".uno:InsertColumnsAfter" toolbar:visible="false"/>
<toolbar:toolbaritem xlink:href=".uno:DeleteRows"/>
<toolbar:toolbaritem xlink:href=".uno:DeleteColumns"/>
<toolbar:toolbarseparator/>