diff options
author | Armin Le Grand <alg@apache.org> | 2014-03-26 12:48:17 +0000 |
---|---|---|
committer | Armin Le Grand <alg@apache.org> | 2014-03-26 12:48:17 +0000 |
commit | c55d29bd33ece4b96fd8bf6babcfa4c99dfc468d (patch) | |
tree | f6cc359b0b2c4f427f6994eb607a9f2c65f781de /svx | |
parent | 5fb2c24bd0cfc0b911aa2d0389960c5ee3d14c4a (diff) |
i124389 correct TextFrame layout for tables not when new text is set, but in UNdo/Redo directly for performance reasons
Notes
Notes:
merged as: 761ae519d8f36ece0a0cc070e66a1fdfbad27688
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/svdraw/svdotext.cxx | 8 | ||||
-rw-r--r-- | svx/source/svdraw/svdundo.cxx | 70 |
2 files changed, 60 insertions, 18 deletions
diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index 59cf55b8af9f..41eee3212136 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -63,7 +63,6 @@ #include <drawinglayer/geometry/viewinformation2d.hxx> #include <vcl/virdev.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> -#include <svx/svdotable.hxx> ////////////////////////////////////////////////////////////////////////////// @@ -1501,11 +1500,8 @@ void SdrTextObj::NbcSetOutlinerParaObjectForText( OutlinerParaObject* pTextObjec } SetTextSizeDirty(); - - // #124389# also need to call NbcAdjustTextFrameWidthAndHeight when we are a table object (triggered from undo) - if((IsTextFrame() || 0 != dynamic_cast< sdr::table::SdrTableObj* >(this)) && (IsAutoGrowHeight() || IsAutoGrowWidth())) - { - // adapt text frame + if (IsTextFrame() && (IsAutoGrowHeight() || IsAutoGrowWidth())) + { // Textrahmen anpassen! NbcAdjustTextFrameWidthAndHeight(); } if (!IsTextFrame()) diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index f5ec0e94b94e..bc8619f7742b 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -46,6 +46,9 @@ #include <svx/svdograf.hxx> #include <svx/sdr/contact/viewcontactofgraphic.hxx> +// #124389# +#include <svx/svdotable.hxx> + //////////////////////////////////////////////////////////////////////////////////////////////////// // iterates over all views and unmarks this SdrObject if it is marked @@ -1187,49 +1190,92 @@ void SdrUndoObjSetText::AfterSetText() void SdrUndoObjSetText::Undo() { + // only works with SdrTextObj + SdrTextObj* pTarget = dynamic_cast< SdrTextObj* >(pObj); + + if(!pTarget) + { + OSL_ENSURE(false, "SdrUndoObjSetText::Undo with SdrObject not based on SdrTextObj (!)"); + return; + } + // #94278# Trigger PageChangeCall ImpShowPageOfThisObject(); // alten Text sichern fuer Redo - if (!bNewTextAvailable) + if(!bNewTextAvailable) + { AfterSetText(); + } // Text fuer Undo kopieren, denn SetOutlinerParaObject() ist Eigentumsuebereignung OutlinerParaObject* pText1 = pOldText; + if(pText1) + { pText1 = new OutlinerParaObject(*pText1); + } - SdrText* pText = static_cast< SdrTextObj*>( pObj )->getText(mnText); - if( pText ) - static_cast< SdrTextObj* >( pObj )->NbcSetOutlinerParaObjectForText( pText1, pText ); + SdrText* pText = pTarget->getText(mnText); - pObj->SetEmptyPresObj( bEmptyPresObj ); - pObj->ActionChanged(); + if(pText) + { + pTarget->NbcSetOutlinerParaObjectForText(pText1, pText); + } + + pTarget->SetEmptyPresObj(bEmptyPresObj); + pTarget->ActionChanged(); + + // #124389# if it's a table, als oneed to relayout TextFrame + if(0 != dynamic_cast< sdr::table::SdrTableObj* >(pTarget)) + { + pTarget->NbcAdjustTextFrameWidthAndHeight(); + } // #122410# SetOutlinerParaObject at SdrText does not trigger a // BroadcastObjectChange, but it is needed to make evtl. SlideSorters // update their preview. - pObj->BroadcastObjectChange(); + pTarget->BroadcastObjectChange(); } void SdrUndoObjSetText::Redo() { + // only works with SdrTextObj + SdrTextObj* pTarget = dynamic_cast< SdrTextObj* >(pObj); + + if(!pTarget) + { + OSL_ENSURE(false, "SdrUndoObjSetText::Redo with SdrObject not based on SdrTextObj (!)"); + return; + } + // Text fuer Undo kopieren, denn SetOutlinerParaObject() ist Eigentumsuebereignung OutlinerParaObject* pText1 = pNewText; if(pText1) + { pText1 = new OutlinerParaObject(*pText1); + } + + SdrText* pText = pTarget->getText(mnText); - SdrText* pText = static_cast< SdrTextObj*>( pObj )->getText(mnText); - if( pText ) - static_cast< SdrTextObj* >( pObj )->NbcSetOutlinerParaObjectForText( pText1, pText ); + if(pText) + { + pTarget->NbcSetOutlinerParaObjectForText(pText1, pText); + } - pObj->ActionChanged(); + pTarget->ActionChanged(); + + // #124389# if it's a table, als oneed to relayout TextFrame + if(0 != dynamic_cast< sdr::table::SdrTableObj* >(pTarget)) + { + pTarget->NbcAdjustTextFrameWidthAndHeight(); + } // #122410# NbcSetOutlinerParaObjectForText at SdrTextObj does not trigger a // BroadcastObjectChange, but it is needed to make evtl. SlideSorters // update their preview. - pObj->BroadcastObjectChange(); + pTarget->BroadcastObjectChange(); // #94278# Trigger PageChangeCall ImpShowPageOfThisObject(); |