From 4a74b4a934207cfeecc083ab52d9f21dc8418742 Mon Sep 17 00:00:00 2001 From: Vikulov Dmitry Date: Thu, 24 Nov 2022 20:52:35 +0300 Subject: [PATCH] XlsxFormat changes part 1 --- .../Linux/DocxFormatLib/DocxFormatLib.pro | 19 +- .../Linux/DocxFormatLib/xlsx_format_logic.cpp | 62 +- OOXML/XlsxFormat/CalcChain/CalcChain.cpp | 180 ++ OOXML/XlsxFormat/CalcChain/CalcChain.h | 154 +- OOXML/XlsxFormat/Chart/Chart.cpp | 337 ++++ OOXML/XlsxFormat/Chart/Chart.h | 345 +--- OOXML/XlsxFormat/Chart/ChartColors.cpp | 147 ++ OOXML/XlsxFormat/Chart/ChartColors.h | 109 +- OOXML/XlsxFormat/Chart/ChartDrawing.cpp | 442 +++++ OOXML/XlsxFormat/Chart/ChartDrawing.h | 440 +---- OOXML/XlsxFormat/Chart/ChartStyle.cpp | 301 ++++ OOXML/XlsxFormat/Chart/ChartStyle.h | 278 +-- OOXML/XlsxFormat/Comments/Comments.cpp | 451 +++++ OOXML/XlsxFormat/Comments/Comments.h | 457 +---- .../XlsxFormat/Comments/ThreadedComments.cpp | 605 +++++++ OOXML/XlsxFormat/Comments/ThreadedComments.h | 620 +------ OOXML/XlsxFormat/Controls/Controls.cpp | 940 +++++----- OOXML/XlsxFormat/Controls/Controls.h | 195 +- OOXML/XlsxFormat/Drawing/CellAnchor.cpp | 274 +++ OOXML/XlsxFormat/Drawing/CellAnchor.h | 252 +-- OOXML/XlsxFormat/Drawing/Drawing.cpp | 253 +++ OOXML/XlsxFormat/Drawing/Drawing.h | 228 +-- OOXML/XlsxFormat/Drawing/FromTo.cpp | 151 ++ OOXML/XlsxFormat/Drawing/FromTo.h | 126 +- OOXML/XlsxFormat/Drawing/Pos.cpp | 81 + OOXML/XlsxFormat/Drawing/Pos.h | 48 +- .../ExternalLinks/ExternalLinkPath.cpp | 86 + .../ExternalLinks/ExternalLinkPath.h | 61 +- .../ExternalLinks/ExternalLinks.cpp | 1517 ++++++++++++++++ .../XlsxFormat/ExternalLinks/ExternalLinks.h | 1587 ++--------------- OOXML/XlsxFormat/FileFactory_Spreadsheet.cpp | 2 +- .../NamedSheetViews/NamedSheetViews.cpp | 34 + .../NamedSheetViews/NamedSheetViews.h | 50 +- OOXML/XlsxFormat/Ole/OleObjects.cpp | 455 +++++ OOXML/XlsxFormat/Ole/OleObjects.h | 446 +---- 35 files changed, 6612 insertions(+), 5121 deletions(-) create mode 100644 OOXML/XlsxFormat/CalcChain/CalcChain.cpp create mode 100644 OOXML/XlsxFormat/Chart/Chart.cpp create mode 100644 OOXML/XlsxFormat/Chart/ChartColors.cpp create mode 100644 OOXML/XlsxFormat/Chart/ChartDrawing.cpp create mode 100644 OOXML/XlsxFormat/Chart/ChartStyle.cpp create mode 100644 OOXML/XlsxFormat/Comments/Comments.cpp create mode 100644 OOXML/XlsxFormat/Comments/ThreadedComments.cpp create mode 100644 OOXML/XlsxFormat/Drawing/CellAnchor.cpp create mode 100644 OOXML/XlsxFormat/Drawing/Drawing.cpp create mode 100644 OOXML/XlsxFormat/Drawing/FromTo.cpp create mode 100644 OOXML/XlsxFormat/Drawing/Pos.cpp create mode 100644 OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.cpp create mode 100644 OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp create mode 100644 OOXML/XlsxFormat/Ole/OleObjects.cpp diff --git a/OOXML/Projects/Linux/DocxFormatLib/DocxFormatLib.pro b/OOXML/Projects/Linux/DocxFormatLib/DocxFormatLib.pro index 963ceac46f..c807b552d5 100644 --- a/OOXML/Projects/Linux/DocxFormatLib/DocxFormatLib.pro +++ b/OOXML/Projects/Linux/DocxFormatLib/DocxFormatLib.pro @@ -69,6 +69,11 @@ SOURCES += \ ../../../DocxFormat/Comments.cpp \ ../../../DocxFormat/Document.cpp \ ../../../DocxFormat/VmlDrawing.cpp \ + ../../../XlsxFormat/CalcChain/CalcChain.cpp \ + ../../../XlsxFormat/Chart/Chart.cpp \ + ../../../XlsxFormat/Chart/ChartColors.cpp \ + ../../../XlsxFormat/Chart/ChartDrawing.cpp \ + ../../../XlsxFormat/Chart/ChartStyle.cpp \ ../../../XlsxFormat/Chart/ChartSerialize.cpp \ ../../../XlsxFormat/Chart/ChartSerializeEx.cpp \ ../../../XlsxFormat/Common.cpp \ @@ -139,7 +144,16 @@ SOURCES += \ ../../../XlsxFormat/Slicer/Slicer.cpp \ ../../../XlsxFormat/NamedSheetViews/NamedSheetViews.cpp \ ../../../XlsxFormat/Pivot/PivotCacheDefinitionExt.cpp \ - ../../../XlsxFormat/Workbook/Workbook.cpp + ../../../XlsxFormat/Workbook/Workbook.cpp \ + ../../../XlsxFormat/Comments/Comments.cpp \ + ../../../XlsxFormat/Comments/ThreadedComments.cpp \ + ../../../XlsxFormat/Drawing/CellAnchor.cpp \ + ../../../XlsxFormat/Drawing/Drawing.cpp \ + ../../../XlsxFormat/Drawing/FromTo.cpp \ + ../../../XlsxFormat/Drawing/Pos.cpp \ + ../../../XlsxFormat/ExternalLinks/ExternalLinkPath.cpp \ + ../../../XlsxFormat/ExternalLinks/ExternalLinks.cpp \ + ../../../XlsxFormat/Ole/OleObjects.cpp } @@ -249,6 +263,9 @@ HEADERS += \ ../../../XlsxFormat/Chart/Chart.h \ ../../../XlsxFormat/Chart/ChartSerialize.h \ ../../../XlsxFormat/Chart/ChartSerializeEx.h \ + ../../../XlsxFormat/Chart/ChartColors.h \ + ../../../XlsxFormat/Chart/ChartDrawing.h \ + ../../../XlsxFormat/Chart/ChartStyle.h \ ../../../XlsxFormat/Comments/Comments.h \ ../../../XlsxFormat/Comments/ThreadedComments.h \ ../../../XlsxFormat/Drawing/CellAnchor.h \ diff --git a/OOXML/Projects/Linux/DocxFormatLib/xlsx_format_logic.cpp b/OOXML/Projects/Linux/DocxFormatLib/xlsx_format_logic.cpp index d368c5cc13..289ef2c14a 100644 --- a/OOXML/Projects/Linux/DocxFormatLib/xlsx_format_logic.cpp +++ b/OOXML/Projects/Linux/DocxFormatLib/xlsx_format_logic.cpp @@ -30,27 +30,41 @@ * */ -#include "../../../XlsxFormat//Chart/ChartSerialize.cpp" -#include "../../../XlsxFormat//Chart/ChartSerializeEx.cpp" -#include "../../../XlsxFormat//Common.cpp" -#include "../../../XlsxFormat//FileFactory_Spreadsheet.cpp" -#include "../../../XlsxFormat//Xlsx.cpp" -#include "../../../XlsxFormat//XlsxFlat.cpp" -#include "../../../XlsxFormat//FileTypes_Spreadsheet.cpp" -#include "../../../XlsxFormat//Worksheets/SheetData.cpp" -#include "../../../XlsxFormat//Worksheets/Worksheet.cpp" -#include "../../../XlsxFormat//Worksheets/ConditionalFormatting.cpp" -#include "../../../XlsxFormat//Worksheets/DataValidation.cpp" -#include "../../../XlsxFormat//Table/Tables.cpp" -#include "../../../XlsxFormat//Controls/Controls.cpp" -#include "../../../XlsxFormat//Styles/rPr.cpp" -#include "../../../XlsxFormat//Styles/Styles.cpp" -#include "../../../XlsxFormat//SharedStrings/Si.cpp" -#include "../../../XlsxFormat//SharedStrings/Text.cpp" -#include "../../../XlsxFormat//Pivot/Pivots.cpp" -#include "../../../XlsxFormat//Slicer/SlicerCache.cpp" -#include "../../../XlsxFormat//Slicer/SlicerCacheExt.cpp" -#include "../../../XlsxFormat//Slicer/Slicer.cpp" -#include "../../../XlsxFormat//NamedSheetViews/NamedSheetViews.cpp" -#include "../../../XlsxFormat//Pivot/PivotCacheDefinitionExt.cpp" -#include "../../../XlsxFormat//Workbook/Workbook.cpp" +#include "../../../XlsxFormat/CalcChain/CalcChain.cpp" +#include "../../../XlsxFormat/Chart/Chart.cpp" +#include "../../../XlsxFormat/Chart/ChartColors.cpp" +#include "../../../XlsxFormat/Chart/ChartDrawing.cpp" +#include "../../../XlsxFormat/Chart/ChartStyle.cpp" +#include "../../../XlsxFormat/Chart/ChartSerialize.cpp" +#include "../../../XlsxFormat/Chart/ChartSerializeEx.cpp" +#include "../../../XlsxFormat/Common.cpp" +#include "../../../XlsxFormat/FileFactory_Spreadsheet.cpp" +#include "../../../XlsxFormat/Xlsx.cpp" +#include "../../../XlsxFormat/XlsxFlat.cpp" +#include "../../../XlsxFormat/FileTypes_Spreadsheet.cpp" +#include "../../../XlsxFormat/Worksheets/SheetData.cpp" +#include "../../../XlsxFormat/Worksheets/Worksheet.cpp" +#include "../../../XlsxFormat/Worksheets/ConditionalFormatting.cpp" +#include "../../../XlsxFormat/Worksheets/DataValidation.cpp" +#include "../../../XlsxFormat/Table/Tables.cpp" +#include "../../../XlsxFormat/Controls/Controls.cpp" +#include "../../../XlsxFormat/Styles/rPr.cpp" +#include "../../../XlsxFormat/Styles/Styles.cpp" +#include "../../../XlsxFormat/SharedStrings/Si.cpp" +#include "../../../XlsxFormat/SharedStrings/Text.cpp" +#include "../../../XlsxFormat/Pivot/Pivots.cpp" +#include "../../../XlsxFormat/Slicer/SlicerCache.cpp" +#include "../../../XlsxFormat/Slicer/SlicerCacheExt.cpp" +#include "../../../XlsxFormat/Slicer/Slicer.cpp" +#include "../../../XlsxFormat/NamedSheetViews/NamedSheetViews.cpp" +#include "../../../XlsxFormat/Pivot/PivotCacheDefinitionExt.cpp" +#include "../../../XlsxFormat/Workbook/Workbook.cpp" +#include "../../../XlsxFormat/Comments/Comments.cpp" +#include "../../../XlsxFormat/Comments/ThreadedComments.cpp" +#include "../../../XlsxFormat/Drawing/CellAnchor.cpp" +#include "../../../XlsxFormat/Drawing/Drawing.cpp" +#include "../../../XlsxFormat/Drawing/FromTo.cpp" +#include "../../../XlsxFormat/Drawing/Pos.cpp" +#include "../../../XlsxFormat/ExternalLinks/ExternalLinkPath.cpp" +#include "../../../XlsxFormat/ExternalLinks/ExternalLinks.cpp" +#include "../../../XlsxFormat/Ole/OleObjects.cpp" diff --git a/OOXML/XlsxFormat/CalcChain/CalcChain.cpp b/OOXML/XlsxFormat/CalcChain/CalcChain.cpp new file mode 100644 index 0000000000..13b6812596 --- /dev/null +++ b/OOXML/XlsxFormat/CalcChain/CalcChain.cpp @@ -0,0 +1,180 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "CalcChain.h" + +namespace OOX +{ + namespace Spreadsheet + { + CCalcCell::CCalcCell() + { + } + CCalcCell::~CCalcCell() + { + } + void CCalcCell::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CCalcCell::toXML() const + { + return _T(""); + } + void CCalcCell::toXML(NSStringUtils::CStringBuilder& writer) const + { + } + void CCalcCell::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + EElementType CCalcCell::getType () const + { + return et_x_CalcCell; + } + void CCalcCell::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + // Читаем атрибуты + WritingElement_ReadAttributes_Start( oReader ) + + WritingElement_ReadAttributes_Read_if ( oReader, _T("a"), m_oArray ) + WritingElement_ReadAttributes_Read_if ( oReader, _T("i"), m_oSheetId ) + WritingElement_ReadAttributes_Read_if ( oReader, _T("l"), m_oDependencyLevel ) + WritingElement_ReadAttributes_Read_if ( oReader, _T("r"), m_oRef ) + WritingElement_ReadAttributes_Read_if ( oReader, _T("s"), m_oRef ) + WritingElement_ReadAttributes_Read_if ( oReader, _T("t"), m_oRef ) + + WritingElement_ReadAttributes_End( oReader ) + } + + CCalcChain::CCalcChain(OOX::Document* pMain) : OOX::File(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + + CXlsx* xlsx = dynamic_cast(File::m_pMainDocument); + if (xlsx && xlsx->m_bNeedCalcChain) xlsx->m_pCalcChain = this; + } + CCalcChain::CCalcChain(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::File(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + + CXlsx* xlsx = dynamic_cast(File::m_pMainDocument); + if (xlsx) + { + if(xlsx->m_bNeedCalcChain) + { + xlsx->m_pCalcChain = this; + read( oRootPath, oPath ); + } + } + else + { + read( oRootPath, oPath ); + } + } + CCalcChain::~CCalcChain() + { + ClearItems(); + } + void CCalcChain::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CCalcChain::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( _T("calcChain") == sName ) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + { + int nStylesDepth = oReader.GetDepth(); + while ( oReader.ReadNextSiblingNode( nStylesDepth ) ) + { + sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( _T("c") == sName ) + m_arrItems.push_back(new CCalcCell(oReader)); + } + } + } + } + void CCalcChain::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + } + const OOX::FileType CCalcChain::type() const + { + return OOX::Spreadsheet::FileTypes::CalcChain; + } + const CPath CCalcChain::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CCalcChain::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CCalcChain::GetReadPath() + { + return m_oReadPath; + } + void CCalcChain::ClearItems() + { + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] )delete m_arrItems[i]; + } + + m_arrItems.clear(); + } + void CCalcChain::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + } //Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/CalcChain/CalcChain.h b/OOXML/XlsxFormat/CalcChain/CalcChain.h index b55a56ea2d..20c91f505f 100644 --- a/OOXML/XlsxFormat/CalcChain/CalcChain.h +++ b/OOXML/XlsxFormat/CalcChain/CalcChain.h @@ -34,6 +34,7 @@ #define OOX_CALCCHAIN_FILE_INCLUDE_H_ #include "../CommonInclude.h" +#include "../Xlsx.h" namespace OOX { @@ -43,51 +44,19 @@ namespace OOX { public: WritingElement_AdditionConstructors(CCalcCell) - CCalcCell() - { - } - virtual ~CCalcCell() - { - } + CCalcCell(); + virtual ~CCalcCell(); - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return _T(""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } - - virtual EElementType getType () const - { - return et_x_CalcCell; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - // Читаем атрибуты - WritingElement_ReadAttributes_Start( oReader ) + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - WritingElement_ReadAttributes_Read_if ( oReader, _T("a"), m_oArray ) - WritingElement_ReadAttributes_Read_if ( oReader, _T("i"), m_oSheetId ) - WritingElement_ReadAttributes_Read_if ( oReader, _T("l"), m_oDependencyLevel ) - WritingElement_ReadAttributes_Read_if ( oReader, _T("r"), m_oRef ) - WritingElement_ReadAttributes_Read_if ( oReader, _T("s"), m_oRef ) - WritingElement_ReadAttributes_Read_if ( oReader, _T("t"), m_oRef ) - - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oArray; nullable m_oSheetId; @@ -96,111 +65,32 @@ namespace OOX nullable m_oChildChain; nullable m_oNewThread; }; + //необработанные child: // class CCalcChain : public OOX::File, public OOX::IFileContainer { public: - CCalcChain(OOX::Document* pMain) : OOX::File(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - - CXlsx* xlsx = dynamic_cast(File::m_pMainDocument); - if (xlsx && xlsx->m_bNeedCalcChain) xlsx->m_pCalcChain = this; - } - CCalcChain(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::File(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; + CCalcChain(OOX::Document* pMain); + CCalcChain(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CCalcChain(); - CXlsx* xlsx = dynamic_cast(File::m_pMainDocument); - if (xlsx) - { - if(xlsx->m_bNeedCalcChain) - { - xlsx->m_pCalcChain = this; - read( oRootPath, oPath ); - } - } - else - { - read( oRootPath, oPath ); - } - } - virtual ~CCalcChain() - { - ClearItems(); - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - XmlUtils::CXmlLiteReader oReader; + virtual const OOX::FileType type() const; - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; - if ( !oReader.ReadNextNode() ) - return; + const CPath& GetReadPath(); + void ClearItems(); - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( _T("calcChain") == sName ) - { - ReadAttributes( oReader ); - - if ( !oReader.IsEmptyNode() ) - { - int nStylesDepth = oReader.GetDepth(); - while ( oReader.ReadNextSiblingNode( nStylesDepth ) ) - { - sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( _T("c") == sName ) - m_arrItems.push_back(new CCalcCell(oReader)); - } - } - } - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - } - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::CalcChain; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } - void ClearItems() - { - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] )delete m_arrItems[i]; - } - - m_arrItems.clear(); - } private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); public: std::vector m_arrItems; diff --git a/OOXML/XlsxFormat/Chart/Chart.cpp b/OOXML/XlsxFormat/Chart/Chart.cpp new file mode 100644 index 0000000000..8c443d331a --- /dev/null +++ b/OOXML/XlsxFormat/Chart/Chart.cpp @@ -0,0 +1,337 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "Chart.h" + +namespace OOX +{ + namespace Spreadsheet + { + CChartFile::CChartFile(OOX::Document* pMain, bool bDocument) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bDocument = bDocument; + m_bSpreadsheets = (NULL != dynamic_cast(pMain)); + } + CChartFile::CChartFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bDocument = (NULL != dynamic_cast(pMain)); + m_bSpreadsheets = (NULL != dynamic_cast(pMain)); + read( oRootPath, oPath ); + } + CChartFile::~CChartFile() + { + } + void CChartFile::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CChartFile::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + m_oChartSpace.fromXML(oReader); + } + void CChartFile::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + std::wstring sPath = oPath.GetPath(); + write2(sPath); + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + IFileContainer::Write(oPath, oDirectory, oContent); + } + void CChartFile::write2(const std::wstring& sFilename) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L"\r\n"); + toXML(sXml); + NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); + } + void CChartFile::toXML(NSStringUtils::CStringBuilder& writer) const + { + m_oChartSpace.toXML(L"c:chartSpace", writer); + } + const OOX::FileType CChartFile::type() const + { + return OOX::FileTypes::Chart; + } + const CPath CChartFile::DefaultDirectory() const + { + if (m_bDocument) + return type().DefaultDirectory(); + else + return L"../" + type().DefaultDirectory(); + } + const CPath CChartFile::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CChartFile::GetReadPath() + { + return m_oReadPath; + } + void CChartFile::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CChartExFile::CChartExFile(OOX::Document* pMain, bool bDocument) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bDocument = bDocument; + m_bSpreadsheets = (NULL != dynamic_cast(pMain)); + } + CChartExFile::CChartExFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bDocument = (NULL != dynamic_cast(pMain)); + m_bSpreadsheets = (NULL != dynamic_cast(pMain)); + read( oRootPath, oPath ); + } + CChartExFile::~CChartExFile() + { + } + void CChartExFile::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CChartExFile::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + m_oChartSpace.fromXML(oReader); + } + void CChartExFile::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + std::wstring sPath = oPath.GetPath(); + write2(sPath); + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + IFileContainer::Write(oPath, oDirectory, oContent); + } + void CChartExFile::write2(const std::wstring& sFilename) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L"\r\n"); + toXML(sXml); + NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); + } + void CChartExFile::toXML(NSStringUtils::CStringBuilder& writer) const + { + m_oChartSpace.toXML(writer); + } + const OOX::FileType CChartExFile::type() const + { + return OOX::FileTypes::ChartEx; + } + const CPath CChartExFile::DefaultDirectory() const + { + if (m_bDocument) + return type().DefaultDirectory(); + else + return L"../" + type().DefaultDirectory(); + } + const CPath CChartExFile::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CChartExFile::GetReadPath() + { + return m_oReadPath; + } + void CChartExFile::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CChartStyleFile::CChartStyleFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ + { + //m_bSpreadsheets = true; + } + CChartStyleFile::CChartStyleFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ + { + //m_bSpreadsheets = true; + read( oRootPath, oPath ); + } + CChartStyleFile::~CChartStyleFile() + { + } + void CChartStyleFile::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CChartStyleFile::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + //IFileContainer::Read( oRootPath, oPath ); + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + m_oChartStyle.fromXML(oReader); + } + void CChartStyleFile::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + std::wstring sPath = oPath.GetPath(); + write2(sPath); + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + //IFileContainer::Write(oPath, oDirectory, oContent); + } + void CChartStyleFile::write2(const std::wstring& sFilename) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L"\r\n"); + toXML(sXml); + NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); + } + void CChartStyleFile::toXML(NSStringUtils::CStringBuilder& writer) const + { + m_oChartStyle.toXML(writer); + } + bool CChartStyleFile::isValid() const + { + return true; + } + const OOX::FileType CChartStyleFile::type() const + { + return OOX::FileTypes::ChartStyle; + } + const CPath CChartStyleFile::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CChartStyleFile::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CChartStyleFile::GetReadPath() + { + return m_oReadPath; + } + + CChartColorsFile::CChartColorsFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ + { + //m_bSpreadsheets = true; + } + CChartColorsFile::CChartColorsFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ + { + //m_bSpreadsheets = true; + read( oRootPath, oPath ); + } + CChartColorsFile::~CChartColorsFile() + { + } + void CChartColorsFile::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CChartColorsFile::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + //IFileContainer::Read( oRootPath, oPath ); + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + m_oColorStyle.fromXML(oReader); + } + void CChartColorsFile::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + std::wstring sPath = oPath.GetPath(); + write2(sPath); + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + //IFileContainer::Write(oPath, oDirectory, oContent); + } + void CChartColorsFile::write2(const std::wstring& sFilename) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L"\r\n"); + toXML(sXml); + NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); + } + void CChartColorsFile::toXML(NSStringUtils::CStringBuilder& writer) const + { + m_oColorStyle.toXML(writer); + } + bool CChartColorsFile::isValid() const + { + return true; + } + const OOX::FileType CChartColorsFile::type() const + { + return OOX::FileTypes::ChartColors; + } + const CPath CChartColorsFile::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CChartColorsFile::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CChartColorsFile::GetReadPath() + { + return m_oReadPath; + } + + } //Spreadsheet +} // namespace OOX + diff --git a/OOXML/XlsxFormat/Chart/Chart.h b/OOXML/XlsxFormat/Chart/Chart.h index c14019f199..b322a6d505 100644 --- a/OOXML/XlsxFormat/Chart/Chart.h +++ b/OOXML/XlsxFormat/Chart/Chart.h @@ -43,324 +43,117 @@ namespace OOX class CChartFile: public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CChartFile(OOX::Document* pMain, bool bDocument = true) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bDocument = bDocument; - m_bSpreadsheets = (NULL != dynamic_cast(pMain)); - } - CChartFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bDocument = (NULL != dynamic_cast(pMain)); - m_bSpreadsheets = (NULL != dynamic_cast(pMain)); - read( oRootPath, oPath ); - } - virtual ~CChartFile() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + CChartFile(OOX::Document* pMain, bool bDocument = true); + CChartFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CChartFile(); - XmlUtils::CXmlLiteReader oReader; + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; + virtual void write2(const std::wstring& sFilename) const; - if ( !oReader.ReadNextNode() ) - return; + void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual const OOX::FileType type() const; - m_oChartSpace.fromXML(oReader); - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - std::wstring sPath = oPath.GetPath(); - write2(sPath); - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - IFileContainer::Write(oPath, oDirectory, oContent); - } - virtual void write2(const std::wstring& sFilename) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L"\r\n"); - toXML(sXml); - NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); - } - void toXML(NSStringUtils::CStringBuilder& writer) const - { - m_oChartSpace.toXML(L"c:chartSpace", writer); - } - virtual const OOX::FileType type() const - { - return OOX::FileTypes::Chart; - } - virtual const CPath DefaultDirectory() const - { - if (m_bDocument) - return type().DefaultDirectory(); - else - return L"../" + type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; + + const CPath& GetReadPath(); CT_ChartSpace m_oChartSpace; + private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + bool m_bDocument = true; //for upper/lower level rels (defaultDirectory) }; + class CChartExFile : public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CChartExFile(OOX::Document* pMain, bool bDocument = true) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bDocument = bDocument; - m_bSpreadsheets = (NULL != dynamic_cast(pMain)); - } - CChartExFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bDocument = (NULL != dynamic_cast(pMain)); - m_bSpreadsheets = (NULL != dynamic_cast(pMain)); - read( oRootPath, oPath ); - } - virtual ~CChartExFile() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + CChartExFile(OOX::Document* pMain, bool bDocument = true); + CChartExFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CChartExFile(); - XmlUtils::CXmlLiteReader oReader; + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; + virtual void write2(const std::wstring& sFilename) const; - if ( !oReader.ReadNextNode() ) - return; + void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual const OOX::FileType type() const; - m_oChartSpace.fromXML(oReader); - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - std::wstring sPath = oPath.GetPath(); - write2(sPath); - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - IFileContainer::Write(oPath, oDirectory, oContent); - } - virtual void write2(const std::wstring& sFilename) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L"\r\n"); - toXML(sXml); - NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); - } - void toXML(NSStringUtils::CStringBuilder& writer) const - { - m_oChartSpace.toXML(writer); - } - virtual const OOX::FileType type() const - { - return OOX::FileTypes::ChartEx; - } - virtual const CPath DefaultDirectory() const - { - if (m_bDocument) - return type().DefaultDirectory(); - else - return L"../" + type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; + + const CPath& GetReadPath(); ChartEx::CChartSpace m_oChartSpace; + private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + bool m_bDocument = true; //for upper/lower level rels (defaultDirectory) }; + class CChartStyleFile : public OOX::FileGlobalEnumerated/*, public OOX::IFileContainer*/ { public: - CChartStyleFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ - { - //m_bSpreadsheets = true; - } - CChartStyleFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ - { - //m_bSpreadsheets = true; - read( oRootPath, oPath ); - } - virtual ~CChartStyleFile() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - //IFileContainer::Read( oRootPath, oPath ); + CChartStyleFile(OOX::Document* pMain); + CChartStyleFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CChartStyleFile(); - XmlUtils::CXmlLiteReader oReader; + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; + virtual void write2(const std::wstring& sFilename) const; - if ( !oReader.ReadNextNode() ) - return; + void toXML(NSStringUtils::CStringBuilder& writer) const; + bool isValid() const; - m_oChartStyle.fromXML(oReader); - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - std::wstring sPath = oPath.GetPath(); - write2(sPath); - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - //IFileContainer::Write(oPath, oDirectory, oContent); - } - virtual void write2(const std::wstring& sFilename) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L"\r\n"); - toXML(sXml); - NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); - } - void toXML(NSStringUtils::CStringBuilder& writer) const - { - m_oChartStyle.toXML(writer); - } - bool isValid() const - { - return true; - } - virtual const OOX::FileType type() const - { - return OOX::FileTypes::ChartStyle; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } + virtual const OOX::FileType type() const; + + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; + + const CPath& GetReadPath(); ChartEx::CChartStyle m_oChartStyle; + private: CPath m_oReadPath; }; + class CChartColorsFile: public OOX::FileGlobalEnumerated/*, public OOX::IFileContainer*/ { public: - CChartColorsFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ - { - //m_bSpreadsheets = true; - } - CChartColorsFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain)/*, OOX::IFileContainer(pMain)*/ - { - //m_bSpreadsheets = true; - read( oRootPath, oPath ); - } - virtual ~CChartColorsFile() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - //IFileContainer::Read( oRootPath, oPath ); + CChartColorsFile(OOX::Document* pMain); + CChartColorsFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); - XmlUtils::CXmlLiteReader oReader; + virtual ~CChartColorsFile(); - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); - if ( !oReader.ReadNextNode() ) - return; + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; + virtual void write2(const std::wstring& sFilename) const; - m_oColorStyle.fromXML(oReader); - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - std::wstring sPath = oPath.GetPath(); - write2(sPath); - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - //IFileContainer::Write(oPath, oDirectory, oContent); - } - virtual void write2(const std::wstring& sFilename) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L"\r\n"); - toXML(sXml); - NSFile::CFileBinary::SaveToFile(sFilename, sXml.GetData()); - } - void toXML(NSStringUtils::CStringBuilder& writer) const - { - m_oColorStyle.toXML(writer); - } - bool isValid() const - { - return true; - } - virtual const OOX::FileType type() const - { - return OOX::FileTypes::ChartColors; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } + void toXML(NSStringUtils::CStringBuilder& writer) const; + bool isValid() const; + + virtual const OOX::FileType type() const; + + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; + + const CPath& GetReadPath(); ChartEx::CColorStyle m_oColorStyle; diff --git a/OOXML/XlsxFormat/Chart/ChartColors.cpp b/OOXML/XlsxFormat/Chart/ChartColors.cpp new file mode 100644 index 0000000000..387ca83e7b --- /dev/null +++ b/OOXML/XlsxFormat/Chart/ChartColors.cpp @@ -0,0 +1,147 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "ChartColors.h" + +namespace OOX +{ + namespace Spreadsheet + { + namespace ChartEx + { + CVariation::CVariation() {} + void CVariation::fromXML(XmlUtils::CXmlNode& node) {} + void CVariation::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + if (oReader.IsEmptyNode()) + return; + + int nParentDepth = oReader.GetDepth(); + while (oReader.ReadNextSiblingNode(nParentDepth)) + { + m_arrItems.push_back(new PPTX::Logic::ColorModifier()); + m_arrItems.back()->fromXML(oReader); + } + } + void CVariation::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for (size_t i = 0; i < m_arrItems.size(); ++i) + { + if (m_arrItems[i]) + writer.WriteString(m_arrItems[i]->toXML()); + } + writer.WriteString(L""); + } + std::wstring CVariation::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData(); + } + EElementType CVariation::getType() + { + return et_cs_Variation; + } + + //------------------------------------------------------------------------------ + + CColorStyle::CColorStyle() {} + void CColorStyle::fromXML(XmlUtils::CXmlNode& node) {} + void CColorStyle::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if (oReader.IsEmptyNode()) + return; + + int nParentDepth = oReader.GetDepth(); + while (oReader.ReadNextSiblingNode(nParentDepth)) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if (L"extLst" == sName) + { + m_extLst = oReader; + } + else if (L"variation" == sName) + { + m_arrItems.push_back(new CVariation()); + m_arrItems.back()->fromXML(oReader); + } + else + { + PPTX::Logic::UniColor *pColor = new PPTX::Logic::UniColor(); + pColor->fromXML(oReader); + + m_arrItems.push_back(dynamic_cast(pColor)); + } + } + } + void CColorStyle::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for (size_t i = 0; i < m_arrItems.size(); ++i) + { + if (m_arrItems[i]) + writer.WriteString(m_arrItems[i]->toXML()); + } + writer.WriteString(L""); + } + std::wstring CColorStyle::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData(); + } + EElementType CColorStyle::getType() const + { + return et_cs_ColorStyle; + } + void CColorStyle::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start_No_NS(oReader) + WritingElement_ReadAttributes_Read_if(oReader, L"id", m_id) + WritingElement_ReadAttributes_Read_else_if(oReader, L"meth", m_meth) + WritingElement_ReadAttributes_End_No_NS(oReader) + } + + } + } +} + diff --git a/OOXML/XlsxFormat/Chart/ChartColors.h b/OOXML/XlsxFormat/Chart/ChartColors.h index 1a0f68dee0..160b054b3d 100644 --- a/OOXML/XlsxFormat/Chart/ChartColors.h +++ b/OOXML/XlsxFormat/Chart/ChartColors.h @@ -48,114 +48,35 @@ namespace ChartEx public: WritingElement_AdditionConstructors(CVariation) - CVariation() {} + CVariation(); - virtual void fromXML(XmlUtils::CXmlNode& node) {} - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - if (oReader.IsEmptyNode()) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nParentDepth = oReader.GetDepth(); - while (oReader.ReadNextSiblingNode(nParentDepth)) - { - m_arrItems.push_back(new PPTX::Logic::ColorModifier()); - m_arrItems.back()->fromXML(oReader); - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - for (size_t i = 0; i < m_arrItems.size(); ++i) - { - if (m_arrItems[i]) - writer.WriteString(m_arrItems[i]->toXML()); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData(); - } - virtual EElementType getType() - { - return et_cs_Variation; - } + virtual EElementType getType(); }; + //------------------------------------------------------------------------------ + class CColorStyle : public OOX::WritingElementWithChilds<> { public: - CColorStyle() {} + CColorStyle(); WritingElement_AdditionConstructors(CColorStyle) - virtual void fromXML(XmlUtils::CXmlNode& node) {} - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if (oReader.IsEmptyNode()) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - int nParentDepth = oReader.GetDepth(); - while (oReader.ReadNextSiblingNode(nParentDepth)) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if (L"extLst" == sName) - { - m_extLst = oReader; - } - else if (L"variation" == sName) - { - m_arrItems.push_back(new CVariation()); - m_arrItems.back()->fromXML(oReader); - } - else - { - PPTX::Logic::UniColor *pColor = new PPTX::Logic::UniColor(); - pColor->fromXML(oReader); - - m_arrItems.push_back(dynamic_cast(pColor)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + virtual EElementType getType() const; - for (size_t i = 0; i < m_arrItems.size(); ++i) - { - if (m_arrItems[i]) - writer.WriteString(m_arrItems[i]->toXML()); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData(); - } - virtual EElementType getType() const - { - return et_cs_ColorStyle; - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start_No_NS(oReader) - WritingElement_ReadAttributes_Read_if(oReader, L"id", m_id) - WritingElement_ReadAttributes_Read_else_if(oReader, L"meth", m_meth) - WritingElement_ReadAttributes_End_No_NS(oReader) - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); nullable_uint m_id; nullable_string m_meth; diff --git a/OOXML/XlsxFormat/Chart/ChartDrawing.cpp b/OOXML/XlsxFormat/Chart/ChartDrawing.cpp new file mode 100644 index 0000000000..a8bf3f0d46 --- /dev/null +++ b/OOXML/XlsxFormat/Chart/ChartDrawing.cpp @@ -0,0 +1,442 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2018 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "ChartDrawing.h" + +namespace OOX +{ + CFromTo::CFromTo() + { + } + CFromTo::~CFromTo() + { + } + void CFromTo::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CFromTo::toXML() const + { + return L""; + } + void CFromTo::toXML(NSStringUtils::CStringBuilder& writer) const + { + toXML2(writer, m_sName); + } + void CFromTo::toXML2(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const + { + writer.WriteString(L"<"); + writer.WriteString(sName); + writer.WriteString(L">"); + + if(m_oX.IsInit()) + { + WritingStringValDouble(L"cdr:x", m_oX.get()); + } + if(m_oY.IsInit()) + { + WritingStringValDouble(L"cdr:y", m_oY.get()); + } + writer.WriteString(L""); + } + void CFromTo::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + m_sName = oReader.GetName(); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( _T("x") == sName ) + m_oX = oReader.GetText2(); + else if ( _T("y") == sName ) + m_oY = oReader.GetText2(); + } + } + EElementType CFromTo::getType () const + { + return et_cdr_FromTo; + } + void CFromTo::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CExt::CExt() + { + } + CExt::~CExt() + { + } + void CExt::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CExt::toXML() const + { + return L""; + } + void CExt::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + if(m_oCx.IsInit()) + { + WritingStringValDouble(L"cdr:cx", m_oCx.get()); + } + if(m_oCy.IsInit()) + { + WritingStringValDouble(L"cdr:cy", m_oCy.get()); + } + writer.WriteString(L""); + } + void CExt::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( _T("cx") == sName ) + m_oCx = oReader.GetText2(); + else if ( _T("cy") == sName ) + m_oCy = oReader.GetText2(); + } + } + EElementType CExt::getType () const + { + return et_cdr_FromTo; + } + void CExt::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CSizeAnchor::CSizeAnchor() + { + } + CSizeAnchor::~CSizeAnchor() + { + } + void CSizeAnchor::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CRelSizeAnchor::CRelSizeAnchor() + { + } + CRelSizeAnchor::~CRelSizeAnchor() + { + } + void CRelSizeAnchor::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CRelSizeAnchor::toXML() const + { + return _T(""); + } + void CRelSizeAnchor::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + if (m_oFrom.IsInit()) + { + m_oFrom->m_sName = L"cdr:from"; + m_oFrom->toXML(writer); + } + if (m_oTo.IsInit()) + { + m_oTo->m_sName = L"cdr:to"; + m_oTo->toXML(writer); + } + if (m_oElement.IsInit()) + { + NSBinPptxRW::CXmlWriter xmlWriter; + xmlWriter.m_lDocType = XMLWRITER_DOC_TYPE_CHART_DRAWING; + + m_oElement->toXmlWriter(&xmlWriter); + + writer.WriteString(xmlWriter.GetXmlString()); + } + writer.WriteString(L""); + } + void CRelSizeAnchor::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"from" == sName ) + m_oFrom = oReader; + else if ( L"to" == sName ) + m_oTo = oReader; + else if (L"graphicFrame" == sName || L"pic" == sName || L"sp" == sName || L"grpSp" == sName || L"cxnSp" == sName || L"AlternateContent" == sName) + { + //Demo-2010WinterOlympics2.xlsx - AlternateContent + m_oElement = oReader; + + if (m_oElement.IsInit()) + { + //smart_ptr shape = m_oElement->GetElem().smart_dynamic_cast(); + //if (shape.IsInit()) + //{ + // m_nId = shape->nvSpPr.cNvPr.id; + // if (shape->nvSpPr.cNvPr.vmlSpid.IsInit()) + // { + // //ссылка на объект или шейп в vmlDrawing + // m_sVmlSpId = shape->nvSpPr.cNvPr.vmlSpid.get(); + // } + //} + //smart_ptr frame = m_oElement->GetElem().smart_dynamic_cast(); + //if ((frame.IsInit()) && (frame->vmlSpid.IsInit())) + //{ + // //ссылка на объект или шейп в vmlDrawing + // m_sVmlSpId = frame->vmlSpid.get(); + //} + } + } + } + } + EElementType CRelSizeAnchor::getType () const + { + return et_cdr_RelSizeAnchor; + } + + CAbsSizeAnchor::CAbsSizeAnchor() + { + } + CAbsSizeAnchor::~CAbsSizeAnchor() + { + } + void CAbsSizeAnchor::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CAbsSizeAnchor::toXML() const + { + return _T(""); + } + void CAbsSizeAnchor::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + if (m_oFrom.IsInit()) + { + m_oFrom->m_sName = L"cdr:from"; + m_oFrom->toXML(writer); + } + if (m_oExt.IsInit()) + { + m_oExt->toXML(writer); + } + if (m_oElement.IsInit()) + { + NSBinPptxRW::CXmlWriter xmlWriter; + xmlWriter.m_lDocType = XMLWRITER_DOC_TYPE_CHART_DRAWING; + + m_oElement->toXmlWriter(&xmlWriter); + + writer.WriteString(xmlWriter.GetXmlString()); + } + writer.WriteString(L""); + } + void CAbsSizeAnchor::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"from" == sName ) + m_oFrom = oReader; + else if ( L"ext" == sName ) + m_oExt = oReader; + else if (L"graphicFrame" == sName || L"pic" == sName || L"sp" == sName || L"grpSp" == sName || L"cxnSp" == sName || L"AlternateContent" == sName) + { + //Demo-2010WinterOlympics2.xlsx - AlternateContent + m_oElement = oReader; + + if (m_oElement.IsInit()) + { + //smart_ptr shape = m_oElement->GetElem().smart_dynamic_cast(); + //if (shape.IsInit()) + //{ + // m_nId = shape->nvSpPr.cNvPr.id; + // if (shape->nvSpPr.cNvPr.vmlSpid.IsInit()) + // { + // //ссылка на объект или шейп в vmlDrawing + // m_sVmlSpId = shape->nvSpPr.cNvPr.vmlSpid.get(); + // } + //} + //smart_ptr frame = m_oElement->GetElem().smart_dynamic_cast(); + //if ((frame.IsInit()) && (frame->vmlSpid.IsInit())) + //{ + // //ссылка на объект или шейп в vmlDrawing + // m_sVmlSpId = frame->vmlSpid.get(); + //} + } + } + } + } + EElementType CAbsSizeAnchor::getType () const + { + return et_cdr_AbsSizeAnchor; + } + + CChartDrawing::CChartDrawing(OOX::Document* pMain, bool bDocument) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bDocument = bDocument; + } + CChartDrawing::CChartDrawing(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bDocument = (NULL != dynamic_cast(pMain)); + read( oRootPath, oPath ); + } + CChartDrawing::~CChartDrawing() + { + } + void CChartDrawing::ClearItems() + { + } + void CChartDrawing::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CChartDrawing::fromXML(XmlUtils::CXmlNode &) + { + } + std::wstring CChartDrawing::toXML() const + { + return _T(""); + } + void CChartDrawing::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( L"userShapes" != sName ) return; + + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + { + int nCurDepth = oReader.GetDepth(); + while ( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + CSizeAnchor *pItem = NULL; + + if ( L"relSizeAnchor" == sName ) + { + pItem = new CRelSizeAnchor( oReader ); + } + else if ( L"absSizeAnchor" == sName ) + { + pItem = new CAbsSizeAnchor( oReader ); + } + if ( pItem ) + m_arrItems.push_back( pItem ); + } + } + } + void CChartDrawing::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L""); + + for (size_t i = 0; i < m_arrItems.size(); ++i) + { + m_arrItems[i]->toXML(sXml); + } + sXml.WriteString(L""); + + NSFile::CFileBinary::SaveToFile( oPath.GetPath(), sXml.GetData() ); + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + + IFileContainer::Write(oPath, oDirectory, oContent); + } + const OOX::FileType CChartDrawing::type() const + { + return OOX::FileTypes::ChartDrawing; + } + const CPath CChartDrawing::DefaultDirectory() const + { + //if (m_bDocument) return type().DefaultDirectory(); + //else + return L"../" + type().DefaultDirectory(); + } + const CPath CChartDrawing::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath CChartDrawing::GetReadPath() + { + return m_oReadPath; + } + void CChartDrawing::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + +} // namespace OOX diff --git a/OOXML/XlsxFormat/Chart/ChartDrawing.h b/OOXML/XlsxFormat/Chart/ChartDrawing.h index 734dc340e4..0877bfdaf3 100644 --- a/OOXML/XlsxFormat/Chart/ChartDrawing.h +++ b/OOXML/XlsxFormat/Chart/ChartDrawing.h @@ -42,250 +42,84 @@ namespace OOX { public: WritingElement_AdditionConstructors(CFromTo) - CFromTo() - { - } - virtual ~CFromTo() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - toXML2(writer, m_sName); - } - virtual void toXML2(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const - { - writer.WriteString(L"<"); - writer.WriteString(sName); - writer.WriteString(L">"); + CFromTo(); + virtual ~CFromTo(); - if(m_oX.IsInit()) - { - WritingStringValDouble(L"cdr:x", m_oX.get()); - } - if(m_oY.IsInit()) - { - WritingStringValDouble(L"cdr:y", m_oY.get()); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - m_sName = oReader.GetName(); - - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void toXML2(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( _T("x") == sName ) - m_oX = oReader.GetText2(); - else if ( _T("y") == sName ) - m_oY = oReader.GetText2(); - } - } - - virtual EElementType getType () const - { - return et_cdr_FromTo; - } + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: std::wstring m_sName; nullable_double m_oX; nullable_double m_oY; }; + class CExt : public WritingElement { public: WritingElement_AdditionConstructors(CExt) - CExt() - { - } - virtual ~CExt() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + CExt(); + virtual ~CExt(); - if(m_oCx.IsInit()) - { - WritingStringValDouble(L"cdr:cx", m_oCx.get()); - } - if(m_oCy.IsInit()) - { - WritingStringValDouble(L"cdr:cy", m_oCy.get()); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void fromXML(XmlUtils::CXmlNode& node); - if ( oReader.IsEmptyNode() ) - return; + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( _T("cx") == sName ) - m_oCx = oReader.GetText2(); - else if ( _T("cy") == sName ) - m_oCy = oReader.GetText2(); - } - } - - virtual EElementType getType () const - { - return et_cdr_FromTo; - } + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable_double m_oCx; nullable_double m_oCy; }; + class CSizeAnchor : public WritingElement { public: WritingElement_AdditionConstructors(CSizeAnchor) - CSizeAnchor() - { - } - virtual ~CSizeAnchor() - { - } + CSizeAnchor(); + virtual ~CSizeAnchor(); + virtual void fromXML(XmlUtils::CXmlNode& node) = 0; virtual std::wstring toXML() const = 0; virtual void toXML(NSStringUtils::CStringBuilder& writer) const = 0; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) = 0; virtual EElementType getType () const = 0; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + nullable m_oFrom; nullable m_oElement; }; + class CRelSizeAnchor : public CSizeAnchor { public: WritingElement_AdditionConstructors(CRelSizeAnchor) - CRelSizeAnchor() - { - } - virtual ~CRelSizeAnchor() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return _T(""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - if (m_oFrom.IsInit()) - { - m_oFrom->m_sName = L"cdr:from"; - m_oFrom->toXML(writer); - } - if (m_oTo.IsInit()) - { - m_oTo->m_sName = L"cdr:to"; - m_oTo->toXML(writer); - } - if (m_oElement.IsInit()) - { - NSBinPptxRW::CXmlWriter xmlWriter; - xmlWriter.m_lDocType = XMLWRITER_DOC_TYPE_CHART_DRAWING; - - m_oElement->toXmlWriter(&xmlWriter); - - writer.WriteString(xmlWriter.GetXmlString()); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CRelSizeAnchor(); + virtual ~CRelSizeAnchor(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; - if ( L"from" == sName ) - m_oFrom = oReader; - else if ( L"to" == sName ) - m_oTo = oReader; - else if (L"graphicFrame" == sName || L"pic" == sName || L"sp" == sName || L"grpSp" == sName || L"cxnSp" == sName || L"AlternateContent" == sName) - { - //Demo-2010WinterOlympics2.xlsx - AlternateContent - m_oElement = oReader; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if (m_oElement.IsInit()) - { - //smart_ptr shape = m_oElement->GetElem().smart_dynamic_cast(); - //if (shape.IsInit()) - //{ - // m_nId = shape->nvSpPr.cNvPr.id; - // if (shape->nvSpPr.cNvPr.vmlSpid.IsInit()) - // { - // //ссылка на объект или шейп в vmlDrawing - // m_sVmlSpId = shape->nvSpPr.cNvPr.vmlSpid.get(); - // } - //} - //smart_ptr frame = m_oElement->GetElem().smart_dynamic_cast(); - //if ((frame.IsInit()) && (frame->vmlSpid.IsInit())) - //{ - // //ссылка на объект или шейп в vmlDrawing - // m_sVmlSpId = frame->vmlSpid.get(); - //} - } - } - } - } - - virtual EElementType getType () const - { - return et_cdr_RelSizeAnchor; - } + virtual EElementType getType () const; nullable m_oTo; }; @@ -294,89 +128,17 @@ namespace OOX { public: WritingElement_AdditionConstructors(CAbsSizeAnchor) - CAbsSizeAnchor() - { - } - virtual ~CAbsSizeAnchor() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return _T(""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - if (m_oFrom.IsInit()) - { - m_oFrom->m_sName = L"cdr:from"; - m_oFrom->toXML(writer); - } - if (m_oExt.IsInit()) - { - m_oExt->toXML(writer); - } - if (m_oElement.IsInit()) - { - NSBinPptxRW::CXmlWriter xmlWriter; - xmlWriter.m_lDocType = XMLWRITER_DOC_TYPE_CHART_DRAWING; - - m_oElement->toXmlWriter(&xmlWriter); - - writer.WriteString(xmlWriter.GetXmlString()); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CAbsSizeAnchor(); + virtual ~CAbsSizeAnchor(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; - if ( L"from" == sName ) - m_oFrom = oReader; - else if ( L"ext" == sName ) - m_oExt = oReader; - else if (L"graphicFrame" == sName || L"pic" == sName || L"sp" == sName || L"grpSp" == sName || L"cxnSp" == sName || L"AlternateContent" == sName) - { - //Demo-2010WinterOlympics2.xlsx - AlternateContent - m_oElement = oReader; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if (m_oElement.IsInit()) - { - //smart_ptr shape = m_oElement->GetElem().smart_dynamic_cast(); - //if (shape.IsInit()) - //{ - // m_nId = shape->nvSpPr.cNvPr.id; - // if (shape->nvSpPr.cNvPr.vmlSpid.IsInit()) - // { - // //ссылка на объект или шейп в vmlDrawing - // m_sVmlSpId = shape->nvSpPr.cNvPr.vmlSpid.get(); - // } - //} - //smart_ptr frame = m_oElement->GetElem().smart_dynamic_cast(); - //if ((frame.IsInit()) && (frame->vmlSpid.IsInit())) - //{ - // //ссылка на объект или шейп в vmlDrawing - // m_sVmlSpId = frame->vmlSpid.get(); - //} - } - } - } - } - virtual EElementType getType () const - { - return et_cdr_AbsSizeAnchor; - } + virtual EElementType getType () const; nullable m_oExt; }; @@ -384,117 +146,27 @@ namespace OOX class CChartDrawing : public OOX::WritingElementWithChilds, public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CChartDrawing(OOX::Document* pMain, bool bDocument = true) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bDocument = bDocument; - } - CChartDrawing(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bDocument = (NULL != dynamic_cast(pMain)); - read( oRootPath, oPath ); - } - virtual ~CChartDrawing() - { - } - virtual void ClearItems() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - void fromXML(XmlUtils::CXmlNode &) - { - } - std::wstring toXML() const - { - return _T(""); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); - XmlUtils::CXmlLiteReader oReader; + CChartDrawing(OOX::Document* pMain, bool bDocument = true); + CChartDrawing(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CChartDrawing(); - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual void ClearItems(); - if ( !oReader.ReadNextNode() ) - return; + virtual void read(const CPath& oPath); + void fromXML(XmlUtils::CXmlNode &); + std::wstring toXML() const; + virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( L"userShapes" != sName ) return; - - ReadAttributes( oReader ); + virtual const OOX::FileType type() const; - if ( !oReader.IsEmptyNode() ) - { - int nCurDepth = oReader.GetDepth(); - while ( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - sName = XmlUtils::GetNameNoNS(oReader.GetName()); + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; - CSizeAnchor *pItem = NULL; + const CPath GetReadPath(); - if ( L"relSizeAnchor" == sName ) - { - pItem = new CRelSizeAnchor( oReader ); - } - else if ( L"absSizeAnchor" == sName ) - { - pItem = new CAbsSizeAnchor( oReader ); - } - if ( pItem ) - m_arrItems.push_back( pItem ); - } - } - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L""); - - for (size_t i = 0; i < m_arrItems.size(); ++i) - { - m_arrItems[i]->toXML(sXml); - } - sXml.WriteString(L""); - - NSFile::CFileBinary::SaveToFile( oPath.GetPath(), sXml.GetData() ); - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - - IFileContainer::Write(oPath, oDirectory, oContent); - } - virtual const OOX::FileType type() const - { - return OOX::FileTypes::ChartDrawing; - } - virtual const CPath DefaultDirectory() const - { - //if (m_bDocument) return type().DefaultDirectory(); - //else - return L"../" + type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath GetReadPath() - { - return m_oReadPath; - } - private: - - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + private: + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); bool m_bDocument = false; diff --git a/OOXML/XlsxFormat/Chart/ChartStyle.cpp b/OOXML/XlsxFormat/Chart/ChartStyle.cpp new file mode 100644 index 0000000000..cfde97b6a9 --- /dev/null +++ b/OOXML/XlsxFormat/Chart/ChartStyle.cpp @@ -0,0 +1,301 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "ChartStyle.h" + +namespace OOX +{ + namespace Spreadsheet + { + namespace ChartEx + { + CStyleEntry::CStyleEntry() {} + void CStyleEntry::fromXML(XmlUtils::CXmlNode& node) {} + void CStyleEntry::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + m_name = XmlUtils::GetNameNoNS(oReader.GetName()); + if (oReader.IsEmptyNode()) + return; + + int nParentDepth = oReader.GetDepth(); + while (oReader.ReadNextSiblingNode(nParentDepth)) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if (L"extLst" == sName) + { + m_extLst = oReader; + } + else if(L"bodyPr" == sName) + { + m_bodyPr = oReader; + } + else if (L"spPr" == sName) + { + m_spPr = oReader; + } + else if (L"defRPr" == sName) + { + m_defRPr = oReader; + } + else if (L"lineWidthScale" == sName) + { + m_lineWidthScale = oReader.GetText(); + } + else if (L"lnRef" == sName) + { + m_lnRef.fromXML(oReader); + } + else if (L"fillRef" == sName) + { + m_fillRef.fromXML(oReader); + } + else if (L"effectRef" == sName) + { + m_effectRef.fromXML(oReader); + } + else if (L"fontRef" == sName) + { + m_fontRef.fromXML(oReader); + } + } + } + void CStyleEntry::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + writer.WriteString(m_lnRef.toXML()); + writer.WriteString(m_fillRef.toXML()); + writer.WriteString(m_effectRef.toXML()); + writer.WriteString(m_fontRef.toXML()); + + if (m_spPr.IsInit()) + { + m_spPr->m_namespace = L"cs"; + writer.WriteString(m_spPr->toXML()); + } + if (m_defRPr.IsInit()) + { + m_defRPr->m_name = L"cs:defRPr"; + writer.WriteString(m_defRPr->toXML()); + } + if (m_bodyPr.IsInit()) + { + m_bodyPr->m_namespace = L"cs"; + writer.WriteString(m_bodyPr->toXML()); + } + writer.WriteString(L""); + } + std::wstring CStyleEntry::toXML() const { return L""; } + EElementType CStyleEntry::getType() + { + return et_cs_StyleEntry; + } + BYTE CStyleEntry::getTypeStyleEntry() + { + if (m_name == L"axisTitle") return 1; + else if (m_name == L"categoryAxis") return 2; + else if (m_name == L"chartArea") return 3; + else if (m_name == L"dataLabel") return 4; + else if (m_name == L"dataLabelCallout") return 5; + else if (m_name == L"dataPoint") return 6; + else if (m_name == L"dataPoint3D") return 7; + else if (m_name == L"dataPointLine") return 8; + else if (m_name == L"dataPointMarker") return 9; + else if (m_name == L"dataPointWireframe") return 10; + else if (m_name == L"dataTable") return 11; + else if (m_name == L"downBar") return 12; + else if (m_name == L"dropLine") return 13; + else if (m_name == L"errorBar") return 14; + else if (m_name == L"floor") return 15; + else if (m_name == L"gridlineMajor") return 16; + else if (m_name == L"gridlineMinor") return 17; + else if (m_name == L"hiLoLine") return 18; + else if (m_name == L"leaderLine") return 19; + else if (m_name == L"legend") return 20; + else if (m_name == L"plotArea") return 21; + else if (m_name == L"plotArea3D") return 22; + else if (m_name == L"seriesAxis") return 23; + else if (m_name == L"seriesLine") return 24; + else if (m_name == L"title") return 25; + else if (m_name == L"trendline") return 26; + else if (m_name == L"trendlineLabel") return 27; + else if (m_name == L"upBar") return 28; + else if (m_name == L"valueAxis") return 29; + else if (m_name == L"wall") return 30; + else + return 0; + } + void CStyleEntry::setTypeStyleEntry(BYTE type) + { + switch (type) + { + case 1: m_name = L"axisTitle"; break; + case 2: m_name = L"categoryAxis"; break; + case 3: m_name = L"chartArea"; break; + case 4: m_name = L"dataLabel"; break; + case 5: m_name = L"dataLabelCallout"; break; + case 6: m_name = L"dataPoint"; break; + case 7: m_name = L"dataPoint3D"; break; + case 8: m_name = L"dataPointLine"; break; + case 9: m_name = L"dataPointMarker"; break; + case 10: m_name = L"dataPointWireframe"; break; + case 11: m_name = L"dataTable"; break; + case 12: m_name = L"downBar"; break; + case 13: m_name = L"dropLine"; break; + case 14: m_name = L"errorBar"; break; + case 15: m_name = L"floor"; break; + case 16: m_name = L"gridlineMajor"; break; + case 17: m_name = L"gridlineMinor"; break; + case 18: m_name = L"hiLoLine"; break; + case 19: m_name = L"leaderLine"; break; + case 20: m_name = L"legend"; break; + case 21: m_name = L"plotArea"; break; + case 22: m_name = L"plotArea3D"; break; + case 23: m_name = L"seriesAxis"; break; + case 24: m_name = L"seriesLine"; break; + case 25: m_name = L"title"; break; + case 26: m_name = L"trendline"; break; + case 27: m_name = L"trendlineLabel"; break; + case 28: m_name = L"upBar"; break; + case 29: m_name = L"valueAxis"; break; + case 30: m_name = L"wall"; break; + default: + break; + } + } + + //------------------------------------------------------------------------------ + + CMarkerLayout::CMarkerLayout(){} + void CMarkerLayout::fromXML(XmlUtils::CXmlNode& node) {} + void CMarkerLayout::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + } + void CMarkerLayout::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()) + WritingStringNullableAttrInt(L"size", m_size, *m_size) + writer.WriteString(L"/>"); + } + std::wstring CMarkerLayout::toXML() const { return L""; } + EElementType CMarkerLayout::getType() + { + return et_cs_MarkerLayout; + } + void CMarkerLayout::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start_No_NS(oReader) + WritingElement_ReadAttributes_Read_if(oReader, L"symbol", m_symbol) + WritingElement_ReadAttributes_Read_else_if(oReader, L"size", m_size) + WritingElement_ReadAttributes_End_No_NS(oReader) + } + + //------------------------------------------------------------------------------ + + CChartStyle::CChartStyle() {} + CChartStyle::~CChartStyle() + { + for (size_t i = 0; i < m_arStyleEntries.size(); ++i) + if (m_arStyleEntries[i]) delete m_arStyleEntries[i]; + + m_arStyleEntries.clear(); + } + void CChartStyle::fromXML(XmlUtils::CXmlNode& node) {} + void CChartStyle::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if (oReader.IsEmptyNode()) + return; + + int nParentDepth = oReader.GetDepth(); + while (oReader.ReadNextSiblingNode(nParentDepth)) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if (L"extLst" == sName) + { + m_extLst = oReader; + } + else if (L"dataPointMarkerLayout" == sName) + { + m_dataPointMarkerLayout = oReader; + } + else + { + m_arStyleEntries.push_back(new CStyleEntry(oReader)); + } + } + } + void CChartStyle::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for (size_t i = 0; i < m_arStyleEntries.size(); ++i) + m_arStyleEntries[i]->toXML(writer); + + if (m_dataPointMarkerLayout.IsInit()) + { + m_dataPointMarkerLayout->toXML(writer); + } + if (m_extLst.IsInit()) + { + writer.WriteString(m_extLst->toXML()); + } + writer.WriteString(L""); + } + std::wstring CChartStyle::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData(); + } + EElementType CChartStyle::getType() const + { + return et_cs_ChartStyle; + } + void CChartStyle::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start_No_NS(oReader) + WritingElement_ReadAttributes_Read_if(oReader, L"id", m_id) + WritingElement_ReadAttributes_End_No_NS(oReader) + } + + } + } +} + diff --git a/OOXML/XlsxFormat/Chart/ChartStyle.h b/OOXML/XlsxFormat/Chart/ChartStyle.h index 11001ecc1a..00fc5ba418 100644 --- a/OOXML/XlsxFormat/Chart/ChartStyle.h +++ b/OOXML/XlsxFormat/Chart/ChartStyle.h @@ -51,161 +51,18 @@ namespace ChartEx public: WritingElement_AdditionConstructors(CStyleEntry) - CStyleEntry() {} + CStyleEntry(); - virtual void fromXML(XmlUtils::CXmlNode& node) {} - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - m_name = XmlUtils::GetNameNoNS(oReader.GetName()); - if (oReader.IsEmptyNode()) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nParentDepth = oReader.GetDepth(); - while (oReader.ReadNextSiblingNode(nParentDepth)) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if (L"extLst" == sName) - { - m_extLst = oReader; - } - else if(L"bodyPr" == sName) - { - m_bodyPr = oReader; - } - else if (L"spPr" == sName) - { - m_spPr = oReader; - } - else if (L"defRPr" == sName) - { - m_defRPr = oReader; - } - else if (L"lineWidthScale" == sName) - { - m_lineWidthScale = oReader.GetText(); - } - else if (L"lnRef" == sName) - { - m_lnRef.fromXML(oReader); - } - else if (L"fillRef" == sName) - { - m_fillRef.fromXML(oReader); - } - else if (L"effectRef" == sName) - { - m_effectRef.fromXML(oReader); - } - else if (L"fontRef" == sName) - { - m_fontRef.fromXML(oReader); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - - writer.WriteString(m_lnRef.toXML()); - writer.WriteString(m_fillRef.toXML()); - writer.WriteString(m_effectRef.toXML()); - writer.WriteString(m_fontRef.toXML()); - - if (m_spPr.IsInit()) - { - m_spPr->m_namespace = L"cs"; - writer.WriteString(m_spPr->toXML()); - } - if (m_defRPr.IsInit()) - { - m_defRPr->m_name = L"cs:defRPr"; - writer.WriteString(m_defRPr->toXML()); - } - if (m_bodyPr.IsInit()) - { - m_bodyPr->m_namespace = L"cs"; - writer.WriteString(m_bodyPr->toXML()); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const { return L""; } - virtual EElementType getType() - { - return et_cs_StyleEntry; - } - BYTE getTypeStyleEntry() - { - if (m_name == L"axisTitle") return 1; - else if (m_name == L"categoryAxis") return 2; - else if (m_name == L"chartArea") return 3; - else if (m_name == L"dataLabel") return 4; - else if (m_name == L"dataLabelCallout") return 5; - else if (m_name == L"dataPoint") return 6; - else if (m_name == L"dataPoint3D") return 7; - else if (m_name == L"dataPointLine") return 8; - else if (m_name == L"dataPointMarker") return 9; - else if (m_name == L"dataPointWireframe") return 10; - else if (m_name == L"dataTable") return 11; - else if (m_name == L"downBar") return 12; - else if (m_name == L"dropLine") return 13; - else if (m_name == L"errorBar") return 14; - else if (m_name == L"floor") return 15; - else if (m_name == L"gridlineMajor") return 16; - else if (m_name == L"gridlineMinor") return 17; - else if (m_name == L"hiLoLine") return 18; - else if (m_name == L"leaderLine") return 19; - else if (m_name == L"legend") return 20; - else if (m_name == L"plotArea") return 21; - else if (m_name == L"plotArea3D") return 22; - else if (m_name == L"seriesAxis") return 23; - else if (m_name == L"seriesLine") return 24; - else if (m_name == L"title") return 25; - else if (m_name == L"trendline") return 26; - else if (m_name == L"trendlineLabel") return 27; - else if (m_name == L"upBar") return 28; - else if (m_name == L"valueAxis") return 29; - else if (m_name == L"wall") return 30; - else - return 0; - } - void setTypeStyleEntry(BYTE type) - { - switch (type) - { - case 1: m_name = L"axisTitle"; break; - case 2: m_name = L"categoryAxis"; break; - case 3: m_name = L"chartArea"; break; - case 4: m_name = L"dataLabel"; break; - case 5: m_name = L"dataLabelCallout"; break; - case 6: m_name = L"dataPoint"; break; - case 7: m_name = L"dataPoint3D"; break; - case 8: m_name = L"dataPointLine"; break; - case 9: m_name = L"dataPointMarker"; break; - case 10: m_name = L"dataPointWireframe"; break; - case 11: m_name = L"dataTable"; break; - case 12: m_name = L"downBar"; break; - case 13: m_name = L"dropLine"; break; - case 14: m_name = L"errorBar"; break; - case 15: m_name = L"floor"; break; - case 16: m_name = L"gridlineMajor"; break; - case 17: m_name = L"gridlineMinor"; break; - case 18: m_name = L"hiLoLine"; break; - case 19: m_name = L"leaderLine"; break; - case 20: m_name = L"legend"; break; - case 21: m_name = L"plotArea"; break; - case 22: m_name = L"plotArea3D"; break; - case 23: m_name = L"seriesAxis"; break; - case 24: m_name = L"seriesLine"; break; - case 25: m_name = L"title"; break; - case 26: m_name = L"trendline"; break; - case 27: m_name = L"trendlineLabel"; break; - case 28: m_name = L"upBar"; break; - case 29: m_name = L"valueAxis"; break; - case 30: m_name = L"wall"; break; - default: - break; - } - } + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + + virtual std::wstring toXML() const; + virtual EElementType getType(); + + BYTE getTypeStyleEntry(); + void setTypeStyleEntry(BYTE type); nullable_double m_lineWidthScale; PPTX::Logic::StyleRef m_lnRef; @@ -218,42 +75,29 @@ namespace ChartEx nullable m_spPr; nullable m_extLst; + private: std::wstring m_name; }; - //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ class CMarkerLayout : public WritingElement { public: WritingElement_AdditionConstructors(CMarkerLayout) - CMarkerLayout(){} + CMarkerLayout(); + + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + + virtual std::wstring toXML() const; + virtual EElementType getType(); + + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& node) {} - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()) - WritingStringNullableAttrInt(L"size", m_size, *m_size) - writer.WriteString(L"/>"); - } - virtual std::wstring toXML() const { return L""; } - virtual EElementType getType() - { - return et_cs_MarkerLayout; - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start_No_NS(oReader) - WritingElement_ReadAttributes_Read_if(oReader, L"symbol", m_symbol) - WritingElement_ReadAttributes_Read_else_if(oReader, L"size", m_size) - WritingElement_ReadAttributes_End_No_NS(oReader) - } nullable m_symbol; nullable_uint m_size; }; @@ -262,79 +106,21 @@ namespace ChartEx class CChartStyle : public WritingElement { public: - CChartStyle() {} - virtual ~CChartStyle() - { - for (size_t i = 0; i < m_arStyleEntries.size(); ++i) - if (m_arStyleEntries[i]) delete m_arStyleEntries[i]; + CChartStyle(); + virtual ~CChartStyle(); - m_arStyleEntries.clear(); - } WritingElement_AdditionConstructors(CChartStyle) - virtual void fromXML(XmlUtils::CXmlNode& node) {} - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if (oReader.IsEmptyNode()) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; - int nParentDepth = oReader.GetDepth(); - while (oReader.ReadNextSiblingNode(nParentDepth)) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if (L"extLst" == sName) - { - m_extLst = oReader; - } - else if (L"dataPointMarkerLayout" == sName) - { - m_dataPointMarkerLayout = oReader; - } - else - { - m_arStyleEntries.push_back(new CStyleEntry(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - - for (size_t i = 0; i < m_arStyleEntries.size(); ++i) - m_arStyleEntries[i]->toXML(writer); + virtual std::wstring toXML() const; + virtual EElementType getType() const; + + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - if (m_dataPointMarkerLayout.IsInit()) - { - m_dataPointMarkerLayout->toXML(writer); - } - if (m_extLst.IsInit()) - { - writer.WriteString(m_extLst->toXML()); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData(); - } - virtual EElementType getType() const - { - return et_cs_ChartStyle; - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start_No_NS(oReader) - WritingElement_ReadAttributes_Read_if(oReader, L"id", m_id) - WritingElement_ReadAttributes_End_No_NS(oReader) - } nullable_uint m_id; std::vector m_arStyleEntries; nullable m_dataPointMarkerLayout; diff --git a/OOXML/XlsxFormat/Comments/Comments.cpp b/OOXML/XlsxFormat/Comments/Comments.cpp new file mode 100644 index 0000000000..a4f86fdb97 --- /dev/null +++ b/OOXML/XlsxFormat/Comments/Comments.cpp @@ -0,0 +1,451 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "Comments.h" + +namespace OOX +{ + namespace Spreadsheet + { + CCommentItem::CCommentItem() + { + m_pThreadedComment = NULL; + m_bThreadedCommentCopy = false; + } + bool CCommentItem::IsValid() + { + return m_nRow.IsInit() && m_nCol.IsInit() && m_sAuthor.IsInit(); + } + + CAuthors::CAuthors() + { + } + CAuthors::~CAuthors() + { + ClearItems(); + } + void CAuthors::ClearItems() + { + m_arrItems.clear(); + } + void CAuthors::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CAuthors::toXML() const + { + return L""; + } + void CAuthors::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + writer.WriteString(L""); + writer.WriteEncodeXmlString(m_arrItems[i]); + writer.WriteString(L""); + } + writer.WriteString(L""); + } + void CAuthors::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"author" == sName ) + { + m_arrItems.push_back(oReader.GetText3()); + } + } + } + void CAuthors::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if (ptr != nullptr) + { + for(auto author : ptr->m_arBrtCommentAuthor) + { + m_arrItems.push_back(static_cast(author.get())->author.value()); + } + } + } + EElementType CAuthors::getType () const + { + return et_x_Authors; + } + void CAuthors::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CComment::CComment() + { + } + CComment::~CComment() + { + } + void CComment::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CComment::toXML() const + { + return L""; + } + void CComment::toXML(NSStringUtils::CStringBuilder& writer) const + { + if(m_oRef.IsInit() && m_oAuthorId.IsInit() && m_oText.IsInit()) + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrInt(L"authorId", m_oAuthorId, m_oAuthorId->GetValue()); + WritingStringNullableAttrString(L"xr:uid", m_oUid, m_oUid->ToString()); + writer.WriteString(L">"); + + writer.WriteString(L""); + m_oText->toXML2(writer); + writer.WriteString(L""); + writer.WriteString(L""); + } + } + void CComment::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( _T("text") == sName ) + m_oText = oReader; + } + } + void CComment::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if (ptr != nullptr) + { + ReadAttributes(ptr->m_BrtBeginComment); + + auto ptrCommentText = static_cast(ptr->m_BrtCommentText.get()); + if(ptrCommentText != nullptr) + { + CSi* pItem = new CSi(); + pItem->fromBin(ptrCommentText->text, true); + //auto text = new CText(); + //text->fromBin(ptrCommentText->text.str.value()); + //pItem->m_arrItems.push_back(text); + m_oText = pItem; + } + } + } + EElementType CComment::getType () const + { + return et_x_Comment; + } + void CComment::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"ref", m_oRef ) + WritingElement_ReadAttributes_Read_if ( oReader, L"authorId", m_oAuthorId ) + WritingElement_ReadAttributes_Read_if ( oReader, L"xr:uid", m_oUid ) + WritingElement_ReadAttributes_End( oReader ) + } + void CComment::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if (ptr != nullptr) + { + m_oRef = ptr->rfx.toString(); + m_oAuthorId = ptr->iauthor; + m_oUid = ptr->guid; + } + } + + CCommentList::CCommentList() + { + } + CCommentList::~CCommentList() + { + } + void CCommentList::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CCommentList::toXML() const + { + return L""; + } + void CCommentList::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + + writer.WriteString(L""); + } + void CCommentList::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"comment" == sName ) + m_arrItems.push_back(new CComment(oReader)); + } + } + void CCommentList::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if (ptr != nullptr) + { + for(auto comment : ptr->m_arCOMMENT) + { + m_arrItems.push_back(new CComment(comment)); + } + } + } + EElementType CCommentList::getType () const + { + return et_x_CommentList; + } + void CCommentList::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CComments::CComments(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + + CXlsx* xlsx = dynamic_cast(pMain); + if ((xlsx) && (!xlsx->m_arWorksheets.empty())) + { + xlsx->m_arWorksheets.back()->m_pComments = this; + } + } + CComments::CComments(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + + CXlsx* xlsx = dynamic_cast(pMain); + if ((xlsx) && (!xlsx->m_arWorksheets.empty())) + { + xlsx->m_arWorksheets.back()->m_pComments = this; + } + read( oRootPath, oPath ); + } + CComments::~CComments() + { + } + void CComments::readBin(const CPath& oPath) + { + CXlsb* xlsb = dynamic_cast(File::m_pMainDocument); + if (xlsb) + { + XLSB::CommentsStreamPtr commentsStream(new XLSB::CommentsStream); + + xlsb->ReadBin(oPath, commentsStream.get()); + + if (commentsStream != nullptr) + { + auto ptr = static_cast(commentsStream->m_COMMENTS.get()); + if (ptr != nullptr) + { + if(ptr->m_COMMENTAUTHORS != nullptr) + m_oAuthors = ptr->m_COMMENTAUTHORS; + + if(ptr->m_COMMENTLIST != nullptr) + m_oCommentList = ptr->m_COMMENTLIST; + } + } + + //commentsStream.reset(); + } + } + void CComments::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CComments::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + + if( m_oReadPath.GetExtention() == _T(".bin")) + { + readBin(m_oReadPath); + return; + } + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( L"comments" == sName ) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + { + int nStylesDepth = oReader.GetDepth(); + while ( oReader.ReadNextSiblingNode( nStylesDepth ) ) + { + sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"authors" == sName ) + m_oAuthors = oReader; + else if ( L"commentList" == sName ) + m_oCommentList = oReader; + } + } + } + } + void CComments::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L"\ +"); + if(m_oAuthors.IsInit()) + m_oAuthors->toXML(sXml); + if(m_oCommentList.IsInit()) + m_oCommentList->toXML(sXml); + sXml.WriteString(L""); + + std::wstring sPath = oPath.GetPath(); + NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); + + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + IFileContainer::Write(oPath, oDirectory, oContent); + } + const OOX::FileType CComments::type() const + { + return OOX::Spreadsheet::FileTypes::Comments; + } + const CPath CComments::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CComments::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CComments::GetReadPath() + { + return m_oReadPath; + } + void CComments::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CLegacyDrawingWorksheet::CLegacyDrawingWorksheet() + { + } + CLegacyDrawingWorksheet::~CLegacyDrawingWorksheet() + { + } + void CLegacyDrawingWorksheet::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CLegacyDrawingWorksheet::toXML() const + { + return L""; + } + void CLegacyDrawingWorksheet::toXML(NSStringUtils::CStringBuilder& writer) const + { + if(m_oId.IsInit()) + { + writer.WriteString(L"ToString()); + writer.WriteString(L"\"/>"); + } + + } + void CLegacyDrawingWorksheet::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + void CLegacyDrawingWorksheet::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CLegacyDrawingWorksheet::getType () const + { + return et_x_LegacyDrawingWorksheet; + } + void CLegacyDrawingWorksheet::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start_No_NS( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"id", m_oId ) + WritingElement_ReadAttributes_End_No_NS( oReader ) + } + void CLegacyDrawingWorksheet::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + m_oId = ptr->stRelId.value.value(); + } + + } //Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/Comments/Comments.h b/OOXML/XlsxFormat/Comments/Comments.h index 344cb983e7..860196f2d2 100644 --- a/OOXML/XlsxFormat/Comments/Comments.h +++ b/OOXML/XlsxFormat/Comments/Comments.h @@ -81,187 +81,58 @@ namespace OOX nullable_string m_sGfxdata; nullable_bool m_bVisible; nullable_string m_sFillColorRgb; - CCommentItem() - { - m_pThreadedComment = NULL; - m_bThreadedCommentCopy = false; - } - bool IsValid() - { - return m_nRow.IsInit() && m_nCol.IsInit() && m_sAuthor.IsInit(); - } + + CCommentItem(); + bool IsValid(); }; + class CAuthors : public WritingElement { public: WritingElement_AdditionConstructors(CAuthors) WritingElement_XlsbConstructors(CAuthors) - CAuthors() - { - } - virtual ~CAuthors() - { - ClearItems(); - } - virtual void ClearItems() - { - m_arrItems.clear(); - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + CAuthors(); + virtual ~CAuthors(); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - writer.WriteString(L""); - writer.WriteEncodeXmlString(m_arrItems[i]); - writer.WriteString(L""); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void ClearItems(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + void fromBin(XLS::BaseObjectPtr& obj); - if ( L"author" == sName ) - { - m_arrItems.push_back(oReader.GetText3()); - } - } - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if (ptr != nullptr) - { - for(auto author : ptr->m_arBrtCommentAuthor) - { - m_arrItems.push_back(static_cast(author.get())->author.value()); - } - } - } - - virtual EElementType getType () const - { - return et_x_Authors; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: std::vector m_arrItems; }; + class CComment : public WritingElement { public: WritingElement_AdditionConstructors(CComment) WritingElement_XlsbConstructors(CComment) - CComment() - { - } - virtual ~CComment() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - if(m_oRef.IsInit() && m_oAuthorId.IsInit() && m_oText.IsInit()) - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrInt(L"authorId", m_oAuthorId, m_oAuthorId->GetValue()); - WritingStringNullableAttrString(L"xr:uid", m_oUid, m_oUid->ToString()); - writer.WriteString(L">"); - - writer.WriteString(L""); - m_oText->toXML2(writer); - writer.WriteString(L""); - writer.WriteString(L""); - } - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CComment(); + virtual ~CComment(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + void fromBin(XLS::BaseObjectPtr& obj); - if ( _T("text") == sName ) - m_oText = oReader; - } - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if (ptr != nullptr) - { - ReadAttributes(ptr->m_BrtBeginComment); - - auto ptrCommentText = static_cast(ptr->m_BrtCommentText.get()); - if(ptrCommentText != nullptr) - { - CSi* pItem = new CSi(); - pItem->fromBin(ptrCommentText->text, true); - //auto text = new CText(); - //text->fromBin(ptrCommentText->text.str.value()); - //pItem->m_arrItems.push_back(text); - m_oText = pItem; - } - } - } - - virtual EElementType getType () const - { - return et_x_Comment; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"ref", m_oRef ) - WritingElement_ReadAttributes_Read_if ( oReader, L"authorId", m_oAuthorId ) - WritingElement_ReadAttributes_Read_if ( oReader, L"xr:uid", m_oUid ) - WritingElement_ReadAttributes_End( oReader ) - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if (ptr != nullptr) - { - m_oRef = ptr->rfx.toString(); - m_oAuthorId = ptr->iauthor; - m_oUid = ptr->guid; - } - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + void ReadAttributes(XLS::BaseObjectPtr& obj); + public: nullable m_oRef; nullable m_oAuthorId; @@ -269,276 +140,78 @@ namespace OOX nullable m_oText; }; + class CCommentList : public WritingElementWithChilds { public: WritingElement_AdditionConstructors(CCommentList) WritingElement_XlsbConstructors(CCommentList) - CCommentList() - { - } - virtual ~CCommentList() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + CCommentList(); + virtual ~CCommentList(); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + void fromBin(XLS::BaseObjectPtr& obj); - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"comment" == sName ) - m_arrItems.push_back(new CComment(oReader)); - } - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if (ptr != nullptr) - { - for(auto comment : ptr->m_arCOMMENT) - { - m_arrItems.push_back(new CComment(comment)); - } - } - } - - virtual EElementType getType () const - { - return et_x_CommentList; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); }; + class CComments : public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CComments(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - - CXlsx* xlsx = dynamic_cast(pMain); - if ((xlsx) && (!xlsx->m_arWorksheets.empty())) - { - xlsx->m_arWorksheets.back()->m_pComments = this; - } - } - CComments(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - - CXlsx* xlsx = dynamic_cast(pMain); - if ((xlsx) && (!xlsx->m_arWorksheets.empty())) - { - xlsx->m_arWorksheets.back()->m_pComments = this; - } - read( oRootPath, oPath ); - } - virtual ~CComments() - { - } - void readBin(const CPath& oPath) - { - CXlsb* xlsb = dynamic_cast(File::m_pMainDocument); - if (xlsb) - { - XLSB::CommentsStreamPtr commentsStream(new XLSB::CommentsStream); + CComments(OOX::Document* pMain); + CComments(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CComments(); - xlsb->ReadBin(oPath, commentsStream.get()); + void readBin(const CPath& oPath); + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - if (commentsStream != nullptr) - { - auto ptr = static_cast(commentsStream->m_COMMENTS.get()); - if (ptr != nullptr) - { - if(ptr->m_COMMENTAUTHORS != nullptr) - m_oAuthors = ptr->m_COMMENTAUTHORS; + virtual const OOX::FileType type() const; - if(ptr->m_COMMENTLIST != nullptr) - m_oCommentList = ptr->m_COMMENTLIST; - } - } + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; - //commentsStream.reset(); - } - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + const CPath& GetReadPath(); - if( m_oReadPath.GetExtention() == _T(".bin")) - { - readBin(m_oReadPath); - return; - } - - XmlUtils::CXmlLiteReader oReader; - - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; - - if ( !oReader.ReadNextNode() ) - return; - - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( L"comments" == sName ) - { - ReadAttributes( oReader ); - - if ( !oReader.IsEmptyNode() ) - { - int nStylesDepth = oReader.GetDepth(); - while ( oReader.ReadNextSiblingNode( nStylesDepth ) ) - { - sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"authors" == sName ) - m_oAuthors = oReader; - else if ( L"commentList" == sName ) - m_oCommentList = oReader; - } - } - } - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L"\ -"); - if(m_oAuthors.IsInit()) - m_oAuthors->toXML(sXml); - if(m_oCommentList.IsInit()) - m_oCommentList->toXML(sXml); - sXml.WriteString(L""); - - std::wstring sPath = oPath.GetPath(); - NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); - - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - IFileContainer::Write(oPath, oDirectory, oContent); - } - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::Comments; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable m_oAuthors; nullable m_oCommentList; }; + class CLegacyDrawingWorksheet : public WritingElement { public: WritingElement_AdditionConstructors(CLegacyDrawingWorksheet) WritingElement_XlsbConstructors(CLegacyDrawingWorksheet) - CLegacyDrawingWorksheet() - { - } - virtual ~CLegacyDrawingWorksheet() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - if(m_oId.IsInit()) - { - writer.WriteString(L"ToString()); - writer.WriteString(L"\"/>"); - } - - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CLegacyDrawingWorksheet(); + virtual ~CLegacyDrawingWorksheet(); - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType () const - { - return et_x_LegacyDrawingWorksheet; - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + + void fromBin(XLS::BaseObjectPtr& obj); + + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start_No_NS( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"id", m_oId ) - WritingElement_ReadAttributes_End_No_NS( oReader ) - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - m_oId = ptr->stRelId.value.value(); - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + void ReadAttributes(XLS::BaseObjectPtr& obj); + public: nullable m_oId; }; diff --git a/OOXML/XlsxFormat/Comments/ThreadedComments.cpp b/OOXML/XlsxFormat/Comments/ThreadedComments.cpp new file mode 100644 index 0000000000..017918e2a3 --- /dev/null +++ b/OOXML/XlsxFormat/Comments/ThreadedComments.cpp @@ -0,0 +1,605 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "ThreadedComments.h" + +namespace OOX +{ + namespace Spreadsheet + { + CPerson::CPerson() + { + } + CPerson::~CPerson() + { + } + void CPerson::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CPerson::toXML() const + { + return L""; + } + void CPerson::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + } + void CPerson::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"extLst" == sName ) + { + extLst = oReader; + } + } + } + EElementType CPerson::getType () const + { + return et_x_ThreadedComment; + } + void CPerson::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"displayName", displayName ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"userId", userId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"providerId", providerId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"id", id ) + WritingElement_ReadAttributes_End( oReader ) + } + + CPersonList::CPersonList(OOX::Document* pMain) : OOX::File(pMain) + { + CXlsx* xlsx = dynamic_cast(pMain); + if ((xlsx) && xlsx->m_pWorkbook) + { + xlsx->m_pWorkbook->m_pPersonList = this; + } + } + CPersonList::CPersonList(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::File(pMain) + { + CXlsx* xlsx = dynamic_cast(pMain); + if ((xlsx) && xlsx->m_pWorkbook) + { + xlsx->m_pWorkbook->m_pPersonList = this; + } + read( oRootPath, oPath ); + } + CPersonList::~CPersonList() + { + ClearItems(); + } + void CPersonList::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CPersonList::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( L"personList" == sName ) + { + fromXML(oReader); + } + } + void CPersonList::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CPersonList::toXML() const + { + return L""; + } + void CPersonList::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + + writer.WriteString(L""); + } + void CPersonList::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"person" == sName ) + { + m_arrItems.push_back(new CPerson(oReader)); + } + } + } + EElementType CPersonList::getType () const + { + return et_x_PersonList; + } + void CPersonList::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L""); + + toXML(sXml); + + std::wstring sPath = oPath.GetPath(); + NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); + + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + } + const OOX::FileType CPersonList::type() const + { + return OOX::Spreadsheet::FileTypes::Persons; + } + const CPath CPersonList::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CPersonList::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CPersonList::GetReadPath() + { + return m_oReadPath; + } + const nullable> CPersonList::GetPersonList() + { + nullable> mapPersonList; + mapPersonList.Init(); + for (size_t i = 0; i < m_arrItems.size(); ++i) + { + if (m_arrItems[i]->id.IsInit()) + { + (*mapPersonList)[m_arrItems[i]->id.get()] = m_arrItems[i]; + } + } + return mapPersonList; + } + void CPersonList::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CThreadedCommentMention::CThreadedCommentMention() + { + } + CThreadedCommentMention::~CThreadedCommentMention() + { + } + void CThreadedCommentMention::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CThreadedCommentMention::toXML() const + { + return L""; + } + void CThreadedCommentMention::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrString(L"mentionId", mentionId, mentionId->ToString()); + WritingStringNullableAttrInt(L"startIndex", startIndex, startIndex->GetValue()); + WritingStringNullableAttrInt(L"length", length, length->GetValue()); + writer.WriteString(L"/>"); + } + void CThreadedCommentMention::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + EElementType CThreadedCommentMention::getType () const + { + return et_x_ThreadedCommentMention; + } + void CThreadedCommentMention::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"mentionpersonId", mentionpersonId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"mentionId", mentionId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"startIndex", startIndex ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"length", length ) + + WritingElement_ReadAttributes_End( oReader ) + } + + CThreadedCommentMentions::CThreadedCommentMentions() + { + } + CThreadedCommentMentions::~CThreadedCommentMentions() + { + } + void CThreadedCommentMentions::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CThreadedCommentMentions::toXML() const + { + return L""; + } + void CThreadedCommentMentions::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + writer.WriteString(L""); + } + void CThreadedCommentMentions::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( _T("mention") == sName ) + m_arrItems.push_back(new CThreadedCommentMention(oReader)); + } + } + EElementType CThreadedCommentMentions::getType () const + { + return et_x_ThreadedCommentMentions; + } + void CThreadedCommentMentions::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CThreadedComment::CThreadedComment() + { + } + CThreadedComment::~CThreadedComment() + { + } + void CThreadedComment::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CThreadedComment::toXML() const + { + return L""; + } + void CThreadedComment::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrString(L"personId", personId, personId->ToString()); + WritingStringNullableAttrString(L"id", id, id->ToString()); + WritingStringNullableAttrString(L"parentId", parentId, parentId->ToString()); + WritingStringNullableAttrBool2(L"done", done); + writer.WriteString(L">"); + + if(m_oText.IsInit()) + { + writer.WriteString(_T("")); + writer.WriteEncodeXmlStringHHHH(m_oText->m_sText); + //last '\n' not in format but excel add it + writer.WriteString(_T("\n"));//todo \r? + writer.WriteString(_T("")); + } + if(m_oMentions.IsInit()) + { + m_oMentions->toXML(writer); + } + writer.WriteString(L""); + } + void CThreadedComment::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( _T("text") == sName ) + m_oText = oReader; + else if ( _T("mentions") == sName ) + m_oMentions = oReader; + } + PrepareText(); + } + EElementType CThreadedComment::getType () const + { + return et_x_ThreadedComment; + } + bool CThreadedComment::operator < (const CThreadedComment& elem) const + { + if(dT.IsInit() && elem.dT.IsInit()) + { + return dT->GetValue() < elem.dT->GetValue(); + } + return true; + } + void CThreadedComment::PrepareText () + { + //last '\n' not in format but excel add it + if(m_oText.IsInit()) + { + if(m_oText->m_sText.length() > 0 && '\n' == m_oText->m_sText[m_oText->m_sText.length() - 1]) + m_oText->m_sText.pop_back(); + if(m_oText->m_sText.length() > 0 && '\r' == m_oText->m_sText[m_oText->m_sText.length() - 1]) + m_oText->m_sText.pop_back(); + } + } + bool CThreadedComment::Compare (CThreadedComment* val1, CThreadedComment* val2) + { + return *val1 < *val2; + } + void CThreadedComment::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"ref", ref ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"dT", dT ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"personId", personId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"id", id ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"parentId", parentId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"done", done ) + + + WritingElement_ReadAttributes_End( oReader ) + + //todo IsZero() is added to fix comments with zero ids(5.4.0)(bug 42947). Remove after few releases + if(id.IsInit() && id->IsZero()) + { + id = L"{" + XmlUtils::GenerateGuid() + L"}"; + } + } + + CThreadedComments::CThreadedComments(OOX::Document* pMain) : OOX::IFileContainer(pMain), OOX::FileGlobalEnumerated(pMain) + { + CXlsx* xlsx = dynamic_cast(pMain); + if ((xlsx) && (!xlsx->m_arWorksheets.empty())) + { + xlsx->m_arWorksheets.back()->m_pThreadedComments = this; + } + } + CThreadedComments::CThreadedComments(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::IFileContainer(pMain), OOX::FileGlobalEnumerated(pMain) + { + CXlsx* xlsx = dynamic_cast(pMain); + if ((xlsx) && (!xlsx->m_arWorksheets.empty())) + { + xlsx->m_arWorksheets.back()->m_pThreadedComments = this; + } + read( oRootPath, oPath ); + } + CThreadedComments::~CThreadedComments() + { + } + void CThreadedComments::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CThreadedComments::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( L"ThreadedComments" == sName ) + { + fromXML(oReader); + } + } + void CThreadedComments::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CThreadedComments::toXML() const + { + return L""; + } + void CThreadedComments::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + + writer.WriteString(L""); + } + void CThreadedComments::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"threadedComment" == sName ) + { + CThreadedComment* pThreadedComment = new CThreadedComment(oReader); + m_arrItems.push_back(pThreadedComment); + } + } + PrepareTopLevelComments(); + } + void CThreadedComments::PrepareTopLevelComments () + { + //find TopLevelComments + for(size_t i = 0; i < m_arrItems.size(); ++i) + { + CThreadedComment* pThreadedComment = m_arrItems[i]; + if(pThreadedComment->id.IsInit() && !pThreadedComment->parentId.IsInit()) + { + m_mapTopLevelThreadedComments[pThreadedComment->id->ToString()] = pThreadedComment; + } + } + //to remove reply duplicates + std::unordered_map mapUniqueue; + //add Replies + for(size_t i = 0; i < m_arrItems.size(); ++i) + { + CThreadedComment* pThreadedComment = m_arrItems[i]; + if(pThreadedComment->parentId.IsInit()) + { + //todo IsZero() is added to fix comments with zero ids(5.4.0)(bug 42947). Remove after few releases + if(pThreadedComment->parentId->IsZero() && pThreadedComment->ref.IsInit()) + { + if (pThreadedComment->dT.IsInit() && mapUniqueue.find(pThreadedComment->dT->ToString()) == mapUniqueue.end()) + { + mapUniqueue[pThreadedComment->dT->ToString()] = true; + //find parents by ref + for (std::unordered_map::const_iterator it = m_mapTopLevelThreadedComments.begin(); it != m_mapTopLevelThreadedComments.end(); ++it) + { + if (it->second->ref.IsInit() && pThreadedComment->ref.get() == it->second->ref.get()) + { + it->second->m_arrReplies.push_back(pThreadedComment); + break; + } + } + } + } + else + { + std::unordered_map::const_iterator oFind = m_mapTopLevelThreadedComments.find(pThreadedComment->parentId->ToString()); + if(m_mapTopLevelThreadedComments.end() != oFind) + { + oFind->second->m_arrReplies.push_back(pThreadedComment); + } + } + } + } + //sort Replies + for (std::unordered_map::const_iterator it = m_mapTopLevelThreadedComments.begin(); it != m_mapTopLevelThreadedComments.end(); ++it) + { + std::sort (it->second->m_arrReplies.begin(), it->second->m_arrReplies.end(), CThreadedComment::Compare); + } + } + EElementType CThreadedComments::getType () const + { + return et_x_ThreadedComments; + } + void CThreadedComments::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString(L""); + + toXML(sXml); + + std::wstring sPath = oPath.GetPath(); + NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); + + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + } + const OOX::FileType CThreadedComments::type() const + { + return OOX::Spreadsheet::FileTypes::ThreadedComments; + } + const CPath CThreadedComments::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CThreadedComments::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CThreadedComments::GetReadPath() + { + return m_oReadPath; + } + void CThreadedComments::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + } //Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/Comments/ThreadedComments.h b/OOXML/XlsxFormat/Comments/ThreadedComments.h index d6656682e0..11d5589985 100644 --- a/OOXML/XlsxFormat/Comments/ThreadedComments.h +++ b/OOXML/XlsxFormat/Comments/ThreadedComments.h @@ -47,62 +47,19 @@ namespace OOX { public: WritingElement_AdditionConstructors(CPerson) - CPerson() - { - } - virtual ~CPerson() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CPerson(); + virtual ~CPerson(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"extLst" == sName ) - { - extLst = oReader; - } - } - } - - virtual EElementType getType () const - { - return et_x_ThreadedComment; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"displayName", displayName ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"userId", userId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"providerId", providerId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"id", id ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable_string displayName; nullable_string userId; @@ -115,368 +72,98 @@ namespace OOX class CPersonList : public OOX::File, public WritingElementWithChilds { public: - CPersonList(OOX::Document* pMain) : OOX::File(pMain) - { - CXlsx* xlsx = dynamic_cast(pMain); - if ((xlsx) && xlsx->m_pWorkbook) - { - xlsx->m_pWorkbook->m_pPersonList = this; - } - } - CPersonList(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::File(pMain) - { - CXlsx* xlsx = dynamic_cast(pMain); - if ((xlsx) && xlsx->m_pWorkbook) - { - xlsx->m_pWorkbook->m_pPersonList = this; - } - read( oRootPath, oPath ); - } - virtual ~CPersonList() - { - ClearItems(); - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; + CPersonList(OOX::Document* pMain); + CPersonList(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CPersonList(); - XmlUtils::CXmlLiteReader oReader; + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + virtual EElementType getType () const; + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual const OOX::FileType type() const; - if ( !oReader.ReadNextNode() ) - return; + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( L"personList" == sName ) - { - fromXML(oReader); - } - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + const CPath& GetReadPath(); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); - - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"person" == sName ) - { - m_arrItems.push_back(new CPerson(oReader)); - } - } - } - virtual EElementType getType () const - { - return et_x_PersonList; - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L""); - - toXML(sXml); - - std::wstring sPath = oPath.GetPath(); - NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); - - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - } - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::Persons; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } public: - const nullable> GetPersonList() - { - nullable> mapPersonList; - mapPersonList.Init(); - for (size_t i = 0; i < m_arrItems.size(); ++i) - { - if (m_arrItems[i]->id.IsInit()) - { - (*mapPersonList)[m_arrItems[i]->id.get()] = m_arrItems[i]; - } - } - return mapPersonList; - } + const nullable> GetPersonList(); + private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); }; + class CThreadedCommentMention : public WritingElement { public: WritingElement_AdditionConstructors(CThreadedCommentMention) - CThreadedCommentMention() - { - } - virtual ~CThreadedCommentMention() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrString(L"mentionId", mentionId, mentionId->ToString()); - WritingStringNullableAttrInt(L"startIndex", startIndex, startIndex->GetValue()); - WritingStringNullableAttrInt(L"length", length, length->GetValue()); - writer.WriteString(L"/>"); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CThreadedCommentMention(); + virtual ~CThreadedCommentMention(); - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } - - virtual EElementType getType () const - { - return et_x_ThreadedCommentMention; - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"mentionpersonId", mentionpersonId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"mentionId", mentionId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"startIndex", startIndex ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"length", length ) + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - WritingElement_ReadAttributes_End( oReader ) - } public: nullable mentionpersonId; nullable mentionId; nullable startIndex; nullable length; }; + class CThreadedCommentMentions : public WritingElementWithChilds { public: WritingElement_AdditionConstructors(CThreadedCommentMentions) - CThreadedCommentMentions() - { - } - virtual ~CThreadedCommentMentions() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + CThreadedCommentMentions(); + virtual ~CThreadedCommentMentions(); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( _T("mention") == sName ) - m_arrItems.push_back(new CThreadedCommentMention(oReader)); - } - } - - virtual EElementType getType () const - { - return et_x_ThreadedCommentMentions; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); }; + class CThreadedComment : public WritingElement { public: WritingElement_AdditionConstructors(CThreadedComment) - CThreadedComment() - { - } - virtual ~CThreadedComment() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrString(L"personId", personId, personId->ToString()); - WritingStringNullableAttrString(L"id", id, id->ToString()); - WritingStringNullableAttrString(L"parentId", parentId, parentId->ToString()); - WritingStringNullableAttrBool2(L"done", done); - writer.WriteString(L">"); - - if(m_oText.IsInit()) - { - writer.WriteString(_T("")); - writer.WriteEncodeXmlStringHHHH(m_oText->m_sText); - //last '\n' not in format but excel add it - writer.WriteString(_T("\n"));//todo \r? - writer.WriteString(_T("")); - } - if(m_oMentions.IsInit()) - { - m_oMentions->toXML(writer); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CThreadedComment(); + virtual ~CThreadedComment(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + virtual EElementType getType () const; - if ( _T("text") == sName ) - m_oText = oReader; - else if ( _T("mentions") == sName ) - m_oMentions = oReader; - } - PrepareText(); - } + bool operator < (const CThreadedComment& elem) const; - virtual EElementType getType () const - { - return et_x_ThreadedComment; - } - bool operator < (const CThreadedComment& elem) const - { - if(dT.IsInit() && elem.dT.IsInit()) - { - return dT->GetValue() < elem.dT->GetValue(); - } - return true; - } - void PrepareText () - { - //last '\n' not in format but excel add it - if(m_oText.IsInit()) - { - if(m_oText->m_sText.length() > 0 && '\n' == m_oText->m_sText[m_oText->m_sText.length() - 1]) - m_oText->m_sText.pop_back(); - if(m_oText->m_sText.length() > 0 && '\r' == m_oText->m_sText[m_oText->m_sText.length() - 1]) - m_oText->m_sText.pop_back(); - } - } - static bool Compare (CThreadedComment* val1, CThreadedComment* val2) - { - return *val1 < *val2; - } + void PrepareText (); + + static bool Compare (CThreadedComment* val1, CThreadedComment* val2); private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"ref", ref ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"dT", dT ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"personId", personId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"id", id ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"parentId", parentId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"done", done ) + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - - WritingElement_ReadAttributes_End( oReader ) - - //todo IsZero() is added to fix comments with zero ids(5.4.0)(bug 42947). Remove after few releases - if(id.IsInit() && id->IsZero()) - { - id = L"{" + XmlUtils::GenerateGuid() + L"}"; - } - } public: nullable_string ref; nullable dT; @@ -490,191 +177,40 @@ namespace OOX std::vector m_arrReplies; }; + class CThreadedComments : public OOX::FileGlobalEnumerated, public OOX::IFileContainer, public WritingElementWithChilds { public: - CThreadedComments(OOX::Document* pMain) : OOX::IFileContainer(pMain), OOX::FileGlobalEnumerated(pMain) - { - CXlsx* xlsx = dynamic_cast(pMain); - if ((xlsx) && (!xlsx->m_arWorksheets.empty())) - { - xlsx->m_arWorksheets.back()->m_pThreadedComments = this; - } - } - CThreadedComments(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::IFileContainer(pMain), OOX::FileGlobalEnumerated(pMain) - { - CXlsx* xlsx = dynamic_cast(pMain); - if ((xlsx) && (!xlsx->m_arWorksheets.empty())) - { - xlsx->m_arWorksheets.back()->m_pThreadedComments = this; - } - read( oRootPath, oPath ); - } - virtual ~CThreadedComments() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + CThreadedComments(OOX::Document* pMain); + CThreadedComments(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CThreadedComments(); - XmlUtils::CXmlLiteReader oReader; + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + void PrepareTopLevelComments (); - if ( !oReader.ReadNextNode() ) - return; + virtual EElementType getType () const; + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; + virtual const OOX::FileType type() const; - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( L"ThreadedComments" == sName ) - { - fromXML(oReader); - } - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } + const CPath& GetReadPath(); - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); - - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"threadedComment" == sName ) - { - CThreadedComment* pThreadedComment = new CThreadedComment(oReader); - m_arrItems.push_back(pThreadedComment); - } - } - PrepareTopLevelComments(); - } - void PrepareTopLevelComments () - { - //find TopLevelComments - for(size_t i = 0; i < m_arrItems.size(); ++i) - { - CThreadedComment* pThreadedComment = m_arrItems[i]; - if(pThreadedComment->id.IsInit() && !pThreadedComment->parentId.IsInit()) - { - m_mapTopLevelThreadedComments[pThreadedComment->id->ToString()] = pThreadedComment; - } - } - //to remove reply duplicates - std::unordered_map mapUniqueue; - //add Replies - for(size_t i = 0; i < m_arrItems.size(); ++i) - { - CThreadedComment* pThreadedComment = m_arrItems[i]; - if(pThreadedComment->parentId.IsInit()) - { - //todo IsZero() is added to fix comments with zero ids(5.4.0)(bug 42947). Remove after few releases - if(pThreadedComment->parentId->IsZero() && pThreadedComment->ref.IsInit()) - { - if (pThreadedComment->dT.IsInit() && mapUniqueue.find(pThreadedComment->dT->ToString()) == mapUniqueue.end()) - { - mapUniqueue[pThreadedComment->dT->ToString()] = true; - //find parents by ref - for (std::unordered_map::const_iterator it = m_mapTopLevelThreadedComments.begin(); it != m_mapTopLevelThreadedComments.end(); ++it) - { - if (it->second->ref.IsInit() && pThreadedComment->ref.get() == it->second->ref.get()) - { - it->second->m_arrReplies.push_back(pThreadedComment); - break; - } - } - } - } - else - { - std::unordered_map::const_iterator oFind = m_mapTopLevelThreadedComments.find(pThreadedComment->parentId->ToString()); - if(m_mapTopLevelThreadedComments.end() != oFind) - { - oFind->second->m_arrReplies.push_back(pThreadedComment); - } - } - } - } - //sort Replies - for (std::unordered_map::const_iterator it = m_mapTopLevelThreadedComments.begin(); it != m_mapTopLevelThreadedComments.end(); ++it) - { - std::sort (it->second->m_arrReplies.begin(), it->second->m_arrReplies.end(), CThreadedComment::Compare); - } - } - virtual EElementType getType () const - { - return et_x_ThreadedComments; - } - - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString(L""); - - toXML(sXml); - - std::wstring sPath = oPath.GetPath(); - NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); - - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - } - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::ThreadedComments; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } public: std::unordered_map m_mapTopLevelThreadedComments; + private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); }; + } //Spreadsheet } // namespace OOX diff --git a/OOXML/XlsxFormat/Controls/Controls.cpp b/OOXML/XlsxFormat/Controls/Controls.cpp index ab398f3a98..5f919ff150 100644 --- a/OOXML/XlsxFormat/Controls/Controls.cpp +++ b/OOXML/XlsxFormat/Controls/Controls.cpp @@ -35,477 +35,571 @@ namespace OOX { -namespace Spreadsheet -{ - void CControlPr::toXML(NSStringUtils::CStringBuilder& writer) const + namespace Spreadsheet { - writer.WriteString(L"ToString()); - WritingStringNullableAttrBool2(L"locked", m_oLocked); - WritingStringNullableAttrEncodeXmlString(L"cf", m_oCf, *m_oCf); - WritingStringNullableAttrEncodeXmlString(L"macro", m_oMacro, *m_oMacro); - WritingStringNullableAttrEncodeXmlString(L"linkedCell", m_oLinkedCell, *m_oLinkedCell); - WritingStringNullableAttrEncodeXmlString(L"listFillRange", m_oListFillRange, *m_oListFillRange); - WritingStringNullableAttrBool2(L"recalcAlways", m_oRecalcAlways); - WritingStringNullableAttrBool2(L"print", m_oPrint); - WritingStringNullableAttrBool2(L"uiObject", m_oUiObject); - writer.WriteString(L">"); - if (m_oAnchor.IsInit()) + CControlPr::CControlPr() { - m_oAnchor->toXML(writer); } - writer.WriteString(L""); - } - void CControlPr::fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); - - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) + CControlPr::~CControlPr() { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"anchor" == sName ) - { - m_oAnchor = oReader; - } } - } - void CControlPr::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, (L"altText"), m_oAltText ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoFill"), m_oAutoFill ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoLine"), m_oAutoLine ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoPict"), m_oAutoPict ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"dde"), m_oDde ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"defaultSize"), m_oDefaultSize ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"disabled"), m_oDisabled ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"r:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"relationships:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"locked"), m_oLocked ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"macro"), m_oMacro ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"print"), m_oPrint ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"uiObject"), m_oUiObject ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"cf"), m_oCf ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"linkedCell"), m_oLinkedCell ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"listFillRange"), m_oListFillRange ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"recalcAlways"), m_oRecalcAlways ) - WritingElement_ReadAttributes_End( oReader ) - } - void CControl::toXML(NSStringUtils::CStringBuilder& writer) const - { - bool bAlternateContent = m_oControlPr.IsInit(); - if (bAlternateContent) + void CControlPr::fromXML(XmlUtils::CXmlNode& node) { - writer.WriteString(L""); - toXML2(writer, true); - writer.WriteString(L""); - toXML2(writer, false); - writer.WriteString(L""); } - else + std::wstring CControlPr::toXML() const { - toXML2(writer, true); + return L""; } - } - void CControl::toXML2(NSStringUtils::CStringBuilder& writer, bool bControlPr) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrEncodeXmlString(L"link", m_oLink, *m_oLink); - WritingStringNullableAttrString(L"oleUpdate", m_oOleUpdate, m_oOleUpdate->ToString()); - WritingStringNullableAttrBool2(L"autoLoad", m_oAutoLoad); - WritingStringNullableAttrInt(L"shapeId", m_oShapeId, m_oShapeId->GetValue()); - WritingStringNullableAttrString(L"r:id", m_oRid, m_oRid->ToString()); - if (bControlPr && m_oControlPr.IsInit()) + EElementType CControlPr::getType () const { + return et_x_ControlPr; + } + void CControlPr::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrBool2(L"locked", m_oLocked); + WritingStringNullableAttrEncodeXmlString(L"cf", m_oCf, *m_oCf); + WritingStringNullableAttrEncodeXmlString(L"macro", m_oMacro, *m_oMacro); + WritingStringNullableAttrEncodeXmlString(L"linkedCell", m_oLinkedCell, *m_oLinkedCell); + WritingStringNullableAttrEncodeXmlString(L"listFillRange", m_oListFillRange, *m_oListFillRange); + WritingStringNullableAttrBool2(L"recalcAlways", m_oRecalcAlways); + WritingStringNullableAttrBool2(L"print", m_oPrint); + WritingStringNullableAttrBool2(L"uiObject", m_oUiObject); writer.WriteString(L">"); - m_oControlPr->toXML(writer); - writer.WriteString(L""); - } - else - { - writer.WriteString(L"/>"); - } - } - // void toXMLPptx(NSStringUtils::CStringBuilder& writer, std::wstring qqq) - //{ - // std::wstring sRoot; - // writer.WriteString(L"GetValue()) - // writer.WriteString(L"Content"); - // else - // writer.WriteString(L"Icon"); - // writer.WriteString(L"\""); - // } - // WritingStringNullableAttrString(L"r:id", m_oRid, m_oRid->ToString()); - // WritingStringNullableAttrEncodeXmlString(L"ProgID", m_oProgId, m_oProgId.get()); - // WritingStringNullableAttrInt(L"ShapeID", m_oShapeId, m_oShapeId->GetValue()); - // writer.WriteString(L" Type=\"Embed\""); - // if(m_oOleUpdate.IsInit()) - // { - // writer.WriteString(L" UpdateMode=\""); - // if(SimpleTypes::Spreadsheet::Always == m_oOleUpdate->GetValue()) - // writer.WriteString(L"Always"); - // else - // writer.WriteString(L"OnCall"); - // writer.WriteString(L"\""); - // } - // if (m_OleObjectFile.IsInit()) - // { - // if (m_OleObjectFile->isMsPackage()) - // WritingStringAttrString(L"mspackage", L"true"); - - // WritingStringAttrEncodeXmlString(L"pathbin", m_OleObjectFile->filename().GetPath()); - // WritingStringAttrEncodeXmlString(L"pathimg", m_OleObjectFile->filename_cache().GetPath()); - // } - // writer.WriteString(L"/>"); - //} - void CControl::fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); - - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( (L"controlPr") == sName ) + if (m_oAnchor.IsInit()) { - m_oControlPr = oReader; + m_oAnchor->toXML(writer); + } + writer.WriteString(L""); + } + void CControlPr::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"anchor" == sName ) + { + m_oAnchor = oReader; + } } } - } - void CControl::fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - void CControl::ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - if(ptr->shapeId > 0) - m_oShapeId = ptr->shapeId; - - if(!ptr->strName.value().empty()) - m_oName = ptr->strName.value(); - - if(!ptr->strRelID.value.value().empty()) - m_oRid = ptr->strRelID.value.value(); - } - } - - void CControl::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, (L"progId"), m_oProgId ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"name"), m_oName ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"dvAspect"), m_oDvAspect ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"link"), m_oLink ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"oleUpdate"), m_oOleUpdate ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"autoLoad"), m_oAutoLoad ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"shapeId"), m_oShapeId ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"r:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"relationships:id"), m_oRid ) - WritingElement_ReadAttributes_End( oReader ) - } - CControls::~CControls() - { - } - void CControls::toXML(NSStringUtils::CStringBuilder& writer) const - { - if(m_mapControls.empty()) return; - - writer.WriteString(L""); - for(std::map>::const_iterator it = m_mapControls.begin(); it != m_mapControls.end(); it++) + void CControlPr::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { - if (it->second.IsInit()) - it->second->toXML(writer); + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, (L"altText"), m_oAltText ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoFill"), m_oAutoFill ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoLine"), m_oAutoLine ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoPict"), m_oAutoPict ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"dde"), m_oDde ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"defaultSize"), m_oDefaultSize ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"disabled"), m_oDisabled ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"r:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"relationships:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"locked"), m_oLocked ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"macro"), m_oMacro ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"print"), m_oPrint ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"uiObject"), m_oUiObject ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"cf"), m_oCf ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"linkedCell"), m_oLinkedCell ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"listFillRange"), m_oListFillRange ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"recalcAlways"), m_oRecalcAlways ) + WritingElement_ReadAttributes_End( oReader ) } - writer.WriteString(L""); - } - void CControls::read(XmlUtils::CXmlLiteReader& oReader, bool bOldVersion) - { - ReadAttributes( oReader ); - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) + CControl::CControl() { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"control" == sName ) + } + CControl::~CControl() + { + } + void CControl::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CControl::toXML() const + { + return _T(""); + } + EElementType CControl::getType () const + { + return et_x_Control; + } + void CControl::toXML(NSStringUtils::CStringBuilder& writer) const + { + bool bAlternateContent = m_oControlPr.IsInit(); + if (bAlternateContent) { - nullable pControl(oReader); + writer.WriteString(L""); + toXML2(writer, true); + writer.WriteString(L""); + toXML2(writer, false); + writer.WriteString(L""); + } + else + { + toXML2(writer, true); + } + } + void CControl::toXML2(NSStringUtils::CStringBuilder& writer, bool bControlPr) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrEncodeXmlString(L"link", m_oLink, *m_oLink); + WritingStringNullableAttrString(L"oleUpdate", m_oOleUpdate, m_oOleUpdate->ToString()); + WritingStringNullableAttrBool2(L"autoLoad", m_oAutoLoad); + WritingStringNullableAttrInt(L"shapeId", m_oShapeId, m_oShapeId->GetValue()); + WritingStringNullableAttrString(L"r:id", m_oRid, m_oRid->ToString()); + if (bControlPr && m_oControlPr.IsInit()) + { + writer.WriteString(L">"); + m_oControlPr->toXML(writer); + writer.WriteString(L""); + } + else + { + writer.WriteString(L"/>"); + } + } + void CControl::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); - if(pControl->m_oShapeId.IsInit()) + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( (L"controlPr") == sName ) { - if (bOldVersion) + m_oControlPr = oReader; + } + } + } + void CControl::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + void CControl::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + if(ptr->shapeId > 0) + m_oShapeId = ptr->shapeId; + + if(!ptr->strName.value().empty()) + m_oName = ptr->strName.value(); + + if(!ptr->strRelID.value.value().empty()) + m_oRid = ptr->strRelID.value.value(); + } + } + void CControl::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, (L"progId"), m_oProgId ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"name"), m_oName ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"dvAspect"), m_oDvAspect ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"link"), m_oLink ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"oleUpdate"), m_oOleUpdate ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"autoLoad"), m_oAutoLoad ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"shapeId"), m_oShapeId ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"r:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"relationships:id"), m_oRid ) + WritingElement_ReadAttributes_End( oReader ) + } + + CControls::CControls() + { + } + void CControls::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CControls::toXML() const + { + return _T(""); + } + EElementType CControls::getType () const + { + return et_x_Controls; + } + void CControls::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + CControls::~CControls() + { + } + void CControls::toXML(NSStringUtils::CStringBuilder& writer) const + { + if(m_mapControls.empty()) return; + + writer.WriteString(L""); + for(std::map>::const_iterator it = m_mapControls.begin(); it != m_mapControls.end(); it++) + { + if (it->second.IsInit()) + it->second->toXML(writer); + } + writer.WriteString(L""); + } + void CControls::read(XmlUtils::CXmlLiteReader& oReader, bool bOldVersion) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"control" == sName ) + { + nullable pControl(oReader); + + if(pControl->m_oShapeId.IsInit()) { - m_mapControlsAlternative[pControl->m_oShapeId->GetValue()] = pControl; + if (bOldVersion) + { + m_mapControlsAlternative[pControl->m_oShapeId->GetValue()] = pControl; + } + else + { + m_mapControls[pControl->m_oShapeId->GetValue()] = pControl; + } } - else + } + else if ( L"AlternateContent" == sName ) + { + int nSubDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nSubDepth ) ) + { + std::wstring sSubName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( L"Choice" == sSubName ) + { + read(oReader, false); + } + else if ( L"Fallback" == sSubName ) + { + read(oReader, true); + } + } + } + } + } + void CControls::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + read(oReader, false); + } + void CControls::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + for(auto &activeX: ptr->m_arBrtActiveX) + { + nullable pControl(activeX); + + if(pControl->m_oShapeId.IsInit()) { m_mapControls[pControl->m_oShapeId->GetValue()] = pControl; } } } - else if ( L"AlternateContent" == sName ) + + } + + CListItem::CListItem() {} + CListItem::~CListItem() {} + void CListItem::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CListItem::toXML() const + { + return L""; + } + EElementType CListItem::getType () const + { + return et_x_ListItem; + } + void CListItem::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + } + void CListItem::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + void CListItem::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, (L"val"), m_oVal ) + WritingElement_ReadAttributes_End( oReader ) + } + + CListItems::CListItems() {} + CListItems::~CListItems() {} + void CListItems::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CListItems::toXML() const + { + return L""; + } + EElementType CListItems::getType () const + { + return et_x_ListItems; + } + void CListItems::toXML(NSStringUtils::CStringBuilder& writer) const + { + if(m_arrItems.empty()) return; + + writer.WriteString(L""); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) { - int nSubDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nSubDepth ) ) + if ( m_arrItems[i].IsInit() ) { - std::wstring sSubName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( L"Choice" == sSubName ) - { - read(oReader, false); - } - else if ( L"Fallback" == sSubName ) - { - read(oReader, true); - } + m_arrItems[i]->toXML(writer); } } - } - } - void CControls::fromXML(XmlUtils::CXmlLiteReader& oReader) - { - read(oReader, false); - } - void CControls::fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - for(auto &activeX: ptr->m_arBrtActiveX) - { - nullable pControl(activeX); - - if(pControl->m_oShapeId.IsInit()) - { - m_mapControls[pControl->m_oShapeId->GetValue()] = pControl; - } - } - } - - } -//-------------------------------------------------------------------------------------------------------------- - void CListItem::toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - } - void CListItem::fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } - void CListItem::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, (L"val"), m_oVal ) - WritingElement_ReadAttributes_End( oReader ) - } -//----------------------------------------------------------------------------------------------------------------- - void CListItems::toXML(NSStringUtils::CStringBuilder& writer) const - { - if(m_arrItems.empty()) return; - - writer.WriteString(L""); - - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i].IsInit() ) - { - m_arrItems[i]->toXML(writer); - } - } - if(m_oExtLst.IsInit()) - { - writer.WriteString(m_oExtLst->toXMLWithNS(L"")); - } - writer.WriteString(L""); - } - void CListItems::fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); - - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if (L"item" == sName) + if(m_oExtLst.IsInit()) { - nullable oItem(oReader); - - if (oItem.IsInit()) - m_arrItems.push_back(oItem); + writer.WriteString(m_oExtLst->toXMLWithNS(L"")); } - else if ( L"extLst" == sName ) - m_oExtLst = oReader; + writer.WriteString(L""); } - } -//----------------------------------------------------------------------------------------------------------------- - void CFormControlPr::toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrString(L"checked", m_oChecked, m_oChecked->ToString()); - WritingStringNullableAttrString(L"dropStyle", m_oDropStyle, m_oDropStyle->ToString()); - WritingStringNullableAttrInt(L"dx", m_oDx, m_oDx->GetValue()); - WritingStringNullableAttrInt(L"dropLines", m_oDropLines, m_oDropLines->GetValue()); - WritingStringNullableAttrInt(L"inc", m_oInc, m_oInc->GetValue()); - WritingStringNullableAttrInt(L"min", m_oMin, m_oMin->GetValue()); - WritingStringNullableAttrInt(L"max", m_oMax, m_oMax->GetValue()); - WritingStringNullableAttrInt(L"page", m_oPage, m_oPage->GetValue()); - WritingStringNullableAttrInt(L"sel", m_oSel, m_oSel->GetValue()); - WritingStringNullableAttrString(L"selType", m_oSelType, m_oSelType->ToString()); - WritingStringNullableAttrString(L"textHAlign", m_oTextHAlign, m_oTextHAlign->ToString()); - WritingStringNullableAttrString(L"textVAlign", m_oTextVAlign, m_oTextVAlign->ToString()); - WritingStringNullableAttrInt(L"val", m_oVal, *m_oVal); - WritingStringNullableAttrInt(L"widthMin", m_oWidthMin, m_oWidthMin->GetValue()); - WritingStringNullableAttrString(L"editVal", m_oEditVal, m_oEditVal->ToString()); - WritingStringNullableAttrEncodeXmlString(L"multiSel", m_oMultiSel, *m_oMultiSel); - WritingStringNullableAttrEncodeXmlString(L"fmlaGroup", m_oFmlaGroup, *m_oFmlaGroup); - WritingStringNullableAttrEncodeXmlString(L"fmlaLink", m_oFmlaLink, *m_oFmlaLink); - WritingStringNullableAttrEncodeXmlString(L"fmlaRange", m_oFmlaRange, *m_oFmlaRange); - WritingStringNullableAttrEncodeXmlString(L"fmlaTxbx", m_oFmlaTxbx, *m_oFmlaTxbx); - WritingStringNullableAttrBool2(L"colored", m_oColored); - WritingStringNullableAttrBool2(L"horiz", m_oHoriz); - WritingStringNullableAttrBool2(L"justLastX", m_oJustLastX); - WritingStringNullableAttrBool2(L"lockText", m_oLockText); - WritingStringNullableAttrBool2(L"noThreeD", m_oNoThreeD); - WritingStringNullableAttrBool2(L"noThreeD2", m_oNoThreeD2); - WritingStringNullableAttrBool2(L"multiLine", m_oMultiLine); - WritingStringNullableAttrBool2(L"verticalBar", m_oVerticalBar); - WritingStringNullableAttrBool2(L"passwordEdit", m_oPasswordEdit); - - writer.WriteString(L">"); - - if(m_oItemLst.IsInit()) + void CListItems::fromXML(XmlUtils::CXmlLiteReader& oReader) { - m_oItemLst->toXML(writer); + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if (L"item" == sName) + { + nullable oItem(oReader); + + if (oItem.IsInit()) + m_arrItems.push_back(oItem); + } + else if ( L"extLst" == sName ) + m_oExtLst = oReader; + } } - if(m_oExtLst.IsInit()) + + CFormControlPr::CFormControlPr() { - writer.WriteString(m_oExtLst->toXMLWithNS(L"")); } - writer.WriteString(L""); - } - void CFormControlPr::fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); - - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) + CFormControlPr::~CFormControlPr() { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( L"itemLst" == sName ) - m_oItemLst = oReader; - else if ( L"extLst" == sName ) - m_oExtLst = oReader; } - } - void CFormControlPr::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"dx", m_oDx ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"dropStyle", m_oDropStyle ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"dropLines", m_oDropLines ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"objectType", m_oObjectType ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"checked", m_oChecked ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"inc", m_oInc ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"min", m_oMin ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"max", m_oMax ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"page", m_oPage ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"sel", m_oSel ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"selType", m_oSelType ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"textHAlign", m_oTextHAlign ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"textVAlign", m_oTextVAlign ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"val", m_oVal ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"widthMin", m_oWidthMin ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"editVal", m_oEditVal ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"colored", m_oColored ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"firstButton", m_oFirstButton ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"horiz", m_oHoriz ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"justLastX", m_oJustLastX ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"lockText", m_oLockText ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"multiSel", m_oMultiSel ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"noThreeD", m_oNoThreeD ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"noThreeD2", m_oNoThreeD2 ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"multiLine", m_oMultiLine ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"verticalBar", m_oVerticalBar ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"passwordEdit", m_oPasswordEdit ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaGroup", m_oFmlaGroup ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaLink", m_oFmlaLink ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaRange", m_oFmlaRange ) - WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaTxbx", m_oFmlaTxbx ) - WritingElement_ReadAttributes_End( oReader ) - } - void CCtrlPropFile::read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + void CFormControlPr::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CFormControlPr::toXML() const + { + return L""; + } + EElementType CFormControlPr::getType () const + { + return et_x_FormControlPr; + } + void CFormControlPr::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrString(L"checked", m_oChecked, m_oChecked->ToString()); + WritingStringNullableAttrString(L"dropStyle", m_oDropStyle, m_oDropStyle->ToString()); + WritingStringNullableAttrInt(L"dx", m_oDx, m_oDx->GetValue()); + WritingStringNullableAttrInt(L"dropLines", m_oDropLines, m_oDropLines->GetValue()); + WritingStringNullableAttrInt(L"inc", m_oInc, m_oInc->GetValue()); + WritingStringNullableAttrInt(L"min", m_oMin, m_oMin->GetValue()); + WritingStringNullableAttrInt(L"max", m_oMax, m_oMax->GetValue()); + WritingStringNullableAttrInt(L"page", m_oPage, m_oPage->GetValue()); + WritingStringNullableAttrInt(L"sel", m_oSel, m_oSel->GetValue()); + WritingStringNullableAttrString(L"selType", m_oSelType, m_oSelType->ToString()); + WritingStringNullableAttrString(L"textHAlign", m_oTextHAlign, m_oTextHAlign->ToString()); + WritingStringNullableAttrString(L"textVAlign", m_oTextVAlign, m_oTextVAlign->ToString()); + WritingStringNullableAttrInt(L"val", m_oVal, *m_oVal); + WritingStringNullableAttrInt(L"widthMin", m_oWidthMin, m_oWidthMin->GetValue()); + WritingStringNullableAttrString(L"editVal", m_oEditVal, m_oEditVal->ToString()); + WritingStringNullableAttrEncodeXmlString(L"multiSel", m_oMultiSel, *m_oMultiSel); + WritingStringNullableAttrEncodeXmlString(L"fmlaGroup", m_oFmlaGroup, *m_oFmlaGroup); + WritingStringNullableAttrEncodeXmlString(L"fmlaLink", m_oFmlaLink, *m_oFmlaLink); + WritingStringNullableAttrEncodeXmlString(L"fmlaRange", m_oFmlaRange, *m_oFmlaRange); + WritingStringNullableAttrEncodeXmlString(L"fmlaTxbx", m_oFmlaTxbx, *m_oFmlaTxbx); + WritingStringNullableAttrBool2(L"colored", m_oColored); + WritingStringNullableAttrBool2(L"horiz", m_oHoriz); + WritingStringNullableAttrBool2(L"justLastX", m_oJustLastX); + WritingStringNullableAttrBool2(L"lockText", m_oLockText); + WritingStringNullableAttrBool2(L"noThreeD", m_oNoThreeD); + WritingStringNullableAttrBool2(L"noThreeD2", m_oNoThreeD2); + WritingStringNullableAttrBool2(L"multiLine", m_oMultiLine); + WritingStringNullableAttrBool2(L"verticalBar", m_oVerticalBar); + WritingStringNullableAttrBool2(L"passwordEdit", m_oPasswordEdit); - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + writer.WriteString(L">"); - if ( !oReader.ReadNextNode() ) - return; + if(m_oItemLst.IsInit()) + { + m_oItemLst->toXML(writer); + } + if(m_oExtLst.IsInit()) + { + writer.WriteString(m_oExtLst->toXMLWithNS(L"")); + } + writer.WriteString(L""); + } + void CFormControlPr::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); - m_oFormControlPr = oReader; - } - void CCtrlPropFile::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - if(false == m_oFormControlPr.IsInit()) return; + if ( oReader.IsEmptyNode() ) + return; - NSStringUtils::CStringBuilder sXml; + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - sXml.WriteString(L""); - m_oFormControlPr->toXML(sXml); + if ( L"itemLst" == sName ) + m_oItemLst = oReader; + else if ( L"extLst" == sName ) + m_oExtLst = oReader; + } + } + void CFormControlPr::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"dx", m_oDx ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"dropStyle", m_oDropStyle ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"dropLines", m_oDropLines ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"objectType", m_oObjectType ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"checked", m_oChecked ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"inc", m_oInc ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"min", m_oMin ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"max", m_oMax ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"page", m_oPage ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"sel", m_oSel ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"selType", m_oSelType ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"textHAlign", m_oTextHAlign ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"textVAlign", m_oTextVAlign ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"val", m_oVal ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"widthMin", m_oWidthMin ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"editVal", m_oEditVal ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"colored", m_oColored ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"firstButton", m_oFirstButton ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"horiz", m_oHoriz ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"justLastX", m_oJustLastX ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"lockText", m_oLockText ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"multiSel", m_oMultiSel ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"noThreeD", m_oNoThreeD ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"noThreeD2", m_oNoThreeD2 ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"multiLine", m_oMultiLine ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"verticalBar", m_oVerticalBar ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"passwordEdit", m_oPasswordEdit ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaGroup", m_oFmlaGroup ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaLink", m_oFmlaLink ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaRange", m_oFmlaRange ) + WritingElement_ReadAttributes_Read_else_if ( oReader, L"fmlaTxbx", m_oFmlaTxbx ) + WritingElement_ReadAttributes_End( oReader ) + } - std::wstring sPath = oPath.GetPath(); - NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); + CCtrlPropFile::CCtrlPropFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + } + CCtrlPropFile::CCtrlPropFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + read( oRootPath, oPath ); + } + CCtrlPropFile::~CCtrlPropFile() + { + } + void CCtrlPropFile::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + const OOX::FileType CCtrlPropFile::type() const + { + return OOX::Spreadsheet::FileTypes::CtrlProp; + } + const CPath CCtrlPropFile::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CCtrlPropFile::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CCtrlPropFile::GetReadPath() + { + return m_oReadPath; + } + void CCtrlPropFile::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - IFileContainer::Write( oPath, oDirectory, oContent ); - } -} //Spreadsheet + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + m_oFormControlPr = oReader; + } + void CCtrlPropFile::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + if(false == m_oFormControlPr.IsInit()) return; + + NSStringUtils::CStringBuilder sXml; + + sXml.WriteString(L""); + m_oFormControlPr->toXML(sXml); + + std::wstring sPath = oPath.GetPath(); + NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); + + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + IFileContainer::Write( oPath, oDirectory, oContent ); + } + } //Spreadsheet } // namespace OOX diff --git a/OOXML/XlsxFormat/Controls/Controls.h b/OOXML/XlsxFormat/Controls/Controls.h index 446a414456..a8844f5c16 100644 --- a/OOXML/XlsxFormat/Controls/Controls.h +++ b/OOXML/XlsxFormat/Controls/Controls.h @@ -45,22 +45,17 @@ namespace OOX public: WritingElement_AdditionConstructors(CListItem) - CListItem(){} - virtual ~CListItem() {} + CListItem(); + virtual ~CListItem(); - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual EElementType getType () const - { - return et_x_ListItem; - } + + virtual EElementType getType () const; + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); nullable_string m_oVal; @@ -71,22 +66,17 @@ namespace OOX public: WritingElement_AdditionConstructors(CListItems) - CListItems(){} - virtual ~CListItems() {} + CListItems(); + virtual ~CListItems(); - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual EElementType getType () const - { - return et_x_ListItems; - } + + virtual EElementType getType () const; + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader){} std::vector> m_arrItems; @@ -97,26 +87,17 @@ namespace OOX { public: WritingElement_AdditionConstructors(CFormControlPr) - CFormControlPr() - { - } - virtual ~CFormControlPr() - { - } + CFormControlPr(); + virtual ~CFormControlPr(); + + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } virtual void toXML(NSStringUtils::CStringBuilder& writer) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual EElementType getType () const - { - return et_x_FormControlPr; - } + + virtual EElementType getType () const; + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); nullable m_oDropLines; @@ -163,29 +144,20 @@ namespace OOX { public: WritingElement_AdditionConstructors(CControlPr) - CControlPr() - { - } - virtual ~CControlPr() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } + CControlPr(); + virtual ~CControlPr(); + + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual EElementType getType () const - { - return et_x_ControlPr; - } + virtual EElementType getType () const; private: void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable_string m_oAltText; nullable_bool m_oAutoFill; @@ -206,39 +178,30 @@ namespace OOX nullable m_oAnchor; }; - //------------------------------------------------------------------------------------ class CControl : public WritingElement { public: WritingElement_AdditionConstructors(CControl) WritingElement_XlsbConstructors(CControl) - CControl() - { - } - virtual ~CControl() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return _T(""); - } + CControl(); + virtual ~CControl(); + + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; virtual void toXML2(NSStringUtils::CStringBuilder& writer, bool bControlPr) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - void fromBin(XLS::BaseObjectPtr& obj); - virtual EElementType getType () const - { - return et_x_Control; - } + void fromBin(XLS::BaseObjectPtr& obj); + + virtual EElementType getType () const; private: void ReadAttributes(XLS::BaseObjectPtr& obj); void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable_string m_oName; nullable_string m_oProgId; @@ -258,30 +221,23 @@ namespace OOX public: WritingElement_AdditionConstructors(CControls) WritingElement_XlsbConstructors(CControls) - CControls() - { - } + CControls(); virtual ~CControls(); - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return _T(""); - } + + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); void read(XmlUtils::CXmlLiteReader& oReader, bool bOldVersion = false); void fromBin(XLS::BaseObjectPtr& obj); - virtual EElementType getType () const - { - return et_x_Controls; - } + + virtual EElementType getType () const; + private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: std::map> m_mapControls; std::map> m_mapControlsAlternative; @@ -290,44 +246,23 @@ namespace OOX class CCtrlPropFile : public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CCtrlPropFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - } - CCtrlPropFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - read( oRootPath, oPath ); - } - virtual ~CCtrlPropFile() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } + CCtrlPropFile(OOX::Document* pMain); + CCtrlPropFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CCtrlPropFile(); + + virtual void read(const CPath& oPath); virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::CtrlProp; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } + virtual const OOX::FileType type() const; + + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; + + const CPath& GetReadPath(); nullable m_oFormControlPr; + private: CPath m_oReadPath; void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); diff --git a/OOXML/XlsxFormat/Drawing/CellAnchor.cpp b/OOXML/XlsxFormat/Drawing/CellAnchor.cpp new file mode 100644 index 0000000000..2865721783 --- /dev/null +++ b/OOXML/XlsxFormat/Drawing/CellAnchor.cpp @@ -0,0 +1,274 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ +#pragma once + +#include "CellAnchor.h" + +namespace OOX +{ + namespace Spreadsheet + { + CClientData::CClientData() + { + } + CClientData::~CClientData() + { + } + void CClientData::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CClientData::toXML() const + { + return L""; + } + void CClientData::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + } + void CClientData::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if (!oReader.IsEmptyNode()) + oReader.ReadTillEnd(); + } + EElementType CClientData::getType() const + { + return et_x_ClientData; + } + void CClientData::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start(oReader) + WritingElement_ReadAttributes_Read_if(oReader, L"fLocksWithSheet", fLocksWithSheet) + WritingElement_ReadAttributes_Read_if(oReader, L"fPrintsWithSheet", fPrintsWithSheet) + WritingElement_ReadAttributes_End(oReader) + } + + + CCellAnchor::CCellAnchor(const SimpleTypes::Spreadsheet::ECellAnchorType& oAnchorType) : m_oAnchorType(oAnchorType), + m_bShapeOle(false), m_bShapeControl(false) + { + } + CCellAnchor::CCellAnchor(const SimpleTypes::Spreadsheet::CCellAnchorType& oAnchorType) : m_oAnchorType(oAnchorType), + m_bShapeOle(false), m_bShapeControl(false) + { + } + CCellAnchor::~CCellAnchor() + { + } + void CCellAnchor::fromXML(XmlUtils::CXmlNode& node) + { + m_bShapeOle = false; + m_bShapeControl = false; + } + std::wstring CCellAnchor::toXML() const + { + return L""; + } + std::wstring CCellAnchor::toVmlXML() const + { + std::wstring sAnchor; + + if (m_oFrom.IsInit()) + { + sAnchor += m_oFrom->m_oCol->ToString() + L","; + sAnchor += std::to_wstring(m_oFrom->m_oColOff->ToPx()) + L","; + sAnchor += m_oFrom->m_oRow->ToString() + L","; + sAnchor += std::to_wstring(m_oFrom->m_oRowOff->ToPx()) + L","; + } + if (m_oTo.IsInit()) + { + sAnchor += m_oTo->m_oCol->ToString() + L","; + sAnchor += std::to_wstring(m_oTo->m_oColOff->ToPx()) + L","; + sAnchor += m_oTo->m_oRow->ToString() + L","; + sAnchor += std::to_wstring(m_oTo->m_oRowOff->ToPx()); + } + return sAnchor; + } + void CCellAnchor::toXML(NSStringUtils::CStringBuilder& writer) const + { + if(isValid() == false) return; + if(m_bShapeOle) return; + + std::wstring sEnd; + if(m_oFrom.IsInit() && m_oTo.IsInit()) + { + sEnd = L""; + + writer.WriteString(L"ToString()); + writer.WriteString(L">"); + if(m_oFrom.IsInit()) + m_oFrom->toXML2(writer, L"xdr:from"); + if(m_oTo.IsInit()) + m_oTo->toXML2(writer, L"xdr:to"); + } + else if(m_oFrom.IsInit() && m_oExt.IsInit()) + { + sEnd = L""; + + writer.WriteString(L""); + if(m_oFrom.IsInit()) + m_oFrom->toXML2(writer, L"xdr:from"); + if(m_oExt.IsInit()) + m_oExt->toXML(writer); + } + else + { + sEnd = L""; + + writer.WriteString(L""); + if(m_oPos.IsInit()) + m_oPos->toXML(writer); + if(m_oExt.IsInit()) + m_oExt->toXML(writer); + } + if(m_oElement.IsInit()) + { + std::wstring sRequires = m_oElement->GetSlicerRequires(); + if(L"a14" == sRequires) + { + writer.WriteString(L""); + } + else if(L"sle15" == sRequires) + { + writer.WriteString(L""); + } + NSBinPptxRW::CXmlWriter oXmlWriter(XMLWRITER_DOC_TYPE_XLSX); + + m_oElement->toXmlWriter(&oXmlWriter); + writer.WriteString(oXmlWriter.GetXmlString()); + + if(L"a14" == sRequires || L"sle15" == sRequires) + { + writer.WriteString(L"This shape represents a table slicer. Table slicers are not supported in this version of Excel.\n\nIf the shape was modified in an earlier version of Excel, or if the workbook was saved in Excel 2007 or earlier, the slicer can't be used."); + } + } + if (m_oClientData.IsInit()) + m_oClientData->toXML(writer); + else + writer.WriteString(L""); + writer.WriteString(sEnd); + } + void CCellAnchor::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + m_bShapeOle = false; + m_bShapeControl = false; + + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if (L"from" == sName) + m_oFrom = oReader; + else if (L"to" == sName) + m_oTo = oReader; + else if (L"pos" == sName) + m_oPos = oReader; + else if (L"ext" == sName) + m_oExt = oReader; + else if (L"clientData" == sName) + m_oClientData = oReader; + else if (L"graphicFrame" == sName || L"pic" == sName || L"sp" == sName || L"grpSp" == sName || L"cxnSp" == sName || L"AlternateContent" == sName) + { + //Demo-2010WinterOlympics2.xlsx - AlternateContent + m_oElement = oReader; + + if (m_oElement.IsInit()) + { + smart_ptr shape = m_oElement->GetElem().smart_dynamic_cast(); + if (shape.IsInit()) + { + m_nId = shape->nvSpPr.cNvPr.id; + if (shape->nvSpPr.cNvPr.vmlSpid.IsInit()) + { + //ссылка на объект или шейп в vmlDrawing + m_sVmlSpId = shape->nvSpPr.cNvPr.vmlSpid.get(); + } + } + smart_ptr frame = m_oElement->GetElem().smart_dynamic_cast(); + if ((frame.IsInit()) && (frame->vmlSpid.IsInit())) + { + //ссылка на объект или шейп в vmlDrawing + m_sVmlSpId = frame->vmlSpid.get(); + } + } + } + } + } + EElementType CCellAnchor::getType () const + { + return et_x_CellAnchor; + } + void CCellAnchor::setAnchorType (SimpleTypes::Spreadsheet::ECellAnchorType eType) + { + m_oAnchorType.SetValue(eType); + } + SimpleTypes::Spreadsheet::ECellAnchorType CCellAnchor::getAnchorType () const + { + return m_oAnchorType.GetValue(); + } + bool CCellAnchor::isValid() const + { + SimpleTypes::Spreadsheet::ECellAnchorType eAnchorType = m_oAnchorType.GetValue(); + if(!((m_oFrom.IsInit() && m_oTo.IsInit()) || (m_oFrom.IsInit() && m_oExt.IsInit()) || (m_oPos.IsInit() && m_oExt.IsInit()))) + return false; + if(false == m_oElement.is_init()) + return false; + if(false == m_oElement->is_init()) + return false; + return true; + } + void CCellAnchor::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_ReadSingle( oReader, L"editAs", m_oEditAs ) + WritingElement_ReadAttributes_End( oReader ) + } + void CCellAnchor::ReadAttributesRequire(XmlUtils::CXmlLiteReader& oReader, std::wstring& sRequire) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_ReadSingle( oReader, L"Requires", sRequire ) + WritingElement_ReadAttributes_End( oReader ) + } + + } //Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/Drawing/CellAnchor.h b/OOXML/XlsxFormat/Drawing/CellAnchor.h index 304dc8fdb4..a887dd00c0 100644 --- a/OOXML/XlsxFormat/Drawing/CellAnchor.h +++ b/OOXML/XlsxFormat/Drawing/CellAnchor.h @@ -47,252 +47,52 @@ namespace OOX { public: WritingElement_AdditionConstructors(CClientData) - CClientData() - { - } - virtual ~CClientData() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + CClientData(); + virtual ~CClientData(); - if (!oReader.IsEmptyNode()) - oReader.ReadTillEnd(); - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - virtual EElementType getType() const - { - return et_x_ClientData; - } + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + + virtual EElementType getType() const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start(oReader) - WritingElement_ReadAttributes_Read_if(oReader, L"fLocksWithSheet", fLocksWithSheet) - WritingElement_ReadAttributes_Read_if(oReader, L"fPrintsWithSheet", fPrintsWithSheet) - WritingElement_ReadAttributes_End(oReader) - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable_bool fLocksWithSheet; nullable_bool fPrintsWithSheet; }; + class CCellAnchor : public WritingElement { public: WritingElement_AdditionConstructors(CCellAnchor) - CCellAnchor(const SimpleTypes::Spreadsheet::ECellAnchorType& oAnchorType) : m_oAnchorType(oAnchorType), - m_bShapeOle(false), m_bShapeControl(false) - { - } - CCellAnchor(const SimpleTypes::Spreadsheet::CCellAnchorType& oAnchorType) : m_oAnchorType(oAnchorType), - m_bShapeOle(false), m_bShapeControl(false) - { - } - virtual ~CCellAnchor() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - m_bShapeOle = false; - m_bShapeControl = false; - } - virtual std::wstring toXML() const - { - return L""; - } - std::wstring toVmlXML() const - { - std::wstring sAnchor; + CCellAnchor(const SimpleTypes::Spreadsheet::ECellAnchorType& oAnchorType); + CCellAnchor(const SimpleTypes::Spreadsheet::CCellAnchorType& oAnchorType); + virtual ~CCellAnchor(); - if (m_oFrom.IsInit()) - { - sAnchor += m_oFrom->m_oCol->ToString() + L","; - sAnchor += std::to_wstring(m_oFrom->m_oColOff->ToPx()) + L","; - sAnchor += m_oFrom->m_oRow->ToString() + L","; - sAnchor += std::to_wstring(m_oFrom->m_oRowOff->ToPx()) + L","; - } - if (m_oTo.IsInit()) - { - sAnchor += m_oTo->m_oCol->ToString() + L","; - sAnchor += std::to_wstring(m_oTo->m_oColOff->ToPx()) + L","; - sAnchor += m_oTo->m_oRow->ToString() + L","; - sAnchor += std::to_wstring(m_oTo->m_oRowOff->ToPx()); - } - return sAnchor; - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - if(isValid() == false) return; - if(m_bShapeOle) return; + std::wstring toVmlXML() const; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; - std::wstring sEnd; - if(m_oFrom.IsInit() && m_oTo.IsInit()) - { - sEnd = L""; - - writer.WriteString(L"ToString()); - writer.WriteString(L">"); - if(m_oFrom.IsInit()) - m_oFrom->toXML2(writer, L"xdr:from"); - if(m_oTo.IsInit()) - m_oTo->toXML2(writer, L"xdr:to"); - } - else if(m_oFrom.IsInit() && m_oExt.IsInit()) - { - sEnd = L""; - - writer.WriteString(L""); - if(m_oFrom.IsInit()) - m_oFrom->toXML2(writer, L"xdr:from"); - if(m_oExt.IsInit()) - m_oExt->toXML(writer); - } - else - { - sEnd = L""; - - writer.WriteString(L""); - if(m_oPos.IsInit()) - m_oPos->toXML(writer); - if(m_oExt.IsInit()) - m_oExt->toXML(writer); - } - if(m_oElement.IsInit()) - { - std::wstring sRequires = m_oElement->GetSlicerRequires(); - if(L"a14" == sRequires) - { - writer.WriteString(L""); - } - else if(L"sle15" == sRequires) - { - writer.WriteString(L""); - } - NSBinPptxRW::CXmlWriter oXmlWriter(XMLWRITER_DOC_TYPE_XLSX); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + virtual EElementType getType () const; - m_oElement->toXmlWriter(&oXmlWriter); - writer.WriteString(oXmlWriter.GetXmlString()); + virtual void setAnchorType (SimpleTypes::Spreadsheet::ECellAnchorType eType); + virtual SimpleTypes::Spreadsheet::ECellAnchorType getAnchorType () const; - if(L"a14" == sRequires || L"sle15" == sRequires) - { - writer.WriteString(L"This shape represents a table slicer. Table slicers are not supported in this version of Excel.\n\nIf the shape was modified in an earlier version of Excel, or if the workbook was saved in Excel 2007 or earlier, the slicer can't be used."); - } - } - if (m_oClientData.IsInit()) - m_oClientData->toXML(writer); - else - writer.WriteString(L""); - writer.WriteString(sEnd); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - m_bShapeOle = false; - m_bShapeControl = false; + bool isValid() const; - ReadAttributes( oReader ); - - if ( oReader.IsEmptyNode() ) - return; - - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if (L"from" == sName) - m_oFrom = oReader; - else if (L"to" == sName) - m_oTo = oReader; - else if (L"pos" == sName) - m_oPos = oReader; - else if (L"ext" == sName) - m_oExt = oReader; - else if (L"clientData" == sName) - m_oClientData = oReader; - else if (L"graphicFrame" == sName || L"pic" == sName || L"sp" == sName || L"grpSp" == sName || L"cxnSp" == sName || L"AlternateContent" == sName) - { - //Demo-2010WinterOlympics2.xlsx - AlternateContent - m_oElement = oReader; - - if (m_oElement.IsInit()) - { - smart_ptr shape = m_oElement->GetElem().smart_dynamic_cast(); - if (shape.IsInit()) - { - m_nId = shape->nvSpPr.cNvPr.id; - if (shape->nvSpPr.cNvPr.vmlSpid.IsInit()) - { - //ссылка на объект или шейп в vmlDrawing - m_sVmlSpId = shape->nvSpPr.cNvPr.vmlSpid.get(); - } - } - smart_ptr frame = m_oElement->GetElem().smart_dynamic_cast(); - if ((frame.IsInit()) && (frame->vmlSpid.IsInit())) - { - //ссылка на объект или шейп в vmlDrawing - m_sVmlSpId = frame->vmlSpid.get(); - } - } - } - } - } - - virtual EElementType getType () const - { - return et_x_CellAnchor; - } - - virtual void setAnchorType (SimpleTypes::Spreadsheet::ECellAnchorType eType) - { - m_oAnchorType.SetValue(eType); - } - virtual SimpleTypes::Spreadsheet::ECellAnchorType getAnchorType () const - { - return m_oAnchorType.GetValue(); - } - bool isValid() const - { - SimpleTypes::Spreadsheet::ECellAnchorType eAnchorType = m_oAnchorType.GetValue(); - if(!((m_oFrom.IsInit() && m_oTo.IsInit()) || (m_oFrom.IsInit() && m_oExt.IsInit()) || (m_oPos.IsInit() && m_oExt.IsInit()))) - return false; - if(false == m_oElement.is_init()) - return false; - if(false == m_oElement->is_init()) - return false; - return true; - } private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_ReadSingle( oReader, L"editAs", m_oEditAs ) - WritingElement_ReadAttributes_End( oReader ) - } - void ReadAttributesRequire(XmlUtils::CXmlLiteReader& oReader, std::wstring& sRequire) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_ReadSingle( oReader, L"Requires", sRequire ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + void ReadAttributesRequire(XmlUtils::CXmlLiteReader& oReader, std::wstring& sRequire); + public: bool m_bShapeOle; bool m_bShapeControl; diff --git a/OOXML/XlsxFormat/Drawing/Drawing.cpp b/OOXML/XlsxFormat/Drawing/Drawing.cpp new file mode 100644 index 0000000000..b92ac2d560 --- /dev/null +++ b/OOXML/XlsxFormat/Drawing/Drawing.cpp @@ -0,0 +1,253 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "Drawing.h" + +namespace OOX +{ + using namespace Drawing; + + namespace Spreadsheet + { + CDrawingWorksheet::CDrawingWorksheet() + { + } + CDrawingWorksheet::~CDrawingWorksheet() + { + } + void CDrawingWorksheet::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CDrawingWorksheet::toXML() const + { + return (L""); + } + void CDrawingWorksheet::toXML(NSStringUtils::CStringBuilder& writer) const + { + if(m_oId.IsInit()) + { + writer.WriteString(L"ToString()); + writer.WriteString(L"\"/>"); + } + + } + void CDrawingWorksheet::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + void CDrawingWorksheet::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CDrawingWorksheet::getType () const + { + return et_x_FromTo; + } + void CDrawingWorksheet::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start_No_NS ( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, L"id", m_oId ) + WritingElement_ReadAttributes_End_No_NS ( oReader ) + } + void CDrawingWorksheet::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + if(!ptr->stRelId.value.value().empty()) + m_oId = ptr->stRelId.value.value(); + } + } + + CDrawing::CDrawing(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + } + CDrawing::CDrawing(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + read( oRootPath, oPath ); + } + CDrawing::~CDrawing() + { + } + void CDrawing::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CDrawing::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( (L"wsDr") == sName ) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + { + int nCurDepth = oReader.GetDepth(); + while ( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + CCellAnchor *pItem = NULL; + + if ( (L"absoluteAnchor") == sName ) + { + pItem = new CCellAnchor( oReader ); + pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorAbsolute); + } + else if ( (L"oneCellAnchor") == sName ) + { + pItem = new CCellAnchor( oReader ); + pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorOneCell); + } + else if ( (L"twoCellAnchor") == sName ) + { + pItem = new CCellAnchor( oReader ); + pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorTwoCell); + } + else if ( (L"AlternateContent") == sName) + { + nCurDepth++; + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( (L"Choice") != sName && (L"Fallback") != sName ) continue; + + nullable sRequires; + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, (L"Requires"), sRequires ) + WritingElement_ReadAttributes_End( oReader ) + + if (sRequires.IsInit() == false) continue; + if (*sRequires != (L"a14"))continue; + + nCurDepth++; + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( (L"absoluteAnchor") == sName ) + { + pItem = new CCellAnchor( oReader ); + pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorAbsolute); + } + else if ( (L"oneCellAnchor") == sName ) + { + pItem = new CCellAnchor( oReader ); + pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorOneCell); + } + else if ( (L"twoCellAnchor") == sName ) + { + pItem = new CCellAnchor( oReader ); + pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorTwoCell); + } + }nCurDepth--; + break; + } + nCurDepth--; + } + + if ( pItem ) + m_arrItems.push_back( pItem ); + } + } + } + } + void CDrawing::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString((L"")); + for(size_t i = 0, length = m_arrItems.size(); i < length; ++i) + m_arrItems[i]->toXML(sXml); + sXml.WriteString((L"")); + + std::wstring sPath = oPath.GetPath(); + NSFile::CFileBinary::SaveToFile(sPath.c_str(), sXml.GetData()); + + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + IFileContainer::Write(oPath, oDirectory, oContent); + } + const OOX::FileType CDrawing::type() const + { + return OOX::Spreadsheet::FileTypes::Drawings; + } + const CPath CDrawing::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CDrawing::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CDrawing::GetReadPath() + { + return m_oReadPath; + } + bool CDrawing::IsEmpty() + { + return m_arrItems.empty(); + } + void CDrawing::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + void CDrawing::ClearItems() + { + for ( unsigned int nIndex = 0; nIndex < m_arrItems.size(); nIndex++ ) + { + if ( m_arrItems[nIndex] ) + delete m_arrItems[nIndex]; + + m_arrItems[nIndex] = NULL; + } + + m_arrItems.clear(); + } + + } //Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/Drawing/Drawing.h b/OOXML/XlsxFormat/Drawing/Drawing.h index ab60de0187..c0cc6bc00b 100644 --- a/OOXML/XlsxFormat/Drawing/Drawing.h +++ b/OOXML/XlsxFormat/Drawing/Drawing.h @@ -48,63 +48,22 @@ namespace OOX public: WritingElement_AdditionConstructors(CDrawingWorksheet) WritingElement_XlsbConstructors(CDrawingWorksheet) - CDrawingWorksheet() - { - } - virtual ~CDrawingWorksheet() - { - } + CDrawingWorksheet(); + virtual ~CDrawingWorksheet(); - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return (L""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - if(m_oId.IsInit()) - { - writer.WriteString(L"ToString()); - writer.WriteString(L"\"/>"); - } - - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual EElementType getType () const - { - return et_x_FromTo; - } + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start_No_NS ( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, L"id", m_oId ) - WritingElement_ReadAttributes_End_No_NS ( oReader ) - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - if(!ptr->stRelId.value.value().empty()) - m_oId = ptr->stRelId.value.value(); - } - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + void ReadAttributes(XLS::BaseObjectPtr& obj); + public: nullable m_oId; }; @@ -112,166 +71,27 @@ namespace OOX class CDrawing : public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CDrawing(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - } - CDrawing(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - read( oRootPath, oPath ); - } - virtual ~CDrawing() - { - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + CDrawing(OOX::Document* pMain); + CDrawing(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + virtual ~CDrawing(); - XmlUtils::CXmlLiteReader oReader; + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; + virtual const OOX::FileType type() const; - if ( !oReader.ReadNextNode() ) - return; + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( (L"wsDr") == sName ) - { - ReadAttributes( oReader ); - - if ( !oReader.IsEmptyNode() ) - { - int nCurDepth = oReader.GetDepth(); - while ( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - CCellAnchor *pItem = NULL; - - if ( (L"absoluteAnchor") == sName ) - { - pItem = new CCellAnchor( oReader ); - pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorAbsolute); - } - else if ( (L"oneCellAnchor") == sName ) - { - pItem = new CCellAnchor( oReader ); - pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorOneCell); - } - else if ( (L"twoCellAnchor") == sName ) - { - pItem = new CCellAnchor( oReader ); - pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorTwoCell); - } - else if ( (L"AlternateContent") == sName) - { - nCurDepth++; - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( (L"Choice") != sName && (L"Fallback") != sName ) continue; - - nullable sRequires; - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, (L"Requires"), sRequires ) - WritingElement_ReadAttributes_End( oReader ) - - if (sRequires.IsInit() == false) continue; - if (*sRequires != (L"a14"))continue; - - nCurDepth++; - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( (L"absoluteAnchor") == sName ) - { - pItem = new CCellAnchor( oReader ); - pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorAbsolute); - } - else if ( (L"oneCellAnchor") == sName ) - { - pItem = new CCellAnchor( oReader ); - pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorOneCell); - } - else if ( (L"twoCellAnchor") == sName ) - { - pItem = new CCellAnchor( oReader ); - pItem->m_oAnchorType.SetValue(SimpleTypes::Spreadsheet::cellanchorTwoCell); - } - }nCurDepth--; - break; - } - nCurDepth--; - } - - if ( pItem ) - m_arrItems.push_back( pItem ); - } - } - } - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString((L"")); - for(size_t i = 0, length = m_arrItems.size(); i < length; ++i) - m_arrItems[i]->toXML(sXml); - sXml.WriteString((L"")); - - std::wstring sPath = oPath.GetPath(); - NSFile::CFileBinary::SaveToFile(sPath.c_str(), sXml.GetData()); - - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - IFileContainer::Write(oPath, oDirectory, oContent); - } - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::Drawings; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } - - bool IsEmpty() - { - return m_arrItems.empty(); - } + const CPath& GetReadPath(); + bool IsEmpty(); private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } - void ClearItems() - { - for ( unsigned int nIndex = 0; nIndex < m_arrItems.size(); nIndex++ ) - { - if ( m_arrItems[nIndex] ) - delete m_arrItems[nIndex]; - m_arrItems[nIndex] = NULL; - } - - m_arrItems.clear(); - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + void ClearItems(); public: std::vector m_arrItems; diff --git a/OOXML/XlsxFormat/Drawing/FromTo.cpp b/OOXML/XlsxFormat/Drawing/FromTo.cpp new file mode 100644 index 0000000000..e35be77b33 --- /dev/null +++ b/OOXML/XlsxFormat/Drawing/FromTo.cpp @@ -0,0 +1,151 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "FromTo.h" + +namespace OOX +{ + namespace Spreadsheet + { + CFromTo::CFromTo() + { + } + CFromTo::~CFromTo() + { + } + void CFromTo::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CFromTo::toXML() const + { + return L""; + } + void CFromTo::toXML(NSStringUtils::CStringBuilder& writer) const + { + } + void CFromTo::toXML2(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const + { + writer.WriteString(L"<"); + writer.WriteString(sName); + writer.WriteString(L">"); + if(m_oCol.IsInit()) + { + WritingStringValInt(L"xdr:col", m_oCol->GetValue()); + } + if(m_oColOff.IsInit()) + { + WritingStringValInt64(L"xdr:colOff", m_oColOff->ToEmu()); + } + if(m_oRow.IsInit()) + { + WritingStringValInt(L"xdr:row", m_oRow->GetValue()); + } + if(m_oRowOff.IsInit()) + { + WritingStringValInt64(L"xdr:rowOff", m_oRowOff->ToEmu()); + } + writer.WriteString(L""); + } + void CFromTo::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( L"col" == sName ) + m_oCol = oReader.GetText2(); + else if ( L"colOff" == sName ) + m_oColOff = oReader.GetText2(); + else if ( L"row" == sName ) + m_oRow = oReader.GetText2(); + else if ( L"rowOff" == sName ) + m_oRowOff = oReader.GetText2(); + } + } + EElementType CFromTo::getType () const + { + return et_x_FromTo; + } + void CFromTo::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + CExt::CExt() + { + } + CExt::~CExt() + { + } + void CExt::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CExt::toXML() const + { + return L""; + } + void CExt::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToEmu()); + WritingStringNullableAttrInt64(L"cy", m_oCy, m_oCy->ToEmu()); + writer.WriteString(L"/>"); + } + void CExt::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + EElementType CExt::getType () const + { + return et_x_Ext; + } + void CExt::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, L"cx", m_oCx ) + WritingElement_ReadAttributes_Read_if( oReader, L"cy", m_oCy ) + WritingElement_ReadAttributes_End( oReader ) + } + + } //Spreadsheet +} // namespace OOX + diff --git a/OOXML/XlsxFormat/Drawing/FromTo.h b/OOXML/XlsxFormat/Drawing/FromTo.h index a2e1c9c8c1..8da9a8ee80 100644 --- a/OOXML/XlsxFormat/Drawing/FromTo.h +++ b/OOXML/XlsxFormat/Drawing/FromTo.h @@ -41,130 +41,46 @@ namespace OOX { public: WritingElement_AdditionConstructors(CFromTo) - CFromTo() - { - } - virtual ~CFromTo() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - } - virtual void toXML2(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const - { - writer.WriteString(L"<"); - writer.WriteString(sName); - writer.WriteString(L">"); - if(m_oCol.IsInit()) - { - WritingStringValInt(L"xdr:col", m_oCol->GetValue()); - } - if(m_oColOff.IsInit()) - { - WritingStringValInt64(L"xdr:colOff", m_oColOff->ToEmu()); - } - if(m_oRow.IsInit()) - { - WritingStringValInt(L"xdr:row", m_oRow->GetValue()); - } - if(m_oRowOff.IsInit()) - { - WritingStringValInt64(L"xdr:rowOff", m_oRowOff->ToEmu()); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CFromTo(); + virtual ~CFromTo(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void toXML2(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const; - if ( L"col" == sName ) - m_oCol = oReader.GetText2(); - else if ( L"colOff" == sName ) - m_oColOff = oReader.GetText2(); - else if ( L"row" == sName ) - m_oRow = oReader.GetText2(); - else if ( L"rowOff" == sName ) - m_oRowOff = oReader.GetText2(); - } - } - - virtual EElementType getType () const - { - return et_x_FromTo; - } + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable m_oCol; nullable m_oColOff; nullable m_oRow; nullable m_oRowOff; }; + class CExt : public WritingElement { public: WritingElement_AdditionConstructors(CExt) - CExt() - { - } - virtual ~CExt() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return L""; - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToEmu()); - WritingStringNullableAttrInt64(L"cy", m_oCy, m_oCy->ToEmu()); - writer.WriteString(L"/>"); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CExt(); + virtual ~CExt(); - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - virtual EElementType getType () const - { - return et_x_Ext; - } + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, L"cx", m_oCx ) - WritingElement_ReadAttributes_Read_if( oReader, L"cy", m_oCy ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable m_oCx; nullable m_oCy; diff --git a/OOXML/XlsxFormat/Drawing/Pos.cpp b/OOXML/XlsxFormat/Drawing/Pos.cpp new file mode 100644 index 0000000000..a6ba6fd494 --- /dev/null +++ b/OOXML/XlsxFormat/Drawing/Pos.cpp @@ -0,0 +1,81 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "Pos.h" + +namespace OOX +{ + namespace Spreadsheet + { + CPos::CPos() + { + } + CPos::~CPos() + { + } + void CPos::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CPos::toXML() const + { + return _T(""); + } + void CPos::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(_T("ToEmu()); + WritingStringNullableAttrInt64(L"y", m_oY, m_oY->ToEmu()); + writer.WriteString(_T("/>")); + } + void CPos::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + EElementType CPos::getType () const + { + return et_x_FromTo; + } + void CPos::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + // Читаем атрибуты + WritingElement_ReadAttributes_Start( oReader ) + + WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), m_oX ) + WritingElement_ReadAttributes_Read_if ( oReader, _T("y"), m_oY ) + + WritingElement_ReadAttributes_End( oReader ) + } + } //Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/Drawing/Pos.h b/OOXML/XlsxFormat/Drawing/Pos.h index e786084d00..97bd7cec18 100644 --- a/OOXML/XlsxFormat/Drawing/Pos.h +++ b/OOXML/XlsxFormat/Drawing/Pos.h @@ -45,50 +45,20 @@ namespace OOX { public: WritingElement_AdditionConstructors(CPos) - CPos() - { - } - virtual ~CPos() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return _T(""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(_T("ToEmu()); - WritingStringNullableAttrInt64(L"y", m_oY, m_oY->ToEmu()); - writer.WriteString(_T("/>")); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + CPos(); + virtual ~CPos(); - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - virtual EElementType getType () const - { - return et_x_FromTo; - } + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); + + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - // Читаем атрибуты - WritingElement_ReadAttributes_Start( oReader ) + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), m_oX ) - WritingElement_ReadAttributes_Read_if ( oReader, _T("y"), m_oY ) - - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oX; nullable m_oY; diff --git a/OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.cpp b/OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.cpp new file mode 100644 index 0000000000..136a0b6a30 --- /dev/null +++ b/OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.cpp @@ -0,0 +1,86 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "ExternalLinkPath.h" + +namespace OOX +{ + namespace Spreadsheet + { + ExternalLinkPath::ExternalLinkPath(OOX::Document* pMain) : External(pMain) + { + } + ExternalLinkPath::ExternalLinkPath(OOX::Document* pMain, const CPath& uri) : External(pMain) + { + read(uri); + } + ExternalLinkPath::~ExternalLinkPath() + { + } + const FileType ExternalLinkPath::type() const + { + return OOX::FileTypes::ExternalLinkPath; + } + const CPath ExternalLinkPath::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath ExternalLinkPath::DefaultFileName() const + { + return type().DefaultFileName(); + } + + ExternalOleObject::ExternalOleObject(OOX::Document* pMain) : External(pMain) + { + } + ExternalOleObject::ExternalOleObject(OOX::Document* pMain, const CPath& uri) : External(pMain) + { + read(uri); + } + ExternalOleObject::~ExternalOleObject() + { + } + const FileType ExternalOleObject::type() const + { + return OOX::FileTypes::OleObject; + } + const CPath ExternalOleObject::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath ExternalOleObject::DefaultFileName() const + { + return type().DefaultFileName(); + } + + }// namespace Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.h b/OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.h index 8a5024a610..0026eb64ba 100644 --- a/OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.h +++ b/OOXML/XlsxFormat/ExternalLinks/ExternalLinkPath.h @@ -43,56 +43,29 @@ namespace OOX class ExternalLinkPath : public External { public: - ExternalLinkPath(OOX::Document* pMain) : External(pMain) - { - } - ExternalLinkPath(OOX::Document* pMain, const CPath& uri) : External(pMain) - { - read(uri); - } - ~ExternalLinkPath() - { - } - virtual const FileType type() const - { - return OOX::FileTypes::ExternalLinkPath; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } + ExternalLinkPath(OOX::Document* pMain); + ExternalLinkPath(OOX::Document* pMain, const CPath& uri); + ~ExternalLinkPath(); + + virtual const FileType type() const; + + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; }; + class ExternalOleObject : public External { public: - ExternalOleObject(OOX::Document* pMain) : External(pMain) - { - } - ExternalOleObject(OOX::Document* pMain, const CPath& uri) : External(pMain) - { - read(uri); - } - ~ExternalOleObject() - { - } + ExternalOleObject(OOX::Document* pMain); + ExternalOleObject(OOX::Document* pMain, const CPath& uri); + ~ExternalOleObject(); - virtual const FileType type() const - { - return OOX::FileTypes::OleObject; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } + virtual const FileType type() const; + + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const ; }; + }// namespace Spreadsheet } // namespace OOX diff --git a/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp b/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp new file mode 100644 index 0000000000..5be7d5bdd8 --- /dev/null +++ b/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.cpp @@ -0,0 +1,1517 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "ExternalLinkPath.h" + +namespace OOX +{ + namespace Spreadsheet + { + CExternalSheetNames::CExternalSheetNames() + { + } + CExternalSheetNames::~CExternalSheetNames() + { + } + void CExternalSheetNames::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalSheetNames::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + if (L"sheetName" == sName) + { + m_arrItems.push_back(new ComplexTypes::Spreadsheet::String(oReader)); + } + } + } + void CExternalSheetNames::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + for (size_t i = 0; i < m_arrItems.size(); ++i) + { + if (m_arrItems[i]) + { + writer.WriteString(L"ToString2()); + writer.WriteString(L"/>"); + } + } + writer.WriteString(L""); + } + std::wstring CExternalSheetNames::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalSheetNames::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + for(auto &item : ptr->sheetNames) + { + auto str = new ComplexTypes::Spreadsheet::String; + str->m_sVal = item.value(); + m_arrItems.push_back(str); + } + } + } + EElementType CExternalSheetNames::getType() const + { + return et_x_ExternalSheetNames; + } + + CExternalDefinedName::CExternalDefinedName() + { + } + CExternalDefinedName::~CExternalDefinedName() + { + } + void CExternalDefinedName::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalDefinedName::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + void CExternalDefinedName::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"GetValue()); + writer.WriteString(L"/>"); + } + std::wstring CExternalDefinedName::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalDefinedName::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CExternalDefinedName::getType() const + { + return et_x_ExternalDefinedName; + } + void CExternalDefinedName::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + auto ptrSupNameStart = static_cast(ptr->m_BrtSupNameStart.get()); + if(ptrSupNameStart != nullptr) + { + if(!ptrSupNameStart->name.value().empty()) + m_oName = ptrSupNameStart->name.value(); + } + + auto ptrSupNameFmla = static_cast(ptr->m_BrtSupNameFmla.get()); + if(ptrSupNameFmla != nullptr) + { + auto ref = ptrSupNameFmla->fmla.getAssembledFormula(); + if(!ref.empty()) + m_oRefersTo = ref; + } + + auto ptrSupNameBits = static_cast(ptr->m_BrtSupNameBits.get()); + if(ptrSupNameBits != nullptr) + { + m_oSheetId = ptrSupNameBits->contentsExtName.iSheet; + } + + } + } + void CExternalDefinedName::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"name"), m_oName ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"refersTo"), m_oRefersTo ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"sheetId"), m_oSheetId ) + WritingElement_ReadAttributes_End( oReader ) + } + + CExternalDefinedNames::CExternalDefinedNames() + { + } + CExternalDefinedNames::~CExternalDefinedNames() + { + } + void CExternalDefinedNames::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalDefinedNames::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + if (L"definedName" == sName) + { + m_arrItems.push_back(new CExternalDefinedName(oReader)); + } + } + } + void CExternalDefinedNames::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + writer.WriteString(L""); + } + std::wstring CExternalDefinedNames::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalDefinedNames::fromBin(std::vector& obj) + { + for(auto &item : obj) + { + m_arrItems.push_back(new CExternalDefinedName(item)); + } + } + EElementType CExternalDefinedNames::getType() const + { + return et_x_ExternalDefinedNames; + } + + CExternalCell::CExternalCell() + { + } + CExternalCell::~CExternalCell() + { + } + void CExternalCell::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalCell::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + if (L"v" == sName) + { + m_oValue = oReader; + } + } + } + void CExternalCell::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrInt(L"vm", m_oValueMetadata, m_oValueMetadata->GetValue()); + writer.WriteString(L">"); + if(m_oValue.IsInit()) + m_oValue->toXML2(writer, (L"v")); + writer.WriteString(L""); + } + std::wstring CExternalCell::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalCell::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CExternalCell::getType() const + { + return et_x_ExternalCell; + } + void CExternalCell::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + auto ptrExternValueMeta = static_cast(ptr->m_BrtExternValueMeta.get()); + if(ptrExternValueMeta != nullptr) + { + m_oValueMetadata = ptrExternValueMeta->ivmb; + } + + auto ptrEXTERNVALUEDATA = static_cast(ptr->m_EXTERNVALUEDATA.get()); + if(ptrEXTERNVALUEDATA != nullptr) + { + if(!ptrEXTERNVALUEDATA->m_Ref.empty()) + m_oRef = ptrEXTERNVALUEDATA->m_Ref; + + if(ptrEXTERNVALUEDATA->m_source != nullptr) + { + auto pSource = static_cast(ptrEXTERNVALUEDATA->m_source.get()); + auto nType = pSource->getTypeId(); + switch (nType) + { + case XLSB::rt_ExternCellBlank: + break; + case XLSB::rt_ExternCellReal: + { + auto pRealNum = reinterpret_cast(pSource)->value.data.value; + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeDate); + m_oValue.Init(); + m_oValue->m_sText = OOX::Spreadsheet::SpreadsheetCommon::WriteDouble(pRealNum); + } + break; + case XLSB::rt_ExternCellBool: + { + auto pBool = reinterpret_cast(pSource)->value; + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeBool); + m_oValue.Init(); + m_oValue->m_sText = pBool ? L"1" : L"0"; + } + break; + case XLSB::rt_ExternCellError: + { + auto pError = reinterpret_cast(pSource)->value; + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeError); + m_oValue.Init(); + switch(pError) + { + case 0x00: m_oValue->m_sText = L"#NULL!"; break; + case 0x07: m_oValue->m_sText = L"#DIV/0!"; break; + case 0x0F: m_oValue->m_sText = L"#VALUE!"; break; + case 0x17: m_oValue->m_sText = L"#REF!"; break; + case 0x1D: m_oValue->m_sText = L"#NAME?"; break; + case 0x24: m_oValue->m_sText = L"#NUM!"; break; + case 0x2A: m_oValue->m_sText = L"#N/A"; break; + case 0x2B: m_oValue->m_sText = L"#GETTING_DATA"; break; + } + } + break; + case XLSB::rt_ExternCellString: + { + auto pSt = reinterpret_cast(pSource)->value.value(); + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeInlineStr); + m_oValue.Init(); + m_oValue->m_sText = pSt; + } + break; + } + } + + } + + } + } + void CExternalCell::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"r"), m_oRef ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"t"), m_oType ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"vm"), m_oValueMetadata ) + WritingElement_ReadAttributes_End( oReader ) + } + + CExternalRow::CExternalRow() + { + } + CExternalRow::~CExternalRow() + { + } + void CExternalRow::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalRow::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + if (L"cell" == sName) + { + m_arrItems.push_back(new CExternalCell(oReader)); + } + } + } + void CExternalRow::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"GetValue()); + writer.WriteString(L">"); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + + writer.WriteString(L""); + } + std::wstring CExternalRow::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalRow::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CExternalRow::getType() const + { + return et_x_ExternalRow; + } + void CExternalRow::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + auto ptrExternRowHdr = static_cast(ptr->m_BrtExternRowHdr.get()); + if(ptrExternRowHdr != nullptr) + { + m_oR = ptrExternRowHdr->rw; + } + + for(auto &item : ptr->m_arEXTERNVALUE) + m_arrItems.push_back(new CExternalCell(item)); + } + } + void CExternalRow::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_ReadSingle( oReader, (L"r"), m_oR ) + WritingElement_ReadAttributes_End( oReader ) + } + + CExternalSheetData::CExternalSheetData() + { + } + CExternalSheetData::~CExternalSheetData() + { + } + void CExternalSheetData::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalSheetData::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + if (L"row" == sName) + { + m_arrItems.push_back(new CExternalRow(oReader)); + } + } + } + void CExternalSheetData::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"GetValue()); + WritingStringNullableAttrBool(L"refreshError", m_oRefreshError); + writer.WriteString(L">"); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + + writer.WriteString(L""); + } + std::wstring CExternalSheetData::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalSheetData::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CExternalSheetData::getType() const + { + return et_x_ExternalSheetData; + } + void CExternalSheetData::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + auto ptrExternTableStart = static_cast(ptr->m_BrtExternTableStart.get()); + if(ptrExternTableStart != nullptr) + { + m_oSheetId = ptrExternTableStart->iTab; + m_oRefreshError = ptrExternTableStart->fRefreshError; + } + + for(auto &item : ptr->m_arEXTERNROW) + m_arrItems.push_back(new CExternalRow(item)); + } + } + void CExternalSheetData::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"sheetId"), m_oSheetId ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"refreshError"), m_oRefreshError ) + WritingElement_ReadAttributes_End( oReader ) + } + + CExternalSheetDataSet::CExternalSheetDataSet() + { + } + CExternalSheetDataSet::~CExternalSheetDataSet() + { + } + void CExternalSheetDataSet::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalSheetDataSet::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + if (L"sheetData" == sName) + { + m_arrItems.push_back(new CExternalSheetData(oReader)); + } + } + } + void CExternalSheetDataSet::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + writer.WriteString(L""); + } + std::wstring CExternalSheetDataSet::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalSheetDataSet::fromBin(std::vector& obj) + { + for(auto &item : obj) + { + m_arrItems.push_back(new CExternalSheetData(item)); + } + } + EElementType CExternalSheetDataSet::getType() const + { + return et_x_ExternalSheetDataSet; + } + + CExternalBook::CExternalBook() + { + } + CExternalBook::~CExternalBook() + { + } + void CExternalBook::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CExternalBook::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"sheetNames" == sName) + { + m_oSheetNames = oReader; + } + else if (L"definedNames" == sName) + { + m_oDefinedNames = oReader; + } + else if (L"sheetDataSet" == sName) + { + m_oSheetDataSet = oReader; + } + } + } + void CExternalBook::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + writer.WriteString(L"\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\""); + } + writer.WriteString(L">"); + if (m_oSheetNames.IsInit()) + { + m_oSheetNames->toXML(writer); + } + if (m_oDefinedNames.IsInit()) + { + m_oDefinedNames->toXML(writer); + } + if (m_oSheetDataSet.IsInit()) + { + m_oSheetDataSet->toXML(writer); + } + writer.WriteString(L""); + } + std::wstring CExternalBook::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CExternalBook::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + ReadAttributes(ptr->m_BrtBeginSupBook); + + auto ptr1 = static_cast(ptr->m_EXTERNALBOOK.get()); + if(ptr1 != nullptr) + { + if(ptr1->m_BrtSupTabs != nullptr) + m_oSheetNames = ptr1->m_BrtSupTabs; + if(!ptr1->m_arEXTERNNAME.empty()) + m_oDefinedNames = ptr1->m_arEXTERNNAME; + if(!ptr1->m_arEXTERNTABLE.empty()) + m_oSheetDataSet = ptr1->m_arEXTERNTABLE; + } + } + } + EElementType CExternalBook::getType() const + { + return et_x_ExternalBook; + } + void CExternalBook::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + if(!ptr->string1.empty()) + m_oRid = ptr->string1; + } + } + void CExternalBook::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start_No_NS( oReader ) + WritingElement_ReadAttributes_ReadSingle( oReader, L"id", m_oRid ) + WritingElement_ReadAttributes_End_No_NS( oReader ) + } + + CDdeValue::CDdeValue() + { + } + CDdeValue::~CDdeValue() + { + } + void CDdeValue::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CDdeValue::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"val" == sName) + { + m_arrItems.push_back(new CText(oReader)); + } + } + } + void CDdeValue::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + writer.WriteString(L">"); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML2(writer, L"val"); + } + } + writer.WriteString(L""); + } + std::wstring CDdeValue::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CDdeValue::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CDdeValue::getType() const + { + return et_x_DdeValue; + } + void CDdeValue::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + + if(ptr->m_source != nullptr) + { + auto pSource = static_cast(ptr->m_source.get()); + auto nType = pSource->getTypeId(); + switch (nType) + { + case XLSB::rt_SupNameNum: + { + auto pRealNum = reinterpret_cast(pSource)->value.data.value; + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeN); + + auto text = new CText(); + std::wstring val = OOX::Spreadsheet::SpreadsheetCommon::WriteDouble(pRealNum); + text->fromBin(val); + m_arrItems.push_back(text); + } + break; + case XLSB::rt_SupNameBool: + { + auto pBool = reinterpret_cast(pSource)->value; + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeB); + + auto text = new CText(); + std::wstring val = pBool ? L"1" : L"0"; + text->fromBin(val); + m_arrItems.push_back(text); + } + break; + case XLSB::rt_SupNameErr: + { + auto pError = reinterpret_cast(pSource)->value; + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeE); + + auto text = new CText(); + std::wstring val; + switch(pError) + { + case 0x00: val = L"#NULL!"; break; + case 0x07: val = L"#DIV/0!"; break; + case 0x0F: val = L"#VALUE!"; break; + case 0x17: val = L"#REF!"; break; + case 0x1D: val = L"#NAME?"; break; + case 0x24: val = L"#NUM!"; break; + case 0x2A: val = L"#N/A"; break; + case 0x2B: val = L"#GETTING_DATA"; break; + } + text->fromBin(val); + m_arrItems.push_back(text); + } + break; + case XLSB::rt_SupNameSt: + { + auto pSt = reinterpret_cast(pSource)->value.value(); + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeStr); + + auto text = new CText(); + text->fromBin(pSt); + m_arrItems.push_back(text); + } + break; + case XLSB::rt_SupNameNil: + { + m_oType.Init(); + m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeNil);; + } + break; + } + } + } + } + void CDdeValue::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_ReadSingle( oReader, (L"t"), m_oType ) + WritingElement_ReadAttributes_End( oReader ) + } + + CDdeValues::CDdeValues() + { + } + CDdeValues::~CDdeValues() + { + } + void CDdeValues::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CDdeValues::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"value" == sName) + { + m_arrItems.push_back(new CDdeValue(oReader)); + } + } + } + void CDdeValues::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"GetValue()); + WritingStringNullableAttrInt(L"cols", m_oCols, m_oCols->GetValue()); + writer.WriteString(L">"); + + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + writer.WriteString(L""); + } + std::wstring CDdeValues::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CDdeValues::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + ReadAttributes(ptr->m_BrtSupNameValueStart); + + for(auto &item : ptr->m_arDDEOLEITEMVALUE) + m_arrItems.push_back(new CDdeValue(item)); + } + } + EElementType CDdeValues::getType() const + { + return et_x_DdeValues; + } + void CDdeValues::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + m_oRows = ptr->cRw; + m_oCols = ptr->cCol; + } + } + void CDdeValues::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"rows"), m_oRows ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"cols"), m_oCols ) + WritingElement_ReadAttributes_End( oReader ) + } + + CDdeItem::CDdeItem() + { + } + CDdeItem::~CDdeItem() + { + } + void CDdeItem::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CDdeItem::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"values" == sName) + { + m_oDdeValues = oReader; + } + } + } + void CDdeItem::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + if (m_oDdeValues.IsInit()) + { + m_oDdeValues->toXML(writer); + } + writer.WriteString(L""); + } + std::wstring CDdeItem::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CDdeItem::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType CDdeItem::getType() const + { + return et_x_OleItem; + } + void CDdeItem::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + if(ptr->m_DDEOLEITEMVALUES != nullptr) + m_oDdeValues = ptr->m_DDEOLEITEMVALUES; + + auto ptrSupNameStart = static_cast(ptr->m_BrtSupNameStart.get()); + if(ptrSupNameStart != nullptr) + { + if(!ptrSupNameStart->name.value().empty()) + m_oName = ptrSupNameStart->name.value(); + } + + auto ptrSupNameBits = static_cast(ptr->m_BrtSupNameBits.get()); + if(ptrSupNameBits != nullptr) + { + m_oOle = ptrSupNameBits->contentsDDE.fOLE; + m_oAdvise = ptrSupNameBits->contentsDDE.fWantAdvise; + m_oPreferPic = ptrSupNameBits->contentsDDE.fWantPict; + } + } + } + void CDdeItem::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"name"), m_oName ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"ole"), m_oOle ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"advise"), m_oAdvise ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"preferPic"), m_oPreferPic ) + WritingElement_ReadAttributes_End( oReader ) + } + + CDdeItems::CDdeItems() + { + } + CDdeItems::~CDdeItems() + { + } + void CDdeItems::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CDdeItems::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"ddeItem" == sName) + { + m_arrItems.push_back(new CDdeItem(oReader)); + } + } + } + void CDdeItems::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + writer.WriteString(L""); + } + std::wstring CDdeItems::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CDdeItems::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + for(auto &item : ptr->m_arDDEOLEITEM) + m_arrItems.push_back(new CDdeItem(item)); + } + } + EElementType CDdeItems::getType() const + { + return et_x_DdeItems; + } + + CDdeLink::CDdeLink() + { + } + CDdeLink::~CDdeLink() + { + } + void CDdeLink::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void CDdeLink::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"ddeItems" == sName) + { + m_oDdeItems = oReader; + } + } + } + void CDdeLink::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + if (m_oDdeItems.IsInit()) + { + m_oDdeItems->toXML(writer); + } + writer.WriteString(L""); + } + std::wstring CDdeLink::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void CDdeLink::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + ReadAttributes(ptr->m_BrtBeginSupBook); + + if(ptr->m_DDEOLELINK != nullptr) + m_oDdeItems = ptr->m_DDEOLELINK; + } + } + EElementType CDdeLink::getType() const + { + return et_x_DdeLink; + } + void CDdeLink::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + if(!ptr->string1.empty()) + m_oDdeService = ptr->string1; + if(!ptr->string2.empty()) + m_oDdeTopic = ptr->string2; + } + } + void CDdeLink::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"ddeService"), m_oDdeService ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"ddeTopic"), m_oDdeTopic ) + WritingElement_ReadAttributes_End( oReader ) + } + + COleItem::COleItem() + { + } + COleItem::~COleItem() + { + } + void COleItem::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void COleItem::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( !oReader.IsEmptyNode() ) + oReader.ReadTillEnd(); + } + void COleItem::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + } + std::wstring COleItem::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void COleItem::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType COleItem::getType() const + { + return et_x_OleItem; + } + void COleItem::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + auto ptrSupNameStart = static_cast(ptr->m_BrtSupNameStart.get()); + if(ptrSupNameStart != nullptr) + { + if(!ptrSupNameStart->name.value().empty()) + m_oName = ptrSupNameStart->name.value(); + } + + auto ptrSupNameBits = static_cast(ptr->m_BrtSupNameBits.get()); + if(ptrSupNameBits != nullptr) + { + m_oIcon = ptrSupNameBits->contentsOLE.fIcon; + m_oAdvise = ptrSupNameBits->contentsOLE.fWantAdvise; + m_oPreferPic = ptrSupNameBits->contentsOLE.fWantPict; + } + } + } + void COleItem::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"name"), m_oName ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"icon"), m_oIcon ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"advise"), m_oAdvise ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"preferPic"), m_oPreferPic ) + WritingElement_ReadAttributes_End( oReader ) + } + + COleItems::COleItems() + { + } + COleItems::~COleItems() + { + } + void COleItems::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void COleItems::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"oleItem" == sName) + { + m_arrItems.push_back(new COleItem(oReader)); + } + } + } + void COleItems::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L""); + for ( size_t i = 0; i < m_arrItems.size(); ++i) + { + if ( m_arrItems[i] ) + { + m_arrItems[i]->toXML(writer); + } + } + writer.WriteString(L""); + } + std::wstring COleItems::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void COleItems::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + for(auto &item : ptr->m_arDDEOLEITEM) + m_arrItems.push_back(new COleItem(item)); + } + } + EElementType COleItems::getType() const + { + return et_x_OleItems; + } + + COleLink::COleLink() + { + } + COleLink::~COleLink() + { + } + void COleLink::fromXML(XmlUtils::CXmlNode& oNode) + { + // TO DO: Реализовать + } + void COleLink::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes(oReader); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = oReader.GetName(); + + if (L"oleItems" == sName) + { + m_oOleItems = oReader; + } + } + } + void COleLink::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrEncodeXmlString(L"progId", m_oProgId, m_oProgId.get()); + writer.WriteString(L">"); + if (m_oOleItems.IsInit()) + { + m_oOleItems->toXML(writer); + } + writer.WriteString(L""); + } + std::wstring COleLink::toXML() const + { + NSStringUtils::CStringBuilder writer; + toXML(writer); + return writer.GetData().c_str(); + } + void COleLink::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + ReadAttributes(ptr->m_BrtBeginSupBook); + + if(ptr->m_DDEOLELINK != nullptr) + m_oOleItems = ptr->m_DDEOLELINK; + } + } + EElementType COleLink::getType() const + { + return et_x_OleLink; + } + void COleLink::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + if(!ptr->string1.empty()) + m_oRid = ptr->string1; + if(!ptr->string2.empty()) + m_oProgId = ptr->string2; + } + } + void COleLink::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"r:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"relationships:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"progId"), m_oProgId ) + WritingElement_ReadAttributes_End( oReader ) + } + + CExternalLink::CExternalLink(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + } + CExternalLink::CExternalLink(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath, const std::wstring & rId) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + m_rId = rId; + read( oRootPath, oPath ); + } + CExternalLink::~CExternalLink() + { + } + void CExternalLink::readBin(const CPath& oPath) + { + CXlsb* xlsb = dynamic_cast(File::m_pMainDocument); + if (xlsb) + { + XLSB::ExternalLinkStreamPtr externalLinkStreamStream(new XLSB::ExternalLinkStream); + + xlsb->ReadBin(oPath, externalLinkStreamStream.get()); + + externalLinkStreamStream->UpdateXti(xlsb->GetGlobalinfo(), m_rId); + + if (externalLinkStreamStream != nullptr) + { + if (externalLinkStreamStream->m_EXTERNALLINK != nullptr) + { + auto ptr = static_cast(externalLinkStreamStream->m_EXTERNALLINK.get()); + if(ptr != nullptr) + { + auto ptr1 = static_cast(ptr->m_BrtBeginSupBook.get()); + if(ptr1 != nullptr) + { + switch (ptr1->sbt.value().get()) + { + case XLSB::ExternalReferenceType::WORKBOOK: + m_oExternalBook = externalLinkStreamStream->m_EXTERNALLINK; + break; + case XLSB::ExternalReferenceType::DDE: + m_oDdeLink = externalLinkStreamStream->m_EXTERNALLINK; + break; + case XLSB::ExternalReferenceType::OLE: + m_oOleLink = externalLinkStreamStream->m_EXTERNALLINK; + break; + } + } + } + } + } + + //externalLinkStreamStream.reset(); + } + } + void CExternalLink::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + void CExternalLink::read(const CPath& oRootPath, const CPath& oPath) + { + m_oReadPath = oPath; + IFileContainer::Read( oRootPath, oPath ); + + if( m_oReadPath.GetExtention() == _T(".bin")) + { + readBin(m_oReadPath); + return; + } + + XmlUtils::CXmlLiteReader oReader; + + if ( !oReader.FromFile( oPath.GetPath() ) ) + return; + + if ( !oReader.ReadNextNode() ) + return; + + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( (L"externalLink") == sName ) + { + ReadAttributes( oReader ); + + if ( !oReader.IsEmptyNode() ) + { + int nStylesDepth = oReader.GetDepth(); + while ( oReader.ReadNextSiblingNode( nStylesDepth ) ) + { + sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( (L"externalBook") == sName ) + { + m_oExternalBook = oReader; + } + else if ( (L"oleLink") == sName ) + { + m_oOleLink = oReader; + } + else if ( (L"ddeLink") == sName ) + { + m_oDdeLink = oReader; + } + } + } + } + + } + void CExternalLink::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const + { + NSStringUtils::CStringBuilder sXml; + sXml.WriteString((L"")); + sXml.WriteString((L"")); + + if (m_oExternalBook.IsInit()) + { + m_oExternalBook->toXML(sXml); + } + if (m_oOleLink.IsInit()) + { + m_oOleLink->toXML(sXml); + } + if (m_oDdeLink.IsInit()) + { + m_oDdeLink->toXML(sXml); + } + + sXml.WriteString((L"")); + + std::wstring sPath = oPath.GetPath(); + NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); + + oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); + IFileContainer::Write(oPath, oDirectory, oContent); + } + bool CExternalLink::isValid() const + { + return true; + } + const OOX::FileType CExternalLink::type() const + { + return OOX::Spreadsheet::FileTypes::ExternalLinks; + } + const CPath CExternalLink::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CExternalLink::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CExternalLink::GetReadPath() + { + return m_oReadPath; + } + void CExternalLink::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + } //ExternalLink +} // namespace OOX diff --git a/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.h b/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.h index d3f68fdc86..7b2d88cb0e 100644 --- a/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.h +++ b/OOXML/XlsxFormat/ExternalLinks/ExternalLinks.h @@ -70,71 +70,18 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalSheetNames) WritingElement_XlsbConstructors(CExternalSheetNames) - CExternalSheetNames() - { - } - virtual ~CExternalSheetNames() - { - } + CExternalSheetNames(); + virtual ~CExternalSheetNames(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - if (L"sheetName" == sName) - { - m_arrItems.push_back(new ComplexTypes::Spreadsheet::String(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - for (size_t i = 0; i < m_arrItems.size(); ++i) - { - if (m_arrItems[i]) - { - writer.WriteString(L"ToString2()); - writer.WriteString(L"/>"); - } - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - for(auto &item : ptr->sheetNames) - { - auto str = new ComplexTypes::Spreadsheet::String; - str->m_sVal = item.value(); - m_arrItems.push_back(str); - } - } - } - virtual EElementType getType() const - { - return et_x_ExternalSheetNames; - } + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; }; class CExternalDefinedName : public WritingElement @@ -142,84 +89,23 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalDefinedName) WritingElement_XlsbConstructors(CExternalDefinedName) - CExternalDefinedName() - { - } - virtual ~CExternalDefinedName() - { - } + CExternalDefinedName(); + virtual ~CExternalDefinedName(); + public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"GetValue()); - writer.WriteString(L"/>"); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType() const - { - return et_x_ExternalDefinedName; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - auto ptrSupNameStart = static_cast(ptr->m_BrtSupNameStart.get()); - if(ptrSupNameStart != nullptr) - { - if(!ptrSupNameStart->name.value().empty()) - m_oName = ptrSupNameStart->name.value(); - } + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - auto ptrSupNameFmla = static_cast(ptr->m_BrtSupNameFmla.get()); - if(ptrSupNameFmla != nullptr) - { - auto ref = ptrSupNameFmla->fmla.getAssembledFormula(); - if(!ref.empty()) - m_oRefersTo = ref; - } + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - auto ptrSupNameBits = static_cast(ptr->m_BrtSupNameBits.get()); - if(ptrSupNameBits != nullptr) - { - m_oSheetId = ptrSupNameBits->contentsExtName.iSheet; - } - - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"name"), m_oName ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"refersTo"), m_oRefersTo ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"sheetId"), m_oSheetId ) - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oName; nullable m_oRefersTo; @@ -231,63 +117,18 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalDefinedNames) WritingElement_XlsbVectorConstructors(CExternalDefinedNames) - CExternalDefinedNames() - { - } - virtual ~CExternalDefinedNames() - { - } + CExternalDefinedNames(); + virtual ~CExternalDefinedNames(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - if (L"definedName" == sName) - { - m_arrItems.push_back(new CExternalDefinedName(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(std::vector& obj) - { - for(auto &item : obj) - { - m_arrItems.push_back(new CExternalDefinedName(item)); - } - } - virtual EElementType getType() const - { - return et_x_ExternalDefinedNames; - } + void fromBin(std::vector& obj); + virtual EElementType getType() const; }; class CExternalCell : public WritingElement @@ -295,147 +136,23 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalCell) WritingElement_XlsbConstructors(CExternalCell) - CExternalCell() - { - } - virtual ~CExternalCell() - { - } + CExternalCell(); + virtual ~CExternalCell(); public: - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - if (L"v" == sName) - { - m_oValue = oReader; - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrInt(L"vm", m_oValueMetadata, m_oValueMetadata->GetValue()); - writer.WriteString(L">"); - if(m_oValue.IsInit()) - m_oValue->toXML2(writer, (L"v")); - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType() const - { - return et_x_ExternalCell; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - auto ptrExternValueMeta = static_cast(ptr->m_BrtExternValueMeta.get()); - if(ptrExternValueMeta != nullptr) - { - m_oValueMetadata = ptrExternValueMeta->ivmb; - } + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - auto ptrEXTERNVALUEDATA = static_cast(ptr->m_EXTERNVALUEDATA.get()); - if(ptrEXTERNVALUEDATA != nullptr) - { - if(!ptrEXTERNVALUEDATA->m_Ref.empty()) - m_oRef = ptrEXTERNVALUEDATA->m_Ref; + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - if(ptrEXTERNVALUEDATA->m_source != nullptr) - { - auto pSource = static_cast(ptrEXTERNVALUEDATA->m_source.get()); - auto nType = pSource->getTypeId(); - switch (nType) - { - case XLSB::rt_ExternCellBlank: - break; - case XLSB::rt_ExternCellReal: - { - auto pRealNum = reinterpret_cast(pSource)->value.data.value; - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeDate); - m_oValue.Init(); - m_oValue->m_sText = OOX::Spreadsheet::SpreadsheetCommon::WriteDouble(pRealNum); - } - break; - case XLSB::rt_ExternCellBool: - { - auto pBool = reinterpret_cast(pSource)->value; - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeBool); - m_oValue.Init(); - m_oValue->m_sText = pBool ? L"1" : L"0"; - } - break; - case XLSB::rt_ExternCellError: - { - auto pError = reinterpret_cast(pSource)->value; - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeError); - m_oValue.Init(); - switch(pError) - { - case 0x00: m_oValue->m_sText = L"#NULL!"; break; - case 0x07: m_oValue->m_sText = L"#DIV/0!"; break; - case 0x0F: m_oValue->m_sText = L"#VALUE!"; break; - case 0x17: m_oValue->m_sText = L"#REF!"; break; - case 0x1D: m_oValue->m_sText = L"#NAME?"; break; - case 0x24: m_oValue->m_sText = L"#NUM!"; break; - case 0x2A: m_oValue->m_sText = L"#N/A"; break; - case 0x2B: m_oValue->m_sText = L"#GETTING_DATA"; break; - } - } - break; - case XLSB::rt_ExternCellString: - { - auto pSt = reinterpret_cast(pSource)->value.value(); - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::celltypeInlineStr); - m_oValue.Init(); - m_oValue->m_sText = pSt; - } - break; - } - } - - } - - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"r"), m_oRef ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"t"), m_oType ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"vm"), m_oValueMetadata ) - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oRef; nullable m_oType; @@ -449,87 +166,22 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalRow) WritingElement_XlsbConstructors(CExternalRow) - CExternalRow() - { - } - virtual ~CExternalRow() - { - } + CExternalRow(); + virtual ~CExternalRow(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - if (L"cell" == sName) - { - m_arrItems.push_back(new CExternalCell(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"GetValue()); - writer.WriteString(L">"); - - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType() const - { - return et_x_ExternalRow; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - auto ptrExternRowHdr = static_cast(ptr->m_BrtExternRowHdr.get()); - if(ptrExternRowHdr != nullptr) - { - m_oR = ptrExternRowHdr->rw; - } + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - for(auto &item : ptr->m_arEXTERNVALUE) - m_arrItems.push_back(new CExternalCell(item)); - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_ReadSingle( oReader, (L"r"), m_oR ) - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oR; }; @@ -539,90 +191,21 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalSheetData) WritingElement_XlsbConstructors(CExternalSheetData) - CExternalSheetData() - { - } - virtual ~CExternalSheetData() - { - } + CExternalSheetData(); + virtual ~CExternalSheetData(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - if (L"row" == sName) - { - m_arrItems.push_back(new CExternalRow(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"GetValue()); - WritingStringNullableAttrBool(L"refreshError", m_oRefreshError); - writer.WriteString(L">"); - - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType() const - { - return et_x_ExternalSheetData; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - auto ptrExternTableStart = static_cast(ptr->m_BrtExternTableStart.get()); - if(ptrExternTableStart != nullptr) - { - m_oSheetId = ptrExternTableStart->iTab; - m_oRefreshError = ptrExternTableStart->fRefreshError; - } - - for(auto &item : ptr->m_arEXTERNROW) - m_arrItems.push_back(new CExternalRow(item)); - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"sheetId"), m_oSheetId ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"refreshError"), m_oRefreshError ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); public: nullable m_oSheetId; @@ -634,63 +217,18 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalSheetDataSet) WritingElement_XlsbVectorConstructors(CExternalSheetDataSet) - CExternalSheetDataSet() - { - } - virtual ~CExternalSheetDataSet() - { - } + CExternalSheetDataSet(); + virtual ~CExternalSheetDataSet(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - if (L"sheetData" == sName) - { - m_arrItems.push_back(new CExternalSheetData(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(std::vector& obj) - { - for(auto &item : obj) - { - m_arrItems.push_back(new CExternalSheetData(item)); - } - } - virtual EElementType getType() const - { - return et_x_ExternalSheetDataSet; - } + void fromBin(std::vector& obj); + virtual EElementType getType() const; }; class CExternalBook : public WritingElement @@ -698,115 +236,23 @@ namespace OOX public: WritingElement_AdditionConstructors(CExternalBook) WritingElement_XlsbConstructors(CExternalBook) - CExternalBook() - { - } - virtual ~CExternalBook() - { - } + CExternalBook(); + virtual ~CExternalBook(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); - - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - if (L"sheetNames" == sName) - { - m_oSheetNames = oReader; - } - else if (L"definedNames" == sName) - { - m_oDefinedNames = oReader; - } - else if (L"sheetDataSet" == sName) - { - m_oSheetDataSet = oReader; - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - writer.WriteString(L"\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\""); - } - writer.WriteString(L">"); - if (m_oSheetNames.IsInit()) - { - m_oSheetNames->toXML(writer); - } - if (m_oDefinedNames.IsInit()) - { - m_oDefinedNames->toXML(writer); - } - if (m_oSheetDataSet.IsInit()) - { - m_oSheetDataSet->toXML(writer); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - ReadAttributes(ptr->m_BrtBeginSupBook); + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - auto ptr1 = static_cast(ptr->m_EXTERNALBOOK.get()); - if(ptr1 != nullptr) - { - if(ptr1->m_BrtSupTabs != nullptr) - m_oSheetNames = ptr1->m_BrtSupTabs; - if(!ptr1->m_arEXTERNNAME.empty()) - m_oDefinedNames = ptr1->m_arEXTERNNAME; - if(!ptr1->m_arEXTERNTABLE.empty()) - m_oSheetDataSet = ptr1->m_arEXTERNTABLE; - } - } - } - virtual EElementType getType() const - { - return et_x_ExternalBook; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - if(!ptr->string1.empty()) - m_oRid = ptr->string1; - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start_No_NS( oReader ) - WritingElement_ReadAttributes_ReadSingle( oReader, L"id", m_oRid ) - WritingElement_ReadAttributes_End_No_NS( oReader ) - } public: - nullable m_oRid; nullable m_oSheetNames; @@ -819,149 +265,21 @@ namespace OOX public: WritingElement_AdditionConstructors(CDdeValue) WritingElement_XlsbConstructors(CDdeValue) - CDdeValue() - { - } - virtual ~CDdeValue() - { - } - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + CDdeValue(); + virtual ~CDdeValue(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; - if (L"val" == sName) - { - m_arrItems.push_back(new CText(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - writer.WriteString(L">"); + virtual std::wstring toXML() const; + void fromBin(XLS::BaseObjectPtr& obj); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML2(writer, L"val"); - } - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType() const - { - return et_x_DdeValue; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { + virtual EElementType getType() const; + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - if(ptr->m_source != nullptr) - { - auto pSource = static_cast(ptr->m_source.get()); - auto nType = pSource->getTypeId(); - switch (nType) - { - case XLSB::rt_SupNameNum: - { - auto pRealNum = reinterpret_cast(pSource)->value.data.value; - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeN); - - auto text = new CText(); - std::wstring val = OOX::Spreadsheet::SpreadsheetCommon::WriteDouble(pRealNum); - text->fromBin(val); - m_arrItems.push_back(text); - } - break; - case XLSB::rt_SupNameBool: - { - auto pBool = reinterpret_cast(pSource)->value; - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeB); - - auto text = new CText(); - std::wstring val = pBool ? L"1" : L"0"; - text->fromBin(val); - m_arrItems.push_back(text); - } - break; - case XLSB::rt_SupNameErr: - { - auto pError = reinterpret_cast(pSource)->value; - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeE); - - auto text = new CText(); - std::wstring val; - switch(pError) - { - case 0x00: val = L"#NULL!"; break; - case 0x07: val = L"#DIV/0!"; break; - case 0x0F: val = L"#VALUE!"; break; - case 0x17: val = L"#REF!"; break; - case 0x1D: val = L"#NAME?"; break; - case 0x24: val = L"#NUM!"; break; - case 0x2A: val = L"#N/A"; break; - case 0x2B: val = L"#GETTING_DATA"; break; - } - text->fromBin(val); - m_arrItems.push_back(text); - } - break; - case XLSB::rt_SupNameSt: - { - auto pSt = reinterpret_cast(pSource)->value.value(); - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeStr); - - auto text = new CText(); - text->fromBin(pSt); - m_arrItems.push_back(text); - } - break; - case XLSB::rt_SupNameNil: - { - m_oType.Init(); - m_oType->SetValue(SimpleTypes::Spreadsheet::EDdeValueType::ddevaluetypeNil);; - } - break; - } - } - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_ReadSingle( oReader, (L"t"), m_oType ) - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oType; }; @@ -971,90 +289,22 @@ namespace OOX public: WritingElement_AdditionConstructors(CDdeValues) WritingElement_XlsbConstructors(CDdeValues) - CDdeValues() - { - } - virtual ~CDdeValues() - { - } + CDdeValues(); + virtual ~CDdeValues(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - if (L"value" == sName) - { - m_arrItems.push_back(new CDdeValue(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"GetValue()); - WritingStringNullableAttrInt(L"cols", m_oCols, m_oCols->GetValue()); - writer.WriteString(L">"); - - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - ReadAttributes(ptr->m_BrtSupNameValueStart); - - for(auto &item : ptr->m_arDDEOLEITEMVALUE) - m_arrItems.push_back(new CDdeValue(item)); - } - } - virtual EElementType getType() const - { - return et_x_DdeValues; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - m_oRows = ptr->cRw; - m_oCols = ptr->cCol; - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"rows"), m_oRows ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"cols"), m_oCols ) - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oRows; nullable m_oCols; @@ -1065,98 +315,21 @@ namespace OOX public: WritingElement_AdditionConstructors(CDdeItem) WritingElement_XlsbConstructors(CDdeItem) - CDdeItem() - { - } - virtual ~CDdeItem() - { - } + CDdeItem(); + virtual ~CDdeItem(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - - if (L"values" == sName) - { - m_oDdeValues = oReader; - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - if (m_oDdeValues.IsInit()) - { - m_oDdeValues->toXML(writer); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType() const - { - return et_x_OleItem; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - if(ptr->m_DDEOLEITEMVALUES != nullptr) - m_oDdeValues = ptr->m_DDEOLEITEMVALUES; - - auto ptrSupNameStart = static_cast(ptr->m_BrtSupNameStart.get()); - if(ptrSupNameStart != nullptr) - { - if(!ptrSupNameStart->name.value().empty()) - m_oName = ptrSupNameStart->name.value(); - } - - auto ptrSupNameBits = static_cast(ptr->m_BrtSupNameBits.get()); - if(ptrSupNameBits != nullptr) - { - m_oOle = ptrSupNameBits->contentsDDE.fOLE; - m_oAdvise = ptrSupNameBits->contentsDDE.fWantAdvise; - m_oPreferPic = ptrSupNameBits->contentsDDE.fWantPict; - } - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"name"), m_oName ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"ole"), m_oOle ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"advise"), m_oAdvise ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"preferPic"), m_oPreferPic ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); public: nullable m_oName; @@ -1172,63 +345,17 @@ namespace OOX public: WritingElement_AdditionConstructors(CDdeItems) WritingElement_XlsbConstructors(CDdeItems) - CDdeItems() - { - } - virtual ~CDdeItems() - { - } - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - if ( oReader.IsEmptyNode() ) - return; + CDdeItems(); + virtual ~CDdeItems(); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if (L"ddeItem" == sName) - { - m_arrItems.push_back(new CDdeItem(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - for(auto &item : ptr->m_arDDEOLEITEM) - m_arrItems.push_back(new CDdeItem(item)); - } - } - virtual EElementType getType() const - { - return et_x_DdeItems; - } + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; + + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; }; class CDdeLink : public WritingElement @@ -1236,90 +363,23 @@ namespace OOX public: WritingElement_AdditionConstructors(CDdeLink) WritingElement_XlsbConstructors(CDdeLink) - CDdeLink() - { - } - virtual ~CDdeLink() - { - } + CDdeLink(); + virtual ~CDdeLink(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - if (L"ddeItems" == sName) - { - m_oDdeItems = oReader; - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - if (m_oDdeItems.IsInit()) - { - m_oDdeItems->toXML(writer); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - ReadAttributes(ptr->m_BrtBeginSupBook); - - if(ptr->m_DDEOLELINK != nullptr) - m_oDdeItems = ptr->m_DDEOLELINK; - } - } - virtual EElementType getType() const - { - return et_x_DdeLink; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - if(!ptr->string1.empty()) - m_oDdeService = ptr->string1; - if(!ptr->string2.empty()) - m_oDdeTopic = ptr->string2; - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"ddeService"), m_oDdeService ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"ddeTopic"), m_oDdeTopic ) - WritingElement_ReadAttributes_End( oReader ) - } public: - nullable m_oDdeService; nullable m_oDdeTopic; @@ -1331,79 +391,21 @@ namespace OOX public: WritingElement_AdditionConstructors(COleItem) WritingElement_XlsbConstructors(COleItem) - COleItem() - { - } - virtual ~COleItem() - { - } + COleItem(); + virtual ~COleItem(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( !oReader.IsEmptyNode() ) - oReader.ReadTillEnd(); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType() const - { - return et_x_OleItem; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - auto ptrSupNameStart = static_cast(ptr->m_BrtSupNameStart.get()); - if(ptrSupNameStart != nullptr) - { - if(!ptrSupNameStart->name.value().empty()) - m_oName = ptrSupNameStart->name.value(); - } + void fromBin(XLS::BaseObjectPtr& obj);; + virtual EElementType getType() const; - auto ptrSupNameBits = static_cast(ptr->m_BrtSupNameBits.get()); - if(ptrSupNameBits != nullptr) - { - m_oIcon = ptrSupNameBits->contentsOLE.fIcon; - m_oAdvise = ptrSupNameBits->contentsOLE.fWantAdvise; - m_oPreferPic = ptrSupNameBits->contentsOLE.fWantPict; - } - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"name"), m_oName ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"icon"), m_oIcon ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"advise"), m_oAdvise ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"preferPic"), m_oPreferPic ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); public: nullable m_oName; @@ -1417,66 +419,18 @@ namespace OOX public: WritingElement_AdditionConstructors(COleItems) WritingElement_XlsbConstructors(COleItems) - COleItems() - { - } - virtual ~COleItems() - { - } + COleItems(); + virtual ~COleItems(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - - if (L"oleItem" == sName) - { - m_arrItems.push_back(new COleItem(oReader)); - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L""); - for ( size_t i = 0; i < m_arrItems.size(); ++i) - { - if ( m_arrItems[i] ) - { - m_arrItems[i]->toXML(writer); - } - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - for(auto &item : ptr->m_arDDEOLEITEM) - m_arrItems.push_back(new COleItem(item)); - } - } - virtual EElementType getType() const - { - return et_x_OleItems; - } + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; }; class COleLink : public WritingElement @@ -1484,89 +438,21 @@ namespace OOX public: WritingElement_AdditionConstructors(COleLink) WritingElement_XlsbConstructors(COleLink) - COleLink() - { - } - virtual ~COleLink() - { - } + COleLink(); + virtual ~COleLink(); public: + virtual void fromXML(XmlUtils::CXmlNode& oNode); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - virtual void fromXML(XmlUtils::CXmlNode& oNode) - { - // TO DO: Реализовать - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes(oReader); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = oReader.GetName(); - - if (L"oleItems" == sName) - { - m_oOleItems = oReader; - } - } - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrEncodeXmlString(L"progId", m_oProgId, m_oProgId.get()); - writer.WriteString(L">"); - if (m_oOleItems.IsInit()) - { - m_oOleItems->toXML(writer); - } - writer.WriteString(L""); - } - virtual std::wstring toXML() const - { - NSStringUtils::CStringBuilder writer; - toXML(writer); - return writer.GetData().c_str(); - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - ReadAttributes(ptr->m_BrtBeginSupBook); - - if(ptr->m_DDEOLELINK != nullptr) - m_oOleItems = ptr->m_DDEOLELINK; - } - } - virtual EElementType getType() const - { - return et_x_OleLink; - } - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - if(!ptr->string1.empty()) - m_oRid = ptr->string1; - if(!ptr->string2.empty()) - m_oProgId = ptr->string2; - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"r:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"relationships:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"progId"), m_oProgId ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); nullable m_oRid; nullable m_oProgId; @@ -1577,162 +463,23 @@ namespace OOX class CExternalLink : public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CExternalLink(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - } - CExternalLink(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath, const std::wstring & rId) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - m_rId = rId; - read( oRootPath, oPath ); - } - virtual ~CExternalLink() - { - } - void readBin(const CPath& oPath) - { - CXlsb* xlsb = dynamic_cast(File::m_pMainDocument); - if (xlsb) - { - XLSB::ExternalLinkStreamPtr externalLinkStreamStream(new XLSB::ExternalLinkStream); + CExternalLink(OOX::Document* pMain); + CExternalLink(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath, const std::wstring & rId); + virtual ~CExternalLink(); - xlsb->ReadBin(oPath, externalLinkStreamStream.get()); + void readBin(const CPath& oPath); + virtual void read(const CPath& oPath); + virtual void read(const CPath& oRootPath, const CPath& oPath); - externalLinkStreamStream->UpdateXti(xlsb->GetGlobalinfo(), m_rId); + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - if (externalLinkStreamStream != nullptr) - { - if (externalLinkStreamStream->m_EXTERNALLINK != nullptr) - { - auto ptr = static_cast(externalLinkStreamStream->m_EXTERNALLINK.get()); - if(ptr != nullptr) - { - auto ptr1 = static_cast(ptr->m_BrtBeginSupBook.get()); - if(ptr1 != nullptr) - { - switch (ptr1->sbt.value().get()) - { - case XLSB::ExternalReferenceType::WORKBOOK: - m_oExternalBook = externalLinkStreamStream->m_EXTERNALLINK; - break; - case XLSB::ExternalReferenceType::DDE: - m_oDdeLink = externalLinkStreamStream->m_EXTERNALLINK; - break; - case XLSB::ExternalReferenceType::OLE: - m_oOleLink = externalLinkStreamStream->m_EXTERNALLINK; - break; - } - } - } - } - } + bool isValid() const; + virtual const OOX::FileType type() const; - //externalLinkStreamStream.reset(); - } - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } - virtual void read(const CPath& oRootPath, const CPath& oPath) - { - m_oReadPath = oPath; - IFileContainer::Read( oRootPath, oPath ); + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; - if( m_oReadPath.GetExtention() == _T(".bin")) - { - readBin(m_oReadPath); - return; - } - - XmlUtils::CXmlLiteReader oReader; - - if ( !oReader.FromFile( oPath.GetPath() ) ) - return; - - if ( !oReader.ReadNextNode() ) - return; - - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( (L"externalLink") == sName ) - { - ReadAttributes( oReader ); - - if ( !oReader.IsEmptyNode() ) - { - int nStylesDepth = oReader.GetDepth(); - while ( oReader.ReadNextSiblingNode( nStylesDepth ) ) - { - sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( (L"externalBook") == sName ) - { - m_oExternalBook = oReader; - } - else if ( (L"oleLink") == sName ) - { - m_oOleLink = oReader; - } - else if ( (L"ddeLink") == sName ) - { - m_oDdeLink = oReader; - } - } - } - } - - } - virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const - { - NSStringUtils::CStringBuilder sXml; - sXml.WriteString((L"")); - sXml.WriteString((L"")); - - if (m_oExternalBook.IsInit()) - { - m_oExternalBook->toXML(sXml); - } - if (m_oOleLink.IsInit()) - { - m_oOleLink->toXML(sXml); - } - if (m_oDdeLink.IsInit()) - { - m_oDdeLink->toXML(sXml); - } - - sXml.WriteString((L"")); - - std::wstring sPath = oPath.GetPath(); - NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); - - oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); - IFileContainer::Write(oPath, oDirectory, oContent); - } - - bool isValid() const - { - return true; - } - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::ExternalLinks; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } + const CPath& GetReadPath(); nullable m_oExternalBook; nullable m_oOleLink; @@ -1740,10 +487,10 @@ namespace OOX private: CPath m_oReadPath; std::wstring m_rId; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); }; + } //ExternalLink } // namespace OOX diff --git a/OOXML/XlsxFormat/FileFactory_Spreadsheet.cpp b/OOXML/XlsxFormat/FileFactory_Spreadsheet.cpp index 274fb983ef..86d56eff69 100644 --- a/OOXML/XlsxFormat/FileFactory_Spreadsheet.cpp +++ b/OOXML/XlsxFormat/FileFactory_Spreadsheet.cpp @@ -67,7 +67,7 @@ #include "../DocxFormat/Diagram/DiagramColors.h" #include "../DocxFormat/Diagram/DiagramLayout.h" #include "../DocxFormat/Diagram/DiagramQuickStyle.h" -#include "Chart//ChartDrawing.h" +#include "Chart/ChartDrawing.h" #ifdef CreateFile #undef CreateFile diff --git a/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.cpp b/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.cpp index 43609b43d6..73d9a4af13 100644 --- a/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.cpp +++ b/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.cpp @@ -721,6 +721,37 @@ namespace Spreadsheet pReader->Seek(_end_rec); } + CNamedSheetViewFile::CNamedSheetViewFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + } + CNamedSheetViewFile::CNamedSheetViewFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) + { + m_bSpreadsheets = true; + read( oRootPath, oPath ); + } + void CNamedSheetViewFile::read(const CPath& oPath) + { + //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) + CPath oRootPath; + read(oRootPath, oPath); + } + const OOX::FileType CNamedSheetViewFile::type() const + { + return OOX::Spreadsheet::FileTypes::NamedSheetView; + } + const CPath CNamedSheetViewFile::DefaultDirectory() const + { + return type().DefaultDirectory(); + } + const CPath CNamedSheetViewFile::DefaultFileName() const + { + return type().DefaultFileName(); + } + const CPath& CNamedSheetViewFile::GetReadPath() + { + return m_oReadPath; + } void CNamedSheetViewFile::read(const CPath& oRootPath, const CPath& oPath) { m_oReadPath = oPath; @@ -752,6 +783,9 @@ namespace Spreadsheet oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); IFileContainer::Write( oPath, oDirectory, oContent ); } + void CNamedSheetViewFile::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } } //Spreadsheet } // namespace OOX diff --git a/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.h b/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.h index d2b784e8ef..1f51687748 100644 --- a/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.h +++ b/OOXML/XlsxFormat/NamedSheetViews/NamedSheetViews.h @@ -205,47 +205,27 @@ namespace OOX class CNamedSheetViewFile : public OOX::FileGlobalEnumerated, public OOX::IFileContainer { public: - CNamedSheetViewFile(OOX::Document* pMain) : OOX::FileGlobalEnumerated(pMain), OOX::IFileContainer(pMain) - { - m_bSpreadsheets = true; - } - CNamedSheetViewFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath) : OOX::FileGlobalEnumerated(pMain), OOX:: -IFileContainer(pMain) - { - m_bSpreadsheets = true; - read( oRootPath, oPath ); - } - virtual void read(const CPath& oPath) - { - //don't use this. use read(const CPath& oRootPath, const CPath& oFilePath) - CPath oRootPath; - read(oRootPath, oPath); - } + CNamedSheetViewFile(OOX::Document* pMain); + CNamedSheetViewFile(OOX::Document* pMain, const CPath& oRootPath, const CPath& oPath); + + virtual void read(const CPath& oPath); virtual void read(const CPath& oRootPath, const CPath& oPath); + virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const; - virtual const OOX::FileType type() const - { - return OOX::Spreadsheet::FileTypes::NamedSheetView; - } - virtual const CPath DefaultDirectory() const - { - return type().DefaultDirectory(); - } - virtual const CPath DefaultFileName() const - { - return type().DefaultFileName(); - } - const CPath& GetReadPath() - { - return m_oReadPath; - } + virtual const OOX::FileType type() const; + + virtual const CPath DefaultDirectory() const; + virtual const CPath DefaultFileName() const; + + const CPath& GetReadPath(); nullable m_oNamedSheetViews; + private: CPath m_oReadPath; - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); }; + } //Spreadsheet } // namespace OOX diff --git a/OOXML/XlsxFormat/Ole/OleObjects.cpp b/OOXML/XlsxFormat/Ole/OleObjects.cpp new file mode 100644 index 0000000000..fe086be24b --- /dev/null +++ b/OOXML/XlsxFormat/Ole/OleObjects.cpp @@ -0,0 +1,455 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2019 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-12 Ernesta Birznieka-Upisha + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + +#include "OleObjects.h" + +namespace OOX +{ + namespace Spreadsheet + { + CExtAnchor::CExtAnchor() + { + } + CExtAnchor::~CExtAnchor() + { + } + void CExtAnchor::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring CExtAnchor::toXML() const + { + return (L""); + } + void CExtAnchor::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"GetValue()); + writer.WriteString(L">"); + if (m_oFrom.IsInit()) + { + m_oFrom->toXML2(writer, L"from"); + } + if (m_oTo.IsInit()) + { + m_oTo->toXML2(writer, L"to"); + } + writer.WriteString(L""); + } + void CExtAnchor::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( (L"from") == sName ) + { + m_oFrom = oReader; + } + else if ( (L"to") == sName ) + { + m_oTo = oReader; + } + } + } + EElementType CExtAnchor::getType () const + { + return et_x_ExtAnchor; + } + void CExtAnchor::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if( oReader, (L"moveWithCells"), m_oMoveWithCells ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"sizeWithCells"), m_oSizeWithCells ) + WritingElement_ReadAttributes_Read_else_if( oReader, (L"z-order"), m_oZOrder ) + WritingElement_ReadAttributes_End( oReader ) + } + + COleObjectPr::COleObjectPr() + { + } + COleObjectPr::~COleObjectPr() + { + } + void COleObjectPr::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring COleObjectPr::toXML() const + { + return (L""); + } + void COleObjectPr::toXML(NSStringUtils::CStringBuilder& writer) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrBool(L"locked", m_oLocked); + WritingStringNullableAttrEncodeXmlString(L"macro", m_oMacro, m_oMacro.get()); + WritingStringNullableAttrBool(L"print", m_oPrint); + WritingStringNullableAttrBool(L"uiObject", m_oUiObject); + writer.WriteString(L">"); + if (m_oAnchor.IsInit()) + { + m_oAnchor->toXML(writer); + } + writer.WriteString(L""); + } + void COleObjectPr::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( (L"anchor") == sName ) + { + m_oAnchor = oReader; + } + } + } + EElementType COleObjectPr::getType () const + { + return et_x_OleObjectPr; + } + void COleObjectPr::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, (L"altText"), m_oAltText ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoFill"), m_oAutoFill ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoLine"), m_oAutoLine ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoPict"), m_oAutoPict ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"dde"), m_oDde ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"defaultSize"), m_oDefaultSize ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"disabled"), m_oDisabled ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"r:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"relationships:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"locked"), m_oLocked ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"macro"), m_oMacro ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"print"), m_oPrint ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"uiObject"), m_oUiObject ) + WritingElement_ReadAttributes_End( oReader ) + } + + COleObject::COleObject() + { + } + COleObject::~COleObject() + { + } + void COleObject::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring COleObject::toXML() const + { + return (L""); + } + void COleObject::toXML(NSStringUtils::CStringBuilder& writer) const + { + bool bAlternateContent = m_oObjectPr.IsInit(); + if (bAlternateContent) + { + writer.WriteString(L""); + toXML2(writer, true); + writer.WriteString(L""); + toXML2(writer, false); + writer.WriteString(L""); + } + else + { + toXML2(writer, true); + } + } + void COleObject::toXML2(NSStringUtils::CStringBuilder& writer, bool bObjectPr) const + { + writer.WriteString(L"ToString()); + WritingStringNullableAttrEncodeXmlString(L"link", m_oLink, m_oLink.get()); + WritingStringNullableAttrString(L"oleUpdate", m_oOleUpdate, m_oOleUpdate->ToString()); + WritingStringNullableAttrBool(L"autoLoad", m_oAutoLoad); + WritingStringNullableAttrInt(L"shapeId", m_oShapeId, m_oShapeId->GetValue()); + WritingStringNullableAttrString(L"r:id", m_oRid, m_oRid->ToString()); + if (bObjectPr && m_oObjectPr.IsInit()) + { + writer.WriteString(L">"); + m_oObjectPr->toXML(writer); + writer.WriteString(L""); + } + else + { + writer.WriteString(L"/>"); + } + } + void COleObject::toXMLPptx(NSStringUtils::CStringBuilder& writer, std::wstring qqq) + { + std::wstring sRoot; + writer.WriteString(L"GetValue()) + writer.WriteString(L"Content"); + else + writer.WriteString(L"Icon"); + writer.WriteString(L"\""); + } + WritingStringNullableAttrString(L"r:id", m_oRid, m_oRid->ToString()); + WritingStringNullableAttrEncodeXmlString(L"ProgID", m_oProgId, m_oProgId.get()); + WritingStringNullableAttrInt(L"ShapeID", m_oShapeId, m_oShapeId->GetValue()); + writer.WriteString(L" Type=\"Embed\""); + if(m_oOleUpdate.IsInit()) + { + writer.WriteString(L" UpdateMode=\""); + if(SimpleTypes::Spreadsheet::Always == m_oOleUpdate->GetValue()) + writer.WriteString(L"Always"); + else + writer.WriteString(L"OnCall"); + writer.WriteString(L"\""); + } + if (m_OleObjectFile.IsInit()) + { + if (m_OleObjectFile->isMsPackage()) + WritingStringAttrString(L"mspackage", L"true"); + + WritingStringAttrEncodeXmlString(L"pathbin", m_OleObjectFile->filename().GetPath()); + WritingStringAttrEncodeXmlString(L"pathimg", m_OleObjectFile->filename_cache().GetPath()); + } + writer.WriteString(L"/>"); + } + void COleObject::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( (L"objectPr") == sName ) + { + m_oObjectPr = oReader; + } + } + } + void COleObject::fromBin(XLS::BaseObjectPtr& obj) + { + ReadAttributes(obj); + } + EElementType COleObject::getType () const + { + return et_x_OleObject; + } + void COleObject::ReadAttributes(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + if(ptr->dwAspect == 0x00000001) + m_oDvAspect = SimpleTypes::Spreadsheet::EDvAspect::Content; + else if(ptr->dwAspect == 0x00000004) + m_oDvAspect = SimpleTypes::Spreadsheet::EDvAspect::Icon; + + if(ptr->dwOleUpdate == 0x00000001) + m_oOleUpdate = SimpleTypes::Spreadsheet::EOleUpdate::Always; + else if(ptr->dwOleUpdate == 0x00000003) + m_oOleUpdate = SimpleTypes::Spreadsheet::EOleUpdate::OnCall; + + if(ptr->shapeId > 0) + m_oShapeId = ptr->shapeId; + + m_oAutoLoad = ptr->fAutoLoad; + + if(!ptr->strProgID.value().empty()) + m_oProgId = ptr->strProgID.value(); + + if(ptr->fLinked != 0 && !ptr->link.getAssembledFormula().empty()) + m_oLink = ptr->link.getAssembledFormula(); + + if(ptr->fLinked == 0 && !ptr->strRelID.value.value().empty()) + m_oRid = ptr->strRelID.value.value(); + } + } + void COleObject::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + WritingElement_ReadAttributes_Start( oReader ) + WritingElement_ReadAttributes_Read_if ( oReader, (L"progId"), m_oProgId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"dvAspect"), m_oDvAspect ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"link"), m_oLink ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"oleUpdate"), m_oOleUpdate ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoLoad"), m_oAutoLoad ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"shapeId"), m_oShapeId ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"r:id"), m_oRid ) + WritingElement_ReadAttributes_Read_else_if ( oReader, (L"relationships:id"), m_oRid ) + WritingElement_ReadAttributes_End( oReader ) + } + + COleObjects::COleObjects() + { + } + COleObjects::~COleObjects() + { + for(boost::unordered_map::const_iterator it = m_mapOleObjects.begin(); it != m_mapOleObjects.end(); ++it) + { + delete it->second; + } + m_mapOleObjects.clear(); + } + void COleObjects::fromXML(XmlUtils::CXmlNode& node) + { + } + std::wstring COleObjects::toXML() const + { + return (L""); + } + void COleObjects::toXML(NSStringUtils::CStringBuilder& writer) const + { + if(m_mapOleObjects.size() > 0) + { + writer.WriteString(L""); + for(boost::unordered_map::const_iterator it = m_mapOleObjects.begin(); it != m_mapOleObjects.end(); ++it) + { + it->second->toXML(writer); + } + writer.WriteString(L""); + } + } + void COleObjects::fromXML(XmlUtils::CXmlLiteReader& oReader) + { + ReadAttributes( oReader ); + + if ( oReader.IsEmptyNode() ) + return; + + int nCurDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nCurDepth ) ) + { + std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + + if ( (L"oleObject") == sName ) + { + COleObject* pOleObject = new COleObject(oReader); + if(pOleObject->m_oShapeId.IsInit()) + { + m_mapOleObjects[pOleObject->m_oShapeId->GetValue()] = pOleObject; + } + else + { + delete pOleObject; + } + } + else if ( (L"AlternateContent") == sName ) + { + int nSubDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nSubDepth ) ) + { + std::wstring sSubName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( (L"Fallback") == sSubName || (L"Choice") == sSubName ) + { + bool bFound = false; + int nSubSubDepth = oReader.GetDepth(); + while( oReader.ReadNextSiblingNode( nSubSubDepth ) ) + { + std::wstring sSubSubName = XmlUtils::GetNameNoNS(oReader.GetName()); + if ( (L"oleObject") == sSubSubName ) + { + COleObject* pOleObject = new COleObject(oReader); + if(pOleObject->m_oShapeId.IsInit()) + { + m_mapOleObjects[pOleObject->m_oShapeId->GetValue()] = pOleObject; + bFound = true; + break; + } + else + { + delete pOleObject; + } + } + } + if (bFound) + { + break; + } + } + } + } + } + } + void COleObjects::fromBin(XLS::BaseObjectPtr& obj) + { + auto ptr = static_cast(obj.get()); + if(ptr != nullptr) + { + for(auto &oleObject: ptr->m_arBrtOleObject) + { + COleObject* pOleObject = new COleObject(oleObject); + if(pOleObject->m_oShapeId.IsInit()) + { + m_mapOleObjects[pOleObject->m_oShapeId->GetValue()] = pOleObject; + } + else + { + delete pOleObject; + } + } + } + } + EElementType COleObjects::getType () const + { + return et_x_OleObjects; + } + void COleObjects::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) + { + } + + } //Spreadsheet +} // namespace OOX diff --git a/OOXML/XlsxFormat/Ole/OleObjects.h b/OOXML/XlsxFormat/Ole/OleObjects.h index 6ad47d8d40..054c8ba632 100644 --- a/OOXML/XlsxFormat/Ole/OleObjects.h +++ b/OOXML/XlsxFormat/Ole/OleObjects.h @@ -46,74 +46,20 @@ namespace OOX { public: WritingElement_AdditionConstructors(CExtAnchor) - CExtAnchor() - { - } - virtual ~CExtAnchor() - { - } + CExtAnchor(); + virtual ~CExtAnchor(); - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return (L""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"GetValue()); - writer.WriteString(L">"); - if (m_oFrom.IsInit()) - { - m_oFrom->toXML2(writer, L"from"); - } - if (m_oTo.IsInit()) - { - m_oTo->toXML2(writer, L"to"); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); - - if ( (L"from") == sName ) - { - m_oFrom = oReader; - } - else if ( (L"to") == sName ) - { - m_oTo = oReader; - } - } - } - - virtual EElementType getType () const - { - return et_x_ExtAnchor; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if( oReader, (L"moveWithCells"), m_oMoveWithCells ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"sizeWithCells"), m_oSizeWithCells ) - WritingElement_ReadAttributes_Read_else_if( oReader, (L"z-order"), m_oZOrder ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable_bool m_oMoveWithCells; nullable_bool m_oSizeWithCells; @@ -127,84 +73,20 @@ namespace OOX { public: WritingElement_AdditionConstructors(COleObjectPr) - COleObjectPr() - { - } - virtual ~COleObjectPr() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return (L""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrBool(L"locked", m_oLocked); - WritingStringNullableAttrEncodeXmlString(L"macro", m_oMacro, m_oMacro.get()); - WritingStringNullableAttrBool(L"print", m_oPrint); - WritingStringNullableAttrBool(L"uiObject", m_oUiObject); - writer.WriteString(L">"); - if (m_oAnchor.IsInit()) - { - m_oAnchor->toXML(writer); - } - writer.WriteString(L""); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + COleObjectPr(); + virtual ~COleObjectPr(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if ( (L"anchor") == sName ) - { - m_oAnchor = oReader; - } - } - } - - virtual EElementType getType () const - { - return et_x_OleObjectPr; - } + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, (L"altText"), m_oAltText ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoFill"), m_oAutoFill ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoLine"), m_oAutoLine ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoPict"), m_oAutoPict ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"dde"), m_oDde ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"defaultSize"), m_oDefaultSize ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"disabled"), m_oDisabled ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"r:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"relationships:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"locked"), m_oLocked ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"macro"), m_oMacro ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"print"), m_oPrint ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"uiObject"), m_oUiObject ) - WritingElement_ReadAttributes_End( oReader ) - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: nullable m_oAltText; nullable m_oAutoFill; @@ -226,164 +108,26 @@ namespace OOX { public: WritingElement_AdditionConstructors(COleObject) - WritingElement_XlsbConstructors(COleObject) - COleObject() - { - } - virtual ~COleObject() - { - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return (L""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - bool bAlternateContent = m_oObjectPr.IsInit(); - if (bAlternateContent) - { - writer.WriteString(L""); - toXML2(writer, true); - writer.WriteString(L""); - toXML2(writer, false); - writer.WriteString(L""); - } - else - { - toXML2(writer, true); - } - } - virtual void toXML2(NSStringUtils::CStringBuilder& writer, bool bObjectPr) const - { - writer.WriteString(L"ToString()); - WritingStringNullableAttrEncodeXmlString(L"link", m_oLink, m_oLink.get()); - WritingStringNullableAttrString(L"oleUpdate", m_oOleUpdate, m_oOleUpdate->ToString()); - WritingStringNullableAttrBool(L"autoLoad", m_oAutoLoad); - WritingStringNullableAttrInt(L"shapeId", m_oShapeId, m_oShapeId->GetValue()); - WritingStringNullableAttrString(L"r:id", m_oRid, m_oRid->ToString()); - if (bObjectPr && m_oObjectPr.IsInit()) - { - writer.WriteString(L">"); - m_oObjectPr->toXML(writer); - writer.WriteString(L""); - } - else - { - writer.WriteString(L"/>"); - } - } - void toXMLPptx(NSStringUtils::CStringBuilder& writer, std::wstring qqq) - { - std::wstring sRoot; - writer.WriteString(L"GetValue()) - writer.WriteString(L"Content"); - else - writer.WriteString(L"Icon"); - writer.WriteString(L"\""); - } - WritingStringNullableAttrString(L"r:id", m_oRid, m_oRid->ToString()); - WritingStringNullableAttrEncodeXmlString(L"ProgID", m_oProgId, m_oProgId.get()); - WritingStringNullableAttrInt(L"ShapeID", m_oShapeId, m_oShapeId->GetValue()); - writer.WriteString(L" Type=\"Embed\""); - if(m_oOleUpdate.IsInit()) - { - writer.WriteString(L" UpdateMode=\""); - if(SimpleTypes::Spreadsheet::Always == m_oOleUpdate->GetValue()) - writer.WriteString(L"Always"); - else - writer.WriteString(L"OnCall"); - writer.WriteString(L"\""); - } - if (m_OleObjectFile.IsInit()) - { - if (m_OleObjectFile->isMsPackage()) - WritingStringAttrString(L"mspackage", L"true"); + WritingElement_XlsbConstructors(COleObject) + COleObject(); + virtual ~COleObject(); - WritingStringAttrEncodeXmlString(L"pathbin", m_OleObjectFile->filename().GetPath()); - WritingStringAttrEncodeXmlString(L"pathimg", m_OleObjectFile->filename_cache().GetPath()); - } - writer.WriteString(L"/>"); - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - if ( oReader.IsEmptyNode() ) - return; + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void toXML2(NSStringUtils::CStringBuilder& writer, bool bObjectPr) const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + void toXMLPptx(NSStringUtils::CStringBuilder& writer, std::wstring qqq); + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if ( (L"objectPr") == sName ) - { - m_oObjectPr = oReader; - } - } - } - void fromBin(XLS::BaseObjectPtr& obj) - { - ReadAttributes(obj); - } - virtual EElementType getType () const - { - return et_x_OleObject; - } + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType () const; private: - void ReadAttributes(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - if(ptr->dwAspect == 0x00000001) - m_oDvAspect = SimpleTypes::Spreadsheet::EDvAspect::Content; - else if(ptr->dwAspect == 0x00000004) - m_oDvAspect = SimpleTypes::Spreadsheet::EDvAspect::Icon; + void ReadAttributes(XLS::BaseObjectPtr& obj); + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); - if(ptr->dwOleUpdate == 0x00000001) - m_oOleUpdate = SimpleTypes::Spreadsheet::EOleUpdate::Always; - else if(ptr->dwOleUpdate == 0x00000003) - m_oOleUpdate = SimpleTypes::Spreadsheet::EOleUpdate::OnCall; - - if(ptr->shapeId > 0) - m_oShapeId = ptr->shapeId; - - m_oAutoLoad = ptr->fAutoLoad; - - if(!ptr->strProgID.value().empty()) - m_oProgId = ptr->strProgID.value(); - - if(ptr->fLinked != 0 && !ptr->link.getAssembledFormula().empty()) - m_oLink = ptr->link.getAssembledFormula(); - - if(ptr->fLinked == 0 && !ptr->strRelID.value.value().empty()) - m_oRid = ptr->strRelID.value.value(); - } - } - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - WritingElement_ReadAttributes_Start( oReader ) - WritingElement_ReadAttributes_Read_if ( oReader, (L"progId"), m_oProgId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"dvAspect"), m_oDvAspect ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"link"), m_oLink ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"oleUpdate"), m_oOleUpdate ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"autoLoad"), m_oAutoLoad ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"shapeId"), m_oShapeId ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"r:id"), m_oRid ) - WritingElement_ReadAttributes_Read_else_if ( oReader, (L"relationships:id"), m_oRid ) - WritingElement_ReadAttributes_End( oReader ) - } public: nullable m_oProgId; nullable m_oDvAspect; @@ -402,130 +146,26 @@ namespace OOX { public: WritingElement_AdditionConstructors(COleObjects) - WritingElement_XlsbConstructors(COleObjects) - COleObjects() - { - } - virtual ~COleObjects() - { - for(boost::unordered_map::const_iterator it = m_mapOleObjects.begin(); it != m_mapOleObjects.end(); ++it) - { - delete it->second; - } - m_mapOleObjects.clear(); - } - virtual void fromXML(XmlUtils::CXmlNode& node) - { - } - virtual std::wstring toXML() const - { - return (L""); - } - virtual void toXML(NSStringUtils::CStringBuilder& writer) const - { - if(m_mapOleObjects.size() > 0) - { - writer.WriteString(L""); - for(boost::unordered_map::const_iterator it = m_mapOleObjects.begin(); it != m_mapOleObjects.end(); ++it) - { - it->second->toXML(writer); - } - writer.WriteString(L""); - } - } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) - { - ReadAttributes( oReader ); + WritingElement_XlsbConstructors(COleObjects) + COleObjects(); + virtual ~COleObjects(); - if ( oReader.IsEmptyNode() ) - return; + virtual void fromXML(XmlUtils::CXmlNode& node); + virtual std::wstring toXML() const; - int nCurDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nCurDepth ) ) - { - std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName()); + virtual void toXML(NSStringUtils::CStringBuilder& writer) const; + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader); - if ( (L"oleObject") == sName ) - { - COleObject* pOleObject = new COleObject(oReader); - if(pOleObject->m_oShapeId.IsInit()) - { - m_mapOleObjects[pOleObject->m_oShapeId->GetValue()] = pOleObject; - } - else - { - delete pOleObject; - } - } - else if ( (L"AlternateContent") == sName ) - { - int nSubDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nSubDepth ) ) - { - std::wstring sSubName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( (L"Fallback") == sSubName || (L"Choice") == sSubName ) - { - bool bFound = false; - int nSubSubDepth = oReader.GetDepth(); - while( oReader.ReadNextSiblingNode( nSubSubDepth ) ) - { - std::wstring sSubSubName = XmlUtils::GetNameNoNS(oReader.GetName()); - if ( (L"oleObject") == sSubSubName ) - { - COleObject* pOleObject = new COleObject(oReader); - if(pOleObject->m_oShapeId.IsInit()) - { - m_mapOleObjects[pOleObject->m_oShapeId->GetValue()] = pOleObject; - bFound = true; - break; - } - else - { - delete pOleObject; - } - } - } - if (bFound) - { - break; - } - } - } - } - } - } - void fromBin(XLS::BaseObjectPtr& obj) - { - auto ptr = static_cast(obj.get()); - if(ptr != nullptr) - { - for(auto &oleObject: ptr->m_arBrtOleObject) - { - COleObject* pOleObject = new COleObject(oleObject); - if(pOleObject->m_oShapeId.IsInit()) - { - m_mapOleObjects[pOleObject->m_oShapeId->GetValue()] = pOleObject; - } - else - { - delete pOleObject; - } - } - } - - } - virtual EElementType getType () const - { - return et_x_OleObjects; - } + void fromBin(XLS::BaseObjectPtr& obj); + virtual EElementType getType () const; private: - void ReadAttributes(XmlUtils::CXmlLiteReader& oReader) - { - } + void ReadAttributes(XmlUtils::CXmlLiteReader& oReader); + public: boost::unordered_map m_mapOleObjects; }; + } //Spreadsheet } // namespace OOX