LibreOffice Module sw (master)  1
Public Types | Static Public Member Functions | List of all members
SwTextBoxHelper Class Reference

A TextBox is a TextFrame, that is tied to a drawinglayer shape. More...

#include <textboxhelper.hxx>

Public Types

using SavedLink = std::map< const SwFrameFormat *, const SwFrameFormat * >
 Maps a draw format to a fly format. More...
 
using SavedContent = std::map< const SwFrameFormat *, SwFormatContent >
 Maps a draw format to content. More...
 

Static Public Member Functions

static void create (SwFrameFormat *pShape, SdrObject *pObject, bool bCopyText=false)
 Create a TextBox for a shape. More...
 
static void destroy (const SwFrameFormat *pShape, const SdrObject *pObject)
 Destroy a TextBox for a shape. More...
 
static css::uno::Any queryInterface (const SwFrameFormat *pShape, const css::uno::Type &rType)
 Get interface of a shape's TextBox, if there is any. More...
 
static void syncProperty (SwFrameFormat *pShape, sal_uInt16 nWID, sal_uInt8 nMemberID, const css::uno::Any &rValue, SdrObject *pObj=nullptr)
 Sync property of TextBox with the one of the shape. More...
 
static void syncProperty (SwFrameFormat *pShape, std::u16string_view rPropertyName, const css::uno::Any &rValue, SdrObject *pObj=nullptr)
 Does the same, but works on properties which lack an sw-specific WID / MemberID. More...
 
static void getProperty (SwFrameFormat const *pShape, sal_uInt16 nWID, sal_uInt8 nMemberID, css::uno::Any &rValue)
 Get a property of the underlying TextFrame. More...
 
static css::uno::Any getProperty (SwFrameFormat const *pShape, const OUString &rPropName)
 Get a property of the underlying TextFrame. More...
 
static css::text::TextContentAnchorType mapAnchorType (const RndStdIds &rAnchorID)
 There are two types of enum of anchor type, so this function maps this. More...
 
static void syncFlyFrameAttr (SwFrameFormat &rShape, SfxItemSet const &rSet, SdrObject *pObj)
 Similar to syncProperty(), but used by the internal API (e.g. for UI purposes). More...
 
static void updateTextBoxMargin (SdrObject *pObj)
 Copy shape attributes to the text frame. More...
 
static bool setWrapThrough (SwFrameFormat *pShape)
 Sets the surround to through for the textframe of the given shape, not to interfere with the layout. More...
 
static bool changeAnchor (SwFrameFormat *pShape, SdrObject *pObj)
 Sets the anchor of the associated textframe of the given shape, and returns true on success. More...
 
static bool doTextBoxPositioning (SwFrameFormat *pShape, SdrObject *pObj)
 Does the positioning for the associated textframe of the shape, and returns true on success. More...
 
static std::optional< bool > isAnchorTypeDifferent (const SwFrameFormat *pShape)
 Returns true if the anchor different for the given shape, and the associated textframe of the given shape. More...
 
static bool isTextBoxShapeHasValidTextFrame (const SwFrameFormat *pShape)
 Returns true if the given shape has a valid textframe. More...
 
static bool DoTextBoxZOrderCorrection (SwFrameFormat *pShape, const SdrObject *pObj)
 
static SwFrameFormatgetOtherTextBoxFormat (const SwFrameFormat *pFormat, sal_uInt16 nType, const SdrObject *pObject=nullptr)
 If we have an associated TextFrame, then return that. More...
 
static SwFrameFormatgetOtherTextBoxFormat (css::uno::Reference< css::drawing::XShape > const &xShape)
 If we have an associated TextFrame, then return that. More...
 
static css::uno::Reference< css::text::XTextFrame > getUnoTextFrame (css::uno::Reference< css::drawing::XShape > const &xShape)
 If we have an associated TextFrame, then return its XTextFrame. More...
 
static tools::Rectangle getTextRectangle (SdrObject *pShape, bool bAbsolute=true)
 Return the textbox rectangle of a draw shape (in twips). More...
 
static bool isTextBox (const SwFrameFormat *pFormat, sal_uInt16 nType, const SdrObject *pObject=nullptr)
 Is the frame format a text box? More...
 
static bool hasTextFrame (const SdrObject *pObj)
 Returns true if the SdrObject has a SwTextFrame otherwise false. More...
 
static sal_Int32 getCount (const SwDoc &rDoc)
 Count number of shapes in the document, excluding TextBoxes. More...
 
