Compare commits

..

7 Commits

18 changed files with 167 additions and 87 deletions

View File

@ -8806,7 +8806,6 @@ public:
case c_oSerTableTypes::App:
{
PPTX::App oApp(NULL);
m_oBufferedStream.Skip(1); // type
oApp.fromPPTY(&m_oBufferedStream);
OOX::CApp* pApp = new OOX::CApp(NULL);
pApp->FromPptxApp(&oApp);
@ -8817,7 +8816,6 @@ public:
case c_oSerTableTypes::Core:
{
PPTX::Core oCore(NULL);
m_oBufferedStream.Skip(1); // type
oCore.fromPPTY(&m_oBufferedStream);
OOX::CCore* pCore = new OOX::CCore(NULL);
pCore->FromPptxCore(&oCore);

View File

@ -1091,16 +1091,28 @@ namespace NSBinPptxRW
}
void SetRequiredDefaultsCore()
{
std::wstring sCreator = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvCreator);
if (!sCreator.empty())
m_oCore.creator = sCreator;
if (!m_oCore.creator.IsInit())
{
std::wstring sCreator = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvCreator);
if (!sCreator.empty())
m_oCore.creator = sCreator;
}
if (!m_oCore.created.IsInit())
{
std::wstring sCreated = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvCreated);
if (!sCreated.empty())
m_oCore.created = sCreated;
}
std::wstring sLastModifiedBy = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvLastModifiedBy);
if (!sLastModifiedBy.empty())
m_oCore.lastModifiedBy = sLastModifiedBy;
std::wstring sModified = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvModified);
if (!sModified.empty())
m_oCore.modified = sModified;
}
void CreateDefaultCore()
{
m_oCore.creator = _T("");
// m_oCore.creator = _T("");
m_oCore.lastModifiedBy = _T("");
}
void CreateDefaultViewProps()

View File

@ -171,6 +171,7 @@ namespace PPTX
}
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
{
pReader->Skip(1); // type
LONG _end_rec = pReader->GetPos() + pReader->GetLong() + 4;
pReader->Skip(1); // start attributes

View File

@ -136,6 +136,7 @@ namespace PPTX
}
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
{
pReader->Skip(1); // type
LONG _end_rec = pReader->GetPos() + pReader->GetLong() + 4;
pReader->Skip(1); // start attributes
@ -224,8 +225,18 @@ namespace PPTX
pWriter->WriteNodeValue2(_T("cp:lastModifiedBy"), lastModifiedBy);
pWriter->WriteNodeValue2(_T("cp:revision"), revision);
pWriter->WriteNodeValue2(_T("cp:lastPrinted"), lastPrinted);
pWriter->WriteNodeValue2(_T("dcterms:created xsi:type=\"dcterms:W3CDTF\""), created);
pWriter->WriteNodeValue2(_T("dcterms:modified xsi:type=\"dcterms:W3CDTF\""), modified);
if (created.IsInit())
{
pWriter->WriteNodeBegin(_T("dcterms:created xsi:type=\"dcterms:W3CDTF\""));
pWriter->WriteStringXML(*created);
pWriter->WriteNodeEnd(_T("dcterms:created"));
}
if (modified.IsInit())
{
pWriter->WriteNodeBegin(_T("dcterms:modified xsi:type=\"dcterms:W3CDTF\""));
pWriter->WriteStringXML(*modified);
pWriter->WriteNodeEnd(_T("dcterms:modified"));
}
pWriter->WriteNodeValue2(_T("cp:category"), revision);
pWriter->WriteNodeValue2(_T("cp:contentStatus"), revision);
pWriter->WriteNodeValue2(_T("cp:version"), revision);

View File

@ -101,7 +101,11 @@ namespace PPTX
XmlUtils::CNodeValue oValue;
oValue.Write(cNvPr);
oValue.Write(cNvCxnSpPr);
//oValue.Write(nvPr); //todooo ??? 3622708.xlsx
if (m_namespace != L"xdr" && m_namespace != L"cdr")
{
oValue.Write(nvPr);
}
return XmlUtils::CreateNode(m_namespace + L":nvCxnSpPr", oValue);
}
@ -120,7 +124,12 @@ namespace PPTX
cNvPr.toXmlWriter2(namespace_ , pWriter);
cNvCxnSpPr.toXmlWriter(pWriter);
//nvPr.toXmlWriter2(namespace_, pWriter); //todooo ??? 3622708.xlsx
if (pWriter->m_lDocType != XMLWRITER_DOC_TYPE_GRAPHICS &&
pWriter->m_lDocType != XMLWRITER_DOC_TYPE_CHART_DRAWING)
{
nvPr.toXmlWriter2(namespace_, pWriter);
}
pWriter->EndNode(namespace_ + L":nvCxnSpPr");
}

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of End record in BIFF8
class End: public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(End)
@ -48,10 +46,9 @@ public:
BaseObjectPtr clone();
void readFields(CFRecord& record);
static const ElementType type = typeEnd;
static const ElementType type = typeEnd;
};

