diff options
-rw-r--r-- | include/svx/sdr/contact/objectcontactofobjlistpainter.hxx | 7 | ||||
-rw-r--r-- | include/svx/svdpage.hxx | 30 | ||||
-rw-r--r-- | svx/source/sdr/contact/objectcontactofobjlistpainter.cxx | 4 | ||||
-rw-r--r-- | svx/source/sdr/contact/viewobjectcontactofpageobj.cxx | 2 | ||||
-rw-r--r-- | svx/source/svdraw/svdpage.cxx | 24 |
5 files changed, 32 insertions, 35 deletions
diff --git a/include/svx/sdr/contact/objectcontactofobjlistpainter.hxx b/include/svx/sdr/contact/objectcontactofobjlistpainter.hxx index d9ee440f0272..8a2d4da131ae 100644 --- a/include/svx/sdr/contact/objectcontactofobjlistpainter.hxx +++ b/include/svx/sdr/contact/objectcontactofobjlistpainter.hxx @@ -34,7 +34,7 @@ class SVX_DLLPUBLIC ObjectContactPainter : public ObjectContact protected: // Hierarchy access methods virtual sal_uInt32 GetPaintObjectCount() const = 0; - virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) const = 0; + virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) = 0; public: // basic constructor/destructor @@ -59,7 +59,7 @@ protected: // Hierarchy access methods virtual sal_uInt32 GetPaintObjectCount() const override; - virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) const override; + virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) override; public: // basic constructor/destructor @@ -95,7 +95,7 @@ protected: // Hierarchy access methods virtual sal_uInt32 GetPaintObjectCount() const override; - virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) const override; + virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) override; public: // basic constructor @@ -107,6 +107,7 @@ public: // set another page void SetStartPage(const SdrPage* pPage); const SdrPage* GetStartPage() const { return mxStartPage.get(); } + SdrPage* GetStartPage() { return mxStartPage.get(); } virtual OutputDevice* TryToGetOutputDevice() const override; }; diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx index 347beb3351da..7e1d15f92587 100644 --- a/include/svx/svdpage.hxx +++ b/include/svx/svdpage.hxx @@ -375,6 +375,14 @@ public: */ class SVX_DLLPUBLIC SdrPage : public SdrObjList, public tools::WeakBase< SdrPage > { + // #i9076# + friend class SdrModel; + friend class SvxUnoDrawPagesAccess; + + // this class uses its own UNO wrapper + // and thus has to set mxUnoPage (it also relies on mxUnoPage not being WeakRef) + friend class reportdesign::OSection; + SdrPage& operator=(const SdrPage& rSrcPage) = delete; // start PageUser section @@ -382,32 +390,20 @@ private: // #111111# PageUser section sdr::PageUserVector maPageUsers; + std::unique_ptr<sdr::contact::ViewContact> mpViewContact; + public: void AddPageUser(sdr::PageUser& rNewUser); void RemovePageUser(sdr::PageUser& rOldUser); - - // end PageUser section - - - // #110094# DrawContact section -private: - sdr::contact::ViewContact* mpViewContact; protected: sdr::contact::ViewContact* CreateObjectSpecificViewContact(); public: - sdr::contact::ViewContact& GetViewContact() const; + const sdr::contact::ViewContact& GetViewContact() const; + sdr::contact::ViewContact& GetViewContact(); // #110094# DrawContact support: Methods for handling Page changes - void ActionChanged() const; - - // #i9076# - friend class SdrModel; - friend class SvxUnoDrawPagesAccess; - -// this class uses its own UNO wrapper -// and thus has to set mxUnoPage (it also relies on mxUnoPage not being WeakRef) -friend class reportdesign::OSection; + void ActionChanged(); sal_Int32 nWdt; // Seitengroesse sal_Int32 nHgt; // Seitengroesse diff --git a/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx b/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx index 5c9fb17a6e27..a55607e65f56 100644 --- a/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx +++ b/svx/source/sdr/contact/objectcontactofobjlistpainter.cxx @@ -45,7 +45,7 @@ sal_uInt32 ObjectContactOfObjListPainter::GetPaintObjectCount() const return maStartObjects.size(); } -ViewContact& ObjectContactOfObjListPainter::GetPaintObjectViewContact(sal_uInt32 nIndex) const +ViewContact& ObjectContactOfObjListPainter::GetPaintObjectViewContact(sal_uInt32 nIndex) { const SdrObject* pObj = maStartObjects[nIndex]; DBG_ASSERT(pObj, "ObjectContactOfObjListPainter: Corrupt SdrObjectVector (!)"); @@ -157,7 +157,7 @@ sal_uInt32 ObjectContactOfPagePainter::GetPaintObjectCount() const return (GetStartPage() ? 1L : 0L); } -ViewContact& ObjectContactOfPagePainter::GetPaintObjectViewContact(sal_uInt32 /*nIndex*/) const +ViewContact& ObjectContactOfPagePainter::GetPaintObjectViewContact(sal_uInt32 /*nIndex*/) { DBG_ASSERT(GetStartPage(), "ObjectContactOfPagePainter::GetPaintObjectViewContact: no StartPage set (!)"); return GetStartPage()->GetViewContact(); diff --git a/svx/source/sdr/contact/viewobjectcontactofpageobj.cxx b/svx/source/sdr/contact/viewobjectcontactofpageobj.cxx index 1376c37929cf..03516df99ec6 100644 --- a/svx/source/sdr/contact/viewobjectcontactofpageobj.cxx +++ b/svx/source/sdr/contact/viewobjectcontactofpageobj.cxx @@ -120,7 +120,7 @@ void PagePrimitiveExtractor::Invoke() drawinglayer::primitive2d::Primitive2DContainer PagePrimitiveExtractor::createPrimitive2DSequenceForPage(const DisplayInfo& /*rDisplayInfo*/) { drawinglayer::primitive2d::Primitive2DContainer xRetval; - const SdrPage* pStartPage = GetStartPage(); + SdrPage* pStartPage = GetStartPage(); if(pStartPage) { diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx index 583c4892823e..d6679ff36e57 100644 --- a/svx/source/svdraw/svdpage.cxx +++ b/svx/source/svdraw/svdpage.cxx @@ -1061,18 +1061,22 @@ sdr::contact::ViewContact* SdrPage::CreateObjectSpecificViewContact() return new sdr::contact::ViewContactOfSdrPage(*this); } -sdr::contact::ViewContact& SdrPage::GetViewContact() const +const sdr::contact::ViewContact& SdrPage::GetViewContact() const { - if(!mpViewContact) - { - const_cast< SdrPage* >(this)->mpViewContact = - const_cast< SdrPage* >(this)->CreateObjectSpecificViewContact(); - } + if (!mpViewContact) + const_cast<SdrPage*>(this)->mpViewContact.reset( + const_cast<SdrPage*>(this)->CreateObjectSpecificViewContact()); return *mpViewContact; } +sdr::contact::ViewContact& SdrPage::GetViewContact() +{ + if (!mpViewContact) + mpViewContact.reset(CreateObjectSpecificViewContact()); + return *mpViewContact; +} void SdrPageProperties::ImpRemoveStyleSheet() { @@ -1273,11 +1277,7 @@ SdrPage::~SdrPage() TRG_ClearMasterPage(); - if(mpViewContact) - { - delete mpViewContact; - mpViewContact = nullptr; - } + mpViewContact.reset(); { delete mpSdrPageProperties; @@ -1780,7 +1780,7 @@ bool SdrPage::checkVisibility( } // DrawContact support: Methods for handling Page changes -void SdrPage::ActionChanged() const +void SdrPage::ActionChanged() { // Do necessary ViewContact actions GetViewContact().ActionChanged(); |