diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-12-08 21:43:11 -0500 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-12-08 23:23:32 -0500 |
commit | 822b3482414fe9be0e271727d58581a1df1d3b83 (patch) | |
tree | ee06146b2a503e0099fbd268357381178cec95e4 /svx | |
parent | ac732491868fd233c68b45fd358a811c9810dd7b (diff) |
Add Impl to SdrObject and hide ObjectUser member.
SdrObject is quite large and we can't pimplize it in one go. Let's do
it bit by bit.
Change-Id: I40abe71799f6dcae90854dcc6979acc1d6ed7462
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/svdraw/svdobj.cxx | 28 | ||||
-rw-r--r-- | svx/source/table/tableundo.hxx | 1 |
2 files changed, 20 insertions, 9 deletions
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx index d8a1442abdab..15797950adda 100644 --- a/svx/source/svdraw/svdobj.cxx +++ b/svx/source/svdraw/svdobj.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <svx/svdobj.hxx> #include <config_features.h> #include "sal/config.h" @@ -66,6 +67,7 @@ #include <svx/sdr/contact/viewcontactofsdrobj.hxx> #include <sdr/properties/emptyproperties.hxx> #include <svx/sdrhittesthelper.hxx> +#include <svx/sdrobjectuser.hxx> #include <svx/sdrobjectfilter.hxx> #include <svx/svddrag.hxx> #include <svx/svdetc.hxx> @@ -73,7 +75,6 @@ #include <svx/svditer.hxx> #include <svx/svdmodel.hxx> #include <svx/svdoashp.hxx> -#include <svx/svdobj.hxx> #include <svx/svdocapt.hxx> #include <svx/svdocirc.hxx> #include <svx/svdoedge.hxx> @@ -267,6 +268,11 @@ SdrObjTransformInfoRec::SdrObjTransformInfoRec() : bCanConvToPathLineToArea(true), bCanConvToPolyLineToArea(true) {} +struct SdrObject::Impl +{ + sdr::ObjectUserVector maObjectUsers; +}; + // BaseProperties section @@ -291,15 +297,16 @@ sdr::properties::BaseProperties& SdrObject::GetProperties() const void SdrObject::AddObjectUser(sdr::ObjectUser& rNewUser) { - maObjectUsers.push_back(&rNewUser); + mpImpl->maObjectUsers.push_back(&rNewUser); } void SdrObject::RemoveObjectUser(sdr::ObjectUser& rOldUser) { - const ::sdr::ObjectUserVector::iterator aFindResult = ::std::find(maObjectUsers.begin(), maObjectUsers.end(), &rOldUser); - if(aFindResult != maObjectUsers.end()) + const sdr::ObjectUserVector::iterator aFindResult = + std::find(mpImpl->maObjectUsers.begin(), mpImpl->maObjectUsers.end(), &rOldUser); + if (aFindResult != mpImpl->maObjectUsers.end()) { - maObjectUsers.erase(aFindResult); + mpImpl->maObjectUsers.erase(aFindResult); } } @@ -340,8 +347,9 @@ void SdrObject::SetBoundRectDirty() TYPEINIT1(SdrObject,SfxListener); -SdrObject::SdrObject() - :mpProperties(0L) +SdrObject::SdrObject() : + mpImpl(new Impl), + mpProperties(0L) ,mpViewContact(0L) ,pObjList(NULL) ,pPage(NULL) @@ -387,7 +395,7 @@ SdrObject::SdrObject() SdrObject::~SdrObject() { // tell all the registered ObjectUsers that the page is in destruction - ::sdr::ObjectUserVector aListCopy(maObjectUsers.begin(), maObjectUsers.end()); + sdr::ObjectUserVector aListCopy(mpImpl->maObjectUsers.begin(), mpImpl->maObjectUsers.end()); for(::sdr::ObjectUserVector::iterator aIterator = aListCopy.begin(); aIterator != aListCopy.end(); ++aIterator) { sdr::ObjectUser* pObjectUser = *aIterator; @@ -397,7 +405,7 @@ SdrObject::~SdrObject() // Clear the vector. This means that user do not need to call RemoveObjectUser() // when they get called from ObjectInDestruction(). - maObjectUsers.clear(); + mpImpl->maObjectUsers.clear(); try { @@ -431,6 +439,8 @@ SdrObject::~SdrObject() delete mpViewContact; mpViewContact = 0L; } + + delete mpImpl; } void SdrObject::Free( SdrObject*& _rpObject ) diff --git a/svx/source/table/tableundo.hxx b/svx/source/table/tableundo.hxx index 1f7e24dd6350..c9747cb635bb 100644 --- a/svx/source/table/tableundo.hxx +++ b/svx/source/table/tableundo.hxx @@ -26,6 +26,7 @@ #include "svx/svdotable.hxx" #include "svx/svdobj.hxx" #include "svx/svdundo.hxx" +#include <svx/sdrobjectuser.hxx> #include "celltypes.hxx" |