/* -*- 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 .
*/ #pragma once
class SwExtTextInput; class EditFieldInfo; class Outliner; class OutputDevice; class Point; class SbxArray; class SdrObject; class SdrUndoAction; class SvNumberFormatter; class SvxMacro; class SwAutoCompleteWord; class SwAutoCorrExceptWord; class SwCellFrame; class SwCellStyleTable; class SwCursorShell; class SwCursor; class SwDocShell; class SwDrawView; class SwEditShell; class SwFormat; class SwFormatINetFormat; class SwFormatRefMark; class SwFootnoteIdxs; class SwFootnoteInfo; class SwEndNoteInfo; class SwLineNumberInfo; class SwDBManager; class SwNodeIndex; class SwNodeRange; class SwNumRule; class SwPagePreviewPrtData; class SwRootFrame; class SwRubyListEntry; class SwSectionFormat; class SwSectionData; class SwSelBoxes; class SwTableAutoFormatTable; class SwTOXBaseSection; class SwTabCols; class SwTable; class SwTableAutoFormat; class SwTableBox; class SwTableBoxFormat; class SwTableFormat; class SwTableLineFormat; class SwTableNode; class SwTextBlocks; class SwURLStateChanged; class SwUnoCursor; class SwViewShell; class SwDrawContact; class SdrView; class SdrMarkList; class SwAuthEntry; class SwLayoutCache; class IStyleAccess; struct SwCallMouseEvent; struct SwDocStat; struct SwSortOptions; struct SwDefTOXBase_Impl; class SwPrintUIOptions; struct SwConversionArgs; class SwRenderData; class IDocumentUndoRedo; class IDocumentSettingAccess; class IDocumentDeviceAccess; class IDocumentDrawModelAccess; class IDocumentChartDataProviderAccess; class IDocumentTimerAccess; class IDocumentLinksAdministration; class IDocumentListItems; class IDocumentListsAccess; class IDocumentOutlineNodes; class IDocumentContentOperations; class IDocumentRedlineAccess; class IDocumentStatistics; class IDocumentState; class IDocumentLayoutAccess; class IDocumentStylePoolAccess; class IDocumentExternalData; class IDocumentMarkAccess; class SetGetExpFields; struct SwInsertTableOptions; class SwContentControlManager; enumclass SvMacroItemId : sal_uInt16; enumclass SvxFrameDirection; enumclass RndStdIds; class SwMarkName;
namespace sw::mark { class MarkManager; } namespace sw { enumclass RedlineMode; enumclass FieldmarkMode; enumclass ParagraphBreakMode; class MetaFieldManager; class UndoManager; class IShellCursorSupplier; class DocumentSettingManager; class DocumentDeviceManager; class DocumentDrawModelManager; class DocumentChartDataProviderManager; class DocumentTimerManager; class DocumentLinksAdministrationManager; class DocumentListItemsManager; class DocumentListsManager; class DocumentOutlineNodesManager; class DocumentContentOperationsManager; class DocumentRedlineManager; class DocumentFieldsManager; class DocumentStatisticsManager; class DocumentStateManager; class DocumentLayoutManager; class DocumentStylePoolManager; class DocumentExternalDataManager; class GrammarContact; class OnlineAccessibilityCheck;
}
namespace com::sun::star { namespace container { class XNameContainer; //< for getXForms()/isXForms()/initXForms() methods
} namespace embed { class XStorage; } namespace linguistic2 { class XHyphenatedWord; } namespace linguistic2 { class XProofreadingIterator; } namespace linguistic2 { class XSpellChecker1; } namespace script::vba { class XVBAEventProcessor; }
}
using SwRubyList = std::vector<std::unique_ptr<SwRubyListEntry>>;
// Represents the model of a Writer document. class SwDoc final
{ friendclass ::sw::DocumentContentOperationsManager;
friendvoid InitCore(); friendvoid FinitCore();
// private Member
std::unique_ptr<SwNodes> m_pNodes; //< document content (Nodes Array)
rtl::Reference<SwAttrPool> mpAttrPool; //< the attribute pool
SwPageDescs m_PageDescs; //< PageDescriptors
Link<bool,void> maOle2Link; //< OLE 2.0-notification /* @@@MAINTAINABILITY-HORROR@@@ Timer should not be members of the model
*/
Idle maOLEModifiedIdle; //< Timer for update modified OLE-Objects
SwDBData maDBData; //< database descriptor
OUString msTOIAutoMarkURL; //< URL of table of index AutoMark file
std::vector<OUString> m_PatternNames; //< Array for names of document-templates
css::uno::Reference<css::container::XNameContainer>
mxXForms; //< container with XForms models mutable css::uno::Reference< css::linguistic2::XProofreadingIterator > m_xGCIterator;
SwDocShell *mpDocShell; //< Ptr to SfxDocShell of Doc.
SfxObjectShellLock mxTmpDocShell; //< A temporary shell that is used to copy OLE-Nodes
std::unique_ptr<SwAutoCorrExceptWord> mpACEWord; /**< For the automated takeover of
auto-corrected words that are "re-corrected". */
std::unique_ptr<SwURLStateChanged> mpURLStateChgd; //< SfxClient for changes in INetHistory
std::mutex mNumberFormatterMutex;
SvNumberFormatter* mpNumberFormatter; //< NumFormatter for tables / fields
mutable std::unique_ptr<SwNumRuleTable> mpNumRuleTable; //< List of all named NumRules.
// Hash map to find numrules by name mutable std::unordered_map<UIName, SwNumRule *> maNumRuleMap;
std::unique_ptr<SwPagePreviewPrtData> m_pPgPViewPrtData; //< Indenting / spacing for printing of page view.
SwExtTextInput *mpExtInputRing;
std::unique_ptr<IStyleAccess> mpStyleAccess; //< handling of automatic styles
std::unique_ptr<SwLayoutCache> mpLayoutCache; /**< Layout cache to read and save with the
document for a faster formatting */
std::unique_ptr<sw::GrammarContact> mpGrammarContact; //< for grammar checking in paragraphs during editing
std::unique_ptr<sw::OnlineAccessibilityCheck> mpOnlineAccessibilityCheck;
/// Table styles (autoformats that are applied with table changes).
std::unique_ptr<SwTableAutoFormatTable> m_pTableStyles; /// Cell Styles not assigned to a Table Style
std::unique_ptr<SwCellStyleTable> mpCellStyles; private:
std::unique_ptr< ::sfx2::IXmlIdRegistry > m_pXmlIdRegistry;
// other
sal_uInt32 mnRsid; //< current session ID of the document
sal_uInt32 mnRsidRoot; //< session ID when the document was created
oslInterlockedCount mReferenceCount;
bool mbDtor : 1; /**< TRUE: is in SwDoc DTOR. and unfortunately temporarily also in SwSwgReader::InLayout() when flawed
frames need deletion. */ bool mbCopyIsMove : 1; //< TRUE: Copy is a hidden Move. bool mbInReading : 1; //< TRUE: Document is in the process of being read. bool mbInWriting : 1; //< TRUE: Document is in the process of being written. bool mbInMailMerge : 1; //< TRUE: Document is in the process of being written by mail merge. bool mbInXMLImport : 1; //< TRUE: During xml import, attribute portion building is not necessary. bool mbInXMLImport242 : 1 = false; //< TRUE: During xml import, apply workaround for style-ref field bool mbInWriterfilterImport : 1; //< TRUE: writerfilter import (DOCX,RTF) bool mbUpdateTOX : 1; //< TRUE: After loading document, update TOX. bool mbInLoadAsynchron : 1; //< TRUE: Document is in the process of being loaded asynchronously. bool mbIsAutoFormatRedline : 1; //< TRUE: Redlines are recorded by Autoformat. bool mbOLEPrtNotifyPending : 1; /**< TRUE: Printer has changed. At creation of View
notification of OLE-Objects PrtOLENotify() is required. */ bool mbAllOLENotify : 1; //< True: Notification of all objects is required. bool mbInsOnlyTextGlssry : 1; //< True: insert 'only text' glossary into doc bool mbContains_MSVBasic : 1; //< True: MS-VBasic exist is in our storage bool mbClipBoard : 1; //< TRUE: this document represents the clipboard bool mbColumnSelection : 1; //< TRUE: this content has been created by a column selection (clipboard docs only) bool mbIsPrepareSelAll : 1; bool mbDontCorrectBookmarks = false;
// true: Document contains at least one anchored object, which is anchored AT_PAGE with a content position. // Thus, certain adjustment needed during formatting for these kind of anchored objects. bool mbContainsAtPageObjWithContentAnchor : 1;
static SwAutoCompleteWord *s_pAutoCompleteWords; //< List of all words for AutoComplete /// The last, still alive SwDoc instance, for debugging. static SwDoc* s_pLast;
SW_DLLPUBLIC void EnsureNumberFormatter(); // must be called with mNumberFormatterMutex locked
bool UnProtectTableCells( SwTable& rTable );
/** Create sub-documents according to the given collection.
If no collection is given, take chapter style of the 1st level. */ bool SplitDoc( sal_uInt16 eDocType, const OUString& rPath, bool bOutline, const SwTextFormatColl* pSplitColl, int nOutlineLevel = 0 );
// Update charts of given table. void UpdateCharts_( const SwTable& rTable, SwViewShell const & rVSh ) const;
/** Acquire a reference to an instance. A caller shall release the instance by calling 'release' when it is no longer needed. 'acquire' and 'release' calls need to be balanced.
@returns the current reference count of the instance for debugging purposes.
*/
SW_DLLPUBLIC sal_Int32 acquire(); /** Releases a reference to an instance. A caller has to call 'release' when a before acquired reference to an instance is no longer needed. 'acquire' and 'release' calls need to be balanced.
@returns the current reference count of the instance for debugging purposes.
*/
SW_DLLPUBLIC sal_Int32 release(); /** Returns the current reference count. This method should be used for debugging purposes. Using it otherwise is a signal of a design flaw.
*/ public:
sal_Int32 getReferenceCount() const;
// Returns 0 if the field cannot hide para, or a positive integer indicating the field type // "weight" when several hiding fields' FieldHidesPara() give conflicting results int FieldCanHideParaWeight(SwFieldIds eFieldId) const; bool FieldHidesPara(const SwField& rField) const;
/** Returns positions of all FlyFrames in the document. If a Pam-Pointer is passed the FlyFrames attached to paragraphs have to be surrounded completely by css::awt::Selection. ( Start < Pos < End ) !!!
(Required for Writers.) */
SW_DLLPUBLIC SwPosFlyFrames GetAllFlyFormats( const SwPaM*, bool bDrawAlso, bool bAsCharAlso = false ) const;
// From now on this interface has to be used for Flys. // pAnchorPos must be set, if they are not attached to pages AND // Anchor is not already set at valid ContentPos // in FlySet/FrameFormat. /* new parameter bCalledFromShell
true: An existing adjust item at pAnchorPos is propagated to the content node of the new fly section. That propagation only takes place if there is no adjust item in the paragraph style for the new fly section.
// Helper that checks for unique items for DrawingLayer items of type NameOrIndex // and evtl. corrects that items to ensure unique names for that type. This call may // modify/correct entries inside of the given SfxItemSet, and it will apply a name to // the items in question (what is essential to make the named slots associated with // these items work for the UNO API and thus e.g. for ODF import/export) void CheckForUniqueItemForLineFillNameOrIndex(SfxItemSet& rSet);
// Find out which databases are used by fields. void GetAllUsedDB( std::vector<OUString>& rDBNameList, const std::vector<OUString>* pAllDBNames = nullptr );
// Set a valid name for all Flys that have none (Called by Readers after reading). void SetAllUniqueFlyNames();
/** Reset attributes. All TextHints and (if completely selected) all hard- formatted stuff (auto-formats) are removed. Introduce new optional parameter <bSendDataChangedEvents> in order to
control, if the side effect "send data changed events" is triggered or not. */ void ResetAttrs( const SwPaM &rRg, bool bTextAttr = true, const o3tl::sorted_vector<sal_uInt16> &rAttrs = o3tl::sorted_vector<sal_uInt16>(), constbool bSendDataChangedEvents = true,
SwRootFrame const* pLayout = nullptr); void RstTextAttrs(const SwPaM &rRg, bool bInclRefToxMark = false, bool bExactRange = false, SwRootFrame const* pLayout = nullptr);
/** Set attribute in given format.1y
* If Undo is enabled, the old values is added to the Undo history. */
SW_DLLPUBLIC void SetAttr( const SfxPoolItem&, SwFormat& ); /** Set attribute in given format.1y
* If Undo is enabled, the old values is added to the Undo history. */
SW_DLLPUBLIC void SetAttr( const SfxItemSet&, SwFormat& );
// method to reset a certain attribute at the given format void ResetAttrAtFormat( const std::vector<sal_uInt16>& rIds,
SwFormat& rChangedFormat );
/** Set attribute as new default attribute in current document.
If Undo is activated, the old one is listed in Undo-History. */ void SetDefault( const SfxPoolItem& ); void SetDefault( const SfxItemSet& );
// Replace all styles with those from rSource. void ReplaceStyles( const SwDoc& rSource, bool bIncludePageStyles = true );
// Replace all property defaults with those from rSource.
SW_DLLPUBLIC void ReplaceDefaults( const SwDoc& rSource );
// Replace all compatibility options with those from rSource.
SW_DLLPUBLIC void ReplaceCompatibilityOptions( const SwDoc& rSource );
/** Replace all user defined document properties with xSourceDocProps. Convenience function used by ReplaceDocumentProperties to skip some UNO calls.
*/ void ReplaceUserDefinedDocumentProperties( const css::uno::Reference< css::document::XDocumentProperties >& xSourceDocProps );
/** Replace document properties with those from rSource.
This includes the user defined document properties!
*/
SW_DLLPUBLIC void ReplaceDocumentProperties(const SwDoc& rSource, bool mailMerge = false);
// Query if style (paragraph- / character- / frame- / page-) is used. bool IsUsed( const sw::BroadcastingModify& ) const; /// Query if table style is used. bool IsUsed( const SwTableAutoFormat& ) const;
SW_DLLPUBLIC bool IsUsed( const SwNumRule& ) const;
// Set name of newly loaded document template.
size_t SetDocPattern(const OUString& rPatternName);
// @return name of document template. Can be 0! const OUString* GetDocPattern(size_t nPos) const;
// travel over PaM Ring bool InsertGlossary( SwTextBlocks& rBlock, const OUString& rEntry,
SwPaM& rPaM, SwCursorShell* pShell = nullptr);
/** get the set of printable pages for the XRenderable API by
evaluating the respective settings (see implementation) */ staticvoid CalculatePagesForPrinting( const SwRootFrame& rLayout, SwRenderData &rData, const SwPrintUIOptions &rOptions, bool bIsPDFExport,
sal_Int32 nDocPageCount ); staticvoid UpdatePagesForPrintingWithPostItData( SwRenderData &rData, const SwPrintUIOptions &rOptions,
sal_Int32 nDocPageCount ); staticvoid CalculatePagePairsForProspectPrinting( const SwRootFrame& rLayout, SwRenderData &rData, const SwPrintUIOptions &rOptions,
sal_Int32 nDocPageCount ); staticvoid CalculateNonBlankPages( const SwRootFrame& rLayout, sal_uInt16& nDocPageCount, sal_uInt16& nActualPage );
/** The html import sometimes overwrites the page sizes set in
the page descriptions. This function is used to correct this. */ void CheckDefaultPageFormat();
// Methods for tables/indices static sal_uInt16 GetCurTOXMark( const SwPosition& rPos, SwTOXMarks& ); void DeleteTOXMark( const SwTOXMark* pTOXMark );
SW_DLLPUBLIC const SwTOXMark& GotoTOXMark( const SwTOXMark& rCurTOXMark,
SwTOXSearch eDir, bool bInReadOnly ); /// Iterate over all SwTOXMark, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachTOXMark( const std::function<bool(const SwTOXMark&)>& ) const;
// Correct the SwPosition-Objects that are registered with the document // e. g. Bookmarks or tables/indices. // If bMoveCursor is set move Cursor too.
// Set everything in rOldNode on rNewPos + Offset. void CorrAbs( const SwNode& rOldNode, const SwPosition& rNewPos, const sal_Int32 nOffset = 0, bool bMoveCursor = false );
// Set everything in the range of [rStartNode, rEndNode] to rNewPos. staticvoid CorrAbs( const SwNodeIndex& rStartNode, const SwNodeIndex& rEndNode, const SwPosition& rNewPos, bool bMoveCursor = false );
// Set everything in this range from rRange to rNewPos. staticvoid CorrAbs( const SwPaM& rRange, const SwPosition& rNewPos, bool bMoveCursor = false );
// Set everything in rOldNode to relative Pos. void CorrRel( const SwNode& rOldNode, const SwPosition& rNewPos, const sal_Int32 nOffset = 0, bool bMoveCursor = false );
enumclass SetNumRuleMode { Default = 0, /// indicates if a new list is created by applying the given list style.
CreateNewList = 1,
DontSetItem = 2, /** If enabled, the indent attributes "before text" and "first line indent" are additionally reset at the provided PaM,
if the list style makes use of the new list level attributes. */
ResetIndentAttrs = 4,
DontSetIfAlreadyApplied = 8
};
/** Set or change numbering rule on text nodes, as direct formatting. @param sContinuedListId If bCreateNewList is false, may contain the list Id of a list which has to be continued by applying the given list style
// sw_redlinehide: may set rPos to different node (the one with the NumRule) static SwNumRule* GetNumRuleAtPos(SwPosition& rPos, SwRootFrame const* pLayout = nullptr);
\param rPos position to start search \param bForward - true: search forward - false: search backward \param bNum - true: search for enumeration - false: search for itemize \param bOutline - true: search for outline numbering rule - false: search for non-outline numbering rule \param nNonEmptyAllowed number of non-empty paragraphs allowed between rPos and found paragraph
@param sListId output parameter - in case a list style is found, <sListId> holds the list id, to which the text node belongs, which applies the found list style.
@param bInvestigateStartNode input parameter - boolean, indicating, if start node, determined by given start position has to be investigated or not.
*/ const SwNumRule * SearchNumRule(const SwPosition & rPos, constbool bForward, constbool bNum, constbool bOutline, int nNonEmptyAllowed,
OUString& sListId,
SwRootFrame const* pLayout, constbool bInvestigateStartNode = false,
SvxTextLeftMarginItem const** o_ppTextLeftMargin = nullptr,
SvxFirstLineIndentItem const** o_ppFirstLineIndent = nullptr);
// Paragraphs without numbering but with indents. bool NoNum( const SwPaM& );
/** Insert new table at position @param rPos (will be inserted before Node!). For AutoFormat at input: columns have to be set at predefined width. The array holds the positions of the columns (not their widths). new @param bCalledFromShell: true: called from shell -> propagate existing adjust item at rPos to every new cell. A existing adjust item in the table heading or table contents paragraph style prevent that propagation. false: do not propagate
*/
SW_DLLPUBLIC const SwTable* InsertTable( const SwInsertTableOptions& rInsTableOpts, // HeadlineNoBorder const SwPosition& rPos, sal_uInt16 nRows,
sal_uInt16 nCols, sal_Int16 eAdjust, const SwTableAutoFormat* pTAFormat = nullptr, const std::vector<sal_uInt16> *pColArr = nullptr, bool bCalledFromShell = false, bool bNewModel = true, const OUString& rTableName = {} );
// If index is in a table, return TableNode, else 0. static SwTableNode* IsIdxInTable( const SwNodeIndex& rIdx ); static SwTableNode* IsInTable( const SwNode& );
// Create a balanced table out of the selected range. const SwTable* TextToTable( const SwInsertTableOptions& rInsTableOpts, // HeadlineNoBorder, const SwPaM& rRange, sal_Unicode cCh,
sal_Int16 eAdjust, const SwTableAutoFormat* );
// text to table conversion - API support const SwTable* TextToTable( const std::vector< std::vector<SwNodeRange> >& rTableNodes );
// Split table at baseline position, i.e. create a new table. void SplitTable( const SwPosition& rPos, SplitTable_HeadlineOption eMode, bool bCalcNewSize );
/** And vice versa: rPos must be in the table that remains. The flag indicates
whether the current table is merged with the one before or behind it. */ bool MergeTable( const SwPosition& rPos, bool bWithPrev );
// Make charts of given table update. void UpdateCharts( const UIName& rName ) const;
// Update all charts, for that exists any table. void UpdateAllCharts() { DoUpdateAllCharts(); }
// Table is renamed and refreshes charts. void SetTableName( SwFrameFormat& rTableFormat, const UIName &rNewName );
// @return the reference in document that is set for name. const SwFormatRefMark* GetRefMark( const SwMarkName& rName ) const;
// @return RefMark via index - for UNO. const SwFormatRefMark* GetRefMark( sal_uInt16 nIndex ) const;
/** @return names of all references that are set in document.
If array pointer is 0 return only whether a RefMark is set in document. */
SW_DLLPUBLIC sal_uInt16 GetRefMarks( std::vector<OUString>* = nullptr ) const;
SW_DLLPUBLIC void GetRefMarks( std::vector<const SwFormatRefMark*>& ) const; /// Iterate over all SwFormatRefMark, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachRefMark( const std::function<bool(const SwFormatRefMark&)>& ) const;
/* @@@MAINTAINABILITY-HORROR@@@ The model should not have anything to do with a shell. Unnecessary compile/link time dependency.
*/
// Pointer to SfxDocShell from Doc. Can be 0!!
SAL_RET_MAYBENULL SwDocShell* GetDocShell() { return mpDocShell; }
SAL_RET_MAYBENULL const SwDocShell* GetDocShell() const { return mpDocShell; } void SetDocShell( SwDocShell* pDSh );
/** in case during copying of embedded object a new shell is created,
it should be set here and cleaned later */ void SetTmpDocShell(const SfxObjectShellLock& rLock) { mxTmpDocShell = rLock; } const SfxObjectShellLock& GetTmpDocShell() const { return mxTmpDocShell; }
// For Autotexts? (text modules) They have only one SVPersist at their disposal.
SW_DLLPUBLIC SfxObjectShell* GetPersist() const;
// Pointer to storage of SfxDocShells. Can be 0!!!
SW_DLLPUBLIC css::uno::Reference< css::embed::XStorage > GetDocStorage();
// Query / set flag indicating if document is loaded asynchronously at this moment. bool IsInLoadAsynchron() const { return mbInLoadAsynchron; } void SetInLoadAsynchron( bool bFlag ) { mbInLoadAsynchron = bFlag; }
// Query if URL was visited. // Query via Doc, if only a Bookmark has been given. // In this case the document name has to be set in front. bool IsVisitedURL( std::u16string_view rURL );
// Save current values for automatic registration of exceptions in Autocorrection. void SetAutoCorrExceptWord( std::unique_ptr<SwAutoCorrExceptWord> pNew );
SwAutoCorrExceptWord* GetAutoCorrExceptWord() { return mpACEWord.get(); } void DeleteAutoCorrExceptWord();
const SwFormatINetFormat* FindINetAttr( std::u16string_view rName ) const; /// Iterate over all SwFormatINetFormat, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachINetFormat( const std::function<bool(const SwFormatINetFormat&)>& ) const;
/// Iterate over all SwFormatURL, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachFormatURL( const std::function<bool(const SwFormatURL&)>& ) const;
/// Iterate over all SvxOverlineItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachOverlineItem( const std::function<bool(const SvxOverlineItem&)>& ) const;
/// Iterate over all SwFormatField, if the function returns false, iteration is stopped void ForEachFormatField( TypedWhichId<SwFormatField> nWhich, const std::function<bool(const SwFormatField&)>& ) const;
/// Iterate over all RES_CHRATR_BOX SvxBoxItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachCharacterBoxItem(const std::function<bool(const SvxBoxItem&)>& ) const;
/// Iterate over all RES_CHRATR_COLOR SvxColorItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachCharacterColorItem(const std::function<bool(const SvxColorItem&)>& ) const;
/// Iterate over all RES_CHRATR_UNDERLINE SvxUnderlineItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachCharacterUnderlineItem(const std::function<bool(const SvxUnderlineItem&)>& ) const;
/// Iterate over all RES_CHRATR_BACKGROUND SvxBrushItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachCharacterBackgroundBrushItem(const std::function<bool(constSvxBrushItem&)>& ) const;
/// Iterate over all RES_CHRATR_FONT/RES_CHRATR_CJK_FONT/RES_CHRATR_CTL_FONT SvxFontItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachCharacterFontItem(TypedWhichId<SvxFontItem> nWhich, bool bIgnoreAutoStyles, const std::function<bool(const SvxFontItem&)>& );
/// Iterate over all RES_TXTATR_UNKNOWN_CONTAINER SvXMLAttrContainerItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachTxtAtrContainerItem(const std::function<bool(const SvXMLAttrContainerItem&)>& ) const;
/// Iterate over all RES_PARATR_TABSTOP SvxTabStopItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachParaAtrTabStopItem(const std::function<bool(const SvxTabStopItem&)>& );
/// Iterate over all RES_UNKNOWNATR_CONTAINER SvXMLAttrContainerItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachUnknownAtrContainerItem(const std::function<bool(const SvXMLAttrContainerItem&)>& ) const;
/// Iterate over all RES_BOX SvxBoxItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachBoxItem(const std::function<bool(const SvxBoxItem&)>& ) const;
/// Iterate over all RES_SHADOW SvxShadowItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachShadowItem(const std::function<bool(const SvxShadowItem&)>& ) const;
/// Iterate over all RES_BACKGROUND SvxBrushItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachBackgroundBrushItem(const std::function<bool(const SvxBrushItem&)>& ) const;
/// Iterate over all RES_CHRATR_HIGHLIGHT SvxBrushItem, if the function returns false, iteration is stopped
SW_DLLPUBLIC void ForEachCharacterHighlightBrushItem(const std::function<bool(const SvxBrushItem&)>& ) const;
// Call into intransparent Basic; expect possible Return String. void ExecMacro( const SvxMacro& rMacro, OUString* pRet, SbxArray* pArgs );
/** Adjust left margin via object bar (similar to adjustment of numerations). One can either change the margin "by" adding or subtracting a given
offset or set it "to" this position (bModulus = true). */ void MoveLeftMargin(const SwPaM& rPam, bool bRight, bool bModulus,
SwRootFrame const* pLayout = nullptr);
bool HasInvisibleContent() const; // delete invisible content, like hidden sections and paragraphs
SW_DLLPUBLIC bool RemoveInvisibleContent(); // restore the invisible content if it's available on the undo stack bool RestoreInvisibleContent();
// Replace fields by text - mailmerge support bool ConvertFieldsToText(SwRootFrame const& rLayout); bool ConvertFieldToText(const SwField& rField, SwRootFrame const& rLayout);
// Create sub-documents according to given collection. // If no collection is given, use chapter styles for 1st level. bool GenerateGlobalDoc( const OUString& rPath, const SwTextFormatColl* pSplitColl ); bool GenerateGlobalDoc( const OUString& rPath, int nOutlineLevel ); bool GenerateHTMLDoc( const OUString& rPath, const SwTextFormatColl* pSplitColl ); bool GenerateHTMLDoc( const OUString& rPath, int nOutlineLevel );
// Compare two documents.
tools::Long CompareDoc( const SwDoc& rDoc );
// Merge two documents.
tools::Long MergeDoc( const SwDoc& rDoc );
// Only for SW-textbloxks! Does not pay any attention to layout! void ClearDoc(); // Deletes all content!
// Query /set data for PagePreview. const SwPagePreviewPrtData* GetPreviewPrtData() const { return m_pPgPViewPrtData.get(); }
// If pointer == 0 destroy pointer in document. // Else copy object. // Pointer is not transferred to ownership by document! void SetPreviewPrtData( const SwPagePreviewPrtData* pData );
/** update all modified OLE-Objects. The modification is called over the
StarOne - Interface */ void SetOLEObjModified();
/// Adjustment of Rowheights. Determine via bTstOnly if more than one row is selected. /// bOptimize: distribute current table height, instead of using the largest row. /// Call again without bOptimize to ensure equal height in case some row's content didn't fit. bool BalanceRowHeight( const SwCursor& rCursor, bool bTstOnly, constbool bOptimize ); void SetRowBackground( const SwCursor& rCursor, const SvxBrushItem &rNew ); staticbool GetRowBackground( const SwCursor& rCursor, std::unique_ptr<SvxBrushItem>& rToFill ); /// rNotTracked = false means that the row was deleted or inserted with its tracked cell content /// bAll: delete all table rows without selection /// bIns: insert table row void SetRowNotTracked( const SwCursor& rCursor, const SvxPrintItem &rNotTracked, bool bAll = false, bool bIns = false ); /// don't call SetRowNotTracked() for rows with tracked row change staticbool HasRowNotTracked( const SwCursor& rCursor ); void SetTabBorders( const SwCursor& rCursor, const SfxItemSet& rSet ); void SetTabLineStyle( const SwCursor& rCursor, const Color* pColor, bool bSetLine, const editeng::SvxBorderLine* pBorderLine ); staticvoid GetTabBorders( const SwCursor& rCursor, SfxItemSet& rSet ); void SetBoxAttr( const SwCursor& rCursor, const SfxPoolItem &rNew ); /** Retrieves a box attribute from the given cursor.
@return Whether the property is set over the current box selection.
@remarks A property is 'set' if it's set to the same value over all boxes in the current selection. The property value is retrieved from the first box in the current selection. It is then compared to the values of the same property over any other boxes in the selection; if any value is different from that of the first box, the property is unset (and false is returned).
*/ staticbool GetBoxAttr( const SwCursor& rCursor, std::unique_ptr<SfxPoolItem>& rToFill ); void SetBoxAlign( const SwCursor& rCursor, sal_uInt16 nAlign ); static sal_uInt16 GetBoxAlign( const SwCursor& rCursor ); /// Adjusts selected cell widths in such a way, that their content does not need to be wrapped (if possible). /// bBalance evenly re-distributes the available space regardless of content or wrapping. /// bNoShrink keeps table size the same by distributing excess space proportionately. void AdjustCellWidth( const SwCursor& rCursor, constbool bBalance, constbool bNoShrink );
/** Checks if any of the text node contains hidden characters. Used for optimization. Changing the view option 'view hidden text' has to trigger a reformatting only if some of the text is hidden.
*/ bool ContainsHiddenChars() const;
@param sListId list Id of the list whose level has to be marked/unmarked @param nListLevel level to mark @param bValue - true mark the level - false unmark the level
*/ void MarkListLevel( const OUString& sListId, constint nListLevel, constbool bValue );
// Change a format undoable.
SW_DLLPUBLIC void ChgFormat(SwFormat & rFormat, const SfxItemSet & rSet);
// access container for XForms model; will be NULL if !isXForms() const css::uno::Reference<css::container::XNameContainer>&
getXForms() const { return mxXForms;}
/** * Dumps the entire nodes structure to the given destination (file nodes.xml in the current directory by default)
*/ void dumpAsXml(xmlTextWriterPtr = nullptr) const;
// Remove expired UnoCursor weak pointers the document keeps to notify about document death. void cleanupUnoCursorTable() const
{ auto & rTable = const_cast<SwDoc*>(this)->mvUnoCursorTable; // In most cases we'll remove most of the elements.
std::erase_if(rTable, [] (std::weak_ptr<SwUnoCursor> const & x) { return x.expired(); });
}
/** * @param bSkipStart don't actually start the jobs, just check * @returns true if new background checking jobs were started
*/ bool StartGrammarChecking( bool bSkipStart = false );
/// Use to notify if the dictionary can be found for a single content portion (has to be called for all portions) void SetMissingDictionaries( bool bIsMissing ); /// Returns true if no dictionary can be found for any content bool IsDictionaryMissing() const { return meDictionaryMissing == MissingDictionary::True; }
private: // Copies master header to left / first one, if necessary - used by ChgPageDesc(). void CopyMasterHeader(const SwPageDesc &rChged, const SwFormatHeader &rHead, SwPageDesc &pDesc, bool bLeft, bool bFirst); // Copies master footer to left / first one, if necessary - used by ChgPageDesc(). void CopyMasterFooter(const SwPageDesc &rChged, const SwFormatFooter &rFoot, SwPageDesc &pDesc, bool bLeft, bool bFirst);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.