summaryrefslogtreecommitdiff
path: root/svx/source/svdraw
diff options
context:
space:
mode:
Diffstat (limited to 'svx/source/svdraw')
-rw-r--r--svx/source/svdraw/svdedtv1.cxx2
-rw-r--r--svx/source/svdraw/svdpage.cxx12
-rw-r--r--svx/source/svdraw/svdtrans.cxx20
-rw-r--r--svx/source/svdraw/svdundo.cxx48
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 );