/* * (c) Copyright Ascensio System SIA 2010-2023 * * 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-6 Ernesta Birznieka-Upish * 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 "NamedSheetViews.h" #include "../Styles/dxf.h" #include "../../Binary/Sheets/Reader/BinaryWriterS.h" #include "../../Binary/Sheets/Writer/BinaryReaderS.h" #include "../../Common/SimpleTypes_Spreadsheet.h" #include "../Styles/Colors.h" #include "../../DocxFormat/Drawing/DrawingExt.h" namespace OOX { namespace Spreadsheet { void CSortRule::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { WritingElement_ReadAttributes_StartChar_No_NS(oReader) WritingElement_ReadAttributes_Read_ifChar( oReader, "colId", m_oColId) WritingElement_ReadAttributes_Read_else_ifChar( oReader, "id", m_oId) WritingElement_ReadAttributes_EndChar_No_NS( oReader ) } void CSortRule::fromXML(XmlUtils::CXmlLiteReader& oReader) { ReadAttributes(oReader); if (oReader.IsEmptyNode()) return; int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { const char* sName = XmlUtils::GetNameNoNS(oReader.GetNameChar()); if (strcmp("dxf", sName) == 0) m_oDxf = oReader; // else if (strcmp("richSortCondition", sName) == 0) // m_oRichSortCondition = oReader; else if (strcmp("sortCondition", sName) == 0) m_oSortCondition = oReader; } } void CSortRule::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const { writer.StartNode(sName); writer.StartAttributes(); WritingNullable(m_oColId, writer.WriteAttribute(L"colId", *m_oColId);); WritingNullable(m_oId, writer.WriteAttributeEncodeXml(L"id", *m_oId);); writer.EndAttributes(); WritingNullable(m_oDxf, m_oDxf->toXMLWithNS(writer, L"", L"dxf", L"x:");); // WritingNullable(m_oRichSortCondition, m_oRichSortCondition->toXML(writer, L"richSortCondition");); WritingNullable(m_oSortCondition, m_oSortCondition->toXMLWithNS(writer, L"", L"sortCondition", L"x:");); writer.EndNode(sName); } void CSortRule::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteUInt2(0, m_oColId); pWriter->WriteString2(1, m_oId); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); if (m_oDxf.is_init()) { pWriter->StartRecord(0); BinXlsxRW::BinaryStyleTableWriter oBinaryStyleTableWriter(*pWriter, &pWriter->m_pCommon->m_pNativePicker->m_oEmbeddedFonts); DocWrapper::FontProcessor oFontProcessor; OOX::Spreadsheet::CIndexedColors* pIndexedColors = NULL; CXlsx* xlsx = dynamic_cast(pWriter->m_pMainDocument); if (xlsx && xlsx->m_pStyles && xlsx->m_pStyles->m_oColors.IsInit() && xlsx->m_pStyles->m_oColors->m_oIndexedColors.IsInit()) { pIndexedColors = xlsx->m_pStyles->m_oColors->m_oIndexedColors.GetPointer(); } oBinaryStyleTableWriter.WriteDxf(m_oDxf.get(), pIndexedColors, pWriter->m_pTheme->GetPointer(), oFontProcessor); pWriter->EndRecord(); } // pWriter->WriteRecord2(1, m_oRichSortCondition); if (m_oSortCondition.IsInit()) { pWriter->StartRecord(2); BinXlsxRW::BinaryTableWriter oBinaryTableWriter(*pWriter); oBinaryTableWriter.WriteSortCondition(*m_oSortCondition); pWriter->EndRecord(); } } void CSortRule::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader) { LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4; pReader->Skip(1); // start attributes while (true) { BYTE _at = pReader->GetUChar_TypeNode(); if (_at == NSBinPptxRW::g_nodeAttributeEnd) break; switch (_at) { case 0: { m_oColId = pReader->GetULong(); break; } case 1: { m_oId = pReader->GetString2(); break; } } } while (pReader->GetPos() < _end_rec) { BYTE _at = pReader->GetUChar(); switch (_at) { case 0: { OOX::Spreadsheet::CStyles oStyles(NULL); BinXlsxRW::BinaryStyleTableReader style_reader(*pReader, oStyles); m_oDxf.Init(); style_reader.ReadDxfExternal(m_oDxf.GetPointer()); break; } // case 1: // { // m_oRichSortCondition.Init(); // m_oRichSortCondition->fromPPTY(pReader); // break; // } case 2: { BinXlsxRW::BinaryTableReader table_reader(*pReader, NULL); m_oSortCondition.Init(); table_reader.ReadSortConditionExternal(m_oSortCondition.GetPointer()); break; } default: { pReader->SkipRecord(); break; } } } pReader->Seek(_end_rec); } void CSortRules::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { WritingElement_ReadAttributes_StartChar_No_NS(oReader) WritingElement_ReadAttributes_Read_ifChar( oReader, "sortMethod", m_oSortMethod) WritingElement_ReadAttributes_Read_else_ifChar( oReader, "caseSensitive", m_oCaseSensitive) WritingElement_ReadAttributes_EndChar_No_NS( oReader ) } void CSortRules::fromXML(XmlUtils::CXmlLiteReader& oReader) { ReadAttributes(oReader); if (oReader.IsEmptyNode()) return; int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { const char* sName = XmlUtils::GetNameNoNS(oReader.GetNameChar()); if (strcmp("sortRule", sName) == 0) { CSortRule* pSortRule = new CSortRule(); *pSortRule = oReader; m_arrItems.push_back(pSortRule); } else if (strcmp("extLst", sName) == 0) m_oExtLst = oReader; } } void CSortRules::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const { writer.StartNode(sName); writer.StartAttributes(); WritingNullable(m_oSortMethod, writer.WriteAttribute(L"sortMethod", m_oSortMethod->ToString());); WritingNullable(m_oCaseSensitive, writer.WriteAttribute(L"caseSensitive", *m_oCaseSensitive);); writer.EndAttributes(); for(size_t i = 0; i < m_arrItems.size(); ++i) { m_arrItems[i]->toXML(writer, L"sortRule"); } WritingNullable(m_oExtLst, writer.WriteString(m_oExtLst->toXMLWithNS(L""));); writer.EndNode(sName); } void CSortRules::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); if(m_oSortMethod.IsInit()) { pWriter->WriteByte1(0, m_oSortMethod->GetValue()); } pWriter->WriteBool2(1, m_oCaseSensitive); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteRecordArrayOfPointers(0, 0, m_arrItems); // pWriter->WriteRecord2(1, m_oExtLst); } void CSortRules::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader) { LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4; pReader->Skip(1); // start attributes while (true) { BYTE _at = pReader->GetUChar_TypeNode(); if (_at == NSBinPptxRW::g_nodeAttributeEnd) break; switch (_at) { case 0: { m_oSortMethod.Init(); m_oSortMethod->SetValue((SimpleTypes::Spreadsheet::ESortMethod)pReader->GetUChar()); break; } case 1: { m_oCaseSensitive = pReader->GetBool(); break; } } } while (pReader->GetPos() < _end_rec) { BYTE _at = pReader->GetUChar(); switch (_at) { case 0: { pReader->Skip(4); ULONG _c = pReader->GetULong(); for (ULONG i = 0; i < _c; ++i) { pReader->Skip(1); // type m_arrItems.push_back(new CSortRule()); m_arrItems.back()->fromPPTY(pReader); } break; } // case 1: // { // m_oExtLst.Init(); // m_oExtLst->fromPPTY(pReader); // break; // } default: { pReader->SkipRecord(); break; } } } pReader->Seek(_end_rec); } void CColumnFilter::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { WritingElement_ReadAttributes_StartChar_No_NS(oReader) WritingElement_ReadAttributes_Read_ifChar( oReader, "colId", m_oColId) WritingElement_ReadAttributes_Read_else_ifChar( oReader, "id", m_oId) WritingElement_ReadAttributes_EndChar_No_NS( oReader ) } void CColumnFilter::fromXML(XmlUtils::CXmlLiteReader& oReader) { ReadAttributes(oReader); if (oReader.IsEmptyNode()) return; int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { const char* sName = XmlUtils::GetNameNoNS(oReader.GetNameChar()); if (strcmp("dxf", sName) == 0) m_oDxf = oReader; else if (strcmp("filter", sName) == 0) { CFilterColumn* pFilterColumn = new CFilterColumn(); *pFilterColumn = oReader; m_arrItems.push_back(pFilterColumn); } else if (strcmp("extLst", sName) == 0) m_oExtLst = oReader; } } void CColumnFilter::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const { writer.StartNode(sName); writer.StartAttributes(); WritingNullable(m_oColId, writer.WriteAttribute(L"colId", *m_oColId);); WritingNullable(m_oId, writer.WriteAttributeEncodeXml(L"id", *m_oId);); writer.EndAttributes(); WritingNullable(m_oDxf, m_oDxf->toXMLWithNS(writer, L"", L"dxf", L"x:");); for(size_t i = 0; i < m_arrItems.size(); ++i) { m_arrItems[i]->toXMLWithNS(writer, L"", L"filter", L"x:"); } WritingNullable(m_oExtLst, writer.WriteString(m_oExtLst->toXMLWithNS(L""));); writer.EndNode(sName); } void CColumnFilter::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteUInt2(0, m_oColId); pWriter->WriteString2(1, m_oId); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); if (m_oDxf.is_init()) { pWriter->StartRecord(0); BinXlsxRW::BinaryStyleTableWriter oBinaryStyleTableWriter(*pWriter, &pWriter->m_pCommon->m_pNativePicker->m_oEmbeddedFonts); DocWrapper::FontProcessor oFontProcessor; OOX::Spreadsheet::CIndexedColors* pIndexedColors = NULL; CXlsx* xlsx = dynamic_cast(pWriter->m_pMainDocument); if (xlsx && xlsx->m_pStyles && xlsx->m_pStyles->m_oColors.IsInit() && xlsx->m_pStyles->m_oColors->m_oIndexedColors.IsInit()) { pIndexedColors = xlsx->m_pStyles->m_oColors->m_oIndexedColors.GetPointer(); } oBinaryStyleTableWriter.WriteDxf(m_oDxf.get(), pIndexedColors, pWriter->m_pTheme->GetPointer(), oFontProcessor); pWriter->EndRecord(); } { BinXlsxRW::BinaryTableWriter oBinaryTableWriter(*pWriter); pWriter->StartRecord(1); pWriter->WriteULONG(m_arrItems.size()); for (_UINT32 i = 0; i < m_arrItems.size(); ++i) { pWriter->StartRecord(0); oBinaryTableWriter.WriteFilterColumn(*m_arrItems[i]); pWriter->EndRecord(); } pWriter->EndRecord(); } // pWriter->WriteRecord2(2, m_oExtLst); } void CColumnFilter::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader) { LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4; pReader->Skip(1); // start attributes while (true) { BYTE _at = pReader->GetUChar_TypeNode(); if (_at == NSBinPptxRW::g_nodeAttributeEnd) break; switch (_at) { case 0: { m_oColId = pReader->GetULong(); break; } case 1: { m_oId = pReader->GetString2(); break; } } } while (pReader->GetPos() < _end_rec) { BYTE _at = pReader->GetUChar(); switch (_at) { case 0: { OOX::Spreadsheet::CStyles oStyles(NULL); BinXlsxRW::BinaryStyleTableReader style_reader(*pReader, oStyles); m_oDxf.Init(); style_reader.ReadDxfExternal(m_oDxf.GetPointer()); break; } case 1: { pReader->Skip(4); BinXlsxRW::BinaryTableReader table_reader(*pReader, NULL); ULONG _c = pReader->GetULong(); for (ULONG i = 0; i < _c; ++i) { pReader->Skip(1); // type CFilterColumn* pFilterColumn = new CFilterColumn(); table_reader.ReadFilterColumnExternal(pFilterColumn); m_arrItems.push_back(pFilterColumn); } break; } // case 2: // { // m_oExtLst.Init(); // m_oExtLst->fromPPTY(pReader); // break; // } default: { pReader->SkipRecord(); break; } } } pReader->Seek(_end_rec); } void CNsvFilter::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { WritingElement_ReadAttributes_StartChar_No_NS(oReader) WritingElement_ReadAttributes_Read_ifChar( oReader, "filterId", m_oFilterId) WritingElement_ReadAttributes_Read_else_ifChar( oReader, "ref", m_oRef) WritingElement_ReadAttributes_Read_else_ifChar( oReader, "tableId", m_oTableId) WritingElement_ReadAttributes_EndChar_No_NS( oReader ) } void CNsvFilter::fromXML(XmlUtils::CXmlLiteReader& oReader) { ReadAttributes(oReader); if (oReader.IsEmptyNode()) return; int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { const char* sName = XmlUtils::GetNameNoNS(oReader.GetNameChar()); if (strcmp("columnFilter", sName) == 0) { CColumnFilter* pColumnFilter = new CColumnFilter(); *pColumnFilter = oReader; m_arrItems.push_back(pColumnFilter); } else if (strcmp("sortRules", sName) == 0) m_oSortRules = oReader; else if (strcmp("extLst", sName) == 0) m_oExtLst = oReader; } } void CNsvFilter::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const { writer.StartNode(sName); writer.StartAttributes(); WritingNullable(m_oFilterId, writer.WriteAttributeEncodeXml(L"filterId", *m_oFilterId);); WritingNullable(m_oRef, writer.WriteAttributeEncodeXml(L"ref", *m_oRef);); WritingNullable(m_oTableId, writer.WriteAttribute(L"tableId", *m_oTableId);); writer.EndAttributes(); for(size_t i = 0; i < m_arrItems.size(); ++i) { m_arrItems[i]->toXML(writer, L"columnFilter"); } WritingNullable(m_oSortRules, m_oSortRules->toXML(writer, L"sortRules");); WritingNullable(m_oExtLst, writer.WriteString(m_oExtLst->toXMLWithNS(L""));); writer.EndNode(sName); } void CNsvFilter::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteString2(0, m_oFilterId); pWriter->WriteString2(1, m_oRef); pWriter->WriteUInt2(2, m_oTableId); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteRecordArrayOfPointers(0, 0, m_arrItems); pWriter->WriteRecord2(1, m_oSortRules); // pWriter->WriteRecord2(2, m_oExtLst); } void CNsvFilter::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader) { LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4; pReader->Skip(1); // start attributes while (true) { BYTE _at = pReader->GetUChar_TypeNode(); if (_at == NSBinPptxRW::g_nodeAttributeEnd) break; switch (_at) { case 0: { m_oFilterId = pReader->GetString2(); break; } case 1: { m_oRef = pReader->GetString2(); break; } case 2: { m_oTableId = pReader->GetULong(); break; } } } while (pReader->GetPos() < _end_rec) { BYTE _at = pReader->GetUChar(); switch (_at) { case 0: { pReader->Skip(4); ULONG _c = pReader->GetULong(); for (ULONG i = 0; i < _c; ++i) { pReader->Skip(1); // type m_arrItems.push_back(new CColumnFilter()); m_arrItems.back()->fromPPTY(pReader); } break; } case 1: { m_oSortRules.Init(); m_oSortRules->fromPPTY(pReader); break; } // case 2: // { // m_oExtLst.Init(); // m_oExtLst->fromPPTY(pReader); // break; // } default: { pReader->SkipRecord(); break; } } } pReader->Seek(_end_rec); } void CNamedSheetView::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { WritingElement_ReadAttributes_StartChar_No_NS(oReader) WritingElement_ReadAttributes_Read_ifChar( oReader, "name", m_oName) WritingElement_ReadAttributes_Read_else_ifChar( oReader, "id", m_oId) WritingElement_ReadAttributes_EndChar_No_NS( oReader ) } void CNamedSheetView::fromXML(XmlUtils::CXmlLiteReader& oReader) { ReadAttributes(oReader); if (oReader.IsEmptyNode()) return; int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { const char* sName = XmlUtils::GetNameNoNS(oReader.GetNameChar()); if (strcmp("nsvFilter", sName) == 0) { CNsvFilter* pNsvFilter = new CNsvFilter(); *pNsvFilter = oReader; m_arrItems.push_back(pNsvFilter); } else if (strcmp("extLst", sName) == 0) m_oExtLst = oReader; } } void CNamedSheetView::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const { writer.StartNode(sName); writer.StartAttributes(); WritingNullable(m_oName, writer.WriteAttributeEncodeXml(L"name", *m_oName);); WritingNullable(m_oId, writer.WriteAttributeEncodeXml(L"id", *m_oId);); writer.EndAttributes(); for(size_t i = 0; i < m_arrItems.size(); ++i) { m_arrItems[i]->toXML(writer, L"nsvFilter"); } WritingNullable(m_oExtLst, writer.WriteString(m_oExtLst->toXMLWithNS(L""));); writer.EndNode(sName); } void CNamedSheetView::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteString2(0, m_oName); pWriter->WriteString2(1, m_oId); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteRecordArrayOfPointers(0, 0, m_arrItems); // pWriter->WriteRecord2(1, m_oExtLst); } void CNamedSheetView::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader) { LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4; pReader->Skip(1); // start attributes while (true) { BYTE _at = pReader->GetUChar_TypeNode(); if (_at == NSBinPptxRW::g_nodeAttributeEnd) break; switch (_at) { case 0: { m_oName = pReader->GetString2(); break; } case 1: { m_oId = pReader->GetString2(); break; } } } while (pReader->GetPos() < _end_rec) { BYTE _at = pReader->GetUChar(); switch (_at) { case 0: { pReader->Skip(4); ULONG _c = pReader->GetULong(); for (ULONG i = 0; i < _c; ++i) { pReader->Skip(1); // type m_arrItems.push_back(new CNsvFilter()); m_arrItems.back()->fromPPTY(pReader); } break; } // case 1: // { // m_oExtLst.Init(); // m_oExtLst->fromPPTY(pReader); // break; // } default: { pReader->SkipRecord(); break; } } } pReader->Seek(_end_rec); } void CNamedSheetViews::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { WritingElement_ReadAttributes_StartChar_No_NS(oReader) WritingElement_ReadAttributes_EndChar_No_NS( oReader ) } void CNamedSheetViews::fromXML(XmlUtils::CXmlLiteReader& oReader) { ReadAttributes(oReader); if (oReader.IsEmptyNode()) return; int nCurDepth = oReader.GetDepth(); while (oReader.ReadNextSiblingNode(nCurDepth)) { const char* sName = XmlUtils::GetNameNoNS(oReader.GetNameChar()); if (strcmp("namedSheetView", sName) == 0) { CNamedSheetView* pNamedSheetView = new CNamedSheetView(); *pNamedSheetView = oReader; m_arrItems.push_back(pNamedSheetView); } else if (strcmp("extLst", sName) == 0) m_oExtLst = oReader; } } void CNamedSheetViews::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const { writer.StartNode(sName); writer.StartAttributes(); writer.WriteString(L" xmlns=\"http://schemas.microsoft.com/office/spreadsheetml/2019/namedsheetviews\" xmlns:x=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\""); writer.EndAttributes(); for(size_t i = 0; i < m_arrItems.size(); ++i) { m_arrItems[i]->toXML(writer, L"namedSheetView"); } WritingNullable(m_oExtLst, writer.WriteString(m_oExtLst->toXMLWithNS(L""));); writer.EndNode(sName); } void CNamedSheetViews::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteRecordArrayOfPointers(0, 0, m_arrItems); // pWriter->WriteRecord2(1, m_oExtLst); } void CNamedSheetViews::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader) { pReader->Skip(1); // type LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4; pReader->Skip(1); // start attributes while (true) { BYTE _at = pReader->GetUChar_TypeNode(); if (_at == NSBinPptxRW::g_nodeAttributeEnd) break; } while (pReader->GetPos() < _end_rec) { BYTE _at = pReader->GetUChar(); switch (_at) { case 0: { pReader->Skip(4); ULONG _c = pReader->GetULong(); for (ULONG i = 0; i < _c; ++i) { pReader->Skip(1); // type m_arrItems.push_back(new CNamedSheetView()); m_arrItems.back()->fromPPTY(pReader); } break; } // case 1: // { // m_oExtLst.Init(); // m_oExtLst->fromPPTY(pReader); // break; // } default: { pReader->SkipRecord(); break; } } } 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; IFileContainer::Read( oRootPath, oPath ); XmlUtils::CXmlLiteReader oReader; if ( !oReader.FromFile( oPath.GetPath() ) ) return; if ( !oReader.ReadNextNode() ) return; m_oNamedSheetViews = oReader; } void CNamedSheetViewFile::write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const { if(!m_oNamedSheetViews.IsInit()) return; NSStringUtils::CStringBuilder sXml; sXml.WriteString(L""); m_oNamedSheetViews->toXML(sXml, L"namedSheetViews"); std::wstring sPath = oPath.GetPath(); NSFile::CFileBinary::SaveToFile(sPath, sXml.GetData()); oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() ); IFileContainer::Write( oPath, oDirectory, oContent ); } void CNamedSheetViewFile::ReadAttributes(XmlUtils::CXmlLiteReader& oReader) { } } //Spreadsheet } // namespace OOX