diff options
author | Jochen Nitschke <j.nitschke+logerrit@ok.de> | 2016-08-02 14:30:09 +0200 |
---|---|---|
committer | Jochen Nitschke <j.nitschke+logerrit@ok.de> | 2016-09-29 04:19:03 +0000 |
commit | a87a31602165cb2a37c32f5928e4f9daade7271d (patch) | |
tree | b169a6d961d7a0cbbf61c18a236d3a0c2f40f698 /svx/source/svdraw | |
parent | 2f6f851acab5284f516ad6a91c05149ffed575d2 (diff) |
merge SdrPageView::IsObjSelectable and SdrPageView::IsObjMarkable
These member functions have the same purpose and share same
functionality in great parts.
The checks are rewritten for better readability and merged
into IsObjMarkable.
This adds IsInserted and a same page check to the function.
Tested selection of nested grouped objects.
Tested selection of objects in front of objects on master pages.
The fix for #i43302# doesn't seem nessasary (saw no way to create
empty groups) but leaving it on for now.
Change-Id: I35d84c66dfd832d626ba2700f22d4c437593cac7
Reviewed-on: https://gerrit.libreoffice.org/27786
Reviewed-by: Jochen Nitschke <j.nitschke+logerrit@ok.de>
Tested-by: Jochen Nitschke <j.nitschke+logerrit@ok.de>
Diffstat (limited to 'svx/source/svdraw')
-rw-r--r-- | svx/source/svdraw/svdmrkv.cxx | 29 | ||||
-rw-r--r-- | svx/source/svdraw/svdpagv.cxx | 74 |
2 files changed, 32 insertions, 71 deletions
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index 3cc38362255b..5c664915be50 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -1270,33 +1270,6 @@ SfxViewShell* SdrMarkView::GetSfxViewShell() const return SfxViewShell::Current(); } -bool SdrPageView::IsObjSelectable(SdrObject *pObj) const -{ - SdrLayerID nLay=pObj->GetLayer(); - bool bRaus=!pObj->IsInserted(); // Obj deleted? - if (!pObj->Is3DObj()) { - bRaus=bRaus || pObj->GetPage()!=GetPage(); // Obj suddenly in different Page or Group - } - bRaus=bRaus || GetLockedLayers().IsSet(nLay) || // Layer locked? - !GetVisibleLayers().IsSet(nLay); // Layer invisible? - - if( !bRaus ) - bRaus = !pObj->IsVisible(); // invisible objects can not be selected - - if (!bRaus) { - // Grouped objects can now be selected. - // After EnterGroup the higher-level objects, - // have to be deselected, though. - const SdrObjList* pOOL=pObj->GetObjList(); - const SdrObjList* pVOL=GetObjList(); - while (pOOL!=nullptr && pOOL!=pVOL) { - pOOL=pOOL->GetUpList(); - } - bRaus=pOOL!=pVOL; - } - return !bRaus; -} - void SdrMarkView::CheckMarked() { for (size_t nm=GetMarkedObjectCount(); nm>0;) { @@ -1304,7 +1277,7 @@ void SdrMarkView::CheckMarked() SdrMark* pM = GetSdrMarkByIndex(nm); SdrObject* pObj = pM->GetMarkedSdrObj(); SdrPageView* pPV = pM->GetPageView(); - bool bRaus = !pObj || !pPV->IsObjSelectable(pObj); + bool bRaus = !pObj || !pPV->IsObjMarkable(pObj); if (bRaus) { GetMarkedObjectListWriteAccess().DeleteMark(nm); diff --git a/svx/source/svdraw/svdpagv.cxx b/svx/source/svdraw/svdpagv.cxx index 8d2b06e2e15c..0fafd16de52c 100644 --- a/svx/source/svdraw/svdpagv.cxx +++ b/svx/source/svdraw/svdpagv.cxx @@ -647,59 +647,47 @@ bool SdrPageView::IsLayer(const OUString& rName, const SetOfByte& rBS) const bool SdrPageView::IsObjMarkable(SdrObject* pObj) const { - if(pObj) + if (!pObj) + return false; + if (pObj->IsMarkProtect()) + return false; // excluded from selection? + if (!pObj->IsVisible()) + return false; // only visible are selectable + if (!pObj->IsInserted()) + return false; // Obj deleted? + if (dynamic_cast<const SdrObjGroup*>(pObj) != nullptr) { - // excluded from selection? - if(pObj->IsMarkProtect()) - { - return false; - } - - // only visible are selectable - if( !pObj->IsVisible() ) - { - return false; - } + // If object is a Group object, visibility may depend on + // multiple layers. If one object is markable, Group is markable. + SdrObjList* pObjList = static_cast<SdrObjGroup*>(pObj)->GetSubList(); - if(dynamic_cast<const SdrObjGroup*>( pObj) != nullptr) + if (pObjList && pObjList->GetObjCount()) { - // If object is a Group object, visibility may depend on - // multiple layers. If one object is markable, Group is markable. - SdrObjList* pObjList = static_cast<SdrObjGroup*>(pObj)->GetSubList(); - - if(pObjList && pObjList->GetObjCount()) + for (size_t a = 0; a < pObjList->GetObjCount(); ++a) { - bool bGroupIsMarkable(false); - - for(size_t a = 0; !bGroupIsMarkable && a < pObjList->GetObjCount(); ++a) - { - SdrObject* pCandidate = pObjList->GetObj(a); - - // call recursively - if(IsObjMarkable(pCandidate)) - { - bGroupIsMarkable = true; - } - } - - return bGroupIsMarkable; - } - else - { - // #i43302# - // Allow empty groups to be selected to be able to delete them - return true; + SdrObject* pCandidate = pObjList->GetObj(a); + // call recursively + if (IsObjMarkable(pCandidate)) + return true; } + return false; } else { - // the layer has to be visible and must not be locked - SdrLayerID nL = pObj->GetLayer(); - return (aLayerVisi.IsSet(sal_uInt8(nL)) && !aLayerLock.IsSet(sal_uInt8(nL))); + // #i43302# + // Allow empty groups to be selected to be able to delete them + return true; } } - - return false; + if (!pObj->Is3DObj() && pObj->GetPage()!=GetPage()) + return false; // Obj suddenly in different Page + // the layer has to be visible and must not be locked + SdrLayerID nL = pObj->GetLayer(); + if (!aLayerVisi.IsSet(sal_uInt8(nL))) + return false; + if (aLayerLock.IsSet(sal_uInt8(nL))) + return false; + return true; } void SdrPageView::SetPageOrigin(const Point& rOrg) |