sc/inc/scabstdlg.hxx | 1 sc/source/ui/attrdlg/scdlgfact.cxx | 5 + sc/source/ui/attrdlg/scdlgfact.hxx | 1 sc/source/ui/docshell/docfunc.cxx | 6 - sc/source/ui/inc/docfunc.hxx | 2 sc/source/ui/inc/inscldlg.hxx | 8 + sc/source/ui/inc/viewfunc.hxx | 2 sc/source/ui/miscdlgs/inscldlg.cxx | 42 ++++++++ sc/source/ui/view/cellsh1.cxx | 13 +- sc/source/ui/view/viewfunc.cxx | 5 - sc/uiconfig/scalc/ui/insertcells.ui | 170 +++++++++++++++++++++++------------- 11 files changed, 184 insertions(+), 71 deletions(-)
New commits: commit 05a1217921b7be283c6750a35b90e4feda6e993e Author: Sahil Gautam <sa...@libreoffice.org> AuthorDate: Mon Mar 4 04:22:03 2024 +0530 Commit: Thorsten Behrens <thorsten.behr...@allotropia.de> CommitDate: Sat Apr 20 21:58:10 2024 +0200 tdf#80390 Extend InsertCells Dialog to allow adding a set of Rows/Columns Change-Id: I103574d720fef685b806943672a2aeb1fbf87097 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164316 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de> diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx index afd9abf4fbfc..40cf91404518 100644 --- a/sc/inc/scabstdlg.hxx +++ b/sc/inc/scabstdlg.hxx @@ -184,6 +184,7 @@ protected: virtual ~AbstractScInsertCellDlg() override = default; public: virtual InsCellCmd GetInsCellCmd() const = 0; + virtual size_t GetCount() const = 0; }; class AbstractScInsertContentsDlg : public VclAbstractDialog diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx index 03926077d9f1..1dba14884dbc 100644 --- a/sc/source/ui/attrdlg/scdlgfact.cxx +++ b/sc/source/ui/attrdlg/scdlgfact.cxx @@ -570,6 +570,11 @@ InsCellCmd AbstractScInsertCellDlg_Impl::GetInsCellCmd() const return m_xDlg->GetInsCellCmd(); } +size_t AbstractScInsertCellDlg_Impl::GetCount() const +{ + return m_xDlg->GetCount(); +} + InsertDeleteFlags AbstractScInsertContentsDlg_Impl::GetInsContentsCmdBits() const { return m_xDlg->GetInsContentsCmdBits(); diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx index 4644ff4b35e2..e1c2d0f52df3 100644 --- a/sc/source/ui/attrdlg/scdlgfact.hxx +++ b/sc/source/ui/attrdlg/scdlgfact.hxx @@ -266,6 +266,7 @@ public: virtual short Execute() override; virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override; virtual InsCellCmd GetInsCellCmd() const override ; + virtual size_t GetCount() const override ; }; class AbstractScInsertContentsDlg_Impl : public AbstractScInsertContentsDlg diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index bad24d1cafb2..430fbe53ddd3 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -1756,7 +1756,7 @@ bool canDeleteCellsByPivot(const ScRange& rRange, const ScMarkData& rMarkData, D } bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, InsCellCmd eCmd, - bool bRecord, bool bApi, bool bPartOfPaste ) + bool bRecord, bool bApi, bool bPartOfPaste, size_t nInsertCount ) { ScDocShellModificator aModificator( rDocShell ); ScDocument& rDoc = rDocShell.GetDocument(); @@ -1795,8 +1795,8 @@ bool ScDocFunc::InsertCells( const ScRange& rRange, const ScMarkData* pTabMark, 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(); + SCCOL nEndCol = aTargetRange.aEnd.Col() + nInsertCount; + SCROW nEndRow = aTargetRange.aEnd.Row() + nInsertCount; SCTAB nEndTab = aTargetRange.aEnd.Tab(); if ( !rDoc.ValidRow(nStartRow) || !rDoc.ValidRow(nEndRow) ) diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx index e1f0bb9eaa34..53f0bcc27104 100644 --- a/sc/source/ui/inc/docfunc.hxx +++ b/sc/source/ui/inc/docfunc.hxx @@ -138,7 +138,7 @@ public: bool bApi ); bool InsertCells( const ScRange& rRange,const ScMarkData* pTabMark, - InsCellCmd eCmd, bool bRecord, bool bApi, bool bPartOfPaste = false ); + InsCellCmd eCmd, bool bRecord, bool bApi, bool bPartOfPaste = false, size_t nInsertCount = 0 ); bool DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark, DelCellCmd eCmd, bool bApi ); diff --git a/sc/source/ui/inc/inscldlg.hxx b/sc/source/ui/inc/inscldlg.hxx index b44bfb60baa9..fdd70fff8738 100644 --- a/sc/source/ui/inc/inscldlg.hxx +++ b/sc/source/ui/inc/inscldlg.hxx @@ -30,12 +30,20 @@ private: std::unique_ptr<weld::RadioButton> m_xBtnCellsRight; std::unique_ptr<weld::RadioButton> m_xBtnInsRow; std::unique_ptr<weld::RadioButton> m_xBtnInsCol; + std::unique_ptr<weld::SpinButton> m_xNumberOfRows; + std::unique_ptr<weld::SpinButton> m_xNumberOfCols; + + // These are arbitrarily chosen. + const size_t MAX_INS_ROWS = 4000; + const size_t MAX_INS_COLS = 4000; public: ScInsertCellDlg(weld::Window* pParent, bool bDisallowCellMove); virtual ~ScInsertCellDlg() override; InsCellCmd GetInsCellCmd() const; + size_t GetCount() const; + DECL_LINK(RadioButtonsHdl, weld::Toggleable&, void); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/inc/viewfunc.hxx b/sc/source/ui/inc/viewfunc.hxx index 82d202b2df8e..501772c93828 100644 --- a/sc/source/ui/inc/viewfunc.hxx +++ b/sc/source/ui/inc/viewfunc.hxx @@ -203,7 +203,7 @@ public: bool Unprotect( SCTAB nTab, const OUString& rPassword ); void DeleteCells( DelCellCmd eCmd ); - bool InsertCells( InsCellCmd eCmd, bool bRecord = true, bool bPartOfPaste = false ); + bool InsertCells( InsCellCmd eCmd, bool bRecord = true, bool bPartOfPaste = false, size_t nCount = 0); void DeleteMulti( bool bRows ); void DeleteContents( InsertDeleteFlags nFlags ); diff --git a/sc/source/ui/miscdlgs/inscldlg.cxx b/sc/source/ui/miscdlgs/inscldlg.cxx index e077724f4264..bfbfc0462936 100644 --- a/sc/source/ui/miscdlgs/inscldlg.cxx +++ b/sc/source/ui/miscdlgs/inscldlg.cxx @@ -32,17 +32,30 @@ ScInsertCellDlg::ScInsertCellDlg(weld::Window* pParent, bool bDisallowCellMove) , m_xBtnCellsRight(m_xBuilder->weld_radio_button("right")) , m_xBtnInsRow(m_xBuilder->weld_radio_button("rows")) , m_xBtnInsCol(m_xBuilder->weld_radio_button("cols")) + , m_xNumberOfRows(m_xBuilder->weld_spin_button("number_of_rows")) + , m_xNumberOfCols(m_xBuilder->weld_spin_button("number_of_columns")) { const ScViewData* pViewData = ScDocShell::GetViewData(); if (pViewData && pViewData->GetDocument().IsLayoutRTL(pViewData->GetTabNo())) m_xBtnCellsRight->set_label(ScResId(SCSTR_INSERT_RTL)); + m_xNumberOfRows->set_range(1, MAX_INS_ROWS); + m_xNumberOfRows->set_value(1); + m_xNumberOfCols->set_range(1, MAX_INS_COLS); + m_xNumberOfCols->set_value(1); + + m_xBtnInsRow->connect_toggled(LINK(this, ScInsertCellDlg, RadioButtonsHdl)); + m_xBtnInsCol->connect_toggled(LINK(this, ScInsertCellDlg, RadioButtonsHdl)); + + bool bColCount = false; + bool bRowsCount = false; if (bDisallowCellMove) { m_xBtnCellsDown->set_sensitive(false); m_xBtnCellsRight->set_sensitive(false); m_xBtnInsRow->set_active(true); + bRowsCount = true; switch (nInsItemChecked) { case 2: @@ -50,6 +63,8 @@ ScInsertCellDlg::ScInsertCellDlg(weld::Window* pParent, bool bDisallowCellMove) break; case 3: m_xBtnInsCol->set_active(true); + bRowsCount = false; + bColCount = true; break; default: m_xBtnInsRow->set_active(true); @@ -68,12 +83,20 @@ ScInsertCellDlg::ScInsertCellDlg(weld::Window* pParent, bool bDisallowCellMove) break; case 2: m_xBtnInsRow->set_active(true); + bRowsCount = true; + bColCount = false; break; case 3: m_xBtnInsCol->set_active(true); + bRowsCount = false; + bColCount = true; break; } } + + // if some cells are selected, then disable the SpinButtons + m_xNumberOfCols->set_sensitive(bColCount && !pViewData->GetMarkData().IsMarked()); + m_xNumberOfRows->set_sensitive(bRowsCount && !pViewData->GetMarkData().IsMarked()); } ScInsertCellDlg::~ScInsertCellDlg() {} @@ -106,4 +129,23 @@ InsCellCmd ScInsertCellDlg::GetInsCellCmd() const return nReturn; } +size_t ScInsertCellDlg::GetCount() const +{ + switch (nInsItemChecked) + { + case 2: + return m_xNumberOfRows->get_value() - 1; + case 3: + return m_xNumberOfCols->get_value() - 1; + default: + return 0; + } +} + +IMPL_LINK_NOARG(ScInsertCellDlg, RadioButtonsHdl, weld::Toggleable&, void) +{ + m_xNumberOfRows->set_sensitive(m_xBtnInsRow->get_active()); + m_xNumberOfCols->set_sensitive(m_xBtnInsCol->get_active()); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index a8297303ee8f..69fbd1ead083 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -213,11 +213,11 @@ void HandleConditionalFormat(sal_uInt32 nIndex, bool bCondFormatDlg, bool bConta } } -void InsertCells(ScTabViewShell* pTabViewShell, SfxRequest &rReq, InsCellCmd eCmd) +void InsertCells(ScTabViewShell* pTabViewShell, SfxRequest &rReq, InsCellCmd eCmd, size_t nCount = 0) { if (eCmd!=INS_NONE) { - pTabViewShell->InsertCells( eCmd ); + pTabViewShell->InsertCells( eCmd, true, false, nCount ); if( ! rReq.IsAPI() ) { @@ -352,6 +352,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) case FID_INS_CELL: { InsCellCmd eCmd=INS_NONE; + size_t nCount = 0; if ( pReqArgs ) { @@ -385,18 +386,20 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); VclPtr<AbstractScInsertCellDlg> pDlg(pFact->CreateScInsertCellDlg(pTabViewShell->GetFrameWeld(), bTheFlag)); - pDlg->StartExecuteAsync([pDlg, pTabViewShell](sal_Int32 nResult){ + pDlg->StartExecuteAsync([pDlg, pTabViewShell, &nCount](sal_Int32 nResult){ if (nResult == RET_OK) { SfxRequest aRequest(pTabViewShell->GetViewFrame(), FID_INS_CELL); - InsertCells(pTabViewShell, aRequest, pDlg->GetInsCellCmd()); + InsCellCmd eTmpCmd = pDlg->GetInsCellCmd(); + nCount = pDlg->GetCount(); + InsertCells(pTabViewShell, aRequest, eTmpCmd, nCount); } pDlg->disposeOnce(); }); } } - InsertCells(pTabViewShell, rReq, eCmd); + InsertCells(pTabViewShell, rReq, eCmd, nCount); } break; diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx index b25bc9f91312..d6cf4b13ca01 100644 --- a/sc/source/ui/view/viewfunc.cxx +++ b/sc/source/ui/view/viewfunc.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <address.hxx> #include <config_features.h> #include <scitems.hxx> @@ -1833,7 +1834,7 @@ void ScViewFunc::OnLOKSetWidthOrHeight(SCCOLROW nStart, bool bWidth) // insert cells - undo OK -bool ScViewFunc::InsertCells( InsCellCmd eCmd, bool bRecord, bool bPartOfPaste ) +bool ScViewFunc::InsertCells( InsCellCmd eCmd, bool bRecord, bool bPartOfPaste, size_t nCount ) { ScRange aRange; ScMarkType eMarkType = GetViewData().GetSimpleArea(aRange); @@ -1841,7 +1842,7 @@ bool ScViewFunc::InsertCells( InsCellCmd eCmd, bool bRecord, bool bPartOfPaste ) { ScDocShell* pDocSh = GetViewData().GetDocShell(); const ScMarkData& rMark = GetViewData().GetMarkData(); - bool bSuccess = pDocSh->GetDocFunc().InsertCells( aRange, &rMark, eCmd, bRecord, false, bPartOfPaste ); + bool bSuccess = pDocSh->GetDocFunc().InsertCells( aRange, &rMark, eCmd, bRecord, false, bPartOfPaste, nCount ); if (bSuccess) { ResetAutoSpellForContentChange(); diff --git a/sc/uiconfig/scalc/ui/insertcells.ui b/sc/uiconfig/scalc/ui/insertcells.ui index 7bb1aa1cbba5..1f047b7b4867 100644 --- a/sc/uiconfig/scalc/ui/insertcells.ui +++ b/sc/uiconfig/scalc/ui/insertcells.ui @@ -1,33 +1,46 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.36.0 --> +<!-- Generated with glade 3.40.0 --> <interface domain="sc"> <requires lib="gtk+" version="3.20"/> + <object class="GtkAdjustment" id="number_of_columns_adjustment"> + <property name="lower">1</property> + <property name="upper">4000</property> + <property name="step-increment">1</property> + <property name="page-increment">1</property> + </object> + <object class="GtkAdjustment" id="number_of_rows_adjustment"> + <property name="lower">1</property> + <property name="upper">4000</property> + <property name="value">1</property> + <property name="step-increment">1</property> + <property name="page-increment">1</property> + </object> <object class="GtkDialog" id="InsertCellsDialog"> - <property name="can_focus">False</property> - <property name="border_width">6</property> + <property name="can-focus">False</property> + <property name="border-width">6</property> <property name="title" translatable="yes" context="insertcells|InsertCellsDialog">Insert Cells</property> <property name="resizable">False</property> <property name="modal">True</property> - <property name="default_width">0</property> - <property name="default_height">0</property> - <property name="type_hint">dialog</property> + <property name="default-width">0</property> + <property name="default-height">0</property> + <property name="type-hint">dialog</property> <child internal-child="vbox"> <object class="GtkBox" id="dialog-vbox1"> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="orientation">vertical</property> <property name="spacing">12</property> <child internal-child="action_area"> <object class="GtkButtonBox" id="dialog-action_area3"> - <property name="can_focus">False</property> - <property name="layout_style">end</property> + <property name="can-focus">False</property> + <property name="layout-style">end</property> <child> <object class="GtkButton" id="ok"> <property name="label" translatable="yes" context="stock">_OK</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="receives_default">True</property> + <property name="can-focus">True</property> + <property name="can-default">True</property> + <property name="has-default">True</property> + <property name="receives-default">True</property> <property name="use-underline">True</property> </object> <packing> @@ -40,8 +53,8 @@ <object class="GtkButton" id="cancel"> <property name="label" translatable="yes" context="stock">_Cancel</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> <property name="use-underline">True</property> </object> <packing> @@ -54,8 +67,8 @@ <object class="GtkButton" id="help"> <property name="label" translatable="yes" context="stock">_Help</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> <property name="use-underline">True</property> </object> <packing> @@ -69,33 +82,33 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="pack_type">end</property> + <property name="pack-type">end</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkFrame" id="Selection"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="can-focus">False</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> <child> - <object class="GtkBox" id="box1"> + <!-- n-columns=2 n-rows=4 --> + <object class="GtkGrid"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> - <property name="margin-start">12</property> - <property name="margin-top">6</property> + <property name="can-focus">False</property> + <property name="row-spacing">3</property> + <property name="column-spacing">6</property> + <property name="row-homogeneous">True</property> <child> <object class="GtkRadioButton" id="down"> <property name="label" translatable="yes" context="insertcells|down">Shift cells _down</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> <property name="active">True</property> - <property name="draw_indicator">True</property> + <property name="draw-indicator">True</property> <child internal-child="accessible"> <object class="AtkObject" id="down-atkobject"> <property name="AtkObject::accessible-description" translatable="yes" context="insertcells|extended_tip|down">Moves the contents of the selected range downward when cells are inserted.</property> @@ -103,19 +116,18 @@ </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> + <property name="left-attach">0</property> + <property name="top-attach">0</property> </packing> </child> <child> <object class="GtkRadioButton" id="right"> <property name="label" translatable="yes" context="insertcells|right">Shift cells _right</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <property name="group">down</property> <child internal-child="accessible"> <object class="AtkObject" id="right-atkobject"> @@ -124,19 +136,18 @@ </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> + <property name="left-attach">0</property> + <property name="top-attach">1</property> </packing> </child> <child> <object class="GtkRadioButton" id="rows"> <property name="label" translatable="yes" context="insertcells|rows">Entire ro_w</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <property name="group">down</property> <child internal-child="accessible"> <object class="AtkObject" id="rows-atkobject"> @@ -145,19 +156,18 @@ </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> + <property name="left-attach">0</property> + <property name="top-attach">2</property> </packing> </child> <child> <object class="GtkRadioButton" id="cols"> <property name="label" translatable="yes" context="insertcells|cols">Entire _column</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="draw_indicator">True</property> + <property name="can-focus">True</property> + <property name="receives-default">False</property> + <property name="use-underline">True</property> + <property name="draw-indicator">True</property> <property name="group">down</property> <child internal-child="accessible"> <object class="AtkObject" id="cols-atkobject"> @@ -166,17 +176,62 @@ </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">4</property> + <property name="left-attach">0</property> + <property name="top-attach">3</property> </packing> </child> + <child> + <object class="GtkSpinButton" id="number_of_rows"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="halign">start</property> + <property name="valign">start</property> + <property name="secondary-icon-tooltip-text" translatable="yes" context="insertcells|number_of_rows">Number of rows</property> + <property name="adjustment">number_of_rows_adjustment</property> + <property name="numeric">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="number_of_rows-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="insertcells|extended_tip|number_of_rows">Specify the number of rows to insert.</property> + </object> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">2</property> + </packing> + </child> + <child> + <object class="GtkSpinButton" id="number_of_columns"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="halign">start</property> + <property name="valign">start</property> + <property name="secondary-icon-tooltip-text" translatable="yes" context="insertcells|number_of_columns">Number of columns</property> + <property name="adjustment">number_of_columns_adjustment</property> + <property name="numeric">True</property> + <child internal-child="accessible"> + <object class="AtkObject" id="number_of_columns-atkobject"> + <property name="AtkObject::accessible-description" translatable="yes" context="insertcells|extended_tip|number_of_columns">Specify the number of columns to insert.</property> + </object> + </child> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">3</property> + </packing> + </child> + <child> + <placeholder/> + </child> + <child> + <placeholder/> + </child> </object> </child> <child type="label"> <object class="GtkLabel" id="label1"> <property name="visible">True</property> - <property name="can_focus">False</property> + <property name="can-focus">False</property> <property name="label" translatable="yes" context="insertcells|label1">Selection</property> <attributes> <attribute name="weight" value="bold"/> @@ -197,9 +252,6 @@ <action-widget response="-6">cancel</action-widget> <action-widget response="-11">help</action-widget> </action-widgets> - <child type="titlebar"> - <placeholder/> - </child> <child internal-child="accessible"> <object class="AtkObject" id="InsertCellsDialog-atkobject"> <property name="AtkObject::accessible-description" translatable="yes" context="insertcells|extended_tip|InsertCellsDialog">Opens the Insert Cells dialog, in which you can insert new cells according to the options that you specify.</property>