diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-04-24 16:19:38 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2012-04-26 09:58:00 -0400 |
commit | 399727e98353c24719408780ad9d7e7eee198176 (patch) | |
tree | e06c0619e2de06fce23be7ecb05894501cc5eda1 /sc/inc | |
parent | Merged ScSharedCellEditSource with ScCellEditSource. (diff) | |
download | core-399727e98353c24719408780ad9d7e7eee198176.tar.gz core-399727e98353c24719408780ad9d7e7eee198176.zip |
Have ScHeaderFooterTextObj store authoritative EditTextObject instance.
This removes lots of needless broadcasting, and makes the code a lot
simpler. But it introduced a bug I need to look into...
Diffstat (limited to 'sc/inc')
-rw-r--r-- | sc/inc/editsrc.hxx | 3 | ||||
-rw-r--r-- | sc/inc/fielduno.hxx | 7 | ||||
-rw-r--r-- | sc/inc/textuno.hxx | 58 |
3 files changed, 37 insertions, 31 deletions
diff --git a/sc/inc/editsrc.hxx b/sc/inc/editsrc.hxx index 20de06cb99af..435fb856bcd7 100644 --- a/sc/inc/editsrc.hxx +++ b/sc/inc/editsrc.hxx @@ -44,6 +44,7 @@ class ScCellTextData; class ScHeaderFooterTextData; class ScAccessibleTextData; class SdrObject; +class EditTextObject; class ScHeaderFooterChangedHint : public SfxHint @@ -69,7 +70,7 @@ private: public: ScHeaderFooterEditSource(const ScHeaderFooterTextData& rData); - ScHeaderFooterEditSource(ScHeaderFooterContentObj& rContent, sal_uInt16 nP); + ScHeaderFooterEditSource(ScHeaderFooterContentObj& rContent, sal_uInt16 nP, const EditTextObject* pTextObj); virtual ~ScHeaderFooterEditSource(); // GetEditEngine is needed because the forwarder doesn't have field functions diff --git a/sc/inc/fielduno.hxx b/sc/inc/fielduno.hxx index a00dc67b187b..86c6f524ae05 100644 --- a/sc/inc/fielduno.hxx +++ b/sc/inc/fielduno.hxx @@ -58,6 +58,7 @@ class ScEditFieldObj; class ScHeaderFieldObj; class ScHeaderFooterContentObj; class ScDocShell; +class EditTextObject; class ScCellFieldsObj : public cppu::WeakImplHelper5< @@ -283,8 +284,8 @@ private: ScHeaderFieldObj* GetObjectByIndex_Impl(sal_Int32 Index) const; public: - ScHeaderFieldsObj(ScHeaderFooterContentObj* pContent, - sal_uInt16 nP, sal_uInt16 nT); + ScHeaderFieldsObj( + ScHeaderFooterContentObj* pContent, sal_uInt16 nP, const EditTextObject* pTextObj, sal_uInt16 nT); virtual ~ScHeaderFieldsObj(); // XIndexAccess @@ -361,7 +362,7 @@ public: SvxFieldItem CreateFieldItem(); void InitDoc( const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& rContent, - ScHeaderFooterContentObj* pContent, sal_uInt16 nP, const ESelection& rSel); + ScHeaderFooterContentObj* pContent, sal_uInt16 nP, const EditTextObject* pTextObj, const ESelection& rSel); virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) diff --git a/sc/inc/textuno.hxx b/sc/inc/textuno.hxx index 5dccc865cbc0..2eea0c38dd32 100644 --- a/sc/inc/textuno.hxx +++ b/sc/inc/textuno.hxx @@ -40,6 +40,8 @@ #include <com/sun/star/lang/XUnoTunnel.hpp> #include <cppuhelper/implbase3.hxx> #include <cppuhelper/implbase5.hxx> + +#include "rtl/ref.hxx" #include "scdllapi.h" class EditEngine; @@ -52,6 +54,7 @@ class ScSimpleEditSource; class ScCellEditSource; class ScEditEngineDefaulter; class ScFieldEditEngine; +class ScHeaderFooterTextObj; struct ScHeaderFieldData; @@ -70,28 +73,22 @@ class ScHeaderFooterContentObj : public cppu::WeakImplHelper3< com::sun::star::lang::XServiceInfo > { private: - EditTextObject* pLeftText; - EditTextObject* pCenterText; - EditTextObject* pRightText; - SfxBroadcaster aBC; + rtl::Reference<ScHeaderFooterTextObj> mxLeftText; + rtl::Reference<ScHeaderFooterTextObj> mxCenterText; + rtl::Reference<ScHeaderFooterTextObj> mxRightText; ScHeaderFooterContentObj(); // disabled public: - ScHeaderFooterContentObj( const EditTextObject* pLeft, - const EditTextObject* pCenter, - const EditTextObject* pRight ); + ScHeaderFooterContentObj( const EditTextObject* pLeft, + const EditTextObject* pCenter, + const EditTextObject* pRight ); virtual ~ScHeaderFooterContentObj(); // for ScPageHFItem (using getImplementation) - const EditTextObject* GetLeftEditObject() const { return pLeftText; } - const EditTextObject* GetCenterEditObject() const { return pCenterText; } - const EditTextObject* GetRightEditObject() const { return pRightText; } - - void AddListener( SfxListener& rListener ); - void RemoveListener( SfxListener& rListener ); - - void UpdateText( sal_uInt16 nPart, EditEngine& rSource ); + const EditTextObject* GetLeftEditObject() const; + const EditTextObject* GetCenterEditObject() const; + const EditTextObject* GetRightEditObject() const; // XHeaderFooterContent virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > SAL_CALL @@ -122,9 +119,10 @@ public: // ScHeaderFooterTextData: shared data between sub objects of a ScHeaderFooterTextObj -class ScHeaderFooterTextData : public SfxListener +class ScHeaderFooterTextData { private: + EditTextObject* mpTextObj; ScHeaderFooterContentObj& rContentObj; sal_uInt16 nPart; ScEditEngineDefaulter* pEditEngine; @@ -133,23 +131,28 @@ private: sal_Bool bInUpdate; public: - ScHeaderFooterTextData( ScHeaderFooterContentObj& rContent, - sal_uInt16 nP ); - ~ScHeaderFooterTextData(); - - virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + ScHeaderFooterTextData( + ScHeaderFooterContentObj& rContent, sal_uInt16 nP, const EditTextObject* pTextObj); + ~ScHeaderFooterTextData(); // helper functions SvxTextForwarder* GetTextForwarder(); - void UpdateData(); + void UpdateData(); + void UpdateData(EditEngine& rEditEngine); ScEditEngineDefaulter* GetEditEngine() { GetTextForwarder(); return pEditEngine; } sal_uInt16 GetPart() const { return nPart; } ScHeaderFooterContentObj& GetContentObj() const { return rContentObj; } -}; -// ScHeaderFooterTextObj changes the text in a ScHeaderFooterContentObj + const EditTextObject* GetTextObject() const; +}; +/** + * Each of these instances represent, the left, center or right part of the + * header of footer of a page. + * + * ScHeaderFooterTextObj changes the text in a ScHeaderFooterContentObj. + */ class ScHeaderFooterTextObj : public cppu::WeakImplHelper5< com::sun::star::text::XText, com::sun::star::text::XTextRangeMover, @@ -164,10 +167,11 @@ private: void CreateUnoText_Impl(); public: - ScHeaderFooterTextObj( ScHeaderFooterContentObj& rContent, - sal_uInt16 nP ); - virtual ~ScHeaderFooterTextObj(); + ScHeaderFooterTextObj( + ScHeaderFooterContentObj& rContent, sal_uInt16 nP, const EditTextObject* pTextObj); + virtual ~ScHeaderFooterTextObj(); + const EditTextObject* GetTextObject() const; const SvxUnoText& GetUnoText(); static void FillDummyFieldData( ScHeaderFieldData& rData ); |