summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2015-04-17 09:26:34 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2015-04-17 17:41:43 +0200
commitc172b75b8ea5653246174399a530d238b1680ce0 (patch)
treea21e03f0ab14665086e6ac1be6ffbe52ebf77809 /sc
parent02bd12876efb4d4269dba4bd8f0d18b43c7894c9 (diff)
add attribute mandated by ODF
Make sure that it does not confuse our importer by adding an attibute to ignore it when the new elements have been added. Change-Id: I15991be9dd993e2aeb18c440a14de3711f8001f4
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/dpsave.hxx1
-rw-r--r--sc/source/core/data/dpsave.cxx13
-rw-r--r--sc/source/filter/xml/XMLExportDataPilot.cxx12
-rw-r--r--sc/source/filter/xml/xmldpimp.cxx11
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx1
-rw-r--r--sc/source/filter/xml/xmlimprt.hxx1
6 files changed, 38 insertions, 1 deletions
diff --git a/sc/inc/dpsave.hxx b/sc/inc/dpsave.hxx
index 20d5ffb3867e..9973b991faee 100644
--- a/sc/inc/dpsave.hxx
+++ b/sc/inc/dpsave.hxx
@@ -203,6 +203,7 @@ public:
void SetLayoutInfo(const ::com::sun::star::sheet::DataPilotFieldLayoutInfo* pNew);
void SetCurrentPage( const OUString* pPage ); // NULL = no selection (all)
+ OUString GetCurrentPage() const; // only for ODF compatibility
sal_uInt16 GetOrientation() const
{ return nOrientation; }
diff --git a/sc/source/core/data/dpsave.cxx b/sc/source/core/data/dpsave.cxx
index 93e98399d181..fc8651536825 100644
--- a/sc/source/core/data/dpsave.cxx
+++ b/sc/source/core/data/dpsave.cxx
@@ -509,6 +509,19 @@ void ScDPSaveDimension::SetCurrentPage( const OUString* pPage )
}
}
+OUString ScDPSaveDimension::GetCurrentPage() const
+{
+ MemberList::const_iterator it = maMemberList.begin(), itEnd = maMemberList.end();
+ for (; it != itEnd; ++it)
+ {
+ const ScDPSaveMember* pMem = *it;
+ if (pMem->GetIsVisible())
+ return pMem->GetName();
+ }
+
+ return OUString();
+}
+
ScDPSaveMember* ScDPSaveDimension::GetExistingMemberByName(const OUString& rName)
{
MemberHash::const_iterator res = maMemberHash.find (rName);
diff --git a/sc/source/filter/xml/XMLExportDataPilot.cxx b/sc/source/filter/xml/XMLExportDataPilot.cxx
index 09a33908e2fe..793bec5de0a8 100644
--- a/sc/source/filter/xml/XMLExportDataPilot.cxx
+++ b/sc/source/filter/xml/XMLExportDataPilot.cxx
@@ -690,8 +690,9 @@ void ScXMLExportDataPilot::WriteDimension(ScDPSaveDimension* pDim, const ScDPDim
if (pDim->IsDataLayout())
rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_IS_DATA_LAYOUT_FIELD, XML_TRUE);
OUString sValueStr;
+ sheet::DataPilotFieldOrientation eOrientation = (sheet::DataPilotFieldOrientation) pDim->GetOrientation();
ScXMLConverter::GetStringFromOrientation( sValueStr,
- (sheet::DataPilotFieldOrientation) pDim->GetOrientation() );
+ eOrientation);
if( !sValueStr.isEmpty() )
rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_ORIENTATION, sValueStr );
if (pDim->GetUsedHierarchy() != 1)
@@ -704,6 +705,15 @@ void ScXMLExportDataPilot::WriteDimension(ScDPSaveDimension* pDim, const ScDPDim
(sheet::GeneralFunction) pDim->GetFunction() );
rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_FUNCTION, sValueStr);
+ if (eOrientation == sheet::DataPilotFieldOrientation_PAGE)
+ {
+ if (rExport.getDefaultVersion() > SvtSaveOptions::ODFVER_012)
+ {
+ rExport.AddAttribute(XML_NAMESPACE_LO_EXT, XML_IGNORE_SELECTED_PAGE, "true");
+ }
+ rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_SELECTED_PAGE, pDim->GetCurrentPage());
+ }
+
SvXMLElementExport aElemDPF(rExport, XML_NAMESPACE_TABLE, XML_DATA_PILOT_FIELD, true, true);
WriteLevels(pDim);
WriteFieldReference(pDim);
diff --git a/sc/source/filter/xml/xmldpimp.cxx b/sc/source/filter/xml/xmldpimp.cxx
index c080158c301a..0ee00a0320fc 100644
--- a/sc/source/filter/xml/xmldpimp.cxx
+++ b/sc/source/filter/xml/xmldpimp.cxx
@@ -1000,6 +1000,7 @@ ScXMLDataPilotFieldContext::ScXMLDataPilotFieldContext( ScXMLImport& rImport,
{
bool bHasName = false;
bool bDataLayout = false;
+ bool bIgnoreSelectedPage = false;
OUString aDisplayName;
sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDataPilotFieldAttrTokenMap();
@@ -1046,6 +1047,11 @@ ScXMLDataPilotFieldContext::ScXMLDataPilotFieldContext( ScXMLImport& rImport,
bSelectedPage = true;
}
break;
+ case XML_TOK_DATA_PILOT_FIELD_ATTR_IGNORE_SELECTED_PAGE:
+ {
+ bIgnoreSelectedPage = true;
+ }
+ break;
case XML_TOK_DATA_PILOT_FIELD_ATTR_USED_HIERARCHY :
{
nUsedHierarchy = sValue.toInt32();
@@ -1053,6 +1059,11 @@ ScXMLDataPilotFieldContext::ScXMLDataPilotFieldContext( ScXMLImport& rImport,
break;
}
}
+
+ // use the new extension elements
+ if (bIgnoreSelectedPage)
+ bSelectedPage = false;
+
if (bHasName)
{
pDim = new ScDPSaveDimension(sName, bDataLayout);
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 72fd4fbe84f0..695f84799136 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -1682,6 +1682,7 @@ const SvXMLTokenMap& ScXMLImport::GetDataPilotFieldAttrTokenMap()
{ XML_NAMESPACE_TABLE, XML_FUNCTION, XML_TOK_DATA_PILOT_FIELD_ATTR_FUNCTION },
{ XML_NAMESPACE_TABLE, XML_ORIENTATION, XML_TOK_DATA_PILOT_FIELD_ATTR_ORIENTATION },
{ XML_NAMESPACE_TABLE, XML_SELECTED_PAGE, XML_TOK_DATA_PILOT_FIELD_ATTR_SELECTED_PAGE },
+ { XML_NAMESPACE_LO_EXT, XML_IGNORE_SELECTED_PAGE, XML_TOK_DATA_PILOT_FIELD_ATTR_IGNORE_SELECTED_PAGE },
{ XML_NAMESPACE_TABLE, XML_USED_HIERARCHY, XML_TOK_DATA_PILOT_FIELD_ATTR_USED_HIERARCHY },
XML_TOKEN_MAP_END
};
diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx
index 53435a898aff..766ab01a6927 100644
--- a/sc/source/filter/xml/xmlimprt.hxx
+++ b/sc/source/filter/xml/xmlimprt.hxx
@@ -640,6 +640,7 @@ enum ScXMLDataPilotFieldAttrTokens
XML_TOK_DATA_PILOT_FIELD_ATTR_FUNCTION,
XML_TOK_DATA_PILOT_FIELD_ATTR_ORIENTATION,
XML_TOK_DATA_PILOT_FIELD_ATTR_SELECTED_PAGE,
+ XML_TOK_DATA_PILOT_FIELD_ATTR_IGNORE_SELECTED_PAGE,
XML_TOK_DATA_PILOT_FIELD_ATTR_USED_HIERARCHY
};