This commit is contained in:
Elena.Subbotina
2024-01-25 12:08:44 +03:00
parent 08c9dd34ac
commit 16fec2e641
13 changed files with 117 additions and 54 deletions

View File

@ -54,8 +54,8 @@ public:
static OfficeArtRecordPtr loadAnyArtRecord(XLS::CFRecord& record);
OfficeArtClientAnchorType anchor_type_;
std::vector<OfficeArtRecordPtr> child_records;
OfficeArtClientAnchorType anchor_type_;
std::vector<OfficeArtRecordPtr> child_records;
private:
OfficeArtRecordPtr CreateOfficeArt(unsigned short type);

View File

@ -86,9 +86,14 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record)
for (size_t i = 0 ; i < child_records.size(); i++)
{
//Log::warning("ArtRecord : " + STR::int2str(child_records[i]->rh_own.recType, 16));
switch(child_records[i]->rh_own.recType)
{
case ODRAW::OfficeArtRecord::DgContainer:
case ODRAW::OfficeArtRecord::DggContainer:
{
}break;
case ODRAW::OfficeArtRecord::DgContainer:
{
OfficeArtDgContainer * dg = dynamic_cast<OfficeArtDgContainer *>(child_records[i].get());
if (dg)
@ -107,22 +112,22 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record)
}
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::FDG:
case ODRAW::OfficeArtRecord::FDG:
{
m_OfficeArtFDG = child_records[i];
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::FRITContainer:
case ODRAW::OfficeArtRecord::FRITContainer:
{
m_OfficeArtFRITContainer = child_records[i];
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::SpgrContainer:
case ODRAW::OfficeArtRecord::SpgrContainer:
{
m_OfficeArtSpgrContainer = child_records[i];
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::SpContainer:
case ODRAW::OfficeArtRecord::SpContainer:
{
m_OfficeArtSpContainer.push_back(child_records[i]);
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
@ -132,8 +137,8 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record)
// m_OfficeArtSpgrContainerFileBlock = OfficeArtContainerPtr(art_container);
// child_records.erase(child_records.begin() + i,child_records.begin() + i + 1);
// }break;
default:
break;
default:
break;
}
}

View File

@ -52,7 +52,7 @@ public:
static const bool CheckIfContainerStartFound(XLS::CFRecord& record);
static const bool CheckIfContainerSizeOK(XLS::CFRecord& record);
static const XLS::ElementType type = XLS::typeOfficeArtDgContainer;
static const XLS::ElementType type = XLS::typeOfficeArtDgContainer;
void loadFields(XLS::CFRecord& record);

View File

@ -71,31 +71,42 @@ void OfficeArtSolverContainer::loadFields(XLS::CFRecord& record)
void OfficeArtDggContainer::loadFields(XLS::CFRecord& record)
{
OfficeArtContainer::loadFields(record);
for (size_t i = 0 ; i < child_records.size(); i++)
for (size_t i = 0; i < child_records.size(); i++)
{
switch(child_records[i]->rh_own.recType)
switch (child_records[i]->rh_own.recType)
{
case ODRAW::OfficeArtRecord::DggContainer:
{
OfficeArtDggContainer* dggContainer = dynamic_cast<OfficeArtDggContainer*>(child_records[i].get());
if (dggContainer)
{
if (!m_OfficeArtBStoreContainer) m_OfficeArtBStoreContainer = dggContainer->m_OfficeArtBStoreContainer;
if (!m_OfficeArtColorMRUContainer) m_OfficeArtColorMRUContainer = dggContainer->m_OfficeArtColorMRUContainer;
if (!m_OfficeArtSplitMenuColorContainer) m_OfficeArtSplitMenuColorContainer = dggContainer->m_OfficeArtSplitMenuColorContainer;
if (!m_OfficeArtFDGGBlock) m_OfficeArtFDGGBlock = dggContainer->m_OfficeArtFDGGBlock;
}
}break;
case ODRAW::OfficeArtRecord::BStoreContainer:
{
m_OfficeArtBStoreContainer = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break;
{
m_OfficeArtBStoreContainer = child_records[i];
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::ColorMRUContainer:
{
m_OfficeArtColorMRUContainer = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break;
{
m_OfficeArtColorMRUContainer = child_records[i];
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::SplitMenuColorContainer:
{
m_OfficeArtSplitMenuColorContainer = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break;
{
m_OfficeArtSplitMenuColorContainer = child_records[i];
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::FDGGBlock:
{
m_OfficeArtFDGGBlock = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break;
{
m_OfficeArtFDGGBlock = child_records[i];
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
//case ODRAW::OfficeArtRecord::SpgrContainerFileBlock:
// {
// m_OfficeArtSpgrContainerFileBlock = OfficeArtContainerPtr(art_container);

View File

@ -43,14 +43,18 @@ public:
OfficeArtDggContainer(const OfficeArtClientAnchorType anchor_type) : OfficeArtContainer(0x0F, DggContainer, anchor_type) {}
XLS::BiffStructurePtr clone() { return XLS::BiffStructurePtr(new OfficeArtDggContainer(*this)); }
static const XLS::ElementType type = XLS::typeOfficeArtDggContainer;
void loadFields(XLS::CFRecord& record);
OfficeArtRecordPtr m_OfficeArtBStoreContainer;
OfficeArtRecordPtr m_OfficeArtColorMRUContainer;
OfficeArtRecordPtr m_OfficeArtSplitMenuColorContainer;
OfficeArtRecordPtr m_OfficeArtFDGGBlock;
//+ OfficeArtFOPT + OfficeArtTertiaryFOPT
};
typedef boost::shared_ptr<OfficeArtDggContainer> OfficeArtDggContainerPtr;
class OfficeArtSpgrContainer : public OfficeArtContainer
{
@ -61,9 +65,9 @@ public:
void loadFields(XLS::CFRecord& record);
static const XLS::ElementType type = XLS::typeOfficeArtSpgrContainer;
static const XLS::ElementType type = XLS::typeOfficeArtSpgrContainer;
std::vector<OfficeArtContainerPtr> m_OfficeArtSpgrContainerFileBlock;
std::vector<OfficeArtContainerPtr> m_OfficeArtSpgrContainerFileBlock;
};
class OfficeArtSolverContainer : public OfficeArtRecord

View File

@ -48,7 +48,7 @@ public:
GlobalWorkbookInfoPtr global_info_;
size_t ws_index_;
std::vector<BiffStructurePtr> m_arHFPictureDrawing;
std::vector<BiffStructurePtr> m_arHFPictureDrawing; // тут OfficeArtDgContainer - описания шейпов ...
BaseObjectPtr m_PAGESETUP;
BaseObjectPtr m_PROTECTION;

View File

@ -105,7 +105,7 @@
//#include "Biff_records/XCT.h"
//#include "Biff_records/CRN.h"
#include "Biff_structures/ODRAW/OfficeArtDgContainer.h"
#include "Biff_structures/ODRAW/SimpleOfficeArtContainers.h"
namespace XLS
{;
@ -657,7 +657,7 @@ void GlobalsSubstream::LoadHFPicture()
hf = dynamic_cast<HFPicture*>(m_arHFPicture[j].get());
record.appendRawData(hf->recordDrawingGroup);
}
ODRAW::OfficeArtDgContainerPtr rgDrawing = ODRAW::OfficeArtDgContainerPtr(new ODRAW::OfficeArtDgContainer(ODRAW::OfficeArtRecord::CA_HF));
ODRAW::OfficeArtDggContainerPtr rgDrawing = ODRAW::OfficeArtDggContainerPtr(new ODRAW::OfficeArtDggContainer(ODRAW::OfficeArtRecord::CA_HF));
rgDrawing->loadFields(record);
m_arHFPictureDrawing.push_back(rgDrawing);
current_size_hf = 0;
@ -674,7 +674,15 @@ void GlobalsSubstream::LoadHFPicture()
HFPicture* hf = dynamic_cast<HFPicture*>(m_arHFPicture[j].get());
record.appendRawData(hf->recordDrawingGroup);
}
ODRAW::OfficeArtDgContainerPtr rgDrawing = ODRAW::OfficeArtDgContainerPtr(new ODRAW::OfficeArtDgContainer(ODRAW::OfficeArtRecord::CA_HF));
ODRAW::OfficeArtRecordHeader rh_test;
record >> rh_test;
record.RollRdPtrBack(8);//sizeof(OfficeArtRecordHeader)
if ((rh_test.recType & 0xF000) != 0xF000)
{
return;
}
ODRAW::OfficeArtDggContainerPtr rgDrawing = ODRAW::OfficeArtDggContainerPtr(new ODRAW::OfficeArtDggContainer(ODRAW::OfficeArtRecord::CA_HF));
rgDrawing->loadFields(record);
m_arHFPictureDrawing.push_back(rgDrawing);
}

View File

@ -88,7 +88,7 @@ public:
//std::vector<BaseObjectPtr> m_arPIVOTCACHEDEFINITION; -> GlobalWorkbookInfo
std::vector<BaseObjectPtr> m_arDConn;
std::vector<BiffStructurePtr> m_arHFPictureDrawing;
std::vector<BiffStructurePtr> m_arHFPictureDrawing; // тут OfficeArtDggContainer - картинки ...
unsigned short code_page_;
GlobalWorkbookInfoPtr global_info_;

View File

@ -717,6 +717,7 @@ enum ElementType
typeOfficeArtRecord = 3000,
typeOfficeArtBStoreContainerFileBlock,
typeOfficeArtDgContainer,
typeOfficeArtDggContainer,
typeOfficeArtCOLORREF,
typeOfficeArtFOPTE,
typeOfficeArtFRIT,