static sal_Int32 getCount (SdrPage const *pPage)
 Count number of shapes on the page, excluding TextBoxes. More...
 
static css::uno::Any getByIndex (SdrPage const *pPage, sal_Int32 nIndex)
 Get a shape by index, excluding TextBoxes. More...
 
static sal_Int32 getOrdNum (const SdrObject *pObject)
 Get the order of the shape, excluding TextBoxes. More...
 
static void getShapeWrapThrough (const SwFrameFormat *pTextBox, bool &rWrapThrough)
 If pTextBox is a textbox, then set rWrapThrough to the surround of its shape. More...
 
static void saveLinks (const SwFrameFormats &rFormats, std::map< const SwFrameFormat *, const SwFrameFormat * > &rLinks)
 Saves the current shape -> textbox links in a map, so they can be restored later. More...
 
static void restoreLinks (std::set< ZSortFly > &rOld, std::vector< SwFrameFormat * > &rNew, SavedLink &rSavedLinks)
 Undo the effect of saveLinks() + individual resetLink() calls. More...
 

Detailed Description

A TextBox is a TextFrame, that is tied to a drawinglayer shape.

This class provides helper methods to create, query and maintain such TextBoxes.

Definition at line 52 of file textboxhelper.hxx.

Member Typedef Documentation

Maps a draw format to content.

Definition at line 58 of file textboxhelper.hxx.

Maps a draw format to a fly format.

Definition at line 56 of file textboxhelper.hxx.

Member Function Documentation

bool SwTextBoxHelper::changeAnchor ( SwFrameFormat pShape,
SdrObject pObj 
)
static
void SwTextBoxHelper::create ( SwFrameFormat pShape,
SdrObject pObject,
bool  bCopyText = false 
)
static

Create a TextBox for a shape.

If the third parameter is true, the original text in the shape will be copied to the frame The textbox is created for the shape given by the pObject parameter.

Definition at line 62 of file textboxhelper.cxx.

References SwTextBoxNode::AddTextBox(), eMode, SwFormat::GetAttrSet(), SfxObjectShell::GetBaseModel(), SwFormat::GetDoc(), SwDoc::GetDocShell(), SwDoc::getIDocumentState(), SwFrameFormat::GetOtherTextBoxFormat(), SdrObject::getParentSdrObjectFromSdrObject(), SwTextBoxNode::GetTextBox(), SwDoc::GetUniqueFrameName(), SdrObject::getUnoShape(), SdrObject::getWeakUnoShape(), com::sun::star::uno::makeAny(), SwXServiceProvider::MakeInstance(), MID_ANCHOR_ANCHORTYPE, MID_FOLLOW_TEXT_FLOW, MID_FRMSIZE_IS_AUTO_HEIGHT, MID_FRMSIZE_SIZE, MID_HORIORIENT_ORIENT, MID_HORIORIENT_POSITION, MID_HORIORIENT_RELATION, MID_VERTORIENT_ORIENT, MID_VERTORIENT_POSITION, MID_VERTORIENT_RELATION, RES_ANCHOR(), RES_FOLLOW_TEXT_FLOW(), RES_FRAMEDIR(), RES_FRM_SIZE(), RES_HORI_ORIENT(), RES_TEXT_VERT_ADJUST(), RES_VERT_ORIENT(), SwFormat::SetFormatAttr(), IDocumentState::SetModified(), SwFrameFormat::SetOtherTextBoxFormat(), TypeTextFrame, UNO_NAME_ANCHOR_TYPE, UNO_NAME_BOTTOM_BORDER, UNO_NAME_FILL_TRANSPARENCE, UNO_NAME_HORI_ORIENT, UNO_NAME_HORI_ORIENT_POSITION, UNO_NAME_HORI_ORIENT_RELATION, UNO_NAME_IS_FOLLOWING_TEXT_FLOW, UNO_NAME_LEFT_BORDER, UNO_NAME_RIGHT_BORDER, UNO_NAME_SIZE_TYPE, UNO_NAME_SURROUND, UNO_NAME_TEXT_AUTOGROWHEIGHT, UNO_NAME_TEXT_VERT_ADJUST, UNO_NAME_TEXT_WRITINGMODE, UNO_NAME_TOP_BORDER, UNO_NAME_VERT_ORIENT, UNO_NAME_VERT_ORIENT_POSITION, UNO_NAME_VERT_ORIENT_RELATION, and sw::XTextRangeToSwPaM().

Referenced by SwDrawShell::Execute(), and SwXShape::setPropertyValue().

void SwTextBoxHelper::destroy ( const SwFrameFormat pShape,
const SdrObject pObject 
)
static

