summaryrefslogtreecommitdiffstats
path: root/sw/source/core/inc/DocumentContentOperationsManager.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/inc/DocumentContentOperationsManager.hxx')
-rw-r--r--sw/source/core/inc/DocumentContentOperationsManager.hxx192
1 files changed, 192 insertions, 0 deletions
diff --git a/sw/source/core/inc/DocumentContentOperationsManager.hxx b/sw/source/core/inc/DocumentContentOperationsManager.hxx
new file mode 100644
index 000000000..3df395329
--- /dev/null
+++ b/sw/source/core/inc/DocumentContentOperationsManager.hxx
@@ -0,0 +1,192 @@
+/* -*- 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 INCLUDED_SW_SOURCE_CORE_INC_DOCUMENTCONTENTOPERATIONSMANAGER_HXX
+#define INCLUDED_SW_SOURCE_CORE_INC_DOCUMENTCONTENTOPERATIONSMANAGER_HXX
+
+#include <IDocumentContentOperations.hxx>
+#include <ndarr.hxx> //Only for lcl_RstTxtAttr
+
+class SwDoc;
+class SwNoTextNode;
+class SwFormatColl;
+class SwHistory;
+
+namespace sw
+{
+
+class DocumentContentOperationsManager : public IDocumentContentOperations
+{
+public:
+ DocumentContentOperationsManager( SwDoc& i_rSwdoc );
+
+ //Interface methods:
+ bool CopyRange(SwPaM&, SwPosition&, SwCopyFlags) const override;
+
+ void DeleteSection(SwNode* pNode) override;
+
+ void DeleteRange(SwPaM&) override;
+
+ bool DelFullPara(SwPaM&) override;
+
+ // Add optional parameter <bForceJoinNext>, default value <false>
+ // Needed for hiding of deletion redlines
+ bool DeleteAndJoin( SwPaM&,
+ const bool bForceJoinNext = false ) override;
+
+ bool MoveRange(SwPaM&, SwPosition&, SwMoveFlags) override;
+
+ bool MoveNodeRange(SwNodeRange&, SwNodeIndex&, SwMoveFlags) override;
+
+ bool MoveAndJoin(SwPaM&, SwPosition&) override;
+
+ bool Overwrite(const SwPaM &rRg, const OUString& rStr) override;
+
+ bool InsertString(const SwPaM &rRg, const OUString&,
+ const SwInsertFlags nInsertMode = SwInsertFlags::EMPTYEXPAND ) override;
+
+ void TransliterateText(const SwPaM& rPaM, utl::TransliterationWrapper&) override;
+
+ SwFlyFrameFormat* InsertGraphic(const SwPaM &rRg, const OUString& rGrfName, const OUString& rFltName, const Graphic* pGraphic,
+ const SfxItemSet* pFlyAttrSet, const SfxItemSet* pGrfAttrSet, SwFrameFormat*) override;
+
+ SwFlyFrameFormat* InsertGraphicObject(const SwPaM& rRg, const GraphicObject& rGrfObj, const SfxItemSet* pFlyAttrSet,
+ const SfxItemSet* pGrfAttrSet) override;
+
+ void ReRead(SwPaM&, const OUString& rGrfName, const OUString& rFltName, const Graphic* pGraphic) override;
+
+ SwDrawFrameFormat* InsertDrawObj( const SwPaM &rRg, SdrObject& rDrawObj, const SfxItemSet& rFlyAttrSet ) override;
+
+ SwFlyFrameFormat* InsertEmbObject(const SwPaM &rRg, const svt::EmbeddedObjectRef& xObj, SfxItemSet* pFlyAttrSet) override;
+
+ SwFlyFrameFormat* InsertOLE(const SwPaM &rRg, const OUString& rObjName, sal_Int64 nAspect, const SfxItemSet* pFlyAttrSet,
+ const SfxItemSet* pGrfAttrSet) override;
+
+ bool SplitNode(const SwPosition &rPos, bool bChkTableStart) override;
+
+ bool AppendTextNode(SwPosition& rPos) override;
+
+ bool ReplaceRange(SwPaM& rPam, const OUString& rNewStr,
+ const bool bRegExReplace) override;
+
+ // Add a para for the char attribute exp...
+ bool InsertPoolItem(const SwPaM &rRg, const SfxPoolItem&,
+ const SetAttrMode nFlags = SetAttrMode::DEFAULT,
+ SwRootFrame const* pLayout = nullptr,
+ bool bExpandCharToPara = false,
+ SwTextAttr **ppNewTextAttr = nullptr) override;
+
+ void InsertItemSet (const SwPaM &rRg, const SfxItemSet&,
+ const SetAttrMode nFlags = SetAttrMode::DEFAULT,
+ SwRootFrame const* pLayout = nullptr) override;
+
+ void RemoveLeadingWhiteSpace(const SwPosition & rPos ) override;
+
+
+ //Non-Interface methods
+
+ void DeleteDummyChar(SwPosition const& rPos, sal_Unicode cDummy);
+
+ void CopyWithFlyInFly( const SwNodeRange& rRg,
+ const SwNodeIndex& rInsPos,
+ const std::pair<const SwPaM&, const SwPosition&> * pCopiedPaM = nullptr,
+ bool bMakeNewFrames = true,
+ bool bDelRedlines = true,
+ bool bCopyFlyAtFly = false,
+ SwCopyFlags flags = SwCopyFlags::Default) const;
+ void CopyFlyInFlyImpl( const SwNodeRange& rRg,
+ SwPaM const*const pCopiedPaM,
+ const SwNodeIndex& rStartIdx,
+ const bool bCopyFlyAtFly = false,
+ SwCopyFlags flags = SwCopyFlags::Default) const;
+
+ /// Parameters for _Rst and lcl_SetTextFormatColl
+ //originallyfrom docfmt.cxx
+ struct ParaRstFormat
+ {
+ SwFormatColl* pFormatColl;
+ SwHistory* pHistory;
+ const SwPosition *pSttNd, *pEndNd;
+ const SfxItemSet* pDelSet;
+ SwRootFrame const*const pLayout;
+ sal_uInt16 nWhich;
+ bool bReset;
+ bool bResetListAttrs; // #i62575#
+ bool bResetAll;
+ bool bInclRefToxMark;
+ /// From the attributes included in the range, delete only the ones which have exactly same range. Don't delete the ones which are simply included in the range.
+ bool bExactRange;
+
+ ParaRstFormat(const SwPosition* pStt, const SwPosition* pEnd,
+ SwHistory* pHst, const SfxItemSet* pSet = nullptr,
+ SwRootFrame const*const pLay = nullptr)
+ : pFormatColl(nullptr)
+ , pHistory(pHst)
+ , pSttNd(pStt)
+ , pEndNd(pEnd)
+ , pDelSet(pSet)
+ , pLayout(pLay)
+ , nWhich(0)
+ , bReset(false) // #i62675#
+ , bResetListAttrs(false)
+ , bResetAll(true)
+ , bInclRefToxMark(false)
+ , bExactRange(false)
+ {
+ }
+ };
+ static bool lcl_RstTextAttr( const SwNodePtr& rpNd, void* pArgs ); //originally from docfmt.cxx
+
+
+ virtual ~DocumentContentOperationsManager() override;
+
+private:
+ SwDoc& m_rDoc;
+
+ bool DeleteAndJoinImpl(SwPaM&, const bool);
+ bool DeleteAndJoinWithRedlineImpl(SwPaM&, const bool unused = false);
+ bool DeleteRangeImpl(SwPaM&, const bool unused = false);
+ bool DeleteRangeImplImpl(SwPaM &);
+ bool ReplaceRangeImpl(SwPaM&, OUString const&, const bool);
+ SwFlyFrameFormat* InsNoTextNode( const SwPosition&rPos, SwNoTextNode*,
+ const SfxItemSet* pFlyAttrSet,
+ const SfxItemSet* pGrfAttrSet,
+ SwFrameFormat* );
+ /* Copy a range within the same or to another document.
+ Position may not lie within range! */
+ bool CopyImpl( SwPaM&, SwPosition&,
+ SwCopyFlags flags, SwPaM *const pCpyRng /*= 0*/) const;
+ bool CopyImplImpl(SwPaM&, SwPosition&,
+ SwCopyFlags flags, SwPaM *const pCpyRng /*= 0*/) const;
+
+ DocumentContentOperationsManager(DocumentContentOperationsManager const&) = delete;
+ DocumentContentOperationsManager& operator=(DocumentContentOperationsManager const&) = delete;
+};
+
+
+void CopyBookmarks(const SwPaM& rPam, SwPosition& rTarget);
+
+void CalcBreaks(std::vector<std::pair<sal_uLong, sal_Int32>> & rBreaks,
+ SwPaM const & rPam, bool const isOnlyFieldmarks = false);
+
+}
+
+#endif // INCLUDED_SW_SOURCE_CORE_INC_DOCUMENTCONTENTOPERATIONSMANAGER_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */