summaryrefslogtreecommitdiff
path: root/sc/source/filter/xml
diff options
context:
space:
mode:
authorKohei Yoshida <kyoshida@novell.com>2010-12-02 11:25:54 -0500
committerKohei Yoshida <kyoshida@novell.com>2010-12-02 16:06:51 -0500
commit92734962c82ac8a89792d44461dbdac8a17516c9 (patch)
treeb00a46535f20c7334dcbb06f0d8aa9db1ceb27ad /sc/source/filter/xml
parent998cb023ad248f4b9e9928d1b9f25875bdbf70ae (diff)
Moved new wrapper class into own files.
Diffstat (limited to 'sc/source/filter/xml')
-rw-r--r--sc/source/filter/xml/cachedattraccess.cxx70
-rw-r--r--sc/source/filter/xml/cachedattraccess.hxx63
-rw-r--r--sc/source/filter/xml/makefile.mk1
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx42
-rw-r--r--sc/source/filter/xml/xmlexprt.hxx26
5 files changed, 139 insertions, 63 deletions
diff --git a/sc/source/filter/xml/cachedattraccess.cxx b/sc/source/filter/xml/cachedattraccess.cxx
new file mode 100644
index 000000000000..b5ef932a4410
--- /dev/null
+++ b/sc/source/filter/xml/cachedattraccess.cxx
@@ -0,0 +1,70 @@
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * [ Kohei Yoshida <kyoshida@novell.com> ]
+ * Portions created by the Initial Developer are Copyright (C) 2010 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+#include "cachedattraccess.hxx"
+#include "document.hxx"
+
+ScXMLCachedRowAttrAccess::Cache::Cache() :
+ mnTab(-1), mnRow1(-1), mnRow2(-1), mbValue(false) {}
+
+bool ScXMLCachedRowAttrAccess::Cache::hasCache(sal_Int32 nTab, sal_Int32 nRow) const
+{
+ return mnTab == nTab && mnRow1 <= nRow && nRow <= mnRow2;
+}
+
+ScXMLCachedRowAttrAccess::ScXMLCachedRowAttrAccess(ScDocument* pDoc) :
+ mpDoc(pDoc) {}
+
+bool ScXMLCachedRowAttrAccess::rowHidden(sal_Int32 nTab, sal_Int32 nRow)
+{
+ if (!maHidden.hasCache(nTab, nRow))
+ {
+ SCROW nRow1, nRow2;
+ maHidden.mbValue = mpDoc->RowHidden(
+ static_cast<SCTAB>(nTab), static_cast<SCROW>(nRow), &nRow1, &nRow2);
+ maHidden.mnRow1 = static_cast<sal_Int32>(nRow1);
+ maHidden.mnRow2 = static_cast<sal_Int32>(nRow2);
+ }
+ return maHidden.mbValue;
+}
+
+bool ScXMLCachedRowAttrAccess::rowFiltered(sal_Int32 nTab, sal_Int32 nRow)
+{
+ if (!maFiltered.hasCache(nTab, nRow))
+ {
+ SCROW nRow1, nRow2;
+ maFiltered.mbValue = mpDoc->RowFiltered(
+ static_cast<SCTAB>(nTab), static_cast<SCROW>(nRow), &nRow1, &nRow2);
+ maFiltered.mnRow1 = static_cast<sal_Int32>(nRow1);
+ maFiltered.mnRow2 = static_cast<sal_Int32>(nRow2);
+ }
+ return maFiltered.mbValue;
+}
+
diff --git a/sc/source/filter/xml/cachedattraccess.hxx b/sc/source/filter/xml/cachedattraccess.hxx
new file mode 100644
index 000000000000..5ef6e4118089
--- /dev/null
+++ b/sc/source/filter/xml/cachedattraccess.hxx
@@ -0,0 +1,63 @@
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * [ Kohei Yoshida <kyoshida@novell.com> ]
+ * Portions created by the Initial Developer are Copyright (C) 2010 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#ifndef __SC_FILTER_XML_CACHEDATTRACCESS_HXX__
+#define __SC_FILTER_XML_CACHEDATTRACCESS_HXX__
+
+#include "sal/types.h"
+
+class ScDocument;
+
+/**
+ * Wrapper for accessing hidden and filtered row attributes. It caches last
+ * accessed values for a current range, to avoid fetching values for every
+ * single row.
+ */
+class ScXMLCachedRowAttrAccess
+{
+ struct Cache
+ {
+ sal_Int32 mnTab;
+ sal_Int32 mnRow1;
+ sal_Int32 mnRow2;
+ bool mbValue;
+ Cache();
+ bool hasCache(sal_Int32 nTab, sal_Int32 nRow) const;
+ };
+
+public:
+ ScXMLCachedRowAttrAccess(ScDocument* pDoc);
+
+ bool rowHidden(sal_Int32 nTab, sal_Int32 nRow);
+ bool rowFiltered(sal_Int32 nTab, sal_Int32 nRow);
+private:
+ Cache maHidden;
+ Cache maFiltered;
+ ScDocument* mpDoc;
+};
+
+#endif
diff --git a/sc/source/filter/xml/makefile.mk b/sc/source/filter/xml/makefile.mk
index 47d428157993..777d68c086bf 100644
--- a/sc/source/filter/xml/makefile.mk
+++ b/sc/source/filter/xml/makefile.mk
@@ -47,6 +47,7 @@ PROJECTPCHSOURCE=..\pch\filt_pch
SLOFILES = \
$(SLO)$/sheetdata.obj \
+ $(SLO)$/cachedattraccess.obj \
$(SLO)$/xmlwrap.obj \
$(SLO)$/xmlimprt.obj \
$(SLO)$/xmlexprt.obj \
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index f272414ad11b..88551d4c3644 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -69,6 +69,7 @@
#include "externalrefmgr.hxx"
#include "editutil.hxx"
#include "tabprotection.hxx"
+#include "cachedattraccess.hxx"
#include <xmloff/xmltoken.hxx>
#include <xmloff/xmlnmspe.hxx>
@@ -170,43 +171,6 @@ using ::rtl::OUStringBuffer;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::UNO_QUERY;
-ScXMLRowAttrAccess::Cache::Cache() :
- mnTab(-1), mnRow1(-1), mnRow2(-1), mbValue(false) {}
-
-bool ScXMLRowAttrAccess::Cache::hasCache(sal_Int32 nTab, sal_Int32 nRow) const
-{
- return mnTab == nTab && mnRow1 <= nRow && nRow <= mnRow2;
-}
-
-ScXMLRowAttrAccess::ScXMLRowAttrAccess(ScDocument* pDoc) :
- mpDoc(pDoc) {}
-
-bool ScXMLRowAttrAccess::rowHidden(sal_Int32 nTab, sal_Int32 nRow)
-{
- if (!maHidden.hasCache(nTab, nRow))
- {
- SCROW nRow1, nRow2;
- maHidden.mbValue = mpDoc->RowHidden(
- static_cast<SCTAB>(nTab), static_cast<SCROW>(nRow), &nRow1, &nRow2);
- maHidden.mnRow1 = static_cast<sal_Int32>(nRow1);
- maHidden.mnRow2 = static_cast<sal_Int32>(nRow2);
- }
- return maHidden.mbValue;
-}
-
-bool ScXMLRowAttrAccess::rowFiltered(sal_Int32 nTab, sal_Int32 nRow)
-{
- if (!maFiltered.hasCache(nTab, nRow))
- {
- SCROW nRow1, nRow2;
- maFiltered.mbValue = mpDoc->RowFiltered(
- static_cast<SCTAB>(nTab), static_cast<SCROW>(nRow), &nRow1, &nRow2);
- maFiltered.mnRow1 = static_cast<sal_Int32>(nRow1);
- maFiltered.mnRow2 = static_cast<sal_Int32>(nRow2);
- }
- return maFiltered.mbValue;
-}
-
//----------------------------------------------------------------------------
namespace
@@ -1340,7 +1304,7 @@ void ScXMLExport::OpenAndCloseRow(
pRowFormatRanges->Clear();
}
-void ScXMLExport::OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow, ScXMLRowAttrAccess& rRowAttr)
+void ScXMLExport::OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow, ScXMLCachedRowAttrAccess& rRowAttr)
{
if (nRepeatRow > 1)
{
@@ -1437,7 +1401,7 @@ void ScXMLExport::ExportFormatRanges(const sal_Int32 nStartCol, const sal_Int32
const sal_Int32 nEndCol, const sal_Int32 nEndRow, const sal_Int32 nSheet)
{
pRowFormatRanges->Clear();
- ScXMLRowAttrAccess aRowAttr(pDoc);
+ ScXMLCachedRowAttrAccess aRowAttr(pDoc);
if (nStartRow == nEndRow)
{
pCellStyles->GetFormatRanges(nStartCol, nEndCol, nStartRow, nSheet, pRowFormatRanges);
diff --git a/sc/source/filter/xml/xmlexprt.hxx b/sc/source/filter/xml/xmlexprt.hxx
index 222b84ddb3c7..43b32949898e 100644
--- a/sc/source/filter/xml/xmlexprt.hxx
+++ b/sc/source/filter/xml/xmlexprt.hxx
@@ -65,32 +65,10 @@ class ScChartListener;
class SfxItemPool;
class ScAddress;
class ScBaseCell;
+class ScXMLCachedRowAttrAccess;
typedef std::vector< com::sun::star::uno::Reference < com::sun::star::drawing::XShapes > > ScMyXShapesVec;
-class ScXMLRowAttrAccess
-{
- struct Cache
- {
- sal_Int32 mnTab;
- sal_Int32 mnRow1;
- sal_Int32 mnRow2;
- bool mbValue;
- Cache();
- bool hasCache(sal_Int32 nTab, sal_Int32 nRow) const;
- };
-
-public:
- ScXMLRowAttrAccess(ScDocument* pDoc);
-
- bool rowHidden(sal_Int32 nTab, sal_Int32 nRow);
- bool rowFiltered(sal_Int32 nTab, sal_Int32 nRow);
-private:
- Cache maHidden;
- Cache maFiltered;
- ScDocument* mpDoc;
-};
-
class ScXMLExport : public SvXMLExport
{
ScDocument* pDoc;
@@ -190,7 +168,7 @@ class ScXMLExport : public SvXMLExport
bool bHidden, bool bFiltered);
void OpenAndCloseRow(const sal_Int32 nIndex, const sal_Int32 nStartRow, const sal_Int32 nEmptyRows,
bool bHidden, bool bFiltered);
- void OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow, ScXMLRowAttrAccess& rRowAttr);
+ void OpenRow(const sal_Int32 nTable, const sal_Int32 nStartRow, const sal_Int32 nRepeatRow, ScXMLCachedRowAttrAccess& rRowAttr);
void CloseRow(const sal_Int32 nRow);
void GetColumnRowHeader(sal_Bool& bHasColumnHeader, com::sun::star::table::CellRangeAddress& aColumnHeaderRange,
sal_Bool& bHasRowHeader, com::sun::star::table::CellRangeAddress& aRowHeaderRange,