View File

@ -39,12 +39,10 @@ Frame::Frame()
{
}
Frame::~Frame()
{
}
BaseObjectPtr Frame::clone()
{
return BaseObjectPtr(new Frame(*this));
@ -56,8 +54,8 @@ void Frame::readFields(CFRecord& record)
unsigned short flags;
record >> frt >> flags;
fAutoSize = GETBIT(flags, 0);
fAutoPosition = GETBIT(flags, 1);
fAutoSize = GETBIT(flags, 0);
fAutoPosition = GETBIT(flags, 1);
}
} // namespace XLS

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of Frame record in BIFF8
class Frame: public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(Frame)
@ -47,11 +45,10 @@ public:
~Frame();
BaseObjectPtr clone();
void readFields(CFRecord& record);
static const ElementType type = typeFrame;
static const ElementType type = typeFrame;
//-----------------------------
_UINT16 frt;

View File

@ -34,6 +34,22 @@
namespace XLS
{
std::wstring default_marker_color[] =
{
L"000080", L"FF00FF", L"FFFF00", L"00FFFF", L"800080", L"800000", L"808000", L"0000FF", L"00CCFF", L"CCFFFF",
L"CCFFCC", L"FFFF99", L"99CCFF", L"FF99CC", L"CC99FF", L"FFCC99", L"3366FF", L"33CCCC", L"99CC00", L"FFCC00",
L"FF9900", L"FF6600", L"666699", L"969696", L"336600", L"339966", L"330000", L"333300", L"993300", L"993366",
L"333399", L"000000", L"FFFFFF", L"FF0000", L"00FF00", L"0000FF", L"FFFF00", L"FF00FF", L"00FFFF", L"800000",
L"800000", L"800000", L"808000", L"800080", L"808000", L"C0C0C0", L"808080", L"9999FF", L"993366", L"FFFFCC",
L"CCFFFF", L"660066", L"FF8080", L"0066CC", L"CCCCFF",
//todoooo - подглядеть какие в мс далее
L"000080", L"FF00FF", L"FFFF00", L"00FFFF", L"800080", L"800000", L"808000", L"0000FF", L"00CCFF", L"CCFFFF",
L"CCFFCC", L"FFFF99", L"99CCFF", L"FF99CC", L"CC99FF", L"FFCC99", L"3366FF", L"33CCCC", L"99CC00", L"FFCC00",
L"FF9900", L"FF6600", L"666699", L"969696", L"336600", L"339966", L"330000", L"333300", L"993300", L"993366",
L"333399", L"000000", L"FFFFFF", L"FF0000", L"00FF00", L"0000FF", L"FFFF00", L"FF00FF", L"00FFFF", L"800000",
L"800000", L"800000", L"808000", L"800080", L"808000", L"C0C0C0", L"808080", L"9999FF", L"993366", L"FFFFCC",
L"CCFFFF", L"660066", L"FF8080", L"0066CC", L"CCCCFF"
};
MarkerFormat::MarkerFormat()
{
@ -60,8 +76,11 @@ void MarkerFormat::readFields(CFRecord& record)
fNotShowInt = GETBIT(flags, 4);
fNotShowBrd = GETBIT(flags, 5);
}
int MarkerFormat::serialize(std::wostream & _stream)
{
return serialize(_stream, -1);
}
int MarkerFormat::serialize(std::wostream & _stream, int index)
{
CP_XML_WRITER(_stream)
{
@ -87,14 +106,17 @@ int MarkerFormat::serialize(std::wostream & _stream)
}
if (imk > 0)
{
CP_XML_NODE(L"c:size") { CP_XML_ATTR(L"val", miSize / 20); }
CP_XML_NODE(L"c:size")
{
CP_XML_ATTR(L"val", (false == fAuto) ? miSize / 20 : 5);
}
CP_XML_NODE(L"c:spPr")
{
CP_XML_NODE(L"a:solidFill")
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", rgbBack.strRGB);
CP_XML_ATTR(L"val", (false == fAuto || index < 0) ? rgbBack.strRGB : default_marker_color[index]);
}
}
CP_XML_NODE(L"a:ln")
@ -103,7 +125,7 @@ int MarkerFormat::serialize(std::wostream & _stream)
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", rgbFore.strRGB);
CP_XML_ATTR(L"val", (false == fAuto || index < 0) ? rgbFore.strRGB : default_marker_color[index]);
}
}
CP_XML_NODE(L"a:prstDash") { CP_XML_ATTR(L"val", L"solid"); }

