27 #include <svx/strings.hrc>
41 osl_getSystemTime(&aNow);
42 mnTimeStamp = sal_Int64(aNow.Seconds) * 1000000000 + aNow.Nanosec;
46 : mpSelectedSdrObject(pNewObj),
47 mpPageView(pNewPageView),
62 mpSelectedSdrObject(nullptr),
83 OSL_ENSURE(
mpSelectedSdrObject,
"SdrMark::ObjectInDestruction: still selected SdrObject is deleted, deselect first (!)");
119 SdrObject* pObj1 = lhs->GetMarkedSdrObj();
120 SdrObject* pObj2 = rhs->GetMarkedSdrObj();
132 return nObjOrd1 < nObjOrd2;
161 [](std::unique_ptr<SdrMark>& rItem) {
return rItem->GetMarkedSdrObj() ==
nullptr; }),
231 return (nNum <
maList.size()) ?
maList[nNum].
get() :
nullptr;
247 for(
size_t a = 0;
a <
maList.size(); ++
a)
249 if(
maList[
a]->GetMarkedSdrObj() == pObj)
277 if(pLastObj == pNewObj)
295 if(pLastOL == pNewOL)
298 const sal_uLong nNewNum(pNewObj !=
nullptr ? pNewObj ->GetOrdNum() : 0);
300 if(nNewNum < nLastNum)
318 DBG_ASSERT(pMark!=
nullptr,
"DeleteMark: MarkEntry not found.");
332 DBG_ASSERT(pMark!=
nullptr,
"ReplaceMark: MarkEntry not found.");
399 for(
size_t nO = 0; nO < nObjCount; ++nO)
406 maList.emplace_back(
new SdrMark(pObj, const_cast<SdrPageView*>(&rPV)));
467 aNam = OUString::number( nCount ) +
" " + aNam;
482 size_t nMarkPtCnt(0);
483 size_t nMarkPtObjCnt(0);
484 size_t n1stMarkNum(SAL_MAX_SIZE);
486 for(
size_t nMarkNum = 0; nMarkNum < nMarkCount; ++nMarkNum)
493 if(n1stMarkNum == SAL_MAX_SIZE)
495 n1stMarkNum = nMarkNum;
498 nMarkPtCnt += rPts.
size();
502 if(nMarkPtObjCnt > 1 && rNameOk)
509 if(rNameOk && 1 == nMarkPtObjCnt)
531 if(1 == nMarkPtObjCnt)
564 aNam = OUString::number( nMarkPtObjCnt ) +
" " + aNam;
571 aStr1 =
SvxResId(bGlue ? STR_ViewMarkedGluePoint : STR_ViewMarkedPoint);
575 aStr1 =
SvxResId(bGlue ? STR_ViewMarkedGluePoints : STR_ViewMarkedPoints);
576 aStr1 = aStr1.replaceFirst(
"%2", OUString::number( nMarkPtCnt ));
579 aStr1 = aStr1.replaceFirst(
"%1", aNam);
651 ViewSelection::ViewSelection()
652 : mbEdgesOfMarkedNodesDirty(false)
656 void ViewSelection::SetEdgesOfMarkedNodesDirty()
658 if(!mbEdgesOfMarkedNodesDirty)
660 mbEdgesOfMarkedNodesDirty =
true;
661 maEdgesOfMarkedNodes.Clear();
662 maMarkedEdgesOfMarkedNodes.Clear();
663 maAllMarkedObjects.clear();
667 const SdrMarkList& ViewSelection::GetEdgesOfMarkedNodes()
const
669 if(mbEdgesOfMarkedNodesDirty)
671 const_cast<ViewSelection*
>(
this)->ImpForceEdgesOfMarkedNodes();
674 return maEdgesOfMarkedNodes;
677 const SdrMarkList& ViewSelection::GetMarkedEdgesOfMarkedNodes()
const
679 if(mbEdgesOfMarkedNodesDirty)
681 const_cast<ViewSelection*
>(
this)->ImpForceEdgesOfMarkedNodes();
684 return maMarkedEdgesOfMarkedNodes;
687 const std::vector<SdrObject*>& ViewSelection::GetAllMarkedObjects()
const
689 if(mbEdgesOfMarkedNodesDirty)
690 const_cast<ViewSelection*
>(
this)->ImpForceEdgesOfMarkedNodes();
692 return maAllMarkedObjects;
695 void ViewSelection::ImplCollectCompleteSelection(
SdrObject* pObj)
702 if(bIsGroup && dynamic_cast< const E3dObject* >(pObj) !=
nullptr &&
dynamic_cast< const E3dScene*
>(pObj) ==
nullptr)
714 ImplCollectCompleteSelection(pObj2);
718 maAllMarkedObjects.push_back(pObj);
721 void ViewSelection::ImpForceEdgesOfMarkedNodes()
723 if(!mbEdgesOfMarkedNodesDirty)
726 mbEdgesOfMarkedNodesDirty =
false;
727 maMarkedObjectList.ForceSort();
728 maEdgesOfMarkedNodes.Clear();
729 maMarkedEdgesOfMarkedNodes.Clear();
730 maAllMarkedObjects.clear();
733 const size_t nMarkCount(maMarkedObjectList.GetMarkCount());
735 for(
size_t a = 0;
a < nMarkCount; ++
a)
737 SdrObject* pCandidate = maMarkedObjectList.GetMark(a)->GetMarkedSdrObj();
742 ImplCollectCompleteSelection(pCandidate);
751 for(
size_t nl=0; nl < nLstCnt; ++nl)
758 SdrMark aM(pEdge, maMarkedObjectList.GetMark(a)->GetPageView());
770 if(SAL_MAX_SIZE == maMarkedObjectList.FindObject(pEdge))
773 maEdgesOfMarkedNodes.InsertEntry(aM);
777 maMarkedEdgesOfMarkedNodes.InsertEntry(aM);
785 maEdgesOfMarkedNodes.ForceSort();
786 maMarkedEdgesOfMarkedNodes.ForceSort();
const SdrUShortCont & GetMarkedGluePoints() const
const size_t count(pCandidateA->getBorderLines().size())
size_t GetMarkCount() const
virtual void ObjectInDestruction(const SdrObject &rObject) override
virtual const tools::Rectangle & GetCurrentBoundRect() const
const SdrUShortCont & GetMarkedPoints() const
SdrUShortCont maGluePoints
void RemoveObjectUser(sdr::ObjectUser &rOldUser)
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
virtual OUString TakeObjNameSingul() const
const SfxBroadcaster * GetBroadcaster() const
SdrMark * GetMark(size_t nNum) const
void ReplaceMark(const SdrMark &rNewMark, size_t nNum)
void DeleteMark(size_t nNum)
virtual SdrObjList * GetSubList() const
bool TakeSnapRect(SdrPageView const *pPageView, tools::Rectangle &rRect) const
void AddObjectUser(sdr::ObjectUser &rNewUser)
virtual const tools::Rectangle & GetSnapRect() const
bool InsertPageView(const SdrPageView &rPV)
SdrPage * getSdrPageFromSdrObject() const
OUString SvxResId(const char *pId)
static bool ImpSdrMarkListSorter(std::unique_ptr< SdrMark > const &lhs, std::unique_ptr< SdrMark > const &rhs)
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
size_t GetSizeOfVector() const
SVX_DLLPRIVATE void ImpForceSort()
bool TakeBoundRect(SdrPageView const *pPageView, tools::Rectangle &rRect) const
SdrObject * GetConnectedNode(bool bTail1) const override
SdrObject * mpSelectedSdrObject
SdrObjList * GetObjList() const
Return current List.
SdrObject * GetMarkedSdrObj() const
Everything a View needs to know about a selected object.
SfxListener * GetListener(size_t nNo) const
#define DBG_ASSERT(sCon, aError)
void Merge(const SdrMarkList &rSrcList, bool bReverse=false)
SdrPageView * GetPageView() const
sal_uInt32 GetOrdNum() const
The order number (aka ZOrder, aka z-index) determines whether a SdrObject is located above or below a...
bool IsGroupObject() const
void SetMarkedSdrObj(SdrObject *pNewObj)
std::vector< std::unique_ptr< SdrMark > > maList
SdrMark & operator=(const SdrMark &rMark)
sal_uInt32 GetNavigationPosition() const
const OUString & GetPointMarkDescription() const
virtual OUString TakeObjNamePlural() const
SdrMark(SdrObject *pNewObj=nullptr, SdrPageView *pNewPageView=nullptr)
SdrObjList * getParentSdrObjListFromSdrObject() const
const OUString & GetMarkDescription() const
SdrMarkList & operator=(const SdrMarkList &rLst)
void InsertEntry(const SdrMark &rMark, bool bChkSort=true)
size_t FindObject(const SdrObject *pObj) const
bool IsObjMarkable(SdrObject const *pObj) const
At least one member must be visible for the Group object and it must not be locked.
Utility class SdrEdgeObj.
bool DeletePageView(const SdrPageView &rPV)