summaryrefslogtreecommitdiff
path: root/include/svx/svdotext.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/svx/svdotext.hxx')
-rw-r--r--include/svx/svdotext.hxx595
1 files changed, 595 insertions, 0 deletions
diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx
new file mode 100644
index 000000000000..a5df49bdd24f
--- /dev/null
+++ b/include/svx/svdotext.hxx
@@ -0,0 +1,595 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef _SVDOTEXT_HXX
+#define _SVDOTEXT_HXX
+
+#include <vcl/field.hxx>
+#include <svx/itextprovider.hxx>
+#include <svx/svdoattr.hxx>
+#include <svx/svdtrans.hxx> // GeoStat
+#include <tools/datetime.hxx>
+#include <svx/xtextit0.hxx>
+#include "svdtext.hxx"
+#include <vector>
+#include <boost/shared_ptr.hpp>
+#include "svx/svxdllapi.h"
+#include <drawinglayer/primitive2d/baseprimitive2d.hxx>
+#include <svx/svdpagv.hxx>
+
+//************************************************************
+// Vorausdeklarationen
+//************************************************************
+
+class OutlinerParaObject;
+class SdrOutliner;
+class SdrTextObj;
+class SvxFieldItem;
+class ImpSdrObjTextLink;
+class EditStatus;
+
+namespace sdr { namespace properties {
+ class TextProperties;
+}}
+
+namespace drawinglayer { namespace primitive2d {
+ class SdrContourTextPrimitive2D;
+ class SdrPathTextPrimitive2D;
+ class SdrBlockTextPrimitive2D;
+ class SdrAutoFitTextPrimitive2D;
+ class SdrStretchTextPrimitive2D;
+}}
+
+namespace drawinglayer { namespace animation {
+ class AnimationEntryList;
+}}
+
+namespace drawinglayer { namespace geometry {
+ class ViewInformation2D;
+}}
+
+namespace sdr { namespace table {
+ class Cell;
+ class SdrTableRtfExporter;
+ class SdrTableRTFParser;
+}}
+
+//************************************************************
+// Defines
+//************************************************************
+
+#define SDRUSERDATA_OBJTEXTLINK (1)
+
+//************************************************************
+// Hilfsklasse SdrTextObjGeoData
+//************************************************************
+
+class SdrTextObjGeoData : public SdrObjGeoData
+{
+public:
+ Rectangle aRect;
+ GeoStat aGeo;
+};
+
+//************************************************************
+// Hilfsklasse ImpSdrObjTextLinkUserData
+//************************************************************
+
+class ImpSdrObjTextLinkUserData : public SdrObjUserData
+{
+ friend class SdrTextObj;
+ friend class ImpSdrObjTextLink;
+
+ SdrTextObj* pObj;
+ String aFileName; // Name des referenzierten Dokuments
+ String aFilterName; // ggf. ein Filter
+ DateTime aFileDate0; // Unnoetiges neuladen vermeiden
+ ImpSdrObjTextLink* pLink;
+ rtl_TextEncoding eCharSet;
+
+public:
+ TYPEINFO();
+ ImpSdrObjTextLinkUserData(SdrTextObj* pObj1);
+ virtual ~ImpSdrObjTextLinkUserData();
+
+ virtual SdrObjUserData* Clone(SdrObject* pObj1) const;
+};
+
+namespace sdr
+{
+ namespace properties
+ {
+ class CustomShapeProperties;
+ class CellProperties;
+ } // end of namespace properties
+} // end of namespace sdr
+
+//************************************************************
+// SdrTextObj
+//************************************************************
+
+class SVX_DLLPUBLIC SdrTextObj : public SdrAttrObj, public svx::ITextProvider
+{
+private:
+ // Cell needs access to ImpGetDrawOutliner();
+
+ friend class sdr::table::Cell;
+ friend class sdr::table::SdrTableRtfExporter;
+ friend class sdr::table::SdrTableRTFParser;
+
+ // CustomShapeproperties need to access the "bTextFrame" member:
+ friend class sdr::properties::CustomShapeProperties;
+
+protected:
+ virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties();
+ virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact();
+
+private:
+ // This method is only allowed for sdr::properties::TextProperties
+ SVX_DLLPRIVATE SdrOutliner* GetTextEditOutliner() const
+ {
+ return pEdtOutl;
+ }
+
+ // This method is only allowed for sdr::properties::TextProperties
+ SVX_DLLPRIVATE void SetPortionInfoChecked(sal_Bool bNew)
+ {
+ bPortionInfoChecked = bNew;
+ }
+
+ // to allow sdr::properties::TextProperties access to SetPortionInfoChecked()
+ // and GetTextEditOutliner()
+ friend class sdr::properties::TextProperties;
+ friend class sdr::properties::CellProperties;
+
+ friend class ImpSdrObjTextLink;
+ friend class ImpSdrObjTextLinkUserData;
+ friend class SdrPowerPointImport; // fuer PowerPointImport
+ friend class SdrExchangeView; // fuer ImpGetDrawOutliner
+ friend class SdrView; // fuer ImpGetDrawOutliner
+ friend class SdrObjEditView; // fuer TextEdit
+ friend class SdrMeasureObj; // fuer ImpGetDrawOutliner
+ friend class SvxMSDffManager; // fuer ImpGetDrawOutliner
+ friend class SdrObjCustomShape;// fuer ImpGetDrawOutliner
+ friend class SdrText; // fuer ImpGetDrawOutliner
+
+protected:
+ // Das aRect ist gleichzeig auch das Rect vom RectObj und CircObj.
+ // Bei bTextFrame=sal_True wird der Text in dieses Rect hineinformatiert.
+ // Bei bTextFrame=sal_False wird der Text am Mittelpunkt des Rect zentriert.
+ Rectangle aRect;
+
+ // Der GeoStat enthaelt den Drehwinkel und einen Shearwinkel
+ GeoStat aGeo;
+
+ // this is the active text
+ SdrText* mpText;
+
+ // Hier merke ich mir die Ausmasse des Textes (n.i.)
+ Size aTextSize;
+
+ // Ein Outliner*, damit
+ // 1. das TextObj nicht von mehreren Views gleichzeitig editiert und
+ // 2. beim Streamen waerend des Editierens ein Flush() ausgefuehrt
+ // werden kann
+ SdrOutliner* pEdtOutl;
+
+ // Bei Fontwork muss soviel auf's BoundRect draufgerechnet werden
+ // damit es ausreichend gross ist.
+ Rectangle* pFormTextBoundRect;
+
+ // Moegliche Werte fuer eTextKind sind:
+ // OBJ_TEXT normaler Textrahmen
+ // OBJ_TEXTEXT Textfortsetzungsrahmen
+ // OBJ_TITLETEXT TitleText fuer StarDraw-Praesentation
+ // OBJ_OUTLINETEXT OutlineText fuer StarDraw-Praesentation
+ // eTextKind hat nur Bedeutung, wenn bTextFrame=sal_True, da es sich sonst
+ // um ein beschriftetes Grafikobjekt handelt.
+ SdrObjKind eTextKind;
+
+ // #108784#
+ // For text editing in SW Haeder/Footer it is necessary to be
+ // able to set an offset for the text edit to allow text editing at the
+ // position of the virtual object. This offset is used when setting up
+ // and maintaining the OutlinerView.
+ Point maTextEditOffset;
+public:
+ const Point& GetTextEditOffset() const { return maTextEditOffset; }
+ void SetTextEditOffset(const Point& rNew) { maTextEditOffset = rNew; }
+
+protected:
+ // Fuer beschriftete Zeichenobjekte ist bTextFrame=FALSE. Der Textblock
+ // wird dann hoizontal und vertikal an aRect zentriert. Bei bTextFrame=
+ // sal_True wird der Text in aRect hineinformatiert. Der eigentliche Textrahmen
+ // ist durch ein SdrRectObj mit bTextFrame=sal_True realisiert.
+ sal_Bool bTextFrame : 1;
+ sal_Bool bPortionInfoChecked : 1; // Fuer Optimierung von Textobjekten
+ sal_Bool bNoShear : 1; // Obj darf nicht gesheart werden (->Graf+Ole+TextFrame)
+ sal_Bool bNoRotate : 1; // Obj darf nicht gedreht werden (->Ole)
+ sal_Bool bNoMirror : 1; // Obj darf nicht gespiegelt werden (->Ole,TextFrame)
+ sal_Bool bTextSizeDirty : 1;
+
+ // #101684#
+ sal_Bool mbInEditMode : 1; // Is this text obejct in edit mode?
+
+ // Fuer Objekt mit freier Groesse im Draw (Mengentext). Das Flag wird vom
+ // der App beim Create gesetzt.
+ // Wenn das Objekt dann spaeter in der Breite resized wird, wird
+ // AutoGrowWidth abgeschaltet (Hart auf sal_False attributiert). Das Flag wird
+ // dann ebenfalls auf sal_False gesetzt, sodass sich das Objekt anschliessend
+ // wie ein normales Textobjekt verhaelt.
+ // Resize in der Breite kann sein:
+ // - Interaktives Resize in Einfach- oder Mehrfachselektion
+ // - Positions+Groesse Dialog
+ sal_Bool bDisableAutoWidthOnDragging : 1;
+
+ // #111096#
+ // Allow text suppression
+ sal_Bool mbTextHidden : 1;
+
+ // #111096#
+ // Flag for allowing text animation. Default is sal_true.
+ sal_Bool mbTextAnimationAllowed : 1;
+
+ // flag for preventing recursive onEditOutlinerStatusEvent calls
+ sal_Bool mbInDownScale : 1;
+
+ SdrOutliner& ImpGetDrawOutliner() const;
+
+private:
+ SVX_DLLPRIVATE void ImpCheckMasterCachable();
+ // #101029#: Extracted from ImpGetDrawOutliner()
+ SVX_DLLPRIVATE void ImpInitDrawOutliner( SdrOutliner& rOutl ) const;
+ // #101029#: Extracted from Paint()
+ SVX_DLLPRIVATE void ImpSetupDrawOutlinerForPaint( bool bContourFrame,
+ SdrOutliner& rOutliner,
+ Rectangle& rTextRect,
+ Rectangle& rAnchorRect,
+ Rectangle& rPaintRect,
+ Fraction& aFitXKorreg ) const;
+ void ImpAutoFitText( SdrOutliner& rOutliner ) const;
+ static void ImpAutoFitText( SdrOutliner& rOutliner, const Size& rShapeSize, bool bIsVerticalWriting );
+ SVX_DLLPRIVATE SdrObject* ImpConvertContainedTextToSdrPathObjs(bool bToPoly) const;
+ SVX_DLLPRIVATE void ImpLinkAnmeldung();
+ SVX_DLLPRIVATE void ImpLinkAbmeldung();
+ SVX_DLLPRIVATE ImpSdrObjTextLinkUserData* GetLinkUserData() const;
+// void ImpCheckItemSetChanges(const SfxItemSet& rAttr);
+
+protected:
+ bool ImpCanConvTextToCurve() const;
+ SdrObject* ImpConvertMakeObj(const basegfx::B2DPolyPolygon& rPolyPolygon, sal_Bool bClosed, sal_Bool bBezier, sal_Bool bNoSetAttr = sal_False) const;
+ SdrObject* ImpConvertAddText(SdrObject* pObj, bool bBezier) const;
+ void ImpSetTextStyleSheetListeners();
+ void ImpSetCharStretching(SdrOutliner& rOutliner, const Size& rTextSize, const Size& rShapeSize, Fraction& rFitXKorreg) const;
+ void ImpJustifyRect(Rectangle& rRect) const;
+ void ImpCheckShear();
+ Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const;
+ void ImpSetTextEditParams() const;
+ void SetTextSizeDirty() { bTextSizeDirty=sal_True; }
+
+ // rAnchorRect ist InOut-Parameter!
+ void ImpSetContourPolygon( SdrOutliner& rOutliner, Rectangle& rAnchorRect, sal_Bool bLineWidth ) const;
+
+ virtual SdrObjGeoData* NewGeoData() const;
+ virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
+ virtual void RestGeoData(const SdrObjGeoData& rGeo);
+ bool NbcSetEckenradius(long nRad);
+ bool NbcSetMinTextFrameHeight(long nHgt);
+ bool NbcSetMinTextFrameWidth(long nWdt);
+
+ // Konstruktoren fuer beschriftete Zeichenobjekte
+ SdrTextObj();
+ SdrTextObj(const Rectangle& rNewRect);
+
+ // Konstruktoren fuer Textrahmen
+ SdrTextObj(SdrObjKind eNewTextKind);
+ SdrTextObj(SdrObjKind eNewTextKind, const Rectangle& rNewRect);
+
+ virtual ~SdrTextObj();
+
+public:
+ TYPEINFO();
+
+ // #101684#
+ sal_Bool IsInEditMode() const { return mbInEditMode; }
+
+ // via eCharSet kann der CharSet der vorliegenden Datei uebergeben werden.
+ // Bei RTL_TEXTENCODING_DONTKNOW wird der CharSet der aktuellen Plattform verwendet.
+ // Derzeit unterstuetzt wird ASCII und RTF wobei ich die Unterscheidung
+ // selbst treffe. rFilterName ist noch ohne Bedeutung und muss leer gelassen
+ // werden.
+ // I.d.R. muss die App nur SetTextLink() rufen - der Rest geschieht von
+ // selbst (SfxLinkManager). Die Methode LoadText() kann ausserdem verwendet
+ // werden, um eine Datei in ein Textobjekt zu laden (ohne Verknuepfung).
+ // TextLinks koennen nicht editiert werden (allenfalls spaeter mal ReadOnly).
+ // Eine Attributierung kann nur am Textrahmen vollzogen werden.
+ void SetTextLink(const String& rFileName, const String& rFilterName, rtl_TextEncoding eCharSet);
+ void ReleaseTextLink();
+ bool IsLinkedText() const { return pPlusData!=NULL && GetLinkUserData()!=NULL; }
+ bool ReloadLinkedText(bool bForceLoad = false);
+ bool LoadText(const String& rFileName, const String& rFilterName, rtl_TextEncoding eCharSet);
+
+ virtual bool AdjustTextFrameWidthAndHeight(Rectangle& rR, bool bHgt = true, bool bWdt = true) const;
+ virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
+ virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
+ bool IsTextFrame() const { return bTextFrame; }
+ bool IsOutlText() const { return bTextFrame && (eTextKind==OBJ_OUTLINETEXT || eTextKind==OBJ_TITLETEXT); }
+ /// returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false!
+ bool IsAutoFit() const;
+ /// returns true if the old feature for fitting shape content should into shape is enabled. implies IsAutoFit()==false!
+ bool IsFitToSize() const;
+ SdrObjKind GetTextKind() const { return eTextKind; }
+
+ virtual bool HasText() const;
+ bool HasEditText() const;
+ sal_Bool IsTextEditActive() const { return (pEdtOutl != 0L); }
+
+ /** returns the currently active text. */
+ virtual SdrText* getActiveText() const;
+
+ /** returns the nth available text. */
+ virtual SdrText* getText( sal_Int32 nIndex ) const;
+
+ /** returns the number of texts available for this object. */
+ virtual sal_Int32 getTextCount() const;
+
+ /** returns true only if we are in edit mode and the user actually changed anything */
+ virtual bool IsRealyEdited() const;
+
+ /** changes the current active text */
+ virtual void setActiveText( sal_Int32 nIndex );
+
+ /** returns the index of the text that contains the given point or -1 */
+ virtual sal_Int32 CheckTextHit(const Point& rPnt) const;
+
+ void SetDisableAutoWidthOnDragging(bool bOn) { bDisableAutoWidthOnDragging=bOn; }
+ bool IsDisableAutoWidthOnDragging() { return bDisableAutoWidthOnDragging; }
+ void NbcSetText(const String& rStr);
+ void SetText(const String& rStr);
+ void NbcSetText(SvStream& rInput, const String& rBaseURL, sal_uInt16 eFormat);
+ void SetText(SvStream& rInput, const String& rBaseURL, sal_uInt16 eFormat);
+
+ // FitToSize und Fontwork wird bei GetTextSize() nicht berueksichtigt!
+ virtual const Size& GetTextSize() const;
+ void FitFrameToTextSize();
+
+ // Gleichzeitig wird der Text in den Outliner gesetzt (ggf.
+ // der des EditOutliners) und die PaperSize gesetzt.
+ virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText = false,
+ Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const;
+ virtual void TakeTextAnchorRect(::Rectangle& rAnchorRect) const;
+ const GeoStat& GetGeoStat() const { return aGeo; }
+
+ long GetEckenradius() const;
+ virtual bool IsAutoGrowHeight() const;
+ long GetMinTextFrameHeight() const;
+ long GetMaxTextFrameHeight() const;
+ virtual bool IsAutoGrowWidth() const;
+ long GetMinTextFrameWidth() const;
+ long GetMaxTextFrameWidth() const;
+
+ SdrFitToSizeType GetFitToSize() const;
+ const Rectangle &GetGeoRect() const { return aRect; }
+
+ // Feststellen, ob TextFontwork
+ virtual bool IsFontwork() const;
+
+ // Soll die Fontwork-Kontour versteckt werden?
+ bool IsHideContour() const;
+
+ // Textfluss innerhalb Kontur
+ bool IsContourTextFrame() const;
+
+ // Horizontale Textausrichtung
+ SdrTextHorzAdjust GetTextHorizontalAdjust(const SfxItemSet& rSet) const;
+ SdrTextHorzAdjust GetTextHorizontalAdjust() const;
+
+ // Vertikale Textausrichtung
+ SdrTextVertAdjust GetTextVerticalAdjust(const SfxItemSet& rSet) const;
+ SdrTextVertAdjust GetTextVerticalAdjust() const;
+
+ // Textrahmenabstaende
+ long GetTextLeftDistance() const;
+ long GetTextRightDistance() const;
+ long GetTextUpperDistance() const;
+ long GetTextLowerDistance() const;
+ SdrTextAniKind GetTextAniKind() const;
+ SdrTextAniDirection GetTextAniDirection() const;
+
+ virtual void SetPage(SdrPage* pNewPage);
+ virtual void SetModel(SdrModel* pNewModel);
+ virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
+ virtual sal_uInt16 GetObjIdentifier() const;
+
+ // Wird zur Bestimmung des Textankerbereichs benoetigt
+ virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const;
+ virtual void TakeObjNameSingul(String& rName) const;
+ virtual void TakeObjNamePlural(String& rName) const;
+ virtual SdrTextObj* Clone() const;
+ SdrTextObj& operator=(const SdrTextObj& rObj);
+ virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
+ virtual basegfx::B2DPolyPolygon TakeContour() const;
+ virtual void RecalcSnapRect();
+ virtual void NbcSetSnapRect(const Rectangle& rRect);
+ virtual void NbcSetLogicRect(const Rectangle& rRect);
+ virtual const Rectangle& GetLogicRect() const;
+ virtual long GetRotateAngle() const;
+ virtual long GetShearAngle(bool bVertical = false) const;
+
+ virtual sal_uInt32 GetSnapPointCount() const;
+ virtual Point GetSnapPoint(sal_uInt32 i) const;
+
+ virtual sal_uInt32 GetHdlCount() const;
+ virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const;
+
+ // special drag methods
+ virtual bool hasSpecialDrag() const;
+ virtual bool applySpecialDrag(SdrDragStat& rDrag);
+ virtual String getSpecialDragComment(const SdrDragStat& rDrag) const;
+
+ virtual bool BegCreate(SdrDragStat& rStat);
+ virtual bool MovCreate(SdrDragStat& rStat);
+ virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd);
+ virtual bool BckCreate(SdrDragStat& rStat);
+ virtual void BrkCreate(SdrDragStat& rStat);
+ virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const;
+ virtual Pointer GetCreatePointer() const;
+
+ virtual void NbcMove(const Size& rSiz);
+ virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
+ virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs);
+ virtual void NbcMirror(const Point& rRef1, const Point& rRef2);
+ virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear);
+
+ virtual bool HasTextEdit() const;
+ virtual sal_Bool BegTextEdit(SdrOutliner& rOutl);
+ virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const;
+ virtual void EndTextEdit(SdrOutliner& rOutl);
+ virtual sal_uInt16 GetOutlinerViewAnchorMode() const;
+
+ virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject);
+ void NbcSetOutlinerParaObjectForText( OutlinerParaObject* pTextObject, SdrText* pText );
+ virtual OutlinerParaObject* GetOutlinerParaObject() const;
+ virtual OutlinerParaObject* GetEditOutlinerParaObject() const;
+
+ virtual void NbcReformatText();
+ virtual void ReformatText();
+
+ virtual bool CalcFieldValue(const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos,
+ bool bEdit, Color*& rpTxtColor, Color*& rpFldColor, String& rRet) const;
+
+ virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const;
+
+ void SetTextEditOutliner(SdrOutliner* pOutl) { pEdtOutl=pOutl; }
+
+ /** Setup given Outliner equivalently to SdrTextObj::Paint()
+
+ To setup an arbitrary Outliner in the same way as the draw
+ outliner on SdrTextObj::Paint(). Among others, the paper size,
+ control word and character stretching are initialized, such
+ that the formatting should match the screen representation.
+ The textual content of the outliner is not touched, i.e. no
+ Init() or Clear() is called on the Outliner.
+
+ @param rOutl
+ The Outliner to setup.
+
+ @param rPaintRect
+ The region to paint the outliner content into. This is useful
+ to e.g. determine the top, left position of text in shapes.
+ */
+ void SetupOutlinerFormatting( SdrOutliner& rOutl, Rectangle& rPaintRect ) const;
+
+ /** Update given Outliner equivalently to SdrTextObj::Paint()
+
+ Same functionality as in SetupOutlinerFormatting(), except
+ that the outliner content is not cleared.
+
+ @param rOutl
+ The Outliner to update.
+
+ @param rPaintRect
+ The region to paint the outliner content into. This is useful
+ to e.g. determine the top, left position of text in shapes.
+ */
+ void UpdateOutlinerFormatting( SdrOutliner& rOutl, Rectangle& rPaintRect ) const;
+ void ForceOutlinerParaObject();
+ virtual sal_Bool IsVerticalWriting() const;
+ virtual void SetVerticalWriting(sal_Bool bVertical);
+
+ /** called from the SdrObjEditView during text edit when the status of the edit outliner changes */
+ virtual void onEditOutlinerStatusEvent( EditStatus* pEditStatus );
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ //
+ // transformation interface for StarOfficeAPI. This implements support for
+ // homogen 3x3 matrices containing the transformation of the SdrObject. At the
+ // moment it contains a shearX, rotation and translation, but for setting all linear
+ // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported.
+ //
+ ////////////////////////////////////////////////////////////////////////////////////////////////////
+ // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon
+ // with the base geometry and returns TRUE. Otherwise it returns FALSE.
+ virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const;
+
+ // sets the base geometry of the object using infos contained in the homogen 3x3 matrix.
+ // If it's an SdrPathObj it will use the provided geometry information. The Polygon has
+ // to use (0,0) as upper left and will be scaled to the given size in the matrix.
+ virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon);
+
+ // #103836# iterates over the paragraphs of a given SdrObject and removes all
+ // hard set character attributes with the which ids contained in the
+ // given vector
+ virtual void RemoveOutlinerCharacterAttribs( const std::vector<sal_uInt16>& rCharWhichIds );
+
+ // #111096#
+ // Get necessary data for text scroll animation. ATM base it on a Text-Metafile and a
+ // painting rectangle. Rotation is taken from the object.
+ GDIMetaFile* GetTextScrollMetaFileAndRectangle(Rectangle& rScrollRectangle, Rectangle& rPaintRectangle);
+
+ // #111096#
+ // Access to TextAnimationAllowed flag
+ void SetTextAnimationAllowed(sal_Bool bNew);
+
+ // #i8824#
+ // Set single item at the local ItemSet. *Does not use* AllowItemChange(),
+ // ItemChange(), PostItemChange() and ItemSetChanged() calls.
+ void SetObjectItemNoBroadcast(const SfxPoolItem& rItem);
+
+public:
+ //////////////////////////////////////////////////////////////////////////////
+ // text primitive decomposition helpers
+ void impDecomposeContourTextPrimitive(
+ drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+ const drawinglayer::primitive2d::SdrContourTextPrimitive2D& rSdrContourTextPrimitive,
+ const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
+ void impDecomposePathTextPrimitive(
+ drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+ const drawinglayer::primitive2d::SdrPathTextPrimitive2D& rSdrPathTextPrimitive,
+ const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
+ void impDecomposeBlockTextPrimitive(
+ drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+ const drawinglayer::primitive2d::SdrBlockTextPrimitive2D& rSdrBlockTextPrimitive,
+ const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
+ void impDecomposeAutoFitTextPrimitive(
+ drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+ const drawinglayer::primitive2d::SdrAutoFitTextPrimitive2D& rSdrAutofitTextPrimitive,
+ const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
+ void impDecomposeStretchTextPrimitive(
+ drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+ const drawinglayer::primitive2d::SdrStretchTextPrimitive2D& rSdrStretchTextPrimitive,
+ const drawinglayer::geometry::ViewInformation2D& aViewInformation) const;
+
+ //////////////////////////////////////////////////////////////////////////////
+ // timing generators
+ void impGetBlinkTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList) const;
+ void impGetScrollTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList, double fFrameLength, double fTextLength) const;
+
+ /** returns false if the given pointer is NULL
+ or if the given SdrOutliner contains no text.
+ Also checks for one empty paragraph.
+ */
+ static bool HasTextImpl( SdrOutliner* pOutliner );
+};
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#endif //_SVDOTEXT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */