tdf#125181 maxY is 50000 in prstGeom for star24 and star32
[LibreOffice.git] / sc / inc / textuno.hxx
blob5467c4eb67262739e086349d837271a745f49c02
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_SC_INC_TEXTUNO_HXX
21 #define INCLUDED_SC_INC_TEXTUNO_HXX
23 #include "address.hxx"
24 #include <editeng/unotext.hxx>
25 #include <svl/lstner.hxx>
26 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
27 #include <com/sun/star/sheet/XHeaderFooterContent.hpp>
28 #include <com/sun/star/lang/XServiceInfo.hpp>
29 #include <com/sun/star/lang/XUnoTunnel.hpp>
30 #include <cppuhelper/implbase.hxx>
31 #include <cppuhelper/weakref.hxx>
33 #include <rtl/ref.hxx>
35 #include <memory>
37 class EditEngine;
38 class EditTextObject;
39 class SvxEditEngineForwarder;
40 class ScDocShell;
41 class ScCellObj;
42 class ScSimpleEditSource;
43 class ScCellEditSource;
44 class ScEditEngineDefaulter;
45 class ScFieldEditEngine;
46 class ScHeaderFooterTextObj;
48 struct ScHeaderFieldData;
50 enum class ScHeaderFooterPart{ LEFT, CENTER, RIGHT };
52 // ScHeaderFooterContentObj is a dumb container which must be re-written into
53 // the page template using setPropertyValue
55 class ScHeaderFooterContentObj : public cppu::WeakImplHelper<
56 css::sheet::XHeaderFooterContent,
57 css::lang::XUnoTunnel,
58 css::lang::XServiceInfo >
60 private:
61 rtl::Reference<ScHeaderFooterTextObj> mxLeftText;
62 rtl::Reference<ScHeaderFooterTextObj> mxCenterText;
63 rtl::Reference<ScHeaderFooterTextObj> mxRightText;
65 public:
66 ScHeaderFooterContentObj();
67 virtual ~ScHeaderFooterContentObj() override;
69 // for ScPageHFItem (using getImplementation)
70 const EditTextObject* GetLeftEditObject() const;
71 const EditTextObject* GetCenterEditObject() const;
72 const EditTextObject* GetRightEditObject() const;
74 void Init( const EditTextObject* pLeft,
75 const EditTextObject* pCenter,
76 const EditTextObject* pRight);
78 // XHeaderFooterContent
79 virtual css::uno::Reference< css::text::XText > SAL_CALL
80 getLeftText() override;
81 virtual css::uno::Reference< css::text::XText > SAL_CALL
82 getCenterText() override;
83 virtual css::uno::Reference< css::text::XText > SAL_CALL
84 getRightText() override;
86 // XUnoTunnel
87 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence<
88 sal_Int8 >& aIdentifier ) override;
90 static const css::uno::Sequence<sal_Int8>& getUnoTunnelId();
91 static rtl::Reference<ScHeaderFooterContentObj> getImplementation(const css::uno::Reference<css::sheet::XHeaderFooterContent>& rObj);
93 // XServiceInfo
94 virtual OUString SAL_CALL getImplementationName() override;
95 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
96 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
100 // ScHeaderFooterTextData: shared data between sub objects of a ScHeaderFooterTextObj
102 class ScHeaderFooterTextData
104 private:
105 std::unique_ptr<EditTextObject> mpTextObj;
106 css::uno::WeakReference<css::sheet::XHeaderFooterContent> xContentObj;
107 ScHeaderFooterPart const nPart;
108 std::unique_ptr<ScEditEngineDefaulter> pEditEngine;
109 std::unique_ptr<SvxEditEngineForwarder> pForwarder;
110 bool bDataValid;
112 public:
113 ScHeaderFooterTextData(const ScHeaderFooterTextData&) = delete;
114 const ScHeaderFooterTextData& operator=(const ScHeaderFooterTextData&) = delete;
115 ScHeaderFooterTextData(
116 css::uno::WeakReference<css::sheet::XHeaderFooterContent> const & xContent, ScHeaderFooterPart nP, const EditTextObject* pTextObj);
117 ~ScHeaderFooterTextData();
119 // helper functions
120 SvxTextForwarder* GetTextForwarder();
121 void UpdateData();
122 void UpdateData(EditEngine& rEditEngine);
123 ScEditEngineDefaulter* GetEditEngine() { GetTextForwarder(); return pEditEngine.get(); }
125 ScHeaderFooterPart GetPart() const { return nPart; }
126 const css::uno::Reference<css::sheet::XHeaderFooterContent> GetContentObj() const { return xContentObj; }
128 const EditTextObject* GetTextObject() const { return mpTextObj.get(); }
132 * Each of these instances represent, the left, center or right part of the
133 * header of footer of a page.
135 * ScHeaderFooterTextObj changes the text in a ScHeaderFooterContentObj.
137 class ScHeaderFooterTextObj : public cppu::WeakImplHelper<
138 css::text::XText,
139 css::text::XTextRangeMover,
140 css::container::XEnumerationAccess,
141 css::text::XTextFieldsSupplier,
142 css::lang::XServiceInfo >
144 private:
145 ScHeaderFooterTextData aTextData;
146 rtl::Reference<SvxUnoText> mxUnoText;
148 void CreateUnoText_Impl();
150 public:
151 ScHeaderFooterTextObj(
152 const css::uno::WeakReference<css::sheet::XHeaderFooterContent>& xContent, ScHeaderFooterPart nP, const EditTextObject* pTextObj);
153 virtual ~ScHeaderFooterTextObj() override;
155 const EditTextObject* GetTextObject() const;
156 const SvxUnoText& GetUnoText();
158 static void FillDummyFieldData( ScHeaderFieldData& rData );
160 // XText
161 virtual void SAL_CALL insertTextContent( const css::uno::Reference< css::text::XTextRange >& xRange,
162 const css::uno::Reference< css::text::XTextContent >& xContent,
163 sal_Bool bAbsorb ) override;
164 virtual void SAL_CALL removeTextContent( const css::uno::Reference< css::text::XTextContent >& xContent ) override;
166 // XSimpleText
167 virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL
168 createTextCursor() override;
169 virtual css::uno::Reference< css::text::XTextCursor > SAL_CALL
170 createTextCursorByRange( const css::uno::Reference< css::text::XTextRange >& aTextPosition ) override;
171 virtual void SAL_CALL insertString( const css::uno::Reference< css::text::XTextRange >& xRange,
172 const OUString& aString, sal_Bool bAbsorb ) override;
173 virtual void SAL_CALL insertControlCharacter( const css::uno::Reference< css::text::XTextRange >& xRange,
174 sal_Int16 nControlCharacter, sal_Bool bAbsorb ) override;
176 // XTextRange
177 virtual css::uno::Reference< css::text::XText > SAL_CALL
178 getText() override;
179 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
180 getStart() override;
181 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
182 getEnd() override;
183 virtual OUString SAL_CALL getString() override;
184 virtual void SAL_CALL setString( const OUString& aString ) override;
186 // XTextRangeMover
187 virtual void SAL_CALL moveTextRange( const css::uno::Reference< css::text::XTextRange >& xRange,
188 sal_Int16 nParagraphs ) override;
190 // XEnumerationAccess
191 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL
192 createEnumeration() override;
194 // XElementAccess
195 virtual css::uno::Type SAL_CALL getElementType() override;
196 virtual sal_Bool SAL_CALL hasElements() override;
198 // XTextFieldsSupplier
199 virtual css::uno::Reference< css::container::XEnumerationAccess > SAL_CALL
200 getTextFields() override;
201 virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL
202 getTextFieldMasters() override;
204 // XServiceInfo
205 virtual OUString SAL_CALL getImplementationName() override;
206 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
207 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
211 // derived cursor objects for getImplementation and getText/getStart/getEnd
213 //! uno3: SvxUnoTextCursor is not derived from XUnoTunnel, but should be (?)
215 class ScCellTextCursor : public SvxUnoTextCursor
217 rtl::Reference<ScCellObj> mxTextObj;
219 public:
220 ScCellTextCursor(ScCellObj& rText);
221 virtual ~ScCellTextCursor() throw() override;
223 ScCellTextCursor(ScCellTextCursor const &) = default;
224 ScCellTextCursor(ScCellTextCursor &&) = default;
225 ScCellTextCursor & operator =(ScCellTextCursor const &) = delete; // due to SvxUnoTextCursor
226 ScCellTextCursor & operator =(ScCellTextCursor &&) = delete; // due to SvxUnoTextCursor
228 ScCellObj& GetCellObj() const { return *mxTextObj; }
230 // SvxUnoTextCursor methods reimplemented here:
231 virtual css::uno::Reference< css::text::XText > SAL_CALL
232 getText() override;
233 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
234 getStart() override;
235 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
236 getEnd() override;
238 // XUnoTunnel
239 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
241 static const css::uno::Sequence<sal_Int8>& getUnoTunnelId();
242 static ScCellTextCursor* getImplementation(const css::uno::Reference< css::uno::XInterface>& rObj);
245 class ScHeaderFooterTextCursor : public SvxUnoTextCursor
247 private:
248 rtl::Reference<ScHeaderFooterTextObj> rTextObj;
250 public:
251 ScHeaderFooterTextCursor(rtl::Reference<ScHeaderFooterTextObj> const & rText);
252 virtual ~ScHeaderFooterTextCursor() throw() override;
254 ScHeaderFooterTextCursor(ScHeaderFooterTextCursor const &) = default;
255 ScHeaderFooterTextCursor(ScHeaderFooterTextCursor &&) = default;
256 ScHeaderFooterTextCursor & operator =(ScHeaderFooterTextCursor const &) = delete; // due to SvxUnoTextCursor
257 ScHeaderFooterTextCursor & operator =(ScHeaderFooterTextCursor &&) = delete; // due to SvxUnoTextCursor
259 // SvxUnoTextCursor methods reimplemented here:
260 virtual css::uno::Reference< css::text::XText > SAL_CALL
261 getText() override;
262 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
263 getStart() override;
264 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
265 getEnd() override;
267 // XUnoTunnel
268 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
270 static const css::uno::Sequence<sal_Int8>& getUnoTunnelId();
271 static ScHeaderFooterTextCursor* getImplementation(const css::uno::Reference<css::uno::XInterface>& rObj);
274 class ScDrawTextCursor : public SvxUnoTextCursor
276 private:
277 css::uno::Reference< css::text::XText > xParentText;
279 public:
280 ScDrawTextCursor( const css::uno::Reference< css::text::XText >& xParent,
281 const SvxUnoTextBase& rText );
282 virtual ~ScDrawTextCursor() throw() override;
284 ScDrawTextCursor(ScDrawTextCursor const &) = default;
285 ScDrawTextCursor(ScDrawTextCursor &&) = default;
286 ScDrawTextCursor & operator =(ScDrawTextCursor const &) = delete; // due to SvxUnoTextCursor
287 ScDrawTextCursor & operator =(ScDrawTextCursor &&) = delete; // due to SvxUnoTextCursor
289 // SvxUnoTextCursor methods reimplemented here:
290 virtual css::uno::Reference< css::text::XText > SAL_CALL
291 getText() override;
292 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
293 getStart() override;
294 virtual css::uno::Reference< css::text::XTextRange > SAL_CALL
295 getEnd() override;
297 // XUnoTunnel
298 virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
300 static const css::uno::Sequence<sal_Int8>& getUnoTunnelId();
301 static ScDrawTextCursor* getImplementation(const css::uno::Reference<css::uno::XInterface>& rObj);
304 // ScAnnotationTextCursor isn't needed anymore - SvxUnoTextCursor is used instead
306 // ScEditEngineTextObj for formatted cell content that is not inserted in a cell or header/footer
307 // (used for XML export of change tracking contents)
309 class ScSimpleEditSourceHelper
311 std::unique_ptr<ScEditEngineDefaulter> pEditEngine;
312 std::unique_ptr<SvxEditEngineForwarder> pForwarder;
313 std::unique_ptr<ScSimpleEditSource> pOriginalSource;
315 public:
316 ScSimpleEditSourceHelper();
317 ~ScSimpleEditSourceHelper();
319 ScSimpleEditSource* GetOriginalSource() const { return pOriginalSource.get(); }
320 ScEditEngineDefaulter* GetEditEngine() const { return pEditEngine.get(); }
323 class ScEditEngineTextObj : public ScSimpleEditSourceHelper, public SvxUnoText
325 public:
326 ScEditEngineTextObj();
327 virtual ~ScEditEngineTextObj() throw() override;
329 void SetText( const EditTextObject& rTextObject );
330 std::unique_ptr<EditTextObject> CreateTextObject();
333 // ScCellTextData: shared data between sub objects of a cell text object
335 class ScCellTextData : public SfxListener
337 protected:
338 ScDocShell* pDocShell;
339 ScAddress const aCellPos;
340 std::unique_ptr<ScFieldEditEngine> pEditEngine;
341 std::unique_ptr<SvxEditEngineForwarder> pForwarder;
342 std::unique_ptr<ScCellEditSource> pOriginalSource;
343 bool bDataValid;
344 bool bInUpdate;
345 bool bDirty;
346 bool bDoUpdate;
348 public:
349 ScCellTextData(ScDocShell* pDocSh, const ScAddress& rP);
350 virtual ~ScCellTextData() override;
352 virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
354 // helper functions for ScSharedCellEditSource:
355 virtual SvxTextForwarder* GetTextForwarder();
356 void UpdateData();
357 ScFieldEditEngine* GetEditEngine() { GetTextForwarder(); return pEditEngine.get(); }
359 ScCellEditSource* GetOriginalSource(); // used as argument for SvxUnoText ctor
361 // used for ScCellEditSource:
362 ScDocShell* GetDocShell() const { return pDocShell; }
363 const ScAddress& GetCellPos() const { return aCellPos; }
365 bool IsDirty() const { return bDirty; }
366 void SetDoUpdate(bool bValue) { bDoUpdate = bValue; }
369 class ScCellTextObj : public ScCellTextData, public SvxUnoText
371 public:
372 ScCellTextObj(ScDocShell* pDocSh, const ScAddress& rP);
373 virtual ~ScCellTextObj() throw() override;
376 #endif
378 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */