summaryrefslogtreecommitdiffstats
path: root/sw/source/core/inc/tblrwcl.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/inc/tblrwcl.hxx')
-rw-r--r--sw/source/core/inc/tblrwcl.hxx197
1 files changed, 197 insertions, 0 deletions
diff --git a/sw/source/core/inc/tblrwcl.hxx b/sw/source/core/inc/tblrwcl.hxx
new file mode 100644
index 000000000..9cd6fa3eb
--- /dev/null
+++ b/sw/source/core/inc/tblrwcl.hxx
@@ -0,0 +1,197 @@
+/* -*- 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_TBLRWCL_HXX
+#define INCLUDED_SW_SOURCE_CORE_INC_TBLRWCL_HXX
+
+#include <cstddef>
+#include <vector>
+
+#include <swtypes.hxx>
+#include <swtable.hxx>
+
+namespace editeng { class SvxBorderLine; }
+
+class SwDoc;
+class SwTableNode;
+class SwTableBoxFormat;
+class SwHistory;
+class SwContentNode;
+class SfxPoolItem;
+class SwShareBoxFormats;
+class SwFormatFrameSize;
+
+void sw_LineSetHeadCondColl( const SwTableLine* pLine );
+
+#ifdef DBG_UTIL
+void CheckBoxWidth( const SwTableLine& rLine, SwTwips nSize );
+#endif
+
+void InsTableBox( SwDoc& rDoc, SwTableNode* pTableNd,
+ SwTableLine* pLine, SwTableBoxFormat* pBoxFrameFormat,
+ SwTableBox* pBox, sal_uInt16 nInsPos, sal_uInt16 nCnt = 1 );
+
+void DeleteBox_( SwTable& rTable, SwTableBox* pBox, SwUndo* pUndo,
+ bool bCalcNewSize, const bool bCorrBorder,
+ SwShareBoxFormats* pShareFormats = nullptr );
+
+/**
+ * Class for SplitTable
+ * Collects the uppermost or lowermost Lines of a Box from a Line in an array.
+ * We also store their positions.
+ *
+ * @see implementation in ndtbl.cxx
+ */
+class SwCollectTableLineBoxes
+{
+ std::vector<sal_uInt16> m_aPositionArr;
+ std::vector<SwTableBox*> m_Boxes;
+ SwHistory* m_pHistory;
+ SplitTable_HeadlineOption m_nMode;
+ sal_uInt16 m_nWidth;
+ bool m_bGetFromTop : 1;
+ bool m_bGetValues : 1;
+
+public:
+ SwCollectTableLineBoxes( bool bTop, SplitTable_HeadlineOption nMd = SplitTable_HeadlineOption::NONE, SwHistory* pHist=nullptr )
+ :
+ m_pHistory( pHist ), m_nMode( nMd ), m_nWidth( 0 ),
+ m_bGetFromTop( bTop ), m_bGetValues( true )
+
+ {}
+
+ void AddBox( const SwTableBox& rBox );
+ const SwTableBox* GetBoxOfPos( const SwTableBox& rBox );
+ void AddToUndoHistory( const SwContentNode& rNd );
+
+ size_t Count() const { return m_Boxes.size(); }
+ const SwTableBox& GetBox( std::size_t nPos, sal_uInt16* pWidth = nullptr ) const
+ {
+ // We need the EndPos of the column here!
+ if( pWidth )
+ *pWidth = (nPos+1 == m_aPositionArr.size()) ? m_nWidth
+ : m_aPositionArr[ nPos+1 ];
+ return *m_Boxes[ nPos ];
+ }
+
+ bool IsGetFromTop() const { return m_bGetFromTop; }
+ bool IsGetValues() const { return m_bGetValues; }
+
+ SplitTable_HeadlineOption GetMode() const { return m_nMode; }
+ void SetValues( bool bFlag ) { m_bGetValues = false; m_nWidth = 0;
+ m_bGetFromTop = bFlag; }
+ bool Resize( sal_uInt16 nOffset, sal_uInt16 nWidth );
+};
+
+void sw_Box_CollectBox( const SwTableBox* pBox, SwCollectTableLineBoxes* pSplPara );
+bool sw_Line_CollectBox( const SwTableLine*& rpLine, void* pPara );
+
+void sw_BoxSetSplitBoxFormats( SwTableBox* pBox, SwCollectTableLineBoxes* pSplPara );
+
+/**
+ * This structure is needed by Undo to restore row span attributes
+ * when a table has been split into two tables
+ */
+struct SwSaveRowSpan
+{
+ sal_uInt16 mnSplitLine; // the line number where the table has been split
+ std::vector< tools::Long > mnRowSpans; // the row span attributes in this line
+ SwSaveRowSpan( SwTableBoxes& rBoxes, sal_uInt16 nSplitLn );
+};
+
+struct SwGCLineBorder
+{
+ const SwTableLines* pLines;
+ SwShareBoxFormats* pShareFormats;
+ sal_uInt16 nLinePos;
+
+ SwGCLineBorder( const SwTable& rTable )
+ : pLines( &rTable.GetTabLines() ), pShareFormats(nullptr), nLinePos( 0 ) {}
+
+ SwGCLineBorder( const SwTableBox& rBox )
+ : pLines( &rBox.GetTabLines() ), pShareFormats(nullptr), nLinePos( 0 ) {}
+ bool IsLastLine() const { return nLinePos + 1 >= o3tl::narrowing<sal_uInt16>(pLines->size()); }
+};
+
+class SwGCBorder_BoxBrd
+{
+ const editeng::SvxBorderLine* m_pBorderLine;
+ bool m_bAnyBorderFind;
+public:
+ SwGCBorder_BoxBrd() : m_pBorderLine( nullptr ), m_bAnyBorderFind( false ) {}
+
+ void SetBorder( const editeng::SvxBorderLine& rBorderLine )
+ { m_pBorderLine = &rBorderLine; m_bAnyBorderFind = false; }
+
+ /**
+ * Check whether the left Border is the same as the set one
+ * @returns false if no Border was set
+ */
+ bool CheckLeftBorderOfFormat( const SwFrameFormat& rFormat );
+
+ bool IsAnyBorderFound() const { return m_bAnyBorderFind; }
+};
+
+void sw_GC_Line_Border( const SwTableLine* pLine, SwGCLineBorder* pGCPara );
+
+class SwShareBoxFormat
+{
+ const SwFrameFormat* m_pOldFormat;
+ std::vector<SwFrameFormat*> m_aNewFormats;
+
+public:
+ SwShareBoxFormat( const SwFrameFormat& rFormat )
+ : m_pOldFormat( &rFormat )
+ {}
+
+ const SwFrameFormat& GetOldFormat() const { return *m_pOldFormat; }
+
+ SwFrameFormat* GetFormat( tools::Long nWidth ) const;
+ SwFrameFormat* GetFormat( const SfxPoolItem& rItem ) const;
+ void AddFormat( SwFrameFormat& rFormat );
+ /// @returns true, if we can delete
+ bool RemoveFormat( const SwFrameFormat& rFormat );
+};
+
+class SwShareBoxFormats
+{
+ std::vector<SwShareBoxFormat> m_ShareArr;
+
+ bool Seek_Entry( const SwFrameFormat& rFormat, sal_uInt16* pPos ) const;
+
+ void ChangeFrameFormat( SwTableBox* pBox, SwTableLine* pLn, SwFrameFormat& rFormat );
+
+public:
+ SwShareBoxFormats() {}
+ ~SwShareBoxFormats();
+
+ SwFrameFormat* GetFormat( const SwFrameFormat& rFormat, tools::Long nWidth ) const;
+ SwFrameFormat* GetFormat( const SwFrameFormat& rFormat, const SfxPoolItem& ) const;
+
+ void AddFormat( const SwFrameFormat& rOld, SwFrameFormat& rNew );
+
+ void SetSize( SwTableBox& rBox, const SwFormatFrameSize& rSz );
+ void SetAttr( SwTableBox& rBox, const SfxPoolItem& rItem );
+ void SetAttr( SwTableLine& rLine, const SfxPoolItem& rItem );
+
+ void RemoveFormat( const SwFrameFormat& rFormat );
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */