summaryrefslogtreecommitdiffstats
path: root/sw/source/core/inc/cntfrm.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/inc/cntfrm.hxx')
-rw-r--r--sw/source/core/inc/cntfrm.hxx146
1 files changed, 146 insertions, 0 deletions
diff --git a/sw/source/core/inc/cntfrm.hxx b/sw/source/core/inc/cntfrm.hxx
new file mode 100644
index 000000000..b972a7aaa
--- /dev/null
+++ b/sw/source/core/inc/cntfrm.hxx
@@ -0,0 +1,146 @@
+/* -*- 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_CNTFRM_HXX
+#define INCLUDED_SW_SOURCE_CORE_INC_CNTFRM_HXX
+
+#include "frame.hxx"
+#include "flowfrm.hxx"
+#include <cshtyp.hxx>
+
+class SwLayoutFrame;
+class SwContentNode;
+class SwBorderAttrs;
+class SwAttrSetChg;
+class SwTextFrame;
+
+// implemented in cntfrm.cxx, used in cntfrm.cxx and crsrsh.cxx
+extern bool GetFrameInPage( const SwContentFrame*, SwWhichPage, SwPosPage, SwPaM* );
+
+enum class SwContentFrameInvFlags : sal_uInt8
+{
+ NONE = 0x00,
+ SetCompletePaint = 0x01,
+ InvalidatePos = 0x02,
+ InvalidateSize = 0x04,
+ InvalidateSectPrt = 0x08,
+ InvalidateNextPrt = 0x10,
+ InvalidatePrevPrt = 0x20,
+ InvalidateNextPos = 0x40,
+ SetNextCompletePaint = 0x80,
+};
+
+namespace o3tl {
+ template<> struct typed_flags<SwContentFrameInvFlags> : is_typed_flags<SwContentFrameInvFlags, 0xff> {};
+}
+
+/**
+ * SwContentFrame is the layout for content nodes: a common base class for text (paragraph) and
+ * non-text (e.g. graphic) frames.
+ */
+class SAL_DLLPUBLIC_RTTI SwContentFrame: public SwFrame, public SwFlowFrame
+{
+ friend void MakeNxt( SwFrame *pFrame, SwFrame *pNxt ); // calls MakePrtArea
+
+ // parameter <bObjsInNewUpper> indicates that objects exist in remaining
+ // area of new upper
+ bool WouldFit_( SwTwips nSpace,
+ SwLayoutFrame *pNewUpper,
+ bool bTstMove,
+ const bool bObjsInNewUpper );
+
+ virtual void MakeAll(vcl::RenderContext* pRenderContext) override;
+
+ void UpdateAttr_( const SfxPoolItem*, const SfxPoolItem*, SwContentFrameInvFlags &,
+ SwAttrSetChg *pa = nullptr, SwAttrSetChg *pb = nullptr );
+
+ virtual bool ShouldBwdMoved( SwLayoutFrame *pNewUpper, bool& ) override;
+
+ const SwContentFrame* ImplGetNextContentFrame( bool bFwd ) const;
+
+protected:
+ void MakePrtArea( const SwBorderAttrs & );
+
+ virtual void SwClientNotify(const SwModify&, const SfxHint&) override;
+ virtual SwTwips ShrinkFrame( SwTwips, bool bTst = false, bool bInfo = false ) override;
+ virtual SwTwips GrowFrame ( SwTwips, bool bTst = false, bool bInfo = false ) override;
+
+ SwContentFrame( SwContentNode * const, SwFrame* );
+
+ virtual void DestroyImpl() override;
+ virtual ~SwContentFrame() override;
+
+public:
+
+ virtual void Cut() override;
+ virtual void Paste( SwFrame* pParent, SwFrame* pSibling = nullptr ) override;
+
+ inline const SwContentFrame *GetFollow() const;
+ inline SwContentFrame *GetFollow();
+ SwTextFrame* FindMaster() const;
+
+ // layout dependent cursor travelling
+ virtual bool LeftMargin(SwPaM *) const = 0;
+ virtual bool RightMargin(SwPaM *, bool bAPI = false) const = 0;
+ virtual bool UnitUp( SwPaM *, const SwTwips nOffset,
+ bool bSetInReadOnly ) const;
+ virtual bool UnitDown( SwPaM *, const SwTwips nOffset,
+ bool bSetInReadOnly ) const;
+
+ // nMaxHeight is the required height
+ // bSplit indicates that the paragraph has to be split
+ // bTst indicates that we are currently doing a test formatting
+ virtual bool WouldFit(SwTwips &nMaxHeight, bool &bSplit, bool bTst, bool);
+
+ bool MoveFootnoteCntFwd( bool, SwFootnoteBossFrame* ); // called by MoveFwd if content
+
+ inline SwContentFrame* GetNextContentFrame() const;
+ inline SwContentFrame* GetPrevContentFrame() const;
+ static bool CalcLowers(SwLayoutFrame & rLay, SwLayoutFrame const& rDontLeave,
+ tools::Long nBottom, bool bSkipRowSpanCells);
+};
+
+inline SwContentFrame* SwContentFrame::GetNextContentFrame() const
+{
+ if ( GetNext() && GetNext()->IsContentFrame() )
+ return const_cast<SwContentFrame*>(static_cast<const SwContentFrame*>(GetNext()));
+ else
+ return const_cast<SwContentFrame*>(ImplGetNextContentFrame( true ));
+}
+
+inline SwContentFrame* SwContentFrame::GetPrevContentFrame() const
+{
+ if ( GetPrev() && GetPrev()->IsContentFrame() )
+ return const_cast<SwContentFrame*>(static_cast<const SwContentFrame*>(GetPrev()));
+ else
+ return const_cast<SwContentFrame*>(ImplGetNextContentFrame( false ));
+}
+
+inline const SwContentFrame *SwContentFrame::GetFollow() const
+{
+ return static_cast<const SwContentFrame*>(SwFlowFrame::GetFollow());
+}
+inline SwContentFrame *SwContentFrame::GetFollow()
+{
+ return static_cast<SwContentFrame*>(SwFlowFrame::GetFollow());
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */