diff options
Diffstat (limited to 'svx/source/table')
-rw-r--r-- | svx/source/table/svdotable.cxx | 14 | ||||
-rw-r--r-- | svx/source/table/tablerow.cxx | 4 | ||||
-rw-r--r-- | svx/source/table/tablerow.hxx | 2 | ||||
-rw-r--r-- | svx/source/table/tableundo.cxx | 3 |
4 files changed, 22 insertions, 1 deletions
diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx index 4121fdaf3d6c..9d13f8fca6b3 100644 --- a/svx/source/table/svdotable.cxx +++ b/svx/source/table/svdotable.cxx @@ -204,6 +204,7 @@ public: TableStyleSettings maTableStyle; Reference< XIndexAccess > mxTableStyle; std::vector<std::unique_ptr<SdrUndoAction>> maUndos; + bool mbSkipChangeLayout; void SetModel(SdrModel* pOldModel, SdrModel* pNewModel); @@ -260,6 +261,7 @@ sal_Int32 SdrTableObjImpl::lastColCount; SdrTableObjImpl::SdrTableObjImpl() : mpTableObj( nullptr ) , mpLayouter( nullptr ) +, mbSkipChangeLayout(false) { } @@ -1868,7 +1870,11 @@ void SdrTableObj::NbcSetLogicRect(const Rectangle& rRect) const bool bWidth = maLogicRect.getWidth() != maRect.getWidth(); const bool bHeight = maLogicRect.getHeight() != maRect.getHeight(); maRect = maLogicRect; - NbcAdjustTextFrameWidthAndHeight( !bHeight, !bWidth ); + if (mpImpl->mbSkipChangeLayout) + // Avoid distributing newly available space between existing cells. + NbcAdjustTextFrameWidthAndHeight(true, true); + else + NbcAdjustTextFrameWidthAndHeight(!bHeight, !bWidth); SetRectsDirty(); } @@ -2005,6 +2011,11 @@ void SdrTableObj::AddUndo(SdrUndoAction* pUndo) mpImpl->maUndos.push_back(std::unique_ptr<SdrUndoAction>(pUndo)); } +void SdrTableObj::SetSkipChangeLayout(bool bSkipChangeLayout) +{ + mpImpl->mbSkipChangeLayout = bSkipChangeLayout; +} + // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon // with the base geometry and returns TRUE. Otherwise it returns FALSE. bool SdrTableObj::TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon ) const @@ -2247,6 +2258,7 @@ bool SdrTableObj::applySpecialDrag(SdrDragStat& rDrag) if( GetModel() && IsInserted() ) { rDrag.SetEndDragChangesAttributes(true); + rDrag.SetEndDragChangesLayout(true); } mpImpl->DragEdge( pEdgeHdl->IsHorizontalEdge(), pEdgeHdl->GetPointNum(), pEdgeHdl->GetValidDragOffset( rDrag ) ); diff --git a/svx/source/table/tablerow.cxx b/svx/source/table/tablerow.cxx index ee95e905554b..cd82cc423b45 100644 --- a/svx/source/table/tablerow.cxx +++ b/svx/source/table/tablerow.cxx @@ -149,6 +149,10 @@ void TableRow::removeColumns( sal_Int32 nIndex, sal_Int32 nCount ) } } +TableModelRef TableRow::getModel() const +{ + return mxTableModel; +} // XCellRange diff --git a/svx/source/table/tablerow.hxx b/svx/source/table/tablerow.hxx index 77d654f23297..6b38b8037389 100644 --- a/svx/source/table/tablerow.hxx +++ b/svx/source/table/tablerow.hxx @@ -47,6 +47,8 @@ public: void insertColumns( sal_Int32 nIndex, sal_Int32 nCount, CellVector::iterator* pIter = nullptr ); void removeColumns( sal_Int32 nIndex, sal_Int32 nCount ); + /// Reference to the table model containing this row. + TableModelRef getModel() const; // XCellRange virtual css::uno::Reference< css::table::XCell > SAL_CALL getCellByPosition( sal_Int32 nColumn, sal_Int32 nRow ) throw (css::lang::IndexOutOfBoundsException, css::uno::RuntimeException, std::exception) override; diff --git a/svx/source/table/tableundo.cxx b/svx/source/table/tableundo.cxx index baa7e6c29456..3a60ab02d0c2 100644 --- a/svx/source/table/tableundo.cxx +++ b/svx/source/table/tableundo.cxx @@ -463,6 +463,9 @@ void TableRowUndo::setData( const Data& rData ) mxRow->mbIsVisible = rData.mbIsVisible; mxRow->mbIsStartOfNewPage = rData.mbIsStartOfNewPage; mxRow->maName = rData.maName; + + // Trigger re-layout of the table. + mxRow->getModel()->setModified(true); } |