diff options
Diffstat (limited to 'svx/source/svdraw/svdmark.cxx')
-rw-r--r-- | svx/source/svdraw/svdmark.cxx | 204 |
1 files changed, 102 insertions, 102 deletions
diff --git a/svx/source/svdraw/svdmark.cxx b/svx/source/svdraw/svdmark.cxx index 3b5988974d18..866de4920c15 100644 --- a/svx/source/svdraw/svdmark.cxx +++ b/svx/source/svdraw/svdmark.cxx @@ -148,51 +148,51 @@ void SdrMarkList::ForceSort() const void SdrMarkList::ImpForceSort() { - if(!mbSorted) + if(mbSorted) + return; + + mbSorted = true; + size_t nCount = maList.size(); + + // remove invalid + if(nCount > 0 ) { - mbSorted = true; - size_t nCount = maList.size(); + maList.erase(std::remove_if(maList.begin(), maList.end(), + [](std::unique_ptr<SdrMark>& rItem) { return rItem->GetMarkedSdrObj() == nullptr; }), + maList.end()); + nCount = maList.size(); + } - // remove invalid - if(nCount > 0 ) - { - maList.erase(std::remove_if(maList.begin(), maList.end(), - [](std::unique_ptr<SdrMark>& rItem) { return rItem->GetMarkedSdrObj() == nullptr; }), - maList.end()); - nCount = maList.size(); - } + if(nCount <= 1) + return; - if(nCount > 1) - { - std::sort(maList.begin(), maList.end(), ImpSdrMarkListSorter); + std::sort(maList.begin(), maList.end(), ImpSdrMarkListSorter); - // remove duplicates - if(maList.size() > 1) - { - SdrMark* pCurrent = maList.back().get(); - for (size_t count = maList.size() - 1; count; --count) - { - size_t i = count - 1; - SdrMark* pCmp = maList[i].get(); - assert(pCurrent->GetMarkedSdrObj()); - if(pCurrent->GetMarkedSdrObj() == pCmp->GetMarkedSdrObj()) - { - // Con1/Con2 Merging - if(pCmp->IsCon1()) - pCurrent->SetCon1(true); + // remove duplicates + if(maList.size() <= 1) + return; - if(pCmp->IsCon2()) - pCurrent->SetCon2(true); + SdrMark* pCurrent = maList.back().get(); + for (size_t count = maList.size() - 1; count; --count) + { + size_t i = count - 1; + SdrMark* pCmp = maList[i].get(); + assert(pCurrent->GetMarkedSdrObj()); + if(pCurrent->GetMarkedSdrObj() == pCmp->GetMarkedSdrObj()) + { + // Con1/Con2 Merging + if(pCmp->IsCon1()) + pCurrent->SetCon1(true); - // delete pCmp - maList.erase(maList.begin() + i); - } - else - { - pCurrent = pCmp; - } - } - } + if(pCmp->IsCon2()) + pCurrent->SetCon2(true); + + // delete pCmp + maList.erase(maList.begin() + i); + } + else + { + pCurrent = pCmp; } } } @@ -694,96 +694,96 @@ namespace sdr void ViewSelection::ImplCollectCompleteSelection(SdrObject* pObj) { - if(pObj) + if(!pObj) + return; + + bool bIsGroup(pObj->IsGroupObject()); + + if(bIsGroup && dynamic_cast< const E3dObject* >(pObj) != nullptr && dynamic_cast< const E3dScene* >(pObj) == nullptr) { - bool bIsGroup(pObj->IsGroupObject()); + bIsGroup = false; + } - if(bIsGroup && dynamic_cast< const E3dObject* >(pObj) != nullptr && dynamic_cast< const E3dScene* >(pObj) == nullptr) - { - bIsGroup = false; - } + if(bIsGroup) + { + SdrObjList* pList = pObj->GetSubList(); - if(bIsGroup) + for(size_t a = 0; a < pList->GetObjCount(); ++a) { - SdrObjList* pList = pObj->GetSubList(); - - for(size_t a = 0; a < pList->GetObjCount(); ++a) - { - SdrObject* pObj2 = pList->GetObj(a); - ImplCollectCompleteSelection(pObj2); - } + SdrObject* pObj2 = pList->GetObj(a); + ImplCollectCompleteSelection(pObj2); } - - maAllMarkedObjects.push_back(pObj); } + + maAllMarkedObjects.push_back(pObj); } void ViewSelection::ImpForceEdgesOfMarkedNodes() { - if(mbEdgesOfMarkedNodesDirty) - { - mbEdgesOfMarkedNodesDirty = false; - maMarkedObjectList.ForceSort(); - maEdgesOfMarkedNodes.Clear(); - maMarkedEdgesOfMarkedNodes.Clear(); - maAllMarkedObjects.clear(); + if(!mbEdgesOfMarkedNodesDirty) + return; + + mbEdgesOfMarkedNodesDirty = false; + maMarkedObjectList.ForceSort(); + maEdgesOfMarkedNodes.Clear(); + maMarkedEdgesOfMarkedNodes.Clear(); + maAllMarkedObjects.clear(); - // GetMarkCount after ForceSort - const size_t nMarkCount(maMarkedObjectList.GetMarkCount()); + // GetMarkCount after ForceSort + const size_t nMarkCount(maMarkedObjectList.GetMarkCount()); - for(size_t a = 0; a < nMarkCount; ++a) + for(size_t a = 0; a < nMarkCount; ++a) + { + SdrObject* pCandidate = maMarkedObjectList.GetMark(a)->GetMarkedSdrObj(); + + if(pCandidate) { - SdrObject* pCandidate = maMarkedObjectList.GetMark(a)->GetMarkedSdrObj(); + // build transitive hull + ImplCollectCompleteSelection(pCandidate); - if(pCandidate) - { - // build transitive hull - ImplCollectCompleteSelection(pCandidate); + // travel over broadcaster/listener to access edges connected to the selected object + const SfxBroadcaster* pBC = pCandidate->GetBroadcaster(); - // travel over broadcaster/listener to access edges connected to the selected object - const SfxBroadcaster* pBC = pCandidate->GetBroadcaster(); + if(pBC) + { + const size_t nLstCnt(pBC->GetSizeOfVector()); - if(pBC) + for(size_t nl=0; nl < nLstCnt; ++nl) { - const size_t nLstCnt(pBC->GetSizeOfVector()); + SfxListener* pLst = pBC->GetListener(nl); + SdrEdgeObj* pEdge = dynamic_cast<SdrEdgeObj*>( pLst ); - for(size_t nl=0; nl < nLstCnt; ++nl) + if(pEdge && pEdge->IsInserted() && pEdge->getSdrPageFromSdrObject() == pCandidate->getSdrPageFromSdrObject()) { - SfxListener* pLst = pBC->GetListener(nl); - SdrEdgeObj* pEdge = dynamic_cast<SdrEdgeObj*>( pLst ); + SdrMark aM(pEdge, maMarkedObjectList.GetMark(a)->GetPageView()); - if(pEdge && pEdge->IsInserted() && pEdge->getSdrPageFromSdrObject() == pCandidate->getSdrPageFromSdrObject()) + if(pEdge->GetConnectedNode(true) == pCandidate) { - SdrMark aM(pEdge, maMarkedObjectList.GetMark(a)->GetPageView()); - - if(pEdge->GetConnectedNode(true) == pCandidate) - { - aM.SetCon1(true); - } - - if(pEdge->GetConnectedNode(false) == pCandidate) - { - aM.SetCon2(true); - } - - if(SAL_MAX_SIZE == maMarkedObjectList.FindObject(pEdge)) - { - // check if it itself is selected - maEdgesOfMarkedNodes.InsertEntry(aM); - } - else - { - maMarkedEdgesOfMarkedNodes.InsertEntry(aM); - } + aM.SetCon1(true); + } + + if(pEdge->GetConnectedNode(false) == pCandidate) + { + aM.SetCon2(true); + } + + if(SAL_MAX_SIZE == maMarkedObjectList.FindObject(pEdge)) + { + // check if it itself is selected + maEdgesOfMarkedNodes.InsertEntry(aM); + } + else + { + maMarkedEdgesOfMarkedNodes.InsertEntry(aM); } } } } } - - maEdgesOfMarkedNodes.ForceSort(); - maMarkedEdgesOfMarkedNodes.ForceSort(); } + + maEdgesOfMarkedNodes.ForceSort(); + maMarkedEdgesOfMarkedNodes.ForceSort(); } } // end of namespace sdr |