summaryrefslogtreecommitdiff
path: root/sw/source/filter/inc/wrtswtbl.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/inc/wrtswtbl.hxx')
-rw-r--r--sw/source/filter/inc/wrtswtbl.hxx334
1 files changed, 334 insertions, 0 deletions
diff --git a/sw/source/filter/inc/wrtswtbl.hxx b/sw/source/filter/inc/wrtswtbl.hxx
new file mode 100644
index 000000000000..5bbf776351a1
--- /dev/null
+++ b/sw/source/filter/inc/wrtswtbl.hxx
@@ -0,0 +1,334 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _WRTSWTBL_HXX
+#define _WRTSWTBL_HXX
+
+#include <tools/solar.h>
+#include <tools/color.hxx>
+#include <svl/svarray.hxx>
+
+#include <swdllapi.h>
+
+class Color;
+class SwTableBox;
+class SwTableLine;
+class SwTableLines;
+class SwTable;
+class SwHTMLTableLayout;
+class SvxBrushItem;
+class SvxBorderLine;
+
+//---------------------------------------------------------------------------
+// Code aus dem HTML-Filter fuers schreiben von Tabellen
+//---------------------------------------------------------------------------
+
+#define COLFUZZY 20
+#define ROWFUZZY 20
+#define COL_DFLT_WIDTH ((2*COLFUZZY)+1)
+#define ROW_DFLT_HEIGHT (2*ROWFUZZY)+1
+
+
+//-----------------------------------------------------------------------
+
+class SwWriteTableCell
+{
+ const SwTableBox *pBox; // SwTableBox der Zelle
+ const SvxBrushItem *pBackground; // geerbter Hintergrund einer Zeile
+
+ long nHeight; // fixe/Mindest-Hoehe der Zeile
+
+ USHORT nWidthOpt; // Breite aus Option;
+
+ USHORT nRow; // Start-Zeile
+ USHORT nCol; // Start-Spalte
+
+ USHORT nRowSpan; // ueberspannte Zeilen
+ USHORT nColSpan; // ueberspannte Spalten
+
+
+ BOOL bPrcWidthOpt;
+
+public:
+
+ SwWriteTableCell(const SwTableBox *pB, USHORT nR, USHORT nC, USHORT nRSpan,
+ USHORT nCSpan, long nHght, const SvxBrushItem *pBGround)
+ : pBox( pB ), pBackground( pBGround ), nHeight( nHght ), nWidthOpt( 0 ),
+ nRow( nR ), nCol( nC ), nRowSpan( nRSpan ), nColSpan( nCSpan ),
+ bPrcWidthOpt( FALSE )
+ {}
+
+ const SwTableBox *GetBox() const { return pBox; }
+
+ USHORT GetRow() const { return nRow; }
+ USHORT GetCol() const { return nCol; }
+
+ USHORT GetRowSpan() const { return nRowSpan; }
+ USHORT GetColSpan() const { return nColSpan; }
+
+ long GetHeight() const { return nHeight; }
+ sal_Int16 GetVertOri() const;
+
+ const SvxBrushItem *GetBackground() const { return pBackground; }
+
+ void SetWidthOpt( USHORT nWidth, BOOL bPrc )
+ {
+ nWidthOpt = nWidth; bPrcWidthOpt = bPrc;
+ }
+
+ USHORT GetWidthOpt() const { return nWidthOpt; }
+ BOOL HasPrcWidthOpt() const { return bPrcWidthOpt; }
+};
+
+typedef SwWriteTableCell *SwWriteTableCellPtr;
+SV_DECL_PTRARR_DEL( SwWriteTableCells, SwWriteTableCellPtr, 5, 5 )
+
+
+//-----------------------------------------------------------------------
+
+class SwWriteTableRow
+{
+ SwWriteTableCells aCells; // Alle Zellen der Rows
+ const SvxBrushItem *pBackground;// Hintergrund
+
+ long nPos; // End-Position (twips) der Zeile
+ BOOL mbUseLayoutHeights;
+
+ // Forbidden and not implemented.
+ SwWriteTableRow();
+
+ SwWriteTableRow & operator= (const SwWriteTableRow &);
+
+protected:
+ // GCC >= 3.4 needs accessible T (const T&) to pass T as const T& argument.
+ SwWriteTableRow( const SwWriteTableRow & );
+
+public:
+
+ USHORT nTopBorder; // Dicke der oberen/unteren Umrandugen
+ USHORT nBottomBorder;
+
+ BOOL bTopBorder : 1; // Welche Umrandungen sind da?
+ BOOL bBottomBorder : 1;
+
+ SwWriteTableRow( long nPos, BOOL bUseLayoutHeights );
+
+ SwWriteTableCell *AddCell( const SwTableBox *pBox,
+ USHORT nRow, USHORT nCol,
+ USHORT nRowSpan, USHORT nColSpan,
+ long nHeight,
+ const SvxBrushItem *pBackground );
+
+ void SetBackground( const SvxBrushItem *pBGround )
+ {
+ pBackground = pBGround;
+ }
+ const SvxBrushItem *GetBackground() const { return pBackground; }
+
+ BOOL HasTopBorder() const { return bTopBorder; }
+ BOOL HasBottomBorder() const { return bBottomBorder; }
+
+ long GetPos() const { return nPos; }
+ const SwWriteTableCells& GetCells() const { return aCells; }
+
+ inline int operator==( const SwWriteTableRow& rRow ) const;
+ inline int operator<( const SwWriteTableRow& rRow2 ) const;
+};
+
+inline int SwWriteTableRow::operator==( const SwWriteTableRow& rRow ) const
+{
+ // etwas Unschaerfe zulassen
+ return (nPos >= rRow.nPos ? nPos - rRow.nPos : rRow.nPos - nPos ) <=
+ (mbUseLayoutHeights ? 0 : ROWFUZZY);
+}
+
+inline int SwWriteTableRow::operator<( const SwWriteTableRow& rRow ) const
+{
+ // Da wir hier nur die Wahrheits-Grade 0 und 1 kennen, lassen wir lieber
+ // auch nicht zu, dass x==y und x<y gleichzeitig gilt ;-)
+ return nPos < rRow.nPos - (mbUseLayoutHeights ? 0 : ROWFUZZY);
+}
+
+typedef SwWriteTableRow *SwWriteTableRowPtr;
+SV_DECL_PTRARR_SORT_DEL( SwWriteTableRows, SwWriteTableRowPtr, 5, 5 )
+
+
+//-----------------------------------------------------------------------
+
+class SwWriteTableCol
+{
+ USHORT nPos; // End Position der Spalte
+
+ USHORT nWidthOpt;
+
+ BOOL bRelWidthOpt : 1;
+ BOOL bOutWidth : 1; // Spaltenbreite ausgeben?
+
+public:
+ BOOL bLeftBorder : 1; // Welche Umrandungen sind da?
+ BOOL bRightBorder : 1;
+
+ SwWriteTableCol( USHORT nPosition );
+
+ USHORT GetPos() const { return nPos; }
+
+ void SetLeftBorder( BOOL bBorder ) { bLeftBorder = bBorder; }
+ BOOL HasLeftBorder() const { return bLeftBorder; }
+
+ void SetRightBorder( BOOL bBorder ) { bRightBorder = bBorder; }
+ BOOL HasRightBorder() const { return bRightBorder; }
+
+ void SetOutWidth( BOOL bSet ) { bOutWidth = bSet; }
+ BOOL GetOutWidth() const { return bOutWidth; }
+
+ inline int operator==( const SwWriteTableCol& rCol ) const;
+ inline int operator<( const SwWriteTableCol& rCol ) const;
+
+ void SetWidthOpt( USHORT nWidth, BOOL bRel )
+ {
+ nWidthOpt = nWidth; bRelWidthOpt = bRel;
+ }
+ USHORT GetWidthOpt() const { return nWidthOpt; }
+ BOOL HasRelWidthOpt() const { return bRelWidthOpt; }
+};
+
+inline int SwWriteTableCol::operator==( const SwWriteTableCol& rCol ) const
+{
+ // etwas Unschaerfe zulassen
+ return (nPos >= rCol.nPos ? nPos - rCol.nPos
+ : rCol.nPos - nPos ) <= COLFUZZY;
+}
+
+inline int SwWriteTableCol::operator<( const SwWriteTableCol& rCol ) const
+{
+ // Da wir hier nur die Wahrheits-Grade 0 und 1 kennen, lassen wir lieber
+ // auch nicht zu, dass x==y und x<y gleichzeitig gilt ;-)
+ return nPos < rCol.nPos - COLFUZZY;
+}
+
+
+typedef SwWriteTableCol *SwWriteTableColPtr;
+SV_DECL_PTRARR_SORT_DEL( SwWriteTableCols, SwWriteTableColPtr, 5, 5 )
+
+//-----------------------------------------------------------------------
+
+class SW_DLLPUBLIC SwWriteTable
+{
+protected:
+ SwWriteTableCols aCols; // alle Spalten
+ SwWriteTableRows aRows; // alle Zellen
+
+ UINT32 nBorderColor; // Umrandungsfarbe
+
+ USHORT nCellSpacing; // Dicke der inneren Umrandung
+ USHORT nCellPadding; // Absatnd Umrandung-Inhalt
+
+ USHORT nBorder; // Dicke der ausseren Umrandung
+ USHORT nInnerBorder; // Dicke der inneren Umrandung
+ USHORT nBaseWidth; // Bezugsgroesse fur Breiten SwFmtFrmSize
+
+ USHORT nHeadEndRow; // letzte Zeile des Tabellen-Kopfes
+
+ USHORT nLeftSub;
+ USHORT nRightSub;
+
+ long nTabWidth; // Absolute/Relative Breite der Tabelle
+
+ BOOL bRelWidths : 1; // Breiten relativ ausgeben?
+ BOOL bUseLayoutHeights : 1; // Layout zur Hoehenbestimmung nehmen?
+#ifdef DBG_UTIL
+ BOOL bGetLineHeightCalled : 1;
+#endif
+
+ BOOL bColsOption : 1;
+ BOOL bColTags : 1;
+ BOOL bLayoutExport : 1;
+ BOOL bCollectBorderWidth : 1;
+
+ virtual BOOL ShouldExpandSub( const SwTableBox *pBox,
+ BOOL bExpandedBefore, USHORT nDepth ) const;
+
+ void CollectTableRowsCols( long nStartRPos, USHORT nStartCPos,
+ long nParentLineHeight,
+ USHORT nParentLineWidth,
+ const SwTableLines& rLines,
+ USHORT nDepth );
+
+ void FillTableRowsCols( long nStartRPos, USHORT nStartRow,
+ USHORT nStartCPos, USHORT nStartCol,
+ long nParentLineHeight,
+ USHORT nParentLineWidth,
+ const SwTableLines& rLines,
+ const SvxBrushItem* pLineBrush,
+ USHORT nDepth,
+ sal_uInt16 nNumOfHeaderRows );
+
+ void MergeBorders( const SvxBorderLine* pBorderLine, BOOL bTable );
+
+ USHORT MergeBoxBorders( const SwTableBox *pBox, USHORT nRow, USHORT nCol,
+ USHORT nRowSpan, USHORT nColSpan,
+ USHORT &rTopBorder, USHORT &rBottomBorder );
+
+ USHORT GetBaseWidth() const { return nBaseWidth; }
+
+ BOOL HasRelWidths() const { return bRelWidths; }
+
+public:
+ static long GetBoxWidth( const SwTableBox *pBox );
+
+ USHORT GetRawWidth( USHORT nCol, USHORT nColSpan ) const;
+ USHORT GetAbsWidth( USHORT nCol, USHORT nColSpan ) const;
+ USHORT GetRelWidth( USHORT nCol, USHORT nColSpan ) const;
+ USHORT GetPrcWidth( USHORT nCol, USHORT nColSpan ) const;
+
+ long GetAbsHeight( long nRawWidth, USHORT nRow, USHORT nRowSpan ) const;
+protected:
+
+ long GetLineHeight( const SwTableLine *pLine );
+ long GetLineHeight( const SwTableBox *pBox ) const;
+ const SvxBrushItem *GetLineBrush( const SwTableBox *pBox,
+ SwWriteTableRow *pRow );
+
+ USHORT GetLeftSpace( USHORT nCol ) const;
+ USHORT GetRightSpace( USHORT nCol, USHORT nColSpan ) const;
+
+
+public:
+ SwWriteTable( const SwTableLines& rLines, long nWidth, USHORT nBWidth,
+ BOOL bRel, USHORT nMaxDepth = USHRT_MAX,
+ USHORT nLeftSub=0, USHORT nRightSub=0, sal_uInt32 nNumOfRowsToRepeat=0 );
+ SwWriteTable( const SwHTMLTableLayout *pLayoutInfo );
+ virtual ~SwWriteTable();
+
+ const SwWriteTableCols& GetCols() const { return aCols; }
+ const SwWriteTableRows& GetRows() const { return aRows; }
+};
+
+
+
+
+#endif
+