/* -*- 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;
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.