Destroy a TextBox for a shape.

If the format has more textboxes like group shapes, it will destroy only that textbox what belongs to the given pObject shape.

Definition at line 210 of file textboxhelper.cxx.

References SwFrameFormat::GetOtherTextBoxFormat(), and SwTextBoxNode::SetTextBoxInactive().

Referenced by SwDrawShell::Execute(), and SwXShape::setPropertyValue().

bool SwTextBoxHelper::doTextBoxPositioning ( SwFrameFormat pShape,
SdrObject pObj 
)
static
bool SwTextBoxHelper::DoTextBoxZOrderCorrection ( SwFrameFormat pShape,
const SdrObject pObj 
)
static
uno::Any SwTextBoxHelper::getByIndex ( SdrPage const *  pPage,
sal_Int32  nIndex 
)
static

Get a shape by index, excluding TextBoxes.

Exceptions
css::lang::IndexOutOfBoundsException

Definition at line 288 of file textboxhelper.cxx.

References SdrObjList::GetObj(), SdrObjList::GetObjCount(), SdrObject::getUnoShape(), i, SdrObject::IsTextBox(), com::sun::star::uno::makeAny(), nCount, and p.

Referenced by SwXDrawPage::getByIndex().

sal_Int32 SwTextBoxHelper::getCount ( const SwDoc rDoc)
static

Count number of shapes in the document, excluding TextBoxes.

Definition at line 276 of file textboxhelper.cxx.

References SwDoc::GetSpzFrameFormats(), and RES_FLYFRMFMT().

Referenced by SwXDrawPage::getCount().

sal_Int32 SwTextBoxHelper::getCount ( SdrPage const *  pPage)
static

Count number of shapes on the page, excluding TextBoxes.

Definition at line 263 of file textboxhelper.cxx.

References SdrObjList::GetObj(), SdrObjList::GetObjCount(), i, SdrObject::IsTextBox(), and p.

sal_Int32 SwTextBoxHelper::getOrdNum ( const SdrObject pObject)
static

Get the order of the shape, excluding TextBoxes.

Definition at line 314 of file textboxhelper.cxx.

References SdrObject::GetOrdNum(), SdrObject::getSdrPageFromSdrObject(), i, SdrObject::IsTextBox(), p, and SAL_WARN.

Referenced by SwXShape::getPropertyValue().

SwFrameFormat * SwTextBoxHelper::getOtherTextBoxFormat ( const SwFrameFormat pFormat,
sal_uInt16  nType,
const SdrObject pObject = nullptr 
)
static
static SwFrameFormat* SwTextBoxHelper::getOtherTextBoxFormat ( css::uno::Reference< css::drawing::XShape > const &  xShape)
static

If we have an associated TextFrame, then return that.

void SwTextBoxHelper::getProperty ( SwFrameFormat const *  pShape,
sal_uInt16  nWID,
sal_uInt8  nMemberID,
css::uno::Any &  rValue 
)
static
css::uno::Any SwTextBoxHelper::getProperty ( SwFrameFormat const *  pShape,
const OUString &  rPropName 
)
static

Get a property of the underlying TextFrame.

Definition at line 627 of file textboxhelper.cxx.

References SwXTextFrame::CreateXTextFrame(), SwFormat::GetDoc(), and RES_DRAWFRMFMT().

void SwTextBoxHelper::getShapeWrapThrough ( const SwFrameFormat pTextBox,
bool &  rWrapThrough 
)
static
tools::Rectangle SwTextBoxHelper::getTextRectangle ( SdrObject pShape,
bool  bAbsolute = true 
)
static
uno::Reference< text::XTextFrame > SwTextBoxHelper::getUnoTextFrame ( css::uno::Reference< css::drawing::XShape > const &  xShape)
static

If we have an associated TextFrame, then return its XTextFrame.

Definition at line 374 of file textboxhelper.cxx.

References getOtherTextBoxFormat().

Referenced by DocxAttributeOutput::GetUnoTextFrame(), and SwXDrawPage::remove().

bool SwTextBoxHelper::hasTextFrame ( const SdrObject pObj)
static

Returns true if the SdrObject has a SwTextFrame otherwise false.

Definition at line 252 of file textboxhelper.cxx.

References getOtherTextBoxFormat(), and SdrObject::getWeakUnoShape().

Referenced by SwDrawShell::ExecDrawDlg(), and SwDrawBaseShell::Execute().

std::optional< bool > SwTextBoxHelper::isAnchorTypeDifferent ( const SwFrameFormat pShape)
static

