summaryrefslogtreecommitdiffstats
path: root/sc/inc
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2012-04-24 16:19:38 -0400
committerKohei Yoshida <kohei.yoshida@gmail.com>2012-04-26 09:58:00 -0400
commit399727e98353c24719408780ad9d7e7eee198176 (patch)
treee06c0619e2de06fce23be7ecb05894501cc5eda1 /sc/inc
parentMerged ScSharedCellEditSource with ScCellEditSource. (diff)
downloadcore-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.hxx3
-rw-r--r--sc/inc/fielduno.hxx7
-rw-r--r--sc/inc/textuno.hxx58
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 );