diff options
Diffstat (limited to 'svx/source/svdraw')
-rw-r--r-- | svx/source/svdraw/svdedtv1.cxx | 2 | ||||
-rw-r--r-- | svx/source/svdraw/svdpage.cxx | 12 | ||||
-rw-r--r-- | svx/source/svdraw/svdtrans.cxx | 20 | ||||
-rw-r--r-- | svx/source/svdraw/svdundo.cxx | 48 |
4 files changed, 56 insertions, 26 deletions
diff --git a/svx/source/svdraw/svdedtv1.cxx b/svx/source/svdraw/svdedtv1.cxx index e5b7ac5d2fc6..694e55d21dc0 100644 --- a/svx/source/svdraw/svdedtv1.cxx +++ b/svx/source/svdraw/svdedtv1.cxx @@ -1533,7 +1533,6 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr, bool addPageMargin Degree100 nOldRotateAngle=GetMarkedObjRotate(); Degree100 nOldShearAngle=GetMarkedObjShear(); const SdrMarkList& rMarkList=GetMarkedObjectList(); - const size_t nMarkCount=rMarkList.GetMarkCount(); SdrObject* pObj=nullptr; RectPoint eSizePoint=RectPoint::MM; @@ -1745,6 +1744,7 @@ void SdrEditView::SetGeoAttrToMarked(const SfxItemSet& rAttr, bool addPageMargin MoveMarkedObj(Size(nPosDX,nPosDY)); } + const size_t nMarkCount=rMarkList.GetMarkCount(); // protect position if(SfxItemState::SET == rAttr.GetItemState(SID_ATTR_TRANSFORM_PROTECT_POS, true, &pPoolItem)) { diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx index dde75e15c28e..a1efbea8faea 100644 --- a/svx/source/svdraw/svdpage.cxx +++ b/svx/source/svdraw/svdpage.cxx @@ -666,25 +666,15 @@ void SdrObjList::sort( std::vector<sal_Int32>& sortOrder) bool const isUndo(rModel.IsUndoEnabled()); if (isUndo) { - rModel.BegUndo(SvxResId(STR_SortShapes)); + rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoSort(*getSdrPageFromSdrObjList(), sortOrder)); } for (size_t i = 0; i < aNewSortOrder.size(); ++i) { aNewList[i] = maList[ aNewSortOrder[i] ]; - if (isUndo && i != sal::static_int_cast<size_t>(aNewSortOrder[i])) - { - rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoObjectOrdNum( - *aNewList[i], aNewSortOrder[i], i)); - } aNewList[i]->SetOrdNum(i); } - if (isUndo) - { - rModel.EndUndo(); - } - std::swap(aNewList, maList); } diff --git a/svx/source/svdraw/svdtrans.cxx b/svx/source/svdraw/svdtrans.cxx index 6af3a49ea873..0a00b9b44121 100644 --- a/svx/source/svdraw/svdtrans.cxx +++ b/svx/source/svdraw/svdtrans.cxx @@ -406,23 +406,15 @@ Degree100 NormAngle18000(Degree100 a) return a; } -Degree100 NormAngle36000(Degree100 deg100) +Degree100 NormAngle36000(Degree100 a) { - // do an add because we want -90 to end up as 270 - int a = 36000 + deg100.get(); - a %= 36000; - a = std::abs(a); - return Degree100(a); + a %= 36000_deg100; + if (a < 0_deg100) + a += 36000_deg100; + return a; } -sal_uInt16 GetAngleSector(Degree100 nAngle) -{ - nAngle = NormAngle36000(nAngle); - if (nAngle< 9000_deg100) return 0; - if (nAngle<18000_deg100) return 1; - if (nAngle<27000_deg100) return 2; - return 3; -} +sal_uInt16 GetAngleSector(Degree100 nAngle) { return (NormAngle36000(nAngle) / 9000_deg100).get(); } tools::Long GetLen(const Point& rPnt) { diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx index 2e81d8acd91f..22309d0aaa44 100644 --- a/svx/source/svdraw/svdundo.cxx +++ b/svx/source/svdraw/svdundo.cxx @@ -42,6 +42,7 @@ #include <vcl/svapp.hxx> #include <sfx2/viewsh.hxx> #include <svx/svdoashp.hxx> +#include <sal/log.hxx> #include <osl/diagnose.h> @@ -972,6 +973,48 @@ OUString SdrUndoObjOrdNum::GetComment() const return ImpGetDescriptionStr(STR_UndoObjOrdNum); } +SdrUndoSort::SdrUndoSort(SdrPage & rPage, + ::std::vector<sal_Int32> const& rSortOrder) + : SdrUndoAction(rPage.getSdrModelFromSdrPage()) + , m_OldSortOrder(rSortOrder.size()) + , m_NewSortOrder(rSortOrder) + , m_nPage(rPage.GetPageNum()) +{ + // invert order + for (size_t i = 0; i < rSortOrder.size(); ++i) + { + m_OldSortOrder[rSortOrder[i]] = i; + } +} + +void SdrUndoSort::Do(::std::vector<sal_Int32> & rSortOrder) +{ + SdrPage & rPage(*rMod.GetPage(m_nPage)); + if (rPage.GetObjCount() != rSortOrder.size()) + { + // can probably happen with sw's cursed SdrVirtObj mess - no good solution for that + SAL_WARN("svx", "SdrUndoSort size mismatch"); + return; + } + + // hopefully this can't throw + rPage.sort(rSortOrder); +} + +void SdrUndoSort::Undo() +{ + Do(m_OldSortOrder); +} + +void SdrUndoSort::Redo() +{ + Do(m_NewSortOrder); +} + +OUString SdrUndoSort::GetComment() const +{ + return SvxResId(STR_SortShapes); +} SdrUndoObjSetText::SdrUndoObjSetText(SdrObject& rNewObj, sal_Int32 nText) : SdrUndoObj(rNewObj) @@ -1675,6 +1718,11 @@ std::unique_ptr<SdrUndoAction> SdrUndoFactory::CreateUndoObjectOrdNum( SdrObject return std::make_unique<SdrUndoObjOrdNum>( rObject, nOldOrdNum1, nNewOrdNum1 ); } +std::unique_ptr<SdrUndoAction> SdrUndoFactory::CreateUndoSort(SdrPage & rPage, ::std::vector<sal_Int32> const& rSortOrder) +{ + return std::make_unique<SdrUndoSort>(rPage, rSortOrder); +} + std::unique_ptr<SdrUndoAction> SdrUndoFactory::CreateUndoReplaceObject( SdrObject& rOldObject, SdrObject& rNewObject ) { return std::make_unique<SdrUndoReplaceObj>( rOldObject, rNewObject ); |