Returns true if the anchor different for the given shape, and the associated textframe of the given shape.

Note: In case of AS_CHAR anchor the anchor type must be different, because if not, layout breaks, but this situation also handled by this function, and returns true in that case too.

Definition at line 1294 of file textboxhelper.cxx.

References SwFormat::GetAnchor(), SwFormatAnchor::GetAnchorId(), and RES_DRAWFRMFMT().

bool SwTextBoxHelper::isTextBox ( const SwFrameFormat pFormat,
sal_uInt16  nType,
const SdrObject pObject = nullptr 
)
static

Is the frame format a text box?

A text box consists of a coupled fly and draw format. Most times you just want to check for a single type, otherwise you get duplicate results.

Parameters
pFormatIs this format have a textbox?
nTypeExpected frame format input type. Valid types are RES_DRAWFRMFMT and RES_FLYFRMFMT.
pObjectIf the pFormat has more textboxes than one, like groupshapes, the textbox what belongs to the given pObject will be inspected. If this parameter nullptr, the textbox what belongs to the pObject will only be inspected.

Definition at line 224 of file textboxhelper.cxx.

References SwFrameFormat::FindRealSdrObject(), SwFrameFormat::GetOtherTextBoxFormat(), SwTextBoxNode::GetTextBox(), RES_DRAWFRMFMT(), RES_FLYFRMFMT(), and SwFormat::Which().

Referenced by objectpositioning::SwToContentAnchoredObjectPosition::CalcOverlap(), sw::DocumentContentOperationsManager::CopyFlyInFlyImpl(), SwXMLExport::ExportTable(), SwFEShell::FindAnchorPos(), SwDoc::GetFlyCount(), SwDoc::GetFlyFrameFormats(), SwDoc::GetFlyNum(), objectpositioning::SwAnchoredObjectPosition::GetInfoAboutObj(), SwAnchoredDrawObject::GetObjBoundRect(), SwXShape::getPropertyStates(), SwXShape::getPropertyValue(), SwDrawShell::GetState(), RtfSdrExport::isTextBox(), DocxSdrExport::isTextBox(), SwVirtFlyDrawObj::IsTextBox(), lcl_ExportHints(), lcl_isTextBox(), lcl_textBoxSizeNotify(), SwFEShell::Paste(), SwFEShell::SelectionToBottom(), SwFEShell::SelectionToTop(), SwDoc::SetAttr(), and SwXFrame::setPropertyValue().

bool SwTextBoxHelper::isTextBoxShapeHasValidTextFrame ( const SwFrameFormat pShape)
static

Returns true if the given shape has a valid textframe.

Definition at line 1311 of file textboxhelper.cxx.

References RES_DRAWFRMFMT(), RES_FLYFRMFMT(), SAL_WARN, and SwFormat::Which().

Referenced by SwFEShell::SelectionToBottom(), and SwFEShell::SelectionToTop().

text::TextContentAnchorType SwTextBoxHelper::mapAnchorType ( const RndStdIds rAnchorID)
static

There are two types of enum of anchor type, so this function maps this.

Definition at line 911 of file textboxhelper.cxx.

References SAL_WARN.

uno::Any SwTextBoxHelper::queryInterface ( const SwFrameFormat pShape,
const css::uno::Type &  rType 
)
static

Get interface of a shape's TextBox, if there is any.

Definition at line 401 of file textboxhelper.cxx.

Referenced by SwXShape::queryInterface().

void SwTextBoxHelper::restoreLinks ( std::set< ZSortFly > &  rOld,
std::vector< SwFrameFormat * > &  rNew,
SavedLink rSavedLinks 
)
static

Undo the effect of saveLinks() + individual resetLink() calls.

Definition at line 890 of file textboxhelper.cxx.

References i.

Referenced by sw::DocumentContentOperationsManager::CopyFlyInFlyImpl().

void SwTextBoxHelper::saveLinks ( const SwFrameFormats rFormats,
std::map< const SwFrameFormat *, const SwFrameFormat * > &  rLinks 
)
static

Saves the current shape -> textbox links in a map, so they can be restored later.

Definition at line 880 of file textboxhelper.cxx.

References RES_DRAWFRMFMT().

Referenced by sw::DocumentContentOperationsManager::CopyFlyInFlyImpl().

bool SwTextBoxHelper::setWrapThrough ( SwFrameFormat pShape)
static

Sets the surround to through for the textframe of the given shape, not to interfere with the layout.

Returns true on success.

Definition at line 1117 of file textboxhelper.cxx.

