summaryrefslogtreecommitdiffstats
path: root/bf_sw/source/filter/xml/xmltbli.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'bf_sw/source/filter/xml/xmltbli.hxx')
-rw-r--r--bf_sw/source/filter/xml/xmltbli.hxx213
1 files changed, 213 insertions, 0 deletions
diff --git a/bf_sw/source/filter/xml/xmltbli.hxx b/bf_sw/source/filter/xml/xmltbli.hxx
new file mode 100644
index 000000000..476b55f50
--- /dev/null
+++ b/bf_sw/source/filter/xml/xmltbli.hxx
@@ -0,0 +1,213 @@
+/* -*- 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 _XMLTBLI_HXX
+#define _XMLTBLI_HXX
+
+#include <bf_svtools/bf_solar.h>
+
+#include <bf_xmloff/XMLTextTableContext.hxx>
+
+#include <boost/unordered_map.hpp>
+
+#if !defined(_SVSTDARR_USHORTS_DECL) || !defined(_SVSTDARR_BOOLS_DECL) || !defined(_SVSTDARR_STRINGSDTOR_DECL)
+#define _SVSTDARR_USHORTS
+#define _SVSTDARR_BOOLS
+#define _SVSTDARR_STRINGSDTOR
+#include <bf_svtools/svstdarr.hxx>
+#endif
+namespace binfilter {
+
+class SwXMLImport;
+class SwTableNode;
+class SwTableBox;
+class SwTableLine;
+class SwStartNode;
+class SwTableBoxFmt;
+class SwTableLineFmt;
+class SwXMLTableCell_Impl;
+class SwXMLTableRows_Impl;
+class SwXMLDDETableContext_Impl;
+class TableBoxIndexHasher;
+class TableBoxIndex;
+
+namespace com { namespace sun { namespace star {
+ namespace text { class XTextContent; }
+ namespace text { class XTextCursor; }
+} } }
+
+
+
+class SwXMLTableContext : public XMLTextTableContext
+{
+ ::rtl::OUString aStyleName;
+ ::rtl::OUString aDfltCellStyleName;
+
+ SvUShorts aColumnWidths;
+ SvBools aColumnRelWidths;
+ SvStringsDtor *pColumnDefaultCellStyleNames;
+
+ ::com::sun::star::uno::Reference <
+ ::com::sun::star::text::XTextCursor > xOldCursor;
+ ::com::sun::star::uno::Reference <
+ ::com::sun::star::text::XTextContent > xTextContent;
+
+ SwXMLTableRows_Impl *pRows;
+
+ SwTableNode *pTableNode;
+ SwTableBox *pBox1;
+ const SwStartNode *pSttNd1;
+
+ SwTableBoxFmt *pBoxFmt;
+ SwTableLineFmt *pLineFmt;
+
+ // hash map of shared format, indexed by the (XML) style name,
+ // the column width, and protection flag
+ typedef boost::unordered_map<TableBoxIndex,SwTableBoxFmt*,
+ TableBoxIndexHasher> map_BoxFmt;
+ map_BoxFmt* pSharedBoxFormats;
+
+ SvXMLImportContextRef xParentTable; // if table is a sub table
+
+ SwXMLDDETableContext_Impl *pDDESource;
+
+ sal_Bool bFirstSection : 1;
+ sal_Bool bRelWidth : 1;
+ sal_Bool bHasHeading : 1;
+
+ sal_uInt32 nCurRow;
+ sal_uInt32 nCurCol;
+ sal_Int32 nWidth;
+
+ SwTableBox *NewTableBox( const SwStartNode *pStNd,
+ SwTableLine *pUpper );
+ SwTableBox *MakeTableBox( SwTableLine *pUpper,
+ const SwXMLTableCell_Impl *pStartNode,
+ sal_uInt32 nTopRow, sal_uInt32 nLeftCol,
+ sal_uInt32 nBottomRow, sal_uInt32 nRightCol );
+ SwTableBox *MakeTableBox( SwTableLine *pUpper,
+ sal_uInt32 nTopRow, sal_uInt32 nLeftCol,
+ sal_uInt32 nBottomRow, sal_uInt32 nRightCol );
+ SwTableLine *MakeTableLine( SwTableBox *pUpper,
+ sal_uInt32 nTopRow, sal_uInt32 nLeftCol,
+ sal_uInt32 nBottomRow, sal_uInt32 nRightCol );
+
+ void _MakeTable( SwTableBox *pBox=0 );
+ void MakeTable( SwTableBox *pBox, sal_Int32 nWidth );
+ void MakeTable();
+
+ inline SwXMLTableContext *GetParentTable() const;
+
+ const SwStartNode *GetPrevStartNode( sal_uInt32 nRow,
+ sal_uInt32 nCol ) const;
+ inline const SwStartNode *GetLastStartNode() const;
+ void FixRowSpan( sal_uInt32 nRow, sal_uInt32 nCol, sal_uInt32 nColSpan );
+ void ReplaceWithEmptyCell( sal_uInt32 nRow, sal_uInt32 nCol );
+
+ /** sets the appropriate SwTblBoxFmt at pBox. */
+ SwTableBoxFmt* GetSharedBoxFormat(
+ SwTableBox* pBox, /// the table box
+ const ::rtl::OUString& rStyleName, /// XML style name
+ sal_Int32 nColumnWidth, /// width of column
+ sal_Bool bProtected, /// is cell protected?
+ sal_Bool bMayShare, /// may the format be shared (no value, formula...)
+ sal_Bool& bNew, /// true, if the format it not from the cache
+ sal_Bool* pModifyLocked ); /// if set, call pBox->LockModify() and return old lock status
+
+public:
+
+ TYPEINFO();
+
+ SwXMLTableContext( SwXMLImport& rImport, sal_uInt16 nPrfx,
+ const ::rtl::OUString& rLName,
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::xml::sax::XAttributeList > & xAttrList );
+ SwXMLTableContext( SwXMLImport& rImport, sal_uInt16 nPrfx,
+ const ::rtl::OUString& rLName,
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::xml::sax::XAttributeList > & xAttrList,
+ SwXMLTableContext *pTable );
+
+ virtual ~SwXMLTableContext();
+
+ virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
+ const ::rtl::OUString& rLocalName,
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::xml::sax::XAttributeList > & xAttrList );
+
+ SwXMLImport& GetSwImport() { return (SwXMLImport&)GetImport(); }
+
+ void InsertColumn( sal_Int32 nWidth, sal_Bool bRelWidth,
+ const ::rtl::OUString *pDfltCellStyleName = 0 );
+ sal_Int32 GetColumnWidth( sal_uInt32 nCol, sal_uInt32 nColSpan=1UL ) const;
+ ::rtl::OUString GetColumnDefaultCellStyleName( sal_uInt32 nCol ) const;
+ inline sal_uInt32 GetColumnCount() const;
+ inline sal_Bool HasColumnDefaultCellStyleNames() const;
+
+ sal_Bool IsInsertCellPossible() const { return nCurCol < GetColumnCount(); }
+ sal_Bool IsInsertColPossible() const { return nCurCol < USHRT_MAX; }
+ sal_Bool IsInsertRowPossible() const { return nCurRow < USHRT_MAX; }
+ sal_Bool IsValid() const { return pTableNode != 0; }
+
+ void InsertCell( const ::rtl::OUString& rStyleName,
+ sal_uInt32 nRowSpan=1U, sal_uInt32 nColSpan=1U,
+ const SwStartNode *pStNd=0,
+ SwXMLTableContext *pTable=0,
+ sal_Bool bIsProtected = sal_False,
+ const ::rtl::OUString *pFormula=0,
+ sal_Bool bHasValue = sal_False,
+ double fValue = 0.0 );
+ void InsertRow( const ::rtl::OUString& rStyleName,
+ const ::rtl::OUString& rDfltCellStyleName,
+ sal_Bool bInHead );
+ void FinishRow();
+ void InsertRepRows( sal_uInt32 nCount );
+ SwXMLTableCell_Impl *GetCell( sal_uInt32 nRow, sal_uInt32 nCol ) const;
+ const SwStartNode *InsertTableSection( const SwStartNode *pPrevSttNd=0 );
+
+ virtual void EndElement();
+
+ virtual ::com::sun::star::uno::Reference <
+ ::com::sun::star::text::XTextContent > GetXTextContent() const;
+};
+
+inline SwXMLTableContext *SwXMLTableContext::GetParentTable() const
+{
+ return (SwXMLTableContext *)&xParentTable;
+}
+
+inline sal_uInt32 SwXMLTableContext::GetColumnCount() const
+{
+ return aColumnWidths.Count();
+}
+
+inline const SwStartNode *SwXMLTableContext::GetLastStartNode() const
+{
+ return GetPrevStartNode( 0UL, GetColumnCount() );
+}
+
+inline sal_Bool SwXMLTableContext::HasColumnDefaultCellStyleNames() const
+{
+ return pColumnDefaultCellStyleNames != 0;
+}
+
+} //namespace binfilter
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */