Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 :
20 : #ifndef INCLUDED_SVX_SVDOTEXT_HXX
21 : #define INCLUDED_SVX_SVDOTEXT_HXX
22 :
23 : #include <vcl/field.hxx>
24 : #include <svx/itextprovider.hxx>
25 : #include <svx/svdoattr.hxx>
26 : #include <svx/svdtrans.hxx>
27 : #include <tools/datetime.hxx>
28 : #include <rsc/rscsfx.hxx>
29 : #include <svx/xtextit0.hxx>
30 : #include <svx/svdtext.hxx>
31 : #include <vector>
32 : #include <boost/shared_ptr.hpp>
33 : #include <svx/svxdllapi.h>
34 : #include <drawinglayer/primitive2d/baseprimitive2d.hxx>
35 : #include <svx/svdpagv.hxx>
36 :
37 :
38 : // Vorausdeklarationen
39 :
40 :
41 : class OutlinerParaObject;
42 : class SdrOutliner;
43 : class SdrTextObj;
44 : class SdrTextObjTest;
45 : class SvxFieldItem;
46 : class ImpSdrObjTextLink;
47 : class EditStatus;
48 :
49 : namespace sdr { namespace properties {
50 : class TextProperties;
51 : }}
52 :
53 : namespace drawinglayer { namespace primitive2d {
54 : class SdrContourTextPrimitive2D;
55 : class SdrPathTextPrimitive2D;
56 : class SdrBlockTextPrimitive2D;
57 : class SdrAutoFitTextPrimitive2D;
58 : class SdrStretchTextPrimitive2D;
59 : }}
60 :
61 : namespace drawinglayer { namespace animation {
62 : class AnimationEntryList;
63 : }}
64 :
65 : namespace drawinglayer { namespace geometry {
66 : class ViewInformation2D;
67 : }}
68 :
69 : namespace sdr { namespace table {
70 : class Cell;
71 : class SdrTableRtfExporter;
72 : class SdrTableRTFParser;
73 : }}
74 :
75 :
76 : // Defines
77 :
78 :
79 : #define SDRUSERDATA_OBJTEXTLINK (1)
80 :
81 :
82 : // Hilfsklasse SdrTextObjGeoData
83 :
84 :
85 4906 : class SdrTextObjGeoData : public SdrObjGeoData
86 : {
87 : public:
88 : Rectangle aRect;
89 : GeoStat aGeo;
90 : };
91 :
92 :
93 : // Hilfsklasse ImpSdrObjTextLinkUserData
94 :
95 :
96 : class ImpSdrObjTextLinkUserData : public SdrObjUserData
97 : {
98 : friend class SdrTextObj;
99 : friend class ImpSdrObjTextLink;
100 :
101 : SdrTextObj* pObj;
102 : OUString aFileName; // Name des referenzierten Dokuments
103 : OUString aFilterName; // ggf. ein Filter
104 : DateTime aFileDate0; // Unnoetiges neuladen vermeiden
105 : ImpSdrObjTextLink* pLink;
106 : rtl_TextEncoding eCharSet;
107 :
108 : public:
109 : TYPEINFO_OVERRIDE();
110 : ImpSdrObjTextLinkUserData(SdrTextObj* pObj1);
111 : virtual ~ImpSdrObjTextLinkUserData();
112 :
113 : virtual SdrObjUserData* Clone(SdrObject* pObj1) const SAL_OVERRIDE;
114 : };
115 :
116 : namespace sdr
117 : {
118 : namespace properties
119 : {
120 : class CustomShapeProperties;
121 : class CellProperties;
122 : } // end of namespace properties
123 : } // end of namespace sdr
124 :
125 :
126 : // SdrTextObj
127 :
128 :
129 : class SVX_DLLPUBLIC SdrTextObj : public SdrAttrObj, public svx::ITextProvider
130 : {
131 : private:
132 : // Cell needs access to ImpGetDrawOutliner();
133 :
134 : friend class sdr::table::Cell;
135 : friend class sdr::table::SdrTableRtfExporter;
136 : friend class sdr::table::SdrTableRTFParser;
137 :
138 : // CustomShapeproperties need to access the "bTextFrame" member:
139 : friend class sdr::properties::CustomShapeProperties;
140 :
141 : protected:
142 : virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties() SAL_OVERRIDE;
143 : virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact() SAL_OVERRIDE;
144 :
145 : private:
146 : // This method is only allowed for sdr::properties::TextProperties
147 47071 : SVX_DLLPRIVATE SdrOutliner* GetTextEditOutliner() const
148 : {
149 47071 : return pEdtOutl;
150 : }
151 :
152 : // This method is only allowed for sdr::properties::TextProperties
153 74952 : SVX_DLLPRIVATE void SetPortionInfoChecked(bool bNew)
154 : {
155 74952 : bPortionInfoChecked = bNew;
156 74952 : }
157 :
158 : // to allow sdr::properties::TextProperties access to SetPortionInfoChecked()
159 : // and GetTextEditOutliner()
160 : friend class sdr::properties::TextProperties;
161 : friend class sdr::properties::CellProperties;
162 :
163 : friend class ImpSdrObjTextLink;
164 : friend class ImpSdrObjTextLinkUserData;
165 : friend class SdrPowerPointImport; // fuer PowerPointImport
166 : friend class SdrExchangeView; // fuer ImpGetDrawOutliner
167 : friend class SdrView; // fuer ImpGetDrawOutliner
168 : friend class SdrObjEditView; // fuer TextEdit
169 : friend class SdrMeasureObj; // fuer ImpGetDrawOutliner
170 : friend class SvxMSDffManager; // fuer ImpGetDrawOutliner
171 : friend class SdrObjCustomShape;// fuer ImpGetDrawOutliner
172 : friend class SdrText; // fuer ImpGetDrawOutliner
173 :
174 : protected:
175 : // Das aRect ist gleichzeig auch das Rect vom RectObj und CircObj.
176 : // Bei bTextFrame=sal_True wird der Text in dieses Rect hineinformatiert.
177 : // Bei bTextFrame=sal_False wird der Text am Mittelpunkt des Rect zentriert.
178 : Rectangle aRect;
179 :
180 : // Der GeoStat enthaelt den Drehwinkel und einen Shearwinkel
181 : GeoStat aGeo;
182 :
183 : // this is the active text
184 : SdrText* mpText;
185 :
186 : // Hier merke ich mir die Ausmasse des Textes (n.i.)
187 : Size aTextSize;
188 :
189 : // Ein Outliner*, damit
190 : // 1. das TextObj nicht von mehreren Views gleichzeitig editiert und
191 : // 2. beim Streamen waerend des Editierens ein Flush() ausgefuehrt
192 : // werden kann
193 : SdrOutliner* pEdtOutl;
194 :
195 : // Bei Fontwork muss soviel auf's BoundRect draufgerechnet werden
196 : // damit es ausreichend gross ist.
197 : Rectangle* pFormTextBoundRect;
198 :
199 : // Moegliche Werte fuer eTextKind sind:
200 : // OBJ_TEXT normaler Textrahmen
201 : // OBJ_TEXTEXT Textfortsetzungsrahmen
202 : // OBJ_TITLETEXT TitleText fuer StarDraw-Praesentation
203 : // OBJ_OUTLINETEXT OutlineText fuer StarDraw-Praesentation
204 : // eTextKind hat nur Bedeutung, wenn bTextFrame=sal_True, da es sich sonst
205 : // um ein beschriftetes Grafikobjekt handelt.
206 : SdrObjKind eTextKind;
207 :
208 : // #108784#
209 : // For text editing in SW Haeder/Footer it is necessary to be
210 : // able to set an offset for the text edit to allow text editing at the
211 : // position of the virtual object. This offset is used when setting up
212 : // and maintaining the OutlinerView.
213 : Point maTextEditOffset;
214 : public:
215 0 : const Point& GetTextEditOffset() const { return maTextEditOffset; }
216 0 : void SetTextEditOffset(const Point& rNew) { maTextEditOffset = rNew; }
217 :
218 : protected:
219 : // Fuer beschriftete Zeichenobjekte ist bTextFrame=FALSE. Der Textblock
220 : // wird dann hoizontal und vertikal an aRect zentriert. Bei bTextFrame=
221 : // sal_True wird der Text in aRect hineinformatiert. Der eigentliche Textrahmen
222 : // ist durch ein SdrRectObj mit bTextFrame=sal_True realisiert.
223 : bool bTextFrame : 1;
224 : bool bPortionInfoChecked : 1; // Fuer Optimierung von Textobjekten
225 : bool bNoShear : 1; // Obj darf nicht gesheart werden (->Graf+Ole+TextFrame)
226 : bool bNoRotate : 1; // Obj darf nicht gedreht werden (->Ole)
227 : bool bNoMirror : 1; // Obj darf nicht gespiegelt werden (->Ole,TextFrame)
228 : bool bTextSizeDirty : 1;
229 :
230 : // #101684#
231 : bool mbInEditMode : 1; // Is this text object in edit mode?
232 :
233 : // Fuer Objekt mit freier Groesse im Draw (Mengentext). Das Flag wird vom
234 : // der App beim Create gesetzt.
235 : // Wenn das Objekt dann spaeter in der Breite resized wird, wird
236 : // AutoGrowWidth abgeschaltet (Hart auf sal_False attributiert). Das Flag wird
237 : // dann ebenfalls auf sal_False gesetzt, sodass sich das Objekt anschliessend
238 : // wie ein normales Textobjekt verhaelt.
239 : // Resize in der Breite kann sein:
240 : // - Interaktives Resize in Einfach- oder Mehrfachselektion
241 : // - Positions+Groesse Dialog
242 : bool bDisableAutoWidthOnDragging : 1;
243 :
244 : // #111096#
245 : // Allow text suppression
246 : bool mbTextHidden : 1;
247 :
248 : // #111096#
249 : // Flag for allowing text animation. Default is sal_true.
250 : bool mbTextAnimationAllowed : 1;
251 :
252 : // flag for preventing recursive onEditOutlinerStatusEvent calls
253 : bool mbInDownScale : 1;
254 :
255 : SdrOutliner& ImpGetDrawOutliner() const;
256 :
257 : private:
258 : SVX_DLLPRIVATE void ImpCheckMasterCachable();
259 : // #101029#: Extracted from ImpGetDrawOutliner()
260 : SVX_DLLPRIVATE void ImpInitDrawOutliner( SdrOutliner& rOutl ) const;
261 : // #101029#: Extracted from Paint()
262 : SVX_DLLPRIVATE void ImpSetupDrawOutlinerForPaint( bool bContourFrame,
263 : SdrOutliner& rOutliner,
264 : Rectangle& rTextRect,
265 : Rectangle& rAnchorRect,
266 : Rectangle& rPaintRect,
267 : Fraction& aFitXKorreg ) const;
268 : void ImpAutoFitText( SdrOutliner& rOutliner ) const;
269 : static void ImpAutoFitText( SdrOutliner& rOutliner, const Size& rShapeSize, bool bIsVerticalWriting );
270 : SVX_DLLPRIVATE SdrObject* ImpConvertContainedTextToSdrPathObjs(bool bToPoly) const;
271 : SVX_DLLPRIVATE void ImpLinkAnmeldung();
272 : SVX_DLLPRIVATE void ImpLinkAbmeldung();
273 : SVX_DLLPRIVATE ImpSdrObjTextLinkUserData* GetLinkUserData() const;
274 : // void ImpCheckItemSetChanges(const SfxItemSet& rAttr);
275 :
276 : /** Appends the style family to a provided style name */
277 : static void AppendFamilyToStyleName(OUString& styleName, SfxStyleFamily family);
278 :
279 : /** Reads the style family from a style name to which the family has been appended. */
280 : static SfxStyleFamily ReadFamilyFromStyleName(const OUString& styleName);
281 :
282 : protected:
283 : bool ImpCanConvTextToCurve() const;
284 : SdrObject* ImpConvertMakeObj(const basegfx::B2DPolyPolygon& rPolyPolygon, bool bClosed, bool bBezier, bool bNoSetAttr = false) const;
285 : SdrObject* ImpConvertAddText(SdrObject* pObj, bool bBezier) const;
286 : void ImpSetTextStyleSheetListeners();
287 : void ImpSetCharStretching(SdrOutliner& rOutliner, const Size& rTextSize, const Size& rShapeSize, Fraction& rFitXKorreg) const;
288 : void ImpJustifyRect(Rectangle& rRect) const;
289 : void ImpCheckShear();
290 : Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const;
291 : void ImpSetTextEditParams() const;
292 157726 : void SetTextSizeDirty() { bTextSizeDirty=true; }
293 :
294 : // rAnchorRect ist InOut-Parameter!
295 : void ImpSetContourPolygon( SdrOutliner& rOutliner, Rectangle& rAnchorRect, bool bLineWidth ) const;
296 :
297 : virtual SdrObjGeoData* NewGeoData() const SAL_OVERRIDE;
298 : virtual void SaveGeoData(SdrObjGeoData& rGeo) const SAL_OVERRIDE;
299 : virtual void RestGeoData(const SdrObjGeoData& rGeo) SAL_OVERRIDE;
300 : bool NbcSetEckenradius(long nRad);
301 :
302 : // #115391# new method for SdrObjCustomShape and SdrTextObj to correctly handle and set
303 : // SdrTextMinFrameWidthItem and SdrTextMinFrameHeightItem based on all settings, necessities
304 : // and object sizes
305 : virtual void AdaptTextMinSize();
306 :
307 : // Konstruktoren fuer beschriftete Zeichenobjekte
308 : SdrTextObj();
309 : SdrTextObj(const Rectangle& rNewRect);
310 :
311 : // Konstruktoren fuer Textrahmen
312 : SdrTextObj(SdrObjKind eNewTextKind);
313 : SdrTextObj(SdrObjKind eNewTextKind, const Rectangle& rNewRect);
314 :
315 : virtual ~SdrTextObj();
316 :
317 : public:
318 : TYPEINFO_OVERRIDE();
319 :
320 : // #101684#
321 640201 : bool IsInEditMode() const { return mbInEditMode; }
322 :
323 : // via eCharSet kann der CharSet der vorliegenden Datei uebergeben werden.
324 : // Bei RTL_TEXTENCODING_DONTKNOW wird der CharSet der aktuellen Plattform verwendet.
325 : // Derzeit unterstuetzt wird ASCII und RTF wobei ich die Unterscheidung
326 : // selbst treffe. rFilterName ist noch ohne Bedeutung und muss leer gelassen
327 : // werden.
328 : // I.d.R. muss die App nur SetTextLink() rufen - der Rest geschieht von
329 : // selbst (SfxLinkManager). Die Methode LoadText() kann ausserdem verwendet
330 : // werden, um eine Datei in ein Textobjekt zu laden (ohne Verknuepfung).
331 : // TextLinks koennen nicht editiert werden (allenfalls spaeter mal ReadOnly).
332 : // Eine Attributierung kann nur am Textrahmen vollzogen werden.
333 : void SetTextLink(const OUString& rFileName, const OUString& rFilterName, rtl_TextEncoding eCharSet);
334 : void ReleaseTextLink();
335 276251 : bool IsLinkedText() const { return pPlusData!=NULL && GetLinkUserData()!=NULL; }
336 : bool ReloadLinkedText(bool bForceLoad = false);
337 : bool LoadText(const OUString& rFileName, const OUString& rFilterName, rtl_TextEncoding eCharSet);
338 :
339 : virtual bool AdjustTextFrameWidthAndHeight(Rectangle& rR, bool bHgt = true, bool bWdt = true) const;
340 : virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
341 : virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
342 792390 : bool IsTextFrame() const { return bTextFrame; }
343 319644 : bool IsOutlText() const { return bTextFrame && (eTextKind==OBJ_OUTLINETEXT || eTextKind==OBJ_TITLETEXT); }
344 : /// returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false!
345 : bool IsAutoFit() const;
346 : /// returns true if the old feature for fitting shape content should into shape is enabled. implies IsAutoFit()==false!
347 : bool IsFitToSize() const;
348 26878 : SdrObjKind GetTextKind() const { return eTextKind; }
349 :
350 : // #i121917#
351 : virtual bool HasText() const SAL_OVERRIDE;
352 :
353 : bool HasEditText() const;
354 48321 : bool IsTextEditActive() const { return (pEdtOutl != 0L); }
355 :
356 : /** returns the currently active text. */
357 : virtual SdrText* getActiveText() const;
358 :
359 : /** returns the nth available text. */
360 : virtual SdrText* getText( sal_Int32 nIndex ) const SAL_OVERRIDE;
361 :
362 : /** returns the number of texts available for this object. */
363 : virtual sal_Int32 getTextCount() const SAL_OVERRIDE;
364 :
365 : /** returns true only if we are in edit mode and the user actually changed anything */
366 : virtual bool IsRealyEdited() const;
367 :
368 : /** changes the current active text */
369 : virtual void setActiveText( sal_Int32 nIndex );
370 :
371 : /** returns the index of the text that contains the given point or -1 */
372 : virtual sal_Int32 CheckTextHit(const Point& rPnt) const;
373 :
374 0 : void SetDisableAutoWidthOnDragging(bool bOn) { bDisableAutoWidthOnDragging=bOn; }
375 : bool IsDisableAutoWidthOnDragging() { return bDisableAutoWidthOnDragging; }
376 : void NbcSetText(const OUString& rStr);
377 : void SetText(const OUString& rStr);
378 : void NbcSetText(SvStream& rInput, const OUString& rBaseURL, sal_uInt16 eFormat);
379 : void SetText(SvStream& rInput, const OUString& rBaseURL, sal_uInt16 eFormat);
380 :
381 : // FitToSize und Fontwork wird bei GetTextSize() nicht berueksichtigt!
382 : virtual const Size& GetTextSize() const;
383 : void FitFrameToTextSize();
384 :
385 : // Gleichzeitig wird der Text in den Outliner gesetzt (ggf.
386 : // der des EditOutliners) und die PaperSize gesetzt.
387 : virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText = false,
388 : Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const;
389 : virtual void TakeTextAnchorRect(::Rectangle& rAnchorRect) const;
390 63902 : const GeoStat& GetGeoStat() const { return aGeo; }
391 :
392 : long GetEckenradius() const;
393 : virtual bool IsAutoGrowHeight() const;
394 : long GetMinTextFrameHeight() const;
395 : long GetMaxTextFrameHeight() const;
396 : virtual bool IsAutoGrowWidth() const;
397 : long GetMinTextFrameWidth() const;
398 : long GetMaxTextFrameWidth() const;
399 :
400 : SdrFitToSizeType GetFitToSize() const;
401 49532 : const Rectangle &GetGeoRect() const { return aRect; }
402 :
403 : // Feststellen, ob TextFontwork
404 : virtual bool IsFontwork() const;
405 :
406 : // Soll die Fontwork-Kontour versteckt werden?
407 : bool IsHideContour() const;
408 :
409 : // Textfluss innerhalb Kontur
410 : bool IsContourTextFrame() const;
411 :
412 : // Horizontale Textausrichtung
413 : SdrTextHorzAdjust GetTextHorizontalAdjust(const SfxItemSet& rSet) const;
414 : SdrTextHorzAdjust GetTextHorizontalAdjust() const;
415 :
416 : // Vertikale Textausrichtung
417 : SdrTextVertAdjust GetTextVerticalAdjust(const SfxItemSet& rSet) const;
418 : SdrTextVertAdjust GetTextVerticalAdjust() const;
419 :
420 : /** Left inner spacing to borders */
421 : long GetTextLeftDistance() const;
422 : /** Right inner spacing to borders */
423 : long GetTextRightDistance() const;
424 : /** Top inner spacing to borders */
425 : long GetTextUpperDistance() const;
426 : /** Bottom inner spacing to borders */
427 : long GetTextLowerDistance() const;
428 : SdrTextAniKind GetTextAniKind() const;
429 : SdrTextAniDirection GetTextAniDirection() const;
430 :
431 : virtual void SetPage(SdrPage* pNewPage) SAL_OVERRIDE;
432 : virtual void SetModel(SdrModel* pNewModel) SAL_OVERRIDE;
433 : virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const SAL_OVERRIDE;
434 : virtual sal_uInt16 GetObjIdentifier() const SAL_OVERRIDE;
435 :
436 : // Wird zur Bestimmung des Textankerbereichs benoetigt
437 : virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const;
438 : virtual OUString TakeObjNameSingul() const SAL_OVERRIDE;
439 : virtual OUString TakeObjNamePlural() const SAL_OVERRIDE;
440 : virtual SdrTextObj* Clone() const SAL_OVERRIDE;
441 : SdrTextObj& operator=(const SdrTextObj& rObj);
442 : virtual basegfx::B2DPolyPolygon TakeXorPoly() const SAL_OVERRIDE;
443 : virtual basegfx::B2DPolyPolygon TakeContour() const SAL_OVERRIDE;
444 : virtual void RecalcSnapRect() SAL_OVERRIDE;
445 : virtual void NbcSetSnapRect(const Rectangle& rRect) SAL_OVERRIDE;
446 : virtual void NbcSetLogicRect(const Rectangle& rRect) SAL_OVERRIDE;
447 : virtual const Rectangle& GetLogicRect() const SAL_OVERRIDE;
448 : virtual long GetRotateAngle() const SAL_OVERRIDE;
449 : virtual long GetShearAngle(bool bVertical = false) const SAL_OVERRIDE;
450 :
451 : virtual sal_uInt32 GetSnapPointCount() const SAL_OVERRIDE;
452 : virtual Point GetSnapPoint(sal_uInt32 i) const SAL_OVERRIDE;
453 :
454 : virtual sal_uInt32 GetHdlCount() const SAL_OVERRIDE;
455 : virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const SAL_OVERRIDE;
456 :
457 : // special drag methods
458 : virtual bool hasSpecialDrag() const SAL_OVERRIDE;
459 : virtual bool applySpecialDrag(SdrDragStat& rDrag) SAL_OVERRIDE;
460 : virtual OUString getSpecialDragComment(const SdrDragStat& rDrag) const SAL_OVERRIDE;
461 :
462 : virtual bool BegCreate(SdrDragStat& rStat) SAL_OVERRIDE;
463 : virtual bool MovCreate(SdrDragStat& rStat) SAL_OVERRIDE;
464 : virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) SAL_OVERRIDE;
465 : virtual bool BckCreate(SdrDragStat& rStat) SAL_OVERRIDE;
466 : virtual void BrkCreate(SdrDragStat& rStat) SAL_OVERRIDE;
467 : virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const SAL_OVERRIDE;
468 : virtual Pointer GetCreatePointer() const SAL_OVERRIDE;
469 :
470 : virtual void NbcMove(const Size& rSiz) SAL_OVERRIDE;
471 : virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) SAL_OVERRIDE;
472 : virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs) SAL_OVERRIDE;
473 : virtual void NbcMirror(const Point& rRef1, const Point& rRef2) SAL_OVERRIDE;
474 : virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear) SAL_OVERRIDE;
475 :
476 : virtual bool HasTextEdit() const SAL_OVERRIDE;
477 : virtual bool BegTextEdit(SdrOutliner& rOutl) SAL_OVERRIDE;
478 : virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const;
479 : virtual void EndTextEdit(SdrOutliner& rOutl) SAL_OVERRIDE;
480 : virtual sal_uInt16 GetOutlinerViewAnchorMode() const;
481 :
482 : virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject) SAL_OVERRIDE;
483 : void NbcSetOutlinerParaObjectForText( OutlinerParaObject* pTextObject, SdrText* pText );
484 : virtual OutlinerParaObject* GetOutlinerParaObject() const SAL_OVERRIDE;
485 : virtual OutlinerParaObject* GetEditOutlinerParaObject() const;
486 :
487 : virtual void NbcReformatText() SAL_OVERRIDE;
488 : virtual void ReformatText() SAL_OVERRIDE;
489 :
490 : virtual bool CalcFieldValue(const SvxFieldItem& rField, sal_Int32 nPara, sal_uInt16 nPos,
491 : bool bEdit, Color*& rpTxtColor, Color*& rpFldColor, OUString& rRet) const;
492 :
493 : virtual SdrObject* DoConvertToPolyObj(bool bBezier, bool bAddText) const SAL_OVERRIDE;
494 :
495 0 : void SetTextEditOutliner(SdrOutliner* pOutl) { pEdtOutl=pOutl; }
496 :
497 : /** Setup given Outliner equivalently to SdrTextObj::Paint()
498 :
499 : To setup an arbitrary Outliner in the same way as the draw
500 : outliner on SdrTextObj::Paint(). Among others, the paper size,
501 : control word and character stretching are initialized, such
502 : that the formatting should match the screen representation.
503 : The textual content of the outliner is not touched, i.e. no
504 : Init() or Clear() is called on the Outliner.
505 :
506 : @param rOutl
507 : The Outliner to setup.
508 :
509 : @param rPaintRect
510 : The region to paint the outliner content into. This is useful
511 : to e.g. determine the top, left position of text in shapes.
512 : */
513 : void SetupOutlinerFormatting( SdrOutliner& rOutl, Rectangle& rPaintRect ) const;
514 :
515 : /** Update given Outliner equivalently to SdrTextObj::Paint()
516 :
517 : Same functionality as in SetupOutlinerFormatting(), except
518 : that the outliner content is not cleared.
519 :
520 : @param rOutl
521 : The Outliner to update.
522 :
523 : @param rPaintRect
524 : The region to paint the outliner content into. This is useful
525 : to e.g. determine the top, left position of text in shapes.
526 : */
527 : void UpdateOutlinerFormatting( SdrOutliner& rOutl, Rectangle& rPaintRect ) const;
528 : void ForceOutlinerParaObject();
529 : virtual bool IsVerticalWriting() const;
530 : virtual void SetVerticalWriting(bool bVertical);
531 :
532 : /** called from the SdrObjEditView during text edit when the status of the edit outliner changes */
533 : virtual void onEditOutlinerStatusEvent( EditStatus* pEditStatus );
534 :
535 :
536 :
537 : // transformation interface for StarOfficeAPI. This implements support for
538 : // homogen 3x3 matrices containing the transformation of the SdrObject. At the
539 : // moment it contains a shearX, rotation and translation, but for setting all linear
540 : // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported.
541 :
542 :
543 : // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon
544 : // with the base geometry and returns TRUE. Otherwise it returns FALSE.
545 : virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const SAL_OVERRIDE;
546 :
547 : // sets the base geometry of the object using infos contained in the homogen 3x3 matrix.
548 : // If it's an SdrPathObj it will use the provided geometry information. The Polygon has
549 : // to use (0,0) as upper left and will be scaled to the given size in the matrix.
550 : virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon) SAL_OVERRIDE;
551 :
552 : // #103836# iterates over the paragraphs of a given SdrObject and removes all
553 : // hard set character attributes with the which ids contained in the
554 : // given vector
555 : virtual void RemoveOutlinerCharacterAttribs( const std::vector<sal_uInt16>& rCharWhichIds );
556 :
557 : // #111096#
558 : // Get necessary data for text scroll animation. ATM base it on a Text-Metafile and a
559 : // painting rectangle. Rotation is taken from the object.
560 : GDIMetaFile* GetTextScrollMetaFileAndRectangle(Rectangle& rScrollRectangle, Rectangle& rPaintRectangle);
561 :
562 : // #111096#
563 : // Access to TextAnimationAllowed flag
564 : void SetTextAnimationAllowed(bool bNew);
565 :
566 : // #i8824#
567 : // Set single item at the local ItemSet. *Does not use* AllowItemChange(),
568 : // ItemChange(), PostItemChange() and ItemSetChanged() calls.
569 : void SetObjectItemNoBroadcast(const SfxPoolItem& rItem);
570 :
571 : public:
572 :
573 : // text primitive decomposition helpers
574 : void impDecomposeContourTextPrimitive(
575 : drawinglayer::primitive2d::Primitive2DSequence& rTarget,
576 : const drawinglayer::primitive2d::SdrContourTextPrimitive2D& rSdrContourTextPrimitive,
577 : const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
578 : void impDecomposePathTextPrimitive(
579 : drawinglayer::primitive2d::Primitive2DSequence& rTarget,
580 : const drawinglayer::primitive2d::SdrPathTextPrimitive2D& rSdrPathTextPrimitive,
581 : const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
582 : void impDecomposeBlockTextPrimitive(
583 : drawinglayer::primitive2d::Primitive2DSequence& rTarget,
584 : const drawinglayer::primitive2d::SdrBlockTextPrimitive2D& rSdrBlockTextPrimitive,
585 : const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
586 : void impDecomposeAutoFitTextPrimitive(
587 : drawinglayer::primitive2d::Primitive2DSequence& rTarget,
588 : const drawinglayer::primitive2d::SdrAutoFitTextPrimitive2D& rSdrAutofitTextPrimitive,
589 : const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
590 : void impDecomposeStretchTextPrimitive(
591 : drawinglayer::primitive2d::Primitive2DSequence& rTarget,
592 : const drawinglayer::primitive2d::SdrStretchTextPrimitive2D& rSdrStretchTextPrimitive,
593 : const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
594 :
595 :
596 : // timing generators
597 : void impGetBlinkTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList) const;
598 : void impGetScrollTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList, double fFrameLength, double fTextLength) const;
599 :
600 : /** returns false if the given pointer is NULL
601 : or if the given SdrOutliner contains no text.
602 : Also checks for one empty paragraph.
603 : */
604 : static bool HasTextImpl( SdrOutliner* pOutliner );
605 :
606 : friend class ::SdrTextObjTest;
607 : };
608 :
609 :
610 :
611 : #endif // INCLUDED_SVX_SVDOTEXT_HXX
612 :
613 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|