References SwXTextFrame::CreateXTextFrame(), SwFormat::GetDoc(), SwDoc::GetIDocumentUndoRedo(), com::sun::star::uno::makeAny(), RES_DRAWFRMFMT(), SAL_WARN, UNO_NAME_SURROUND, and xFrame.

void SwTextBoxHelper::syncFlyFrameAttr ( SwFrameFormat rShape,
SfxItemSet const &  rSet,
SdrObject pObj 
)
static
void SwTextBoxHelper::syncProperty ( SwFrameFormat pShape,
sal_uInt16  nWID,
sal_uInt8  nMemberID,
const css::uno::Any &  rValue,
SdrObject pObj = nullptr 
)
static

Sync property of TextBox with the one of the shape.

Definition at line 642 of file textboxhelper.cxx.

References BOTTOM_BORDER_DISTANCE, CONVERT_TWIPS, convertTwipToMm100(), SwXTextFrame::CreateXTextFrame(), SwFrameFormat::FindRealSdrObject(), FN_TEXT_RANGE, SwFormat::GetAnchor(), SwFormatAnchor::GetAnchorId(), SwFormat::GetDoc(), tools::Rectangle::getHeight(), tools::Rectangle::getWidth(), tools::Rectangle::IsEmpty(), tools::Rectangle::Left(), LEFT_BORDER_DISTANCE, MID_ALLOW_OVERLAP, MID_ANCHOR_ANCHORTYPE, MID_CHAIN_NEXTNAME, MID_CHAIN_PREVNAME, MID_FRMSIZE_IS_AUTO_HEIGHT, MID_FRMSIZE_REL_HEIGHT_RELATION, MID_FRMSIZE_REL_WIDTH_RELATION, MID_FRMSIZE_WIDTH_TYPE, MID_HORIORIENT_ORIENT, MID_HORIORIENT_POSITION, MID_HORIORIENT_RELATION, MID_L_MARGIN, MID_R_MARGIN, MID_VERTORIENT_ORIENT, MID_VERTORIENT_POSITION, MID_VERTORIENT_RELATION, nValue, RES_ANCHOR(), RES_BOX(), RES_CHAIN(), RES_DRAWFRMFMT(), RES_FRAMEDIR(), RES_FRM_SIZE(), RES_HORI_ORIENT(), RES_LR_SPACE(), RES_OPAQUE(), RES_TEXT_VERT_ADJUST(), RES_VERT_ORIENT(), RES_WRAP_INFLUENCE_ON_OBJPOS(), RIGHT_BORDER_DISTANCE, SAL_WARN, SwFormatAnchor::SetAnchor(), SwFormat::SetFormatAttr(), tools::Rectangle::Top(), TOP_BORDER_DISTANCE, UNO_NAME_ALLOW_OVERLAP, UNO_NAME_BOTTOM_BORDER_DISTANCE, UNO_NAME_CHAIN_NEXT_NAME, UNO_NAME_CHAIN_PREV_NAME, UNO_NAME_FRAME_ISAUTOMATIC_HEIGHT, UNO_NAME_HORI_ORIENT, UNO_NAME_HORI_ORIENT_POSITION, UNO_NAME_HORI_ORIENT_RELATION, UNO_NAME_LEFT_BORDER_DISTANCE, UNO_NAME_LEFT_MARGIN, UNO_NAME_OPAQUE, UNO_NAME_RELATIVE_HEIGHT_RELATION, UNO_NAME_RELATIVE_WIDTH_RELATION, UNO_NAME_RIGHT_BORDER_DISTANCE, UNO_NAME_RIGHT_MARGIN, UNO_NAME_SIZE, UNO_NAME_TEXT_VERT_ADJUST, UNO_NAME_TOP_BORDER_DISTANCE, UNO_NAME_VERT_ORIENT, UNO_NAME_VERT_ORIENT_POSITION, UNO_NAME_VERT_ORIENT_RELATION, UNO_NAME_WIDTH_TYPE, UNO_NAME_WRITING_MODE, and sw::XTextRangeToSwPaM().

Referenced by SwAnchoredDrawObject::GetObjBoundRect(), SwXShape::setPropertyValue(), and SwXShape::setSize().

void SwTextBoxHelper::syncProperty ( SwFrameFormat pShape,
std::u16string_view  rPropertyName,
const css::uno::Any &  rValue,
SdrObject pObj = nullptr 
)
static
void SwTextBoxHelper::updateTextBoxMargin ( SdrObject pObj)
static

The documentation for this class was generated from the following files: