Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

1278 lines
37 KiB
C++

/*
* (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 "SlicerCacheExt.h"
#include "../../XlsbFormat/Biff12_unions/STYLESHEET14.h"
#include "../../XlsbFormat/Biff12_unions/SLICERSTYLES.h"
#include "../../XlsbFormat/Biff12_unions/SLICERSTYLE.h"
#include "../../XlsbFormat/Biff12_records/BeginSlicerStyles.h"
#include "../../XlsbFormat/Biff12_records/BeginSlicerStyle.h"
#include "../../XlsbFormat/Biff12_records/SlicerStyleElement.h"
#include "../../XlsbFormat/Biff12_records/BeginTableSlicerCache.h"
#include "../../XlsbFormat/Biff12_records/SlicerCacheHideItemsWithNoData.h"
#include "../../XlsbFormat/Biff12_unions/SLICERSEX.h"
#include "../../XlsbFormat/Biff12_unions/SLICEREX.h"
#include "../../XlsbFormat/Biff12_unions/TABLESLICERSEX.h"
#include "../../XlsbFormat/Biff12_unions/TABLESLICEREX.h"
#include "../../XlsbFormat/Biff12_records/BeginSlicerEx.h"
#include "../../XlsbFormat/Biff12_unions/SLICERCACHEIDS.h"
#include "../../XlsbFormat/Biff12_unions/SLICERCACHEID.h"
#include "../../XlsbFormat/Biff12_records/BeginSlicerCacheID.h"
#include "../../XlsbFormat/Biff12_unions/TABLESLICERCACHEIDS.h"
#include "../../XlsbFormat/Biff12_unions/TABLESLICERCACHEID.h"
#include "../../XlsbFormat/Biff12_records/TableSlicerCacheID.h"
#include "../../XlsbFormat/Biff12_records/FRTBegin.h"
#include "../../XlsbFormat/Biff12_structures/FRTProductVersion.h"
#include "../../Binary/Presentation/XmlWriter.h"
#include "../../Binary/Presentation/BinReaderWriterDefines.h"
#include "../../DocxFormat/Drawing/DrawingExt.h"
#include "../../Common/SimpleTypes_Shared.h"
#include "../../Common/SimpleTypes_Spreadsheet.h"
#include "../../../MsBinaryFile/XlsFile/Format/Logic/Biff_structures/BiffStructure.h"
namespace OOX
{
namespace Spreadsheet
{
void CSlicerCacheOlapLevelName::fromBin(XLS::BiffStructure& obj)
{
ReadAttributes(obj);
}
void CSlicerCacheOlapLevelName::toBin(XLS::BiffStructure* obj)
{
auto ptr = static_cast<XLSB::SlicerCacheLevelData*>(obj);
if(m_oCount.IsInit())
ptr->cHiddenItems = m_oCount.get();
if(m_oUniqueName.IsInit())
ptr->stUniqueName = m_oUniqueName.get();
else
ptr->stUniqueName = 0xFFFFFFFF;
}
void CSlicerCacheOlapLevelName::ReadAttributes(XLS::BiffStructure& obj)
{
auto ptr = static_cast<XLSB::SlicerCacheLevelData*>(&obj);
if(ptr != nullptr)
{
m_oCount = ptr->cHiddenItems;
if(!ptr->stUniqueName.value().empty())
m_oUniqueName = ptr->stUniqueName.value();
}
}
void CSlicerCacheOlapLevelName::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "uniqueName", m_oUniqueName)
WritingElement_ReadAttributes_Read_else_ifChar( oReader, "count", m_oCount)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerCacheOlapLevelName::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes(oReader);
if (oReader.IsEmptyNode())
return;
oReader.ReadTillEnd();
}
void CSlicerCacheOlapLevelName::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oUniqueName, writer.WriteAttributeEncodeXml(L"uniqueName", *m_oUniqueName););
WritingNullable(m_oCount, writer.WriteAttribute(L"count", *m_oCount););
writer.EndAttributes();
writer.EndNode(sName);
}
void CSlicerCacheOlapLevelName::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString2(0, m_oUniqueName);
pWriter->WriteUInt2(1, m_oCount);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
}
void CSlicerCacheOlapLevelName::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_oUniqueName = pReader->GetString2();
break;
}
case 1:
{
m_oCount = pReader->GetULong();
break;
}
}
}
while (pReader->GetPos() < _end_rec)
{
BYTE _at = pReader->GetUChar();
switch (_at)
{
default:
{
pReader->SkipRecord();
break;
}
}
}
pReader->Seek(_end_rec);
}
void CSlicerCacheHideNoData::fromBin(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::SlicerCacheHideItemsWithNoData*>(obj.get());
if(ptr != nullptr)
{
m_oCount = ptr->cHideItemLevelsCount;
CSlicerCacheOlapLevelName oCSlicerCacheOlapLevelName;
for(auto &item : ptr->rgLevels)
{
oCSlicerCacheOlapLevelName.fromBin(item);
m_oSlicerCacheOlapLevelName.push_back(oCSlicerCacheOlapLevelName);
}
}
}
XLS::BaseObjectPtr CSlicerCacheHideNoData::toBin()
{
auto ptr(new XLSB::SlicerCacheHideItemsWithNoData);
XLS::BaseObjectPtr objectPtr(ptr);
if(m_oCount.IsInit())
ptr->cHideItemLevelsCount = m_oCount.get();
for(auto i:m_oSlicerCacheOlapLevelName)
{
XLSB::SlicerCacheLevelData levelData;
i.toBin(&levelData);
ptr->rgLevels.push_back(levelData);
}
return objectPtr;
}
void CSlicerCacheHideNoData::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "count", m_oCount)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerCacheHideNoData::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("slicerCacheOlapLevelName", sName) == 0)
{
m_oSlicerCacheOlapLevelName.emplace_back();
m_oSlicerCacheOlapLevelName.back() = oReader;
}
}
}
void CSlicerCacheHideNoData::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oCount, writer.WriteAttribute(L"count", *m_oCount););
writer.EndAttributes();
if(m_oSlicerCacheOlapLevelName.size() > 0)
{
for(size_t i = 0; i < m_oSlicerCacheOlapLevelName.size(); ++i)
{
(&m_oSlicerCacheOlapLevelName[i])->toXML(writer, L"x15:slicerCacheOlapLevelName");
}
}
writer.EndNode(sName);
}
void CSlicerCacheHideNoData::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteUInt2(0, m_oCount);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
pWriter->WriteRecordArray(0, 0, m_oSlicerCacheOlapLevelName);
}
void CSlicerCacheHideNoData::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_oCount = 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_oSlicerCacheOlapLevelName.emplace_back();
m_oSlicerCacheOlapLevelName.back().fromPPTY(pReader);
}
break;
}
default:
{
pReader->SkipRecord();
break;
}
}
}
pReader->Seek(_end_rec);
}
void CTableSlicerCache::fromBin(XLS::BaseObjectPtr& obj)
{
ReadAttributes(obj);
}
XLS::BaseObjectPtr CTableSlicerCache::toBin()
{
auto ptr(new XLSB::BeginTableSlicerCache);
XLS::BaseObjectPtr objectPtr(ptr);
if(m_oTableId.IsInit())
ptr->dwLstd = m_oTableId.get();
if(m_oColumn.IsInit())
ptr->dwColumn = m_oColumn.get();
if(m_oSortOrder.IsInit())
ptr->fSortOrder = m_oSortOrder->GetValue() + 1;
if(m_oCustomListSort.IsInit())
ptr->fSortUsingCustomLists = m_oCustomListSort.get();
if(m_oCrossFilter.IsInit())
ptr->iCrossFilter = m_oCrossFilter->GetValue();
return objectPtr;
}
void CTableSlicerCache::ReadAttributes(XLS::BaseObjectPtr& obj)
{
auto ptr = static_cast<XLSB::BeginTableSlicerCache*>(obj.get());
if(ptr != nullptr)
{
m_oTableId = ptr->dwLstd;
m_oColumn = ptr->dwColumn;
m_oSortOrder = (SimpleTypes::Spreadsheet::ETabularSlicerCacheSortOrder)(ptr->fSortOrder - 1);
m_oCustomListSort = ptr->fSortUsingCustomLists;
m_oCrossFilter = (SimpleTypes::Spreadsheet::ESlicerCacheCrossFilter)ptr->iCrossFilter;
}
}
void CTableSlicerCache::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "tableId", m_oTableId)
WritingElement_ReadAttributes_Read_else_ifChar( oReader, "column", m_oColumn)
WritingElement_ReadAttributes_Read_else_ifChar( oReader, "sortOrder", m_oSortOrder)
WritingElement_ReadAttributes_Read_else_ifChar( oReader, "customListSort", m_oCustomListSort)
WritingElement_ReadAttributes_Read_else_ifChar( oReader, "crossFilter", m_oCrossFilter)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CTableSlicerCache::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("extLst", sName) == 0)
m_oExtLst = oReader;
}
}
void CTableSlicerCache::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oTableId, writer.WriteAttribute(L"tableId", *m_oTableId););
WritingNullable(m_oColumn, writer.WriteAttribute(L"column", *m_oColumn););
WritingNullable(m_oSortOrder, writer.WriteAttribute(L"sortOrder", m_oSortOrder->ToString()););
WritingNullable(m_oCustomListSort, writer.WriteAttribute(L"customListSort", *m_oCustomListSort););
WritingNullable(m_oCrossFilter, writer.WriteAttribute(L"crossFilter", m_oCrossFilter->ToString()););
writer.EndAttributes();
WritingNullable(m_oExtLst, writer.WriteString(m_oExtLst->toXMLWithNS(L"")););
writer.EndNode(sName);
}
void CTableSlicerCache::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteUInt2(0, m_oTableId);
pWriter->WriteUInt2(1, m_oColumn);
if(m_oSortOrder.IsInit())
{
pWriter->WriteByte1(2, m_oSortOrder->GetValue());
}
pWriter->WriteBool2(3, m_oCustomListSort);
if(m_oCrossFilter.IsInit())
{
pWriter->WriteByte1(4, m_oCrossFilter->GetValue());
}
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
// pWriter->WriteRecord2(0, m_oExtLst);
}
void CTableSlicerCache::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_oTableId = pReader->GetULong();
break;
}
case 1:
{
m_oColumn = pReader->GetULong();
break;
}
case 2:
{
m_oSortOrder.Init();
m_oSortOrder->SetValue((SimpleTypes::Spreadsheet::ETabularSlicerCacheSortOrder)pReader->GetUChar());
break;
}
case 3:
{
m_oCustomListSort = pReader->GetBool();
break;
}
case 4:
{
m_oCrossFilter.Init();
m_oCrossFilter->SetValue((SimpleTypes::Spreadsheet::ESlicerCacheCrossFilter)pReader->GetUChar());
break;
}
}
}
while (pReader->GetPos() < _end_rec)
{
BYTE _at = pReader->GetUChar();
switch (_at)
{
// case 0:
// {
// m_oExtLst.Init();
// m_oExtLst->fromPPTY(pReader);
// break;
// }
default:
{
pReader->SkipRecord();
break;
}
}
}
pReader->Seek(_end_rec);
}
void CSlicerStyleElement::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "type", m_oType)
WritingElement_ReadAttributes_Read_else_ifChar( oReader, "dxfId", m_oDxfId)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerStyleElement::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes(oReader);
if (oReader.IsEmptyNode())
return;
oReader.ReadTillEnd();
}
void CSlicerStyleElement::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oType, writer.WriteAttribute(L"type", m_oType->ToString()););
WritingNullable(m_oDxfId, writer.WriteAttribute(L"dxfId", *m_oDxfId););
writer.EndAttributes();
writer.EndNode(sName);
}
void CSlicerStyleElement::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
if(m_oType.IsInit())
{
pWriter->WriteByte1(0, m_oType->GetValue());
}
pWriter->WriteUInt2(1, m_oDxfId);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
}
void CSlicerStyleElement::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_oType.Init();
m_oType->SetValue((SimpleTypes::Spreadsheet::ESlicerStyleType)pReader->GetUChar());
break;
}
case 1:
{
m_oDxfId = pReader->GetULong();
break;
}
}
}
while (pReader->GetPos() < _end_rec)
{
BYTE _at = pReader->GetUChar();
switch (_at)
{
default:
{
pReader->SkipRecord();
break;
}
}
}
pReader->Seek(_end_rec);
}
XLS::BaseObjectPtr CSlicerStyleElement::toBin()
{
auto ptr(new XLSB::SlicerStyleElement);
XLS::BaseObjectPtr objectPtr(ptr);
if(m_oDxfId.IsInit());
ptr->dxfId = m_oDxfId.get();
if( m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeUnselectedItemWithData)
ptr->tseType = 0x0000001C;
if(m_oType.IsInit())
{
if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeUnselectedItemWithData)
ptr->tseType = 0x0000001C;
else if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeUnselectedItemWithNoData)
ptr->tseType = 0x0000001D;
else if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeSelectedItemWithData)
ptr->tseType = 0x0000001E;
else if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeSelectedItemWithNoData)
ptr->tseType = 0x0000001F;
else if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredUnselectedItemWithData)
ptr->tseType = 0x00000020;
else if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredSelectedItemWithData)
ptr->tseType = 0x00000021;
else if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredUnselectedItemWithNoData)
ptr->tseType = 0x00000022;
else if (m_oType->GetValue() == SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredSelectedItemWithNoData)
ptr->tseType = 0x00000023;
}
return objectPtr;
}
void CSlicerStyleElement::fromBin(XLS::BaseObjectPtr &obj)
{
ReadAttributes(obj);
}
void CSlicerStyleElement::ReadAttributes(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::SlicerStyleElement*>(obj.get());
if(ptr != nullptr)
{
m_oDxfId = ptr->dxfId;
switch(ptr->tseType)
{
case 0x0000001C:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeUnselectedItemWithData); break;
case 0x0000001D:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeUnselectedItemWithNoData); break;
case 0x0000001E:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeSelectedItemWithData); break;
case 0x0000001F:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeSelectedItemWithNoData); break;
case 0x00000020:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredUnselectedItemWithData); break;
case 0x00000021:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredSelectedItemWithData); break;
case 0x00000022:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredUnselectedItemWithNoData); break;
case 0x00000023:
m_oType.Init();
m_oType->SetValue(SimpleTypes::Spreadsheet::ESlicerStyleType::cslicerstyletypeHoveredSelectedItemWithNoData); break;
}
}
}
XLS::BaseObjectPtr CSlicerCache::toBin()
{
auto ptr(new XLSB::SLICERCACHEID);
XLS::BaseObjectPtr objectPtr(ptr);
if(m_oRId.IsInit())
{
auto ptr1(new XLSB::BeginSlicerCacheID);
ptr->m_BrtBeginSlicerCacheID = XLS::BaseObjectPtr{ptr1};
ptr1->FRTheader.relID.relId = m_oRId->GetValue();
ptr1->FRTheader.fRef = false;
ptr1->FRTheader.fSqref = false;
ptr1->FRTheader.fFormula = false;
ptr1->FRTheader.fRelID = true;
}
return objectPtr;
}
XLS::BaseObjectPtr CSlicerCache::toBinTable()
{
auto ptr(new XLSB::TABLESLICERCACHEID);
XLS::BaseObjectPtr objectPtr(ptr);
if(m_oRId.IsInit())
{
auto ptr1(new XLSB::TableSlicerCacheID);
ptr->m_BrtTableSlicerCacheID = XLS::BaseObjectPtr{ptr1};
ptr1->FRTheader.relID.relId = m_oRId->GetValue();
ptr1->FRTheader.fRef = false;
ptr1->FRTheader.fSqref = false;
ptr1->FRTheader.fFormula = false;
ptr1->FRTheader.fRelID = true;
}
return objectPtr;
}
void CSlicerCache::fromBin(XLS::BaseObjectPtr &obj)
{
ReadAttributes(obj);
}
void CSlicerCache::ReadAttributes(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::SLICERCACHEID*>(obj.get());
if(ptr != nullptr)
{
auto ptr1 = static_cast<XLSB::BeginSlicerCacheID*>(ptr->m_BrtBeginSlicerCacheID.get());
if(ptr1 != nullptr)
{
if(!ptr1->FRTheader.relID.relId.value().empty())
m_oRId = ptr1->FRTheader.relID.relId.value();
}
}
}
void CSlicerCache::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "id", m_oRId)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerCache::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes(oReader);
if (oReader.IsEmptyNode())
return;
oReader.ReadTillEnd();
}
void CSlicerCache::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oRId, writer.WriteAttribute(L"r:id", m_oRId->ToString()););
writer.EndAttributesAndNode();
}
void CSlicerCache::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
}
void CSlicerCache::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
{
pReader->SkipRecord();
}
XLS::BaseObjectPtr CSlicerRef::toBin()
{
auto ptr(new XLSB::SLICEREX);
XLS::BaseObjectPtr objectPtr(ptr);
auto ptr1(new XLSB::BeginSlicerEx);
ptr1->FRTheader.relID.relId = m_oRId->GetValue();
ptr1->FRTheader.fRelID = true;
ptr1->FRTheader.fRef = false;
ptr1->FRTheader.fSqref = false;
ptr1->FRTheader.fFormula = false;
ptr->m_BrtBeginSlicerEx = XLS::BaseObjectPtr{ptr1};
return objectPtr;
}
XLS::BaseObjectPtr CSlicerRef::toBinTable()
{
auto ptr(new XLSB::TABLESLICEREX);
XLS::BaseObjectPtr objectPtr(ptr);
auto ptr1(new XLSB::BeginSlicerEx);
ptr1->FRTheader.relID.relId = m_oRId->GetValue();
ptr1->FRTheader.fRelID = true;
ptr1->FRTheader.fRef = false;
ptr1->FRTheader.fSqref = false;
ptr1->FRTheader.fFormula = false;
ptr->m_BrtBeginSlicerEx = XLS::BaseObjectPtr{ptr1};
return objectPtr;
}
void CSlicerRef::fromBin(XLS::BaseObjectPtr &obj)
{
ReadAttributes(obj);
}
void CSlicerRef::ReadAttributes(XLS::BaseObjectPtr &obj)
{
if(obj->get_type() == XLS::typeSLICEREX)
{
auto ptr = static_cast<XLSB::SLICEREX*>(obj.get());
if(ptr != nullptr)
{
auto ptr1 = static_cast<XLSB::BeginSlicerEx*>(ptr->m_BrtBeginSlicerEx.get());
if(ptr1 != nullptr)
{
if(!ptr1->FRTheader.relID.relId.value().empty())
m_oRId = ptr1->FRTheader.relID.relId.value();
}
}
}
else if(obj->get_type() == XLS::typeTABLESLICEREX)
{
auto ptr = static_cast<XLSB::TABLESLICEREX*>(obj.get());
if(ptr != nullptr)
{
auto ptr1 = static_cast<XLSB::BeginSlicerEx*>(ptr->m_BrtBeginSlicerEx.get());
if(ptr1 != nullptr)
{
if(!ptr1->FRTheader.relID.relId.value().empty())
m_oRId = ptr1->FRTheader.relID.relId.value();
}
}
}
}
void CSlicerRef::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "id", m_oRId)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerRef::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes(oReader);
if (oReader.IsEmptyNode())
return;
oReader.ReadTillEnd();
}
void CSlicerRef::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oRId, writer.WriteAttributeEncodeXml(L"r:id", m_oRId->ToString()););
writer.EndAttributes();
writer.EndNode(sName);
}
void CSlicerRef::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
}
void CSlicerRef::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
{
pReader->SkipRecord();
}
void CSlicerStyle::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "name", m_oName)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerStyle::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("slicerStyleElements", sName) == 0)
{
int nCurDepth = oReader.GetDepth();
while (oReader.ReadNextSiblingNode(nCurDepth))
{
const char* sName = XmlUtils::GetNameNoNS(oReader.GetNameChar());
if (strcmp("slicerStyleElement", sName) == 0)
{
m_oSlicerStyleElements.emplace_back();
m_oSlicerStyleElements.back() = oReader;
}
}
}
}
}
void CSlicerStyle::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oName, writer.WriteAttributeEncodeXml(L"name", *m_oName););
writer.EndAttributes();
if(m_oSlicerStyleElements.size() > 0)
{
writer.StartNode(L"x14:slicerStyleElements");
writer.StartAttributes();
writer.EndAttributes();
for(size_t i = 0; i < m_oSlicerStyleElements.size(); ++i)
{
(&m_oSlicerStyleElements[i])->toXML(writer, L"x14:slicerStyleElement");
}
writer.EndNode(L"x14:slicerStyleElements");
}
writer.EndNode(sName);
}
void CSlicerStyle::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString2(0, m_oName);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
pWriter->WriteRecordArray(0, 0, m_oSlicerStyleElements);
}
void CSlicerStyle::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;
}
}
}
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_oSlicerStyleElements.emplace_back();
m_oSlicerStyleElements.back().fromPPTY(pReader);
}
break;
}
default:
{
pReader->SkipRecord();
break;
}
}
}
pReader->Seek(_end_rec);
}
void CSlicerStyle::fromBin(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::SLICERSTYLE*>(obj.get());
if(ptr != nullptr)
{
ReadAttributes(ptr->m_BrtBeginSlicerStyle);
for(auto slicerStyleElement : ptr->m_arBrtSlicerStyleElement)
{
m_oSlicerStyleElements.emplace_back();
m_oSlicerStyleElements.back() = slicerStyleElement;
}
}
}
XLS::BaseObjectPtr CSlicerStyle::toBin()
{
auto ptr(new XLSB::SLICERSTYLE);
XLS::BaseObjectPtr objectPtr(ptr);
if(m_oName.IsInit())
{
auto ptr1(new XLSB::BeginSlicerStyle);
ptr->m_BrtBeginSlicerStyle = XLS::BaseObjectPtr{ptr1};
ptr1->stName = m_oName.get();
}
for(auto i: m_oSlicerStyleElements)
{
ptr->m_arBrtSlicerStyleElement.push_back(i.toBin());
}
return objectPtr;
}
void CSlicerStyle::ReadAttributes(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::BeginSlicerStyle*>(obj.get());
if(ptr != nullptr)
m_oName = ptr->stName.value();
}
XLS::BaseObjectPtr CSlicerCaches::toBin()
{
auto ptr(new XLSB::SLICERCACHEIDS);
XLS::BaseObjectPtr objectPtr(ptr);
for(auto i:m_oSlicerCache)
{
ptr->m_arSLICERCACHEID.push_back(i.toBin());
}
return objectPtr;
}
XLS::BaseObjectPtr CSlicerCaches::toBinTable()
{
auto ptr(new XLSB::TABLESLICERCACHEIDS);
auto ptr1(new XLSB::FRTBegin);
ptr->m_BrtFRTBegin = XLS::BaseObjectPtr{ptr1};
XLSB::FRTProductVersion version;
version.product = 0;
version.version = 0;
ptr1->productVersion = version;
XLS::BaseObjectPtr objectPtr(ptr);
for(auto i:m_oSlicerCache)
{
ptr->m_arTABLESLICERCACHEID.push_back(i.toBinTable());
}
return objectPtr;
}
void CSlicerCaches::fromBin(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::SLICERCACHEIDS*>(obj.get());
if(ptr != nullptr)
{
for(auto slicerCacheID : ptr->m_arSLICERCACHEID)
{
m_oSlicerCache.emplace_back();
m_oSlicerCache.back() = slicerCacheID;
}
}
}
void CSlicerCaches::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerCaches::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("slicerCache", sName) == 0)
{
m_oSlicerCache.emplace_back();
m_oSlicerCache.back() = oReader;
}
}
}
void CSlicerCaches::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName, const std::wstring& sPrefix) const
{
writer.StartNode(sPrefix + sName);
writer.StartAttributes();
std::wstring sChildPrefix;
if(sPrefix.length() > 0 && L"x14:" == sPrefix)
{
sChildPrefix = L"x14:";
writer.WriteAttribute(L"xmlns:x14", L"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
}
writer.EndAttributes();
if(m_oSlicerCache.size() > 0)
{
for(size_t i = 0; i < m_oSlicerCache.size(); ++i)
{
(&m_oSlicerCache[i])->toXML(writer, L"x14:slicerCache");
}
}
writer.EndNode(sPrefix + sName);
}
XLS::BaseObjectPtr CSlicerRefs::toBin()
{
auto ptr(new XLSB::SLICERSEX);
XLS::BaseObjectPtr objectPtr(ptr);
auto ptr1(new XLSB::FRTBegin);
ptr->m_BrtFRTBegin = XLS::BaseObjectPtr{ptr1};
XLSB::FRTProductVersion version;
version.product = 0;
version.version = 0;
ptr1->productVersion = version;
for(auto i:m_oSlicer)
{
ptr->m_arSLICEREX.push_back(i.toBin());
}
return objectPtr;
}
XLS::BaseObjectPtr CSlicerRefs::toBinTable()
{
auto ptr(new XLSB::TABLESLICERSEX);
XLS::BaseObjectPtr objectPtr(ptr);
auto ptr1(new XLSB::FRTBegin);
ptr->m_BrtFRTBegin = XLS::BaseObjectPtr{ptr1};
XLSB::FRTProductVersion version;
version.product = 0;
version.version = 0;
ptr1->productVersion = version;
for(auto i:m_oSlicer)
{
ptr->m_arTABLESLICEREX.push_back(i.toBinTable());
}
return objectPtr;
}
void CSlicerRefs::fromBin(XLS::BaseObjectPtr &obj)
{
if(obj->get_type() == XLS::typeSLICERSEX)
{
auto ptr = static_cast<XLSB::SLICERSEX*>(obj.get());
if(ptr != nullptr)
{
for(auto slicerex : ptr->m_arSLICEREX)
{
m_oSlicer.emplace_back();
m_oSlicer.back() = slicerex;
}
}
}
else if(obj->get_type() == XLS::typeTABLESLICERSEX)
{
auto ptr = static_cast<XLSB::TABLESLICERSEX*>(obj.get());
if(ptr != nullptr)
{
for(auto tableslicerex : ptr->m_arTABLESLICEREX)
{
m_oSlicer.emplace_back();
m_oSlicer.back() = tableslicerex;
}
}
}
}
void CSlicerRefs::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerRefs::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("slicer", sName) == 0)
{
m_oSlicer.emplace_back();
m_oSlicer.back() = oReader;
}
}
}
void CSlicerRefs::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
writer.WriteAttribute(L"xmlns:x14", L"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main");
writer.EndAttributes();
if(m_oSlicer.size() > 0)
{
for(size_t i = 0; i < m_oSlicer.size(); ++i)
{
(&m_oSlicer[i])->toXML(writer, L"x14:slicer");
}
}
writer.EndNode(sName);
}
void CSlicerStyles::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "defaultSlicerStyle", m_oDefaultSlicerStyle)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CSlicerStyles::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("slicerStyle", sName) == 0)
{
m_oSlicerStyle.emplace_back();
m_oSlicerStyle.back() = oReader;
}
}
}
void CSlicerStyles::toXML(NSStringUtils::CStringBuilder& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
WritingNullable(m_oDefaultSlicerStyle, writer.WriteAttributeEncodeXml(L"defaultSlicerStyle", *m_oDefaultSlicerStyle););
writer.EndAttributes();
if(m_oSlicerStyle.size() > 0)
{
for(size_t i = 0; i < m_oSlicerStyle.size(); ++i)
{
(&m_oSlicerStyle[i])->toXML(writer, L"x14:slicerStyle");
}
}
writer.EndNode(sName);
}
void CSlicerStyles::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString2(0, m_oDefaultSlicerStyle);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
pWriter->WriteRecordArray(0, 0, m_oSlicerStyle);
}
void CSlicerStyles::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_oDefaultSlicerStyle = 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_oSlicerStyle.emplace_back();
m_oSlicerStyle.back().fromPPTY(pReader);
}
break;
}
default:
{
pReader->SkipRecord();
break;
}
}
}
pReader->Seek(_end_rec);
}
void CSlicerStyles::fromBin(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::STYLESHEET14*>(obj.get());
if(ptr != nullptr)
{
auto ptrSlicerStyles = static_cast<XLSB::SLICERSTYLES*>(ptr->m_SLICERSTYLES.get());
if(ptrSlicerStyles != nullptr)
{
ReadAttributes(ptrSlicerStyles->m_BrtBeginSlicerStyles);
for(auto slicerStyle : ptrSlicerStyles->m_arSLICERSTYLE)
{
m_oSlicerStyle.emplace_back();
m_oSlicerStyle.back() = slicerStyle;
}
}
}
}
XLS::BaseObjectPtr CSlicerStyles::toBin()
{
auto ptr(new XLSB::STYLESHEET14);
auto ptr1(new XLSB::FRTBegin);
ptr->m_BrtFRTBegin = XLS::BaseObjectPtr{ptr1};
XLSB::FRTProductVersion version;
version.product = 0;
version.version = 0;
ptr1->productVersion = version;
XLS::BaseObjectPtr objectPtr(ptr);
auto slicerStyle(new XLSB::SLICERSTYLES);
ptr->m_SLICERSTYLES = XLS::BaseObjectPtr {slicerStyle};
auto beginStyles(new XLSB::BeginSlicerStyles);
slicerStyle->m_BrtBeginSlicerStyles = XLS::BaseObjectPtr{beginStyles};
if(m_oDefaultSlicerStyle.IsInit())
beginStyles->stDefSlicer = m_oDefaultSlicerStyle.get();
for(auto i:m_oSlicerStyle)
{
slicerStyle->m_arSLICERSTYLE.push_back(i.toBin());
}
return objectPtr;
}
void CSlicerStyles::ReadAttributes(XLS::BaseObjectPtr &obj)
{
auto ptr = static_cast<XLSB::BeginSlicerStyles*>(obj.get());
if(ptr != nullptr)
m_oDefaultSlicerStyle = ptr->stDefSlicer.value();
}
void CDrawingSlicer::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_StartChar_No_NS(oReader)
WritingElement_ReadAttributes_Read_ifChar( oReader, "name", m_oName)
WritingElement_ReadAttributes_EndChar_No_NS( oReader )
}
void CDrawingSlicer::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("extLst", sName) == 0)
m_oExtLst = oReader;
}
}
std::wstring CDrawingSlicer::toXML() const
{
NSBinPptxRW::CXmlWriter writer;
toXML(writer, L"sle:slicer");
return writer.GetXmlString();
}
void CDrawingSlicer::toXML(NSBinPptxRW::CXmlWriter& writer, const std::wstring& sName) const
{
writer.StartNode(sName);
writer.StartAttributes();
writer.WriteString(L" xmlns:sle=\"http://schemas.microsoft.com/office/drawing/2010/slicer\"");
WritingNullable(m_oName, writer.WriteAttribute2(L"name", *m_oName););
writer.EndAttributes();
//WritingNullable(m_oExtLst, writer.WriteString(m_oExtLst->toXMLWithNS(L"")););
writer.EndNode(sName);
}
void CDrawingSlicer::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString2(0, m_oName);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
// pWriter->WriteRecord2(0, m_oExtLst);
}
void CDrawingSlicer::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;
}
}
}
while (pReader->GetPos() < _end_rec)
{
BYTE _at = pReader->GetUChar();
switch (_at)
{
// case 0:
// {
// m_oExtLst.Init();
// m_oExtLst->fromPPTY(pReader);
// break;
// }
default:
{
pReader->SkipRecord();
break;
}
}
}
pReader->Seek(_end_rec);
}
} //Spreadsheet
} // namespace OOX