View File

@ -37,8 +37,6 @@
namespace XLS
{
// Logical representation of MarkerFormat record in BIFF8
class MarkerFormat: public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(MarkerFormat)
@ -48,10 +46,10 @@ public:
~MarkerFormat();
BaseObjectPtr clone();
void readFields(CFRecord& record);
int serialize(std::wostream & _stream, int index);
int serialize(std::wostream & _stream);
//-----------------------------
LongRGB rgbFore;

View File

@ -82,6 +82,12 @@ int Pos::serialize(std::wostream & _stream)
bAutoPosition = Frame_->fAutoPosition;
bAutoSize = Frame_->fAutoSize;
}
if (m_iLayoutTarget > 0) //cem31.xls
{
bAutoPosition = false;
bAutoSize = false;
}
double x = x1 / 4000.;
double y = y1 / 4000.;

View File

@ -289,7 +289,7 @@ int SERIESFORMAT::serialize_parent(std::wostream & _stream, CHARTFORMATS* chart_
{
if (series_ss)
{
series_ss->serialize(CP_XML_STREAM(), CHART_TYPE_Bar);
series_ss->serialize(CP_XML_STREAM(), CHART_TYPE_Bar, -1);
//тут не надо рисовать маркеры .. а вот fill можно - он просто отбрасывается - по "првильному" нужно выделить отдельный тип чисто линий
}
//CP_XML_NODE(L"c:spPr")
@ -305,11 +305,21 @@ int SERIESFORMAT::serialize_parent(std::wostream & _stream, CHARTFORMATS* chart_
case 2: CP_XML_ATTR (L"val", L"log"); break;
case 3: CP_XML_ATTR (L"val", L"power"); break;
case 4: CP_XML_ATTR (L"val", L"movingAvg"); break;
case 0: //CP_XML_ATTR (L"val", L"poly"); break;
default: CP_XML_ATTR (L"val", L"linear"); break;
case 0:
default:
{
if (trendline->ordUser >1) CP_XML_ATTR (L"val", L"poly");
else CP_XML_ATTR (L"val", L"linear");
}break;
}
}
if (trendline->ordUser >1)
{
CP_XML_NODE(L"c:order")
{
CP_XML_ATTR (L"val" , trendline->ordUser);
}
}
CP_XML_NODE(L"c:dispRSqr")
{
CP_XML_ATTR (L"val" , (bool)trendline->fRSquared);

View File

@ -31,23 +31,22 @@
*/
#include "SS.h"
#include <Logic/Biff_records/DataFormat.h>
#include <Logic/Biff_records/Begin.h>
#include <Logic/Biff_records/Chart3DBarShape.h>
#include <Logic/Biff_records/LineFormat.h>
#include <Logic/Biff_records/AreaFormat.h>
#include <Logic/Biff_records/PieFormat.h>
#include <Logic/Biff_records/SerFmt.h>
#include <Logic/Biff_records/MarkerFormat.h>
#include <Logic/Biff_records/AttachedLabel.h>
#include <Logic/Biff_records/End.h>
#include "GELFRAME.h"
#include "SHAPEPROPS.h"
#include "CRTMLFRT.h"
#include <Logic/Biff_unions/GELFRAME.h>
#include <Logic/Biff_unions/SHAPEPROPS.h>
#include <Logic/Biff_unions/CRTMLFRT.h>
#include <Logic/Biff_records/StartObject.h>
#include <Logic/Biff_records/EndObject.h>
#include"../Biff_records/DataFormat.h"
#include"../Biff_records/Begin.h"
#include"../Biff_records/Chart3DBarShape.h"
#include"../Biff_records/LineFormat.h"
#include"../Biff_records/AreaFormat.h"
#include"../Biff_records/PieFormat.h"
#include"../Biff_records/SerFmt.h"
#include"../Biff_records/MarkerFormat.h"
#include"../Biff_records/AttachedLabel.h"
#include"../Biff_records/End.h"
#include"../Biff_records/StartObject.h"
#include"../Biff_records/EndObject.h"
namespace XLS
{
@ -64,14 +63,14 @@ namespace XLS
std::wstring default_series_line_color[] =
{
L"800000", L"FF00FF", L"FFFF00", L"00FFFF", L"800080", L"800000", L"808000", L"0000FF", L"00CCFF", L"CCFFFF",
L"000080", L"FF00FF", L"FFFF00", L"00FFFF", L"800080", L"800000", L"808000", L"0000FF", L"00CCFF", L"CCFFFF",
L"CCFFCC", L"FFFF99", L"99CCFF", L"FF99CC", L"CC99FF", L"FFCC99", L"3366FF", L"33CCCC", L"99CC00", L"FFCC00",
L"FF9900", L"FF6600", L"666699", L"969696", L"336600", L"339966", L"330000", L"333300", L"993300", L"993366",
L"333399", L"000000", L"FFFFFF", L"FF0000", L"00FF00", L"0000FF", L"FFFF00", L"FF00FF", L"00FFFF", L"800000",
L"800000", L"800000", L"808000", L"800080", L"808000", L"C0C0C0", L"808080", L"9999FF", L"993366", L"FFFFCC",
L"CCFFFF", L"660066", L"FF8080", L"0066CC", L"CCCCFF",
//todoooo - подглядеть какие в мс далее
L"800000", L"FF00FF", L"FFFF00", L"00FFFF", L"800080", L"800000", L"808000", L"0000FF", L"00CCFF", L"CCFFFF",
L"000080", L"FF00FF", L"FFFF00", L"00FFFF", L"800080", L"800000", L"808000", L"0000FF", L"00CCFF", L"CCFFFF",
L"CCFFCC", L"FFFF99", L"99CCFF", L"FF99CC", L"CC99FF", L"FFCC99", L"3366FF", L"33CCCC", L"99CC00", L"FFCC00",
L"FF9900", L"FF6600", L"666699", L"969696", L"336600", L"339966", L"330000", L"333300", L"993300", L"993366",
L"333399", L"000000", L"FFFFFF", L"FF0000", L"00FF00", L"0000FF", L"FFFF00", L"FF00FF", L"00FFFF", L"800000",
@ -234,7 +233,8 @@ void SS::apply_crt_ss (BaseObjectPtr crt_ss)
SS * ss_common = dynamic_cast<SS*>(crt_ss.get());
if (ss_common == NULL) return;
if (ss_common->m_PieFormat && !m_PieFormat) m_PieFormat = ss_common->m_PieFormat;
if (ss_common->m_PieFormat && !m_PieFormat) m_PieFormat = ss_common->m_PieFormat;
if (ss_common->m_MarkerFormat && !m_MarkerFormat) m_MarkerFormat = ss_common->m_MarkerFormat;
//.... ???
}
@ -327,8 +327,9 @@ int SS::serialize_default(std::wostream & _stream, int series_type, int ind )
int SS::serialize(std::wostream & _stream, int series_type, int indPt)
{
DataFormat *series_data_format = dynamic_cast<DataFormat *>(m_DataFormat.get());
SerFmt *series_format = dynamic_cast<SerFmt *> (m_SerFmt.get());
DataFormat *series_data_format = dynamic_cast<DataFormat*> (m_DataFormat.get());
SerFmt *series_format = dynamic_cast<SerFmt*> (m_SerFmt.get());
MarkerFormat *marker_format = dynamic_cast<MarkerFormat*> (m_MarkerFormat.get());
int ind = series_data_format->iss;
@ -383,31 +384,26 @@ int SS::serialize(std::wostream & _stream, int series_type, int indPt)
else
{
//генерация (automatic)
if ( series_type != CHART_TYPE_Line || m_is3D == true ) //line & !3dLine
if (series_type == CHART_TYPE_Scatter || series_type == CHART_TYPE_Stock)
{
}
else if ( series_type != CHART_TYPE_Line || m_is3D == true ) //line & !3dLine
ind = 31; //black
CP_XML_NODE(L"a:ln")
{
CP_XML_ATTR(L"w", 12700);//single
if (series_type == CHART_TYPE_Scatter || series_type == CHART_TYPE_Stock)
//points only - todooo сделать дефолтовые точки ala 95 стиль & stork
CP_XML_NODE(L"a:solidFill")
{
m_isAutoLine = false;
//CP_XML_NODE(L"a:noFill");
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", default_series_line_color[ind]);
}
}
else
CP_XML_NODE(L"a:prstDash")
{
CP_XML_NODE(L"a:solidFill")
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", default_series_line_color[ind]);
}
}
CP_XML_NODE(L"a:prstDash")
{
CP_XML_ATTR(L"val", L"solid");
}
CP_XML_ATTR(L"val", L"solid");
}
}
}
@ -416,15 +412,25 @@ int SS::serialize(std::wostream & _stream, int series_type, int indPt)
if (m_PieFormat && (series_type == CHART_TYPE_Doughnut ||
series_type == CHART_TYPE_BopPop ||
series_type == CHART_TYPE_Pie))
{
m_PieFormat->serialize(_stream);
}
if (m_MarkerFormat && series_type != CHART_TYPE_Bubble &&
if (marker_format && series_type != CHART_TYPE_Bubble &&
series_type != CHART_TYPE_Bar &&
series_type != CHART_TYPE_BopPop )
m_MarkerFormat->serialize(_stream);
{
marker_format->serialize(_stream, ind);
}
else if (/*series_type == CHART_TYPE_Line ||*/ series_type == CHART_TYPE_Scatter)
{
CP_XML_NODE(L"c:marker");
CP_XML_NODE(L"c:marker")
{
CP_XML_NODE(L"c:symbol")
{
CP_XML_ATTR(L"val", L"none");
}
}
}
}

View File

@ -66,7 +66,7 @@ public:
void apply_crt_ss (BaseObjectPtr crt_ss);
int serialize (std::wostream & _stream, int series_type, int ind = -1);
int serialize (std::wostream & _stream, int series_type, int indPt);
int serialize_default (std::wostream & _stream, int series_type, int ind);
int serialize2 (std::wostream & _stream, int series_type);
@ -90,8 +90,7 @@ public:
_CP_OPT(bool) m_isVaried;
bool m_isAutoFill;
bool m_isAutoLine;
bool m_isAutoLine;
};
} // namespace XLS

View File

@ -791,7 +791,8 @@ int ChartSheetSubstream::serialize_plot_area (std::wostream & _stream)
{
CRT * crt = dynamic_cast<CRT*>(parent0->m_arCRT[0].get());
if ((crt) && ( crt->m_iChartType == CHART_TYPE_Radar ||
crt->m_iChartType == CHART_TYPE_RadarArea))//еще?
crt->m_iChartType == CHART_TYPE_RadarArea ||
crt->m_iChartType == CHART_TYPE_Scatter))//еще?
{
PlotAreaPos->m_iLayoutTarget = 2; //inner
}
@ -898,7 +899,7 @@ int ChartSheetSubstream::serialize_plot_area (std::wostream & _stream)
series->m_arAI[0]->serialize(CP_XML_STREAM());
series_ss->serialize(CP_XML_STREAM(), crt->m_iChartType);
series_ss->serialize(CP_XML_STREAM(), crt->m_iChartType, -1);
serialize_dPt(CP_XML_STREAM(), it->second[i], crt, (std::max)(ser->cValx, ser->cValy));//+bubbles

View File

@ -223,17 +223,30 @@ namespace OOX
}
void SetDefaults()
{
m_sCreator = L"";
// m_sCreator = L"";
m_sLastModifiedBy = L"";
}
void SetRequiredDefaults()
{
std::wstring sCreator = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvCreator);
if (!sCreator.empty())
m_sCreator = sCreator;
if (m_sCreator.IsInit())
{
std::wstring sCreator = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvCreator);
if (!sCreator.empty())
m_sCreator = sCreator;
}
if (m_sCreated.IsInit())
{
std::wstring sCreated = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvCreated);
if (!sCreated.empty())
m_sCreated = sCreated;
}
std::wstring sLastModifiedBy = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvLastModifiedBy);
if (!sLastModifiedBy.empty())
m_sLastModifiedBy = sLastModifiedBy;
std::wstring sModified = NSSystemUtils::GetEnvVariable(NSSystemUtils::gc_EnvModified);
if (!sModified.empty())
m_sModified = sModified;
}
void SetCreator(std::wstring sVal)
{

View File

@ -44,7 +44,9 @@ namespace NSSystemUtils
static const wchar_t* gc_EnvMethodEncrypt = L"METHOD_CRYPT";
static const wchar_t* gc_EnvMethodEncryptDefault = L"Strong";
static const wchar_t* gc_EnvCreator = L"CREATOR";
static const wchar_t* gc_EnvCreated = L"CREATED";
static const wchar_t* gc_EnvLastModifiedBy = L"LAST_MODIFIED_BY";
static const wchar_t* gc_EnvModified = L"MODIFIED";
KERNEL_DECL std::wstring GetEnvVariable(const std::wstring& strName);
}

View File

@ -5070,25 +5070,25 @@ namespace BinXlsxRW
case c_oSerTableTypes::App:
{
PPTX::App oApp(NULL);
oBufferedStream.Skip(1); // type
oApp.fromPPTY(&oBufferedStream);
OOX::CApp* pApp = new OOX::CApp(NULL);
pApp->FromPptxApp(&oApp);
pApp->SetRequiredDefaults();
oXlsx.m_pApp = pApp;
oXlsx.Add(smart_ptr<OOX::File>(pApp));
smart_ptr<OOX::File> oCurFile(pApp);
oXlsx.Add(oCurFile);
}
break;
case c_oSerTableTypes::Core:
{
PPTX::Core oCore(NULL);
oBufferedStream.Skip(1); // type
oCore.fromPPTY(&oBufferedStream);
OOX::CCore* pCore = new OOX::CCore(NULL);
pCore->FromPptxCore(&oCore);
pCore->SetRequiredDefaults();
oXlsx.m_pCore = pCore;
oXlsx.Add( smart_ptr<OOX::File>(pCore));
smart_ptr<OOX::File> oCurFile(pCore);
oXlsx.Add(oCurFile);
}
break;
case c_oSerTableTypes::Styles: