Kaydet (Commit) 8c2b2d63 authored tarafından Caolán McNamara's avatar Caolán McNamara

time stamp object selections and use newest as ref for equalization

Change-Id: I1bf22ddbaf263b240288f70d03d6949611f86b69
üst 2aadad1e
...@@ -42,7 +42,10 @@ typedef std::set<sal_uInt16> SdrUShortCont; ...@@ -42,7 +42,10 @@ typedef std::set<sal_uInt16> SdrUShortCont;
*/ */
class SVX_DLLPUBLIC SdrMark : public sdr::ObjectUser class SVX_DLLPUBLIC SdrMark : public sdr::ObjectUser
{ {
private:
void setTime();
protected: protected:
sal_Int64 mnTimeStamp;
SdrObject* mpSelectedSdrObject; // the selected object SdrObject* mpSelectedSdrObject; // the selected object
SdrPageView* mpPageView; SdrPageView* mpPageView;
SdrUShortCont* mpPoints; // Selected Points SdrUShortCont* mpPoints; // Selected Points
...@@ -145,6 +148,11 @@ public: ...@@ -145,6 +148,11 @@ public:
return mpGluePoints; return mpGluePoints;
} }
sal_Int64 getTimeStamp() const
{
return mnTimeStamp;
}
}; };
class SVX_DLLPUBLIC SdrMarkList class SVX_DLLPUBLIC SdrMarkList
......
...@@ -1181,7 +1181,19 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth) ...@@ -1181,7 +1181,19 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth)
if (nMarked < 2) if (nMarked < 2)
return; return;
SdrObject* pLastSelectedObj = rMarkList.GetMark(nMarked-1)->GetMarkedSdrObj(); size_t nLastSelected = 0;
sal_Int64 nLastSelectedTime = rMarkList.GetMark(0)->getTimeStamp();
for (size_t a = 1; a < nMarked; ++a)
{
sal_Int64 nCandidateTime = rMarkList.GetMark(a)->getTimeStamp();
if (nCandidateTime > nLastSelectedTime)
{
nLastSelectedTime = nCandidateTime;
nLastSelected = a;
}
}
SdrObject* pLastSelectedObj = rMarkList.GetMark(nLastSelected)->GetMarkedSdrObj();
Size aLastRectSize(pLastSelectedObj->GetLogicRect().GetSize()); Size aLastRectSize(pLastSelectedObj->GetLogicRect().GetSize());
const bool bUndo = IsUndoEnabled(); const bool bUndo = IsUndoEnabled();
...@@ -1189,8 +1201,10 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth) ...@@ -1189,8 +1201,10 @@ void SdrEditView::EqualizeMarkedObjects(bool bWidth)
if (bUndo) if (bUndo)
BegUndo(); BegUndo();
for (size_t a = 0; a < nMarked-1; ++a) for (size_t a = 0; a < nMarked; ++a)
{ {
if (a == nLastSelected)
continue;
SdrMark* pM = rMarkList.GetMark(a); SdrMark* pM = rMarkList.GetMark(a);
SdrObject* pObj = pM->GetMarkedSdrObj(); SdrObject* pObj = pM->GetMarkedSdrObj();
Rectangle aLogicRect(pObj->GetLogicRect()); Rectangle aLogicRect(pObj->GetLogicRect());
......
...@@ -38,8 +38,12 @@ ...@@ -38,8 +38,12 @@
#include <svl/SfxBroadcaster.hxx> #include <svl/SfxBroadcaster.hxx>
#include <svx/svdoedge.hxx> #include <svx/svdoedge.hxx>
void SdrMark::setTime()
{
TimeValue aNow;
osl_getSystemTime(&aNow);
mnTimeStamp = sal_Int64(aNow.Seconds) * 1000000000L + aNow.Nanosec;
}
SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView) SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView)
: mpSelectedSdrObject(pNewObj), : mpSelectedSdrObject(pNewObj),
...@@ -55,10 +59,12 @@ SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView) ...@@ -55,10 +59,12 @@ SdrMark::SdrMark(SdrObject* pNewObj, SdrPageView* pNewPageView)
{ {
mpSelectedSdrObject->AddObjectUser( *this ); mpSelectedSdrObject->AddObjectUser( *this );
} }
setTime();
} }
SdrMark::SdrMark(const SdrMark& rMark) SdrMark::SdrMark(const SdrMark& rMark)
: ObjectUser(), : ObjectUser(),
mnTimeStamp(0),
mpSelectedSdrObject(0L), mpSelectedSdrObject(0L),
mpPageView(0L), mpPageView(0L),
mpPoints(0L), mpPoints(0L),
...@@ -117,10 +123,10 @@ void SdrMark::SetMarkedSdrObj(SdrObject* pNewObj) ...@@ -117,10 +123,10 @@ void SdrMark::SetMarkedSdrObj(SdrObject* pNewObj)
} }
} }
SdrMark& SdrMark::operator=(const SdrMark& rMark) SdrMark& SdrMark::operator=(const SdrMark& rMark)
{ {
SetMarkedSdrObj(rMark.mpSelectedSdrObject); SetMarkedSdrObj(rMark.mpSelectedSdrObject);
mnTimeStamp = rMark.mnTimeStamp;
mpPageView = rMark.mpPageView; mpPageView = rMark.mpPageView;
mbCon1 = rMark.mbCon1; mbCon1 = rMark.mbCon1;
mbCon2 = rMark.mbCon2; mbCon2 = rMark.mbCon2;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment