Commit 037c4046 authored by ElenaSubbotina's avatar ElenaSubbotina

PptxFormat - extending reading xml; sppr, txpr in chart without DrawingConverter

parent 4e5ac14c
...@@ -85,9 +85,10 @@ void OoxConverter::convert(PPTX::Logic::Shape *oox_shape) ...@@ -85,9 +85,10 @@ void OoxConverter::convert(PPTX::Logic::Shape *oox_shape)
if (type == SimpleTypes::shapetypeRect && oox_shape->txBody.IsInit()) type = 2000; if (type == SimpleTypes::shapetypeRect && oox_shape->txBody.IsInit()) type = 2000;
if (type == 2000 && oox_shape->txBody->bodyPr.fromWordArt.get_value_or(false)) if (type == 2000 && oox_shape->txBody->bodyPr.IsInit()
&& oox_shape->txBody->bodyPr->fromWordArt.get_value_or(false))
{ {
int wordart_type = convert(oox_shape->txBody->bodyPr.prstTxWarp.GetPointer()); int wordart_type = convert(oox_shape->txBody->bodyPr->prstTxWarp.GetPointer());
if (wordart_type > 0) type = wordart_type; if (wordart_type > 0) type = wordart_type;
} }
...@@ -111,7 +112,7 @@ void OoxConverter::convert(PPTX::Logic::Shape *oox_shape) ...@@ -111,7 +112,7 @@ void OoxConverter::convert(PPTX::Logic::Shape *oox_shape)
odf_context()->drawing_context()->set_text( odf_context()->text_context()); odf_context()->drawing_context()->set_text( odf_context()->text_context());
//наложим внешние настройки для текста //наложим внешние настройки для текста
convert(&oox_shape->txBody->bodyPr); convert(oox_shape->txBody->bodyPr.GetPointer());
if (oox_shape->style.IsInit()) if (oox_shape->style.IsInit())
{ {
...@@ -281,15 +282,15 @@ void OoxConverter::convert(PPTX::Logic::PathBase *oox_path) ...@@ -281,15 +282,15 @@ void OoxConverter::convert(PPTX::Logic::PathBase *oox_path)
} }
if (cubicBezTo) if (cubicBezTo)
{ {
std::wstring path_elm = cubicBezTo->x1 + L" " + cubicBezTo->y1 + L" " + std::wstring path_elm = cubicBezTo->x[0] + L" " + cubicBezTo->y[0] + L" " +
cubicBezTo->x2 + L" " + cubicBezTo->y2 + L" " + cubicBezTo->x[1] + L" " + cubicBezTo->y[1] + L" " +
cubicBezTo->x3 + L" " + cubicBezTo->y3; cubicBezTo->x[2] + L" " + cubicBezTo->y[2];
odf_context()->drawing_context()->add_path_element(std::wstring(L"C"), path_elm); odf_context()->drawing_context()->add_path_element(std::wstring(L"C"), path_elm);
} }
if (quadBezTo) if (quadBezTo)
{ {
std::wstring path_elm = quadBezTo->x1 + L" " + quadBezTo->y1 + L" " + std::wstring path_elm = quadBezTo->x[0] + L" " + quadBezTo->y[0] + L" " +
quadBezTo->x2 + L" " + quadBezTo->y2; quadBezTo->x[1] + L" " + quadBezTo->y[1];
odf_context()->drawing_context()->add_path_element(std::wstring(L"S"), path_elm); odf_context()->drawing_context()->add_path_element(std::wstring(L"S"), path_elm);
} }
if (arcTo) if (arcTo)
......
...@@ -395,7 +395,7 @@ void OoxConverter::convert(OOX::Drawing::CDiagrammParts *oox_diagramm) ...@@ -395,7 +395,7 @@ void OoxConverter::convert(OOX::Drawing::CDiagrammParts *oox_diagramm)
if (oFile.is_init() && OOX::FileTypes::DiagDrawing == oFile->type()) if (oFile.is_init() && OOX::FileTypes::DiagDrawing == oFile->type())
{ {
_CP_OPT(double) x, y, width, height, cx = 0, cy = 0; _CP_OPT(double) x, y, width, height, cx, cy;
odf_context()->drawing_context()->get_size (width, height); odf_context()->drawing_context()->get_size (width, height);
odf_context()->drawing_context()->get_position (x, y); odf_context()->drawing_context()->get_position (x, y);
......
...@@ -270,7 +270,6 @@ namespace OOX ...@@ -270,7 +270,6 @@ namespace OOX
class CT_Style1; class CT_Style1;
class CT_Style; class CT_Style;
class CT_TextLanguageID; class CT_TextLanguageID;
class CRichText;
class CTextProperties; class CTextProperties;
} }
namespace Vml namespace Vml
...@@ -495,8 +494,8 @@ public: ...@@ -495,8 +494,8 @@ public:
void convert(OOX::Spreadsheet::CT_LineSer *ser); void convert(OOX::Spreadsheet::CT_LineSer *ser);
void convert(OOX::Spreadsheet::CT_AxDataSource *cat, int type); void convert(OOX::Spreadsheet::CT_AxDataSource *cat, int type);
void convert(OOX::Spreadsheet::CT_NumDataSource *val); void convert(OOX::Spreadsheet::CT_NumDataSource *val);
void convert(OOX::Spreadsheet::CRichText *rich); //void convert(OOX::Spreadsheet::CRichText *rich);
void convert(OOX::Spreadsheet::CTextProperties *txPr); //void convert(OOX::Spreadsheet::CTextProperties *txPr);
void convert(OOX::Spreadsheet::CT_Tx *ct_tx); void convert(OOX::Spreadsheet::CT_Tx *ct_tx);
void convert(OOX::Spreadsheet::CT_Layout *ct_layout); void convert(OOX::Spreadsheet::CT_Layout *ct_layout);
void convert(OOX::Spreadsheet::CT_ManualLayout *ct_layout); void convert(OOX::Spreadsheet::CT_ManualLayout *ct_layout);
......
...@@ -73,32 +73,32 @@ void OoxConverter::convert(OOX::Spreadsheet::CT_ChartSpace *oox_chart) ...@@ -73,32 +73,32 @@ void OoxConverter::convert(OOX::Spreadsheet::CT_ChartSpace *oox_chart)
odf_context()->chart_context()->end_plot_area(); odf_context()->chart_context()->end_plot_area();
} }
void OoxConverter::convert(OOX::Spreadsheet::CRichText* rich) //void OoxConverter::convert(OOX::Spreadsheet::CRichText* rich)
{ //{
if (rich == NULL)return; // if (rich == NULL)return;
//
odf_context()->chart_context()->start_text(); // odf_context()->chart_context()->start_text();
OoxConverter::convert(rich->m_oBodyPr.GetPointer()); // OoxConverter::convert(rich->m_oBodyPr.GetPointer());
//
for (size_t i = 0; i < rich->m_arrItems.size();i++) // for (size_t i = 0; i < rich->m_arrItems.size();i++)
{ // {
OoxConverter::convert(rich->m_arrItems[i]); // OoxConverter::convert(rich->m_arrItems[i]);
} // }
odf_context()->chart_context()->end_text(); // odf_context()->chart_context()->end_text();
} //}
void OoxConverter::convert(OOX::Spreadsheet::CTextProperties* txPr) //void OoxConverter::convert(OOX::Spreadsheet::CTextProperties* txPr)
{ //{
if (txPr == NULL)return; // if (txPr == NULL)return;
//
odf_context()->chart_context()->start_text(); // odf_context()->chart_context()->start_text();
OoxConverter::convert(txPr->m_oBodyPr.GetPointer()); // OoxConverter::convert(txPr->m_oBodyPr.GetPointer());
//
for (size_t i = 0; i < txPr->m_arrItems.size();i++) // for (size_t i = 0; i < txPr->m_arrItems.size();i++)
{ // {
OoxConverter::convert(txPr->m_arrItems[i]); // OoxConverter::convert(txPr->m_arrItems[i]);
} // }
odf_context()->chart_context()->end_text(); // odf_context()->chart_context()->end_text();
} //}
void OoxConverter::convert(OOX::Spreadsheet::CT_Tx* ct_tx) void OoxConverter::convert(OOX::Spreadsheet::CT_Tx* ct_tx)
{ {
if (ct_tx == NULL)return; if (ct_tx == NULL)return;
......
...@@ -2754,7 +2754,11 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C ...@@ -2754,7 +2754,11 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C
{ {
if (pShape->txBody.IsInit() == false) if (pShape->txBody.IsInit() == false)
pShape->txBody = new PPTX::Logic::TxBody(); pShape->txBody = new PPTX::Logic::TxBody();
pShape->txBody->bodyPr.vert = pShape->TextBoxBodyPr->vert;
if (!pShape->txBody->bodyPr.IsInit())
pShape->txBody->bodyPr = new PPTX::Logic::BodyPr();
pShape->txBody->bodyPr->vert = pShape->TextBoxBodyPr->vert;
} }
pPair = oCSSParser.m_mapSettings.find(L"mso-rotate"); pPair = oCSSParser.m_mapSettings.find(L"mso-rotate");
...@@ -2765,7 +2769,11 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C ...@@ -2765,7 +2769,11 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C
pShape->TextBoxBodyPr->rot = _wtoi(pPair->second.c_str()) * 60000; //для docx, xlsx pShape->TextBoxBodyPr->rot = _wtoi(pPair->second.c_str()) * 60000; //для docx, xlsx
if (pShape->txBody.IsInit() == false) //для pptx if (pShape->txBody.IsInit() == false) //для pptx
pShape->txBody = new PPTX::Logic::TxBody(); pShape->txBody = new PPTX::Logic::TxBody();
pShape->txBody->bodyPr.rot = pShape->TextBoxBodyPr->rot;
if (!pShape->txBody->bodyPr.IsInit())
pShape->txBody->bodyPr = new PPTX::Logic::BodyPr();
pShape->txBody->bodyPr->rot = pShape->TextBoxBodyPr->rot;
}catch(...){} }catch(...){}
} }
...@@ -5210,45 +5218,45 @@ void CDrawingConverter::ConvertMainPropsToVML(const std::wstring& bsMainProps, N ...@@ -5210,45 +5218,45 @@ void CDrawingConverter::ConvertMainPropsToVML(const std::wstring& bsMainProps, N
pWriter.m_strStyleMain = oWriter.GetXmlString(); pWriter.m_strStyleMain = oWriter.GetXmlString();
} }
HRESULT CDrawingConverter::GetTxBodyBinary(const std::wstring& bsXml) //HRESULT CDrawingConverter::GetTxBodyBinary(const std::wstring& bsXml)
{ //{
XmlUtils::CXmlNode oNode; // XmlUtils::CXmlNode oNode;
if (!oNode.FromXmlString((std::wstring)bsXml)) // if (!oNode.FromXmlString((std::wstring)bsXml))
return S_FALSE; // return S_FALSE;
//
PPTX::Logic::TxBody oTxBody(oNode); // PPTX::Logic::TxBody oTxBody(oNode);
//
//m_pBinaryWriter->ClearNoAttack(); // //m_pBinaryWriter->ClearNoAttack();
//ULONG lOldPos = m_pBinaryWriter->GetPosition(); // //ULONG lOldPos = m_pBinaryWriter->GetPosition();
m_pBinaryWriter->m_pCommon->CheckFontPicker(); // m_pBinaryWriter->m_pCommon->CheckFontPicker();
//m_pBinaryWriter->m_pCommon->m_pNativePicker->Init(m_strFontDirectory); // //m_pBinaryWriter->m_pCommon->m_pNativePicker->Init(m_strFontDirectory);
//
m_pBinaryWriter->WriteRecord1(0, oTxBody); // m_pBinaryWriter->WriteRecord1(0, oTxBody);
//
//m_pBinaryWriter->SetPosition(lOldPos); // //m_pBinaryWriter->SetPosition(lOldPos);
//
//m_pBinaryWriter->ClearNoAttack(); // //m_pBinaryWriter->ClearNoAttack();
return S_OK; // return S_OK;
} //}
HRESULT CDrawingConverter::GetTxBodyXml(LONG lStart, std::wstring& sXml) //HRESULT CDrawingConverter::GetTxBodyXml(LONG lStart, std::wstring& sXml)
{ //{
m_pReader->Seek(lStart); // m_pReader->Seek(lStart);
//
BYTE type = m_pReader->GetUChar(); // BYTE type = m_pReader->GetUChar();
if (0 != type) // if (0 != type)
return S_FALSE; // return S_FALSE;
//
PPTX::Logic::TxBody oTxBody; // PPTX::Logic::TxBody oTxBody;
oTxBody.fromPPTY(m_pReader); // oTxBody.fromPPTY(m_pReader);
//
NSBinPptxRW::CXmlWriter oWriter; // NSBinPptxRW::CXmlWriter oWriter;
oTxBody.toXmlWriterExcel(&oWriter); // oTxBody.toXmlWriterExcel(&oWriter);
//
sXml = oWriter.GetXmlString(); // sXml = oWriter.GetXmlString();
//
return S_OK; // return S_OK;
} //}
HRESULT CDrawingConverter::SetFontDir(const std::wstring& bsFontDir) HRESULT CDrawingConverter::SetFontDir(const std::wstring& bsFontDir)
{ {
......
...@@ -236,8 +236,6 @@ namespace NSBinPptxRW ...@@ -236,8 +236,6 @@ namespace NSBinPptxRW
HRESULT WriteRels (const std::wstring& sType, const std::wstring& sTarget, const std::wstring& sTargetMode, long* lId); HRESULT WriteRels (const std::wstring& sType, const std::wstring& sTarget, const std::wstring& sTargetMode, long* lId);
HRESULT LoadClrMap (const std::wstring& sXml); HRESULT LoadClrMap (const std::wstring& sXml);
HRESULT(GetTxBodyBinary) (const std::wstring& sXml);
HRESULT(GetTxBodyXml) (long lStart, std::wstring & Xml);
HRESULT(SetFontDir) (const std::wstring& sFontDir); HRESULT(SetFontDir) (const std::wstring& sFontDir);
HRESULT SetFontPicker (COfficeFontPicker* pFontPicker); HRESULT SetFontPicker (COfficeFontPicker* pFontPicker);
......
...@@ -45,9 +45,15 @@ namespace PPTX ...@@ -45,9 +45,15 @@ namespace PPTX
class AhBase : public WrapperWritingElement class AhBase : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(AhBase) WritingElement_AdditionConstructors(AhBase)
PPTX_LOGIC_BASE2(AhBase)
public: virtual OOX::EElementType getType() const
{
if (ah.IsInit())
return ah->getType();
return OOX::et_Unknown;
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
std::wstring name = XmlUtils::GetNameNoNS(node.GetName()); std::wstring name = XmlUtils::GetNameNoNS(node.GetName());
...@@ -58,7 +64,16 @@ namespace PPTX ...@@ -58,7 +64,16 @@ namespace PPTX
ah.reset(new Logic::AhPolar(node)); ah.reset(new Logic::AhPolar(node));
else ah.reset(); else ah.reset();
} }
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
std::wstring sName = oReader.GetName();
if (sName == L"a:ahXY")
ah.reset(new Logic::AhXY(oReader));
else if(sName == L"a:ahPolar")
ah.reset(new Logic::AhPolar(oReader));
else ah.reset();
}
virtual void GetAdjustHandleFrom(XmlUtils::CXmlNode& element) virtual void GetAdjustHandleFrom(XmlUtils::CXmlNode& element)
{ {
XmlUtils::CXmlNode oNode; XmlUtils::CXmlNode oNode;
......
...@@ -43,9 +43,9 @@ namespace PPTX ...@@ -43,9 +43,9 @@ namespace PPTX
class AhPolar : public Ah class AhPolar : public Ah
{ {
public: public:
PPTX_LOGIC_BASE(AhPolar) WritingElement_AdditionConstructors(AhPolar)
PPTX_LOGIC_BASE2(AhPolar)
public:
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
XmlUtils::CXmlNode oPos = node.ReadNode(_T("a:pos")); XmlUtils::CXmlNode oPos = node.ReadNode(_T("a:pos"));
...@@ -60,7 +60,46 @@ namespace PPTX ...@@ -60,7 +60,46 @@ namespace PPTX
node.ReadAttributeBase(L"minAng", minAng); node.ReadAttributeBase(L"minAng", minAng);
node.ReadAttributeBase(L"minR", minR); node.ReadAttributeBase(L"minR", minR);
} }
virtual OOX::EElementType getType() const
{
return OOX::et_a_ahPolar;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:pos")
{
ReadAttributes2(oReader);
}
}
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("gdRefR"), gdRefR )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("minR"), minR )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("maxR"), maxR )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("gdRefAng"), gdRefAng )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("minAng"), minAng )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("maxAng"), maxAng )
WritingElement_ReadAttributes_End( oReader )
}
void ReadAttributes2(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), x )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("y"), y )
WritingElement_ReadAttributes_End( oReader )
}
virtual std::wstring toXML() const virtual std::wstring toXML() const
{ {
XmlUtils::CAttribute oAttr1; XmlUtils::CAttribute oAttr1;
......
...@@ -43,9 +43,9 @@ namespace PPTX ...@@ -43,9 +43,9 @@ namespace PPTX
class AhXY : public Ah class AhXY : public Ah
{ {
public: public:
PPTX_LOGIC_BASE(AhXY) WritingElement_AdditionConstructors(AhXY)
PPTX_LOGIC_BASE2(AhXY)
public:
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
XmlUtils::CXmlNode oPos = node.ReadNode(_T("a:pos")); XmlUtils::CXmlNode oPos = node.ReadNode(_T("a:pos"));
...@@ -60,7 +60,46 @@ namespace PPTX ...@@ -60,7 +60,46 @@ namespace PPTX
node.ReadAttributeBase(L"minX", minX); node.ReadAttributeBase(L"minX", minX);
node.ReadAttributeBase(L"minY", minY); node.ReadAttributeBase(L"minY", minY);
} }
virtual OOX::EElementType getType() const
{
return OOX::et_a_ahXY;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:pos")
{
ReadAttributes2(oReader);
}
}
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("gdRefX"), gdRefX )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("minX"), minX )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("maxX"), maxX )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("gdRefY"), gdRefY )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("minY"), minY )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("maxY"), maxY )
WritingElement_ReadAttributes_End( oReader )
}
void ReadAttributes2(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), x )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("y"), y )
WritingElement_ReadAttributes_End( oReader )
}
virtual std::wstring toXML() const virtual std::wstring toXML() const
{ {
XmlUtils::CAttribute oAttr1; XmlUtils::CAttribute oAttr1;
......
...@@ -51,9 +51,63 @@ namespace PPTX ...@@ -51,9 +51,63 @@ namespace PPTX
class BodyPr : public WrapperWritingElement class BodyPr : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(BodyPr) WritingElement_AdditionConstructors(BodyPr)
PPTX_LOGIC_BASE2(BodyPr)
public: virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring strName = oReader.GetName();
if (L"a:prstTxWarp" == strName)
prstTxWarp = oReader;
else if (L"a:scene3d" == strName)
scene3d = oReader;
else if (L"a:sp3d" == strName)
sp3d = oReader;
else if (strName == L"a:noAutofit" || strName == L"a:spAutoFit" || strName == L"a:normAutofit")
Fit.fromXML(oReader);
else if (L"a:flatTx" == strName)
{
//oNode.ReadAttributeBase(L"z", flatTx);
}
}
FillParentPointersForChilds();
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start ( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("anchor"), anchor )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("anchorCtr"), anchorCtr )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("bIns"), bIns )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("compatLnSpc"), compatLnSpc )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("forceAA"), forceAA )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("fromWordArt"), fromWordArt )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("horzOverflow"), horzOverflow )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("lIns"), lIns )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("numCol"), numCol )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("rIns"), rIns )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("rot"), rot )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("rtlCol"), rtlCol )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("spcCol"), spcCol )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("spcFirstLastPara"), spcFirstLastPara )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("tIns"), tIns )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("upright"), upright )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("vert"), vert )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("vertOverflow"), vertOverflow )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("wrap"), wrap )
WritingElement_ReadAttributes_End ( oReader )
Normalize();
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
m_namespace = XmlUtils::GetNamespace(node.GetName()); m_namespace = XmlUtils::GetNamespace(node.GetName());
...@@ -172,10 +226,16 @@ namespace PPTX ...@@ -172,10 +226,16 @@ namespace PPTX
pWriter->EndNode(m_namespace + _T(":bodyPr")); pWriter->EndNode(m_namespace + _T(":bodyPr"));
} }
void Merge(BodyPr& bodyPr)const
void Merge(nullable<BodyPr>& bodyPr)const
{
if (!bodyPr.IsInit())
{ {
bodyPr = new PPTX::Logic::BodyPr();
}
if(Fit.type != TextFit::FitEmpty) if(Fit.type != TextFit::FitEmpty)
Fit.Merge(bodyPr.Fit); Fit.Merge(bodyPr->Fit);
/* /*
nullable_property<PrstTxWarp> prstTxWarp; nullable_property<PrstTxWarp> prstTxWarp;
nullable_property<Scene3d> scene3d; nullable_property<Scene3d> scene3d;
...@@ -184,43 +244,43 @@ namespace PPTX ...@@ -184,43 +244,43 @@ namespace PPTX
*/ */
// Attributes // Attributes
if(anchor.IsInit()) if(anchor.IsInit())
bodyPr.anchor = *anchor; bodyPr->anchor = *anchor;
if(anchorCtr.IsInit()) if(anchorCtr.IsInit())
bodyPr.anchorCtr = *anchorCtr; bodyPr->anchorCtr = *anchorCtr;
if(bIns.IsInit()) if(bIns.IsInit())
bodyPr.bIns = *bIns; bodyPr->bIns = *bIns;
if(compatLnSpc.IsInit()) if(compatLnSpc.IsInit())
bodyPr.compatLnSpc = *compatLnSpc; bodyPr->compatLnSpc = *compatLnSpc;
if(forceAA.IsInit()) if(forceAA.IsInit())
bodyPr.forceAA = *forceAA; bodyPr->forceAA = *forceAA;
if(fromWordArt.IsInit()) if(fromWordArt.IsInit())
bodyPr.fromWordArt = *fromWordArt; bodyPr->fromWordArt = *fromWordArt;
if(horzOverflow.IsInit()) if(horzOverflow.IsInit())
bodyPr.horzOverflow = *horzOverflow; bodyPr->horzOverflow = *horzOverflow;
if(lIns.IsInit()) if(lIns.IsInit())
bodyPr.lIns = *lIns; bodyPr->lIns = *lIns;
if(numCol.IsInit()) if(numCol.IsInit())
bodyPr.numCol = *numCol; bodyPr->numCol = *numCol;
if(rIns.IsInit()) if(rIns.IsInit())
bodyPr.rIns = *rIns; bodyPr->rIns = *rIns;
if(rot.IsInit()) if(rot.IsInit())
bodyPr.rot = *rot; bodyPr->rot = *rot;
if(rtlCol.IsInit()) if(rtlCol.IsInit())
bodyPr.rtlCol = *rtlCol; bodyPr->rtlCol = *rtlCol;
if(spcCol.IsInit()) if(spcCol.IsInit())
bodyPr.spcCol = *spcCol; bodyPr->spcCol = *spcCol;
if(spcFirstLastPara.IsInit()) if(spcFirstLastPara.IsInit())
bodyPr.spcFirstLastPara = *spcFirstLastPara; bodyPr->spcFirstLastPara = *spcFirstLastPara;
if(tIns.IsInit()) if(tIns.IsInit())
bodyPr.tIns = *tIns; bodyPr->tIns = *tIns;
if(upright.IsInit()) if(upright.IsInit())
bodyPr.upright = *upright; bodyPr->upright = *upright;
if(vert.IsInit()) if(vert.IsInit())
bodyPr.vert = *vert; bodyPr->vert = *vert;
if(vertOverflow.IsInit()) if(vertOverflow.IsInit())
bodyPr.vertOverflow = *vertOverflow; bodyPr->vertOverflow = *vertOverflow;
if(wrap.IsInit()) if(wrap.IsInit())
bodyPr.wrap = *wrap; bodyPr->wrap = *wrap;
} }
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
......
...@@ -47,7 +47,8 @@ namespace PPTX ...@@ -47,7 +47,8 @@ namespace PPTX
class CustGeom : public WrapperWritingElement class CustGeom : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(CustGeom) WritingElement_AdditionConstructors(CustGeom)
PPTX_LOGIC_BASE2(CustGeom)
CustGeom& operator=(const CustGeom& oSrc) CustGeom& operator=(const CustGeom& oSrc)
{ {
...@@ -65,7 +66,107 @@ namespace PPTX ...@@ -65,7 +66,107 @@ namespace PPTX
return *this; return *this;
} }
public: virtual OOX::EElementType getType() const
{
return OOX::et_a_custGeom;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:avLst")
{
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
std::wstring sName1 = oReader.GetName();
if (sName1 == L"a:gd")
{
Gd gd;
avLst.push_back(gd);
avLst.back().fromXML(oReader);
}
}
}
else if (sName == L"a:gdLst")
{
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
std::wstring sName1 = oReader.GetName();
if (sName1 == L"a:gd")
{
Gd gd;
gdLst.push_back(gd);
gdLst.back().fromXML(oReader);
}
}
}
else if (sName == L"a:rect")
rect = oReader;
else if (sName == L"a:pathLst")
{
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
std::wstring sName1 = oReader.GetName();
if (sName1 == L"a:path")
{
Path2D gd;
pathLst.push_back(gd);
pathLst.back().fromXML(oReader);
}
}
}
else if (sName == L"a:ahLst")
{
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
std::wstring sName1 = oReader.GetName();
if (sName1 == L"a:ahPolar")
{
AhBase gd;
ahLst.push_back(gd);
ahLst.back().fromXML(oReader);
}
else if (sName1 == L"a:ahXY")
{
AhBase gd;
ahLst.push_back(gd);
ahLst.back().fromXML(oReader);
}
}
}
else if (sName == L"a:cxnLst")
{
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
std::wstring sName1 = oReader.GetName();
if (sName1 == L"a:cxn")
{
Cxn gd;
cxnLst.push_back(gd);
cxnLst.back().fromXML(oReader);
}
}
}
}
FillParentPointersForChilds();
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
XmlUtils::CXmlNode oNode; XmlUtils::CXmlNode oNode;
......
...@@ -43,7 +43,8 @@ namespace PPTX ...@@ -43,7 +43,8 @@ namespace PPTX
class Cxn : public WrapperWritingElement class Cxn : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(Cxn) WritingElement_AdditionConstructors(Cxn)
PPTX_LOGIC_BASE2(Cxn)
Cxn& operator=(const Cxn& oSrc) Cxn& operator=(const Cxn& oSrc)
{ {
...@@ -55,8 +56,41 @@ namespace PPTX ...@@ -55,8 +56,41 @@ namespace PPTX
ang = oSrc.ang; ang = oSrc.ang;
return *this; return *this;
} }
virtual OOX::EElementType getType() const
{
return OOX::et_a_cxn;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
public: if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:pos")
{
ReadAttributes2(oReader);
}
}
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("ang"), ang )
WritingElement_ReadAttributes_End( oReader )
}
void ReadAttributes2(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), x )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("y"), y )
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
ang = node.GetAttribute(_T("ang")); ang = node.GetAttribute(_T("ang"));
......
...@@ -95,7 +95,7 @@ namespace PPTX ...@@ -95,7 +95,7 @@ namespace PPTX
{ {
XmlUtils::CNodeValue oValue; XmlUtils::CNodeValue oValue;
oValue.Write(spPr); oValue.Write(spPr);
oValue.Write(bodyPr); oValue.WriteNullable(bodyPr);
oValue.Write(lstStyle); oValue.Write(lstStyle);
oValue.WriteNullable(style); oValue.WriteNullable(style);
...@@ -105,7 +105,7 @@ namespace PPTX ...@@ -105,7 +105,7 @@ namespace PPTX
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{ {
pWriter->WriteRecord1(0, spPr); pWriter->WriteRecord1(0, spPr);
pWriter->WriteRecord1(1, bodyPr); pWriter->WriteRecord2(1, bodyPr);
pWriter->WriteRecord1(2, lstStyle); pWriter->WriteRecord1(2, lstStyle);
pWriter->WriteRecord2(3, style); pWriter->WriteRecord2(3, style);
} }
...@@ -127,8 +127,9 @@ namespace PPTX ...@@ -127,8 +127,9 @@ namespace PPTX
} }
case 1: case 1:
{ {
bodyPr.m_namespace = _T("a"); bodyPr = BodyPr();
bodyPr.fromPPTY(pReader); bodyPr->m_namespace = _T("a");
bodyPr->fromPPTY(pReader);
break; break;
} }
case 2: case 2:
...@@ -160,7 +161,9 @@ namespace PPTX ...@@ -160,7 +161,9 @@ namespace PPTX
pWriter->m_lFlag = 0x04; pWriter->m_lFlag = 0x04;
spPr.toXmlWriter(pWriter); spPr.toXmlWriter(pWriter);
pWriter->m_lFlag = 0; pWriter->m_lFlag = 0;
bodyPr.toXmlWriter(pWriter);
if (bodyPr.IsInit())
bodyPr->toXmlWriter(pWriter);
lstStyle.toXmlWriter(pWriter); lstStyle.toXmlWriter(pWriter);
pWriter->Write(style); pWriter->Write(style);
...@@ -169,16 +172,19 @@ namespace PPTX ...@@ -169,16 +172,19 @@ namespace PPTX
public: public:
SpPr spPr; SpPr spPr;
BodyPr bodyPr; nullable<BodyPr> bodyPr;
TextListStyle lstStyle; TextListStyle lstStyle;
nullable<ShapeStyle> style; nullable<ShapeStyle> style;
public:
std::wstring m_name; std::wstring m_name;
protected: protected:
virtual void FillParentPointersForChilds() virtual void FillParentPointersForChilds()
{ {
spPr.SetParentPointer(this); spPr.SetParentPointer(this);
bodyPr.SetParentPointer(this);
if (bodyPr.IsInit())
bodyPr->SetParentPointer(this);
lstStyle.SetParentPointer(this); lstStyle.SetParentPointer(this);
if(style.IsInit()) if(style.IsInit())
style->SetParentPointer(this); style->SetParentPointer(this);
......
...@@ -78,7 +78,7 @@ namespace PPTX ...@@ -78,7 +78,7 @@ namespace PPTX
int nCurDepth = oReader.GetDepth(); int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) ) while( oReader.ReadNextSiblingNode( nCurDepth ) )
{ {
std::wstring strName = oReader.GetName(); std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
if (_T("blip") == strName) if (_T("blip") == strName)
{ {
if (!blip.IsInit()) if (!blip.IsInit())
......
...@@ -42,9 +42,25 @@ namespace PPTX ...@@ -42,9 +42,25 @@ namespace PPTX
class Gd : public WrapperWritingElement class Gd : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(Gd) WritingElement_AdditionConstructors(Gd)
PPTX_LOGIC_BASE2(Gd)
public: virtual OOX::EElementType getType () const
{
return OOX::et_a_gd;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start ( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("name"), name )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("fmla"), fmla )
WritingElement_ReadAttributes_End ( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
node.ReadAttributeBase(L"name", name); node.ReadAttributeBase(L"name", name);
......
...@@ -45,9 +45,26 @@ namespace PPTX ...@@ -45,9 +45,26 @@ namespace PPTX
class Geometry : public WrapperWritingElement class Geometry : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(Geometry) WritingElement_AdditionConstructors(Geometry)
PPTX_LOGIC_BASE2(Geometry)
public: virtual OOX::EElementType getType() const
{
if (m_geometry.IsInit())
return m_geometry->getType();
return OOX::et_Unknown;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
if (strName == _T("prstGeom"))
m_geometry.reset(new Logic::PrstGeom(oReader));
else if (strName == _T("custGeom"))
m_geometry.reset(new Logic::CustGeom(oReader));
else
m_geometry.reset();
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
std::wstring strName = XmlUtils::GetNameNoNS(node.GetName()); std::wstring strName = XmlUtils::GetNameNoNS(node.GetName());
......
...@@ -45,7 +45,8 @@ namespace PPTX ...@@ -45,7 +45,8 @@ namespace PPTX
class Path2D : public WrapperWritingElement class Path2D : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(Path2D) WritingElement_AdditionConstructors(Path2D)
PPTX_LOGIC_BASE2(Path2D)
Path2D& operator=(const Path2D& oSrc) Path2D& operator=(const Path2D& oSrc)
{ {
...@@ -62,8 +63,40 @@ namespace PPTX ...@@ -62,8 +63,40 @@ namespace PPTX
return *this; return *this;
} }
virtual OOX::EElementType getType() const
{
return OOX::et_a_path;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
public: Paths.clear();
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
UniPath2D p;
Paths.push_back(p);
Paths.back().fromXML(oReader);
}
FillParentPointersForChilds();
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("extrusionOk"), extrusionOk)
WritingElement_ReadAttributes_Read_else_if( oReader, _T("fill"), fill )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("h"), h )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("stroke"), stroke )
WritingElement_ReadAttributes_Read_else_if( oReader, _T("w"), w )
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
node.ReadAttributeBase(L"extrusionOk", extrusionOk); node.ReadAttributeBase(L"extrusionOk", extrusionOk);
...@@ -229,12 +262,12 @@ namespace PPTX ...@@ -229,12 +262,12 @@ namespace PPTX
case GEOMETRY_TYPE_PATH_CUBICBEZTO: case GEOMETRY_TYPE_PATH_CUBICBEZTO:
{ {
Logic::CubicBezTo* p = new Logic::CubicBezTo(); Logic::CubicBezTo* p = new Logic::CubicBezTo();
p->x1 = arr[0]; p->x[0] = arr[0];
p->y1 = arr[1]; p->y[0] = arr[1];
p->x2 = arr[2]; p->x[1] = arr[2];
p->y2 = arr[3]; p->y[1] = arr[3];
p->x3 = arr[4]; p->x[2] = arr[4];
p->y3 = arr[5]; p->y[2] = arr[5];
oPath.Path2D.reset(p); oPath.Path2D.reset(p);
break; break;
} }
...@@ -251,10 +284,10 @@ namespace PPTX ...@@ -251,10 +284,10 @@ namespace PPTX
case GEOMETRY_TYPE_PATH_QUADBEZTO: case GEOMETRY_TYPE_PATH_QUADBEZTO:
{ {
Logic::QuadBezTo* p = new Logic::QuadBezTo(); Logic::QuadBezTo* p = new Logic::QuadBezTo();
p->x1 = arr[0]; p->x[0] = arr[0];
p->y1 = arr[1]; p->y[0] = arr[1];
p->x2 = arr[2]; p->x[1] = arr[2];
p->y2 = arr[3]; p->y[1] = arr[3];
oPath.Path2D.reset(p); oPath.Path2D.reset(p);
break; break;
} }
......
...@@ -42,7 +42,8 @@ namespace PPTX ...@@ -42,7 +42,8 @@ namespace PPTX
class ArcTo : public PathBase class ArcTo : public PathBase
{ {
public: public:
PPTX_LOGIC_BASE(ArcTo) WritingElement_AdditionConstructors(ArcTo)
PPTX_LOGIC_BASE2(ArcTo)
ArcTo& operator=(const ArcTo& oSrc) ArcTo& operator=(const ArcTo& oSrc)
{ {
...@@ -56,8 +57,23 @@ namespace PPTX ...@@ -56,8 +57,23 @@ namespace PPTX
return *this; return *this;
} }
virtual OOX::EElementType getType() const
public: {
return OOX::et_a_arcTo;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("wR"), wR )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("hR"), hR)
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("stAng"), stAng)
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("swAng"), swAng)
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
wR = node.GetAttribute(_T("wR")); wR = node.GetAttribute(_T("wR"));
......
...@@ -43,7 +43,8 @@ namespace PPTX ...@@ -43,7 +43,8 @@ namespace PPTX
class Close : public PathBase class Close : public PathBase
{ {
public: public:
PPTX_LOGIC_BASE(Close) WritingElement_AdditionConstructors(Close)
PPTX_LOGIC_BASE2(Close)
Close& operator=(const Close& oSrc) Close& operator=(const Close& oSrc)
{ {
...@@ -52,8 +53,14 @@ namespace PPTX ...@@ -52,8 +53,14 @@ namespace PPTX
return *this; return *this;
} }
virtual OOX::EElementType getType() const
{
return OOX::et_a_close;
}
public: virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
} }
......
...@@ -43,24 +43,24 @@ namespace PPTX ...@@ -43,24 +43,24 @@ namespace PPTX
class CubicBezTo : public PathBase class CubicBezTo : public PathBase
{ {
public: public:
PPTX_LOGIC_BASE(CubicBezTo) WritingElement_AdditionConstructors(CubicBezTo)
PPTX_LOGIC_BASE2(CubicBezTo)
CubicBezTo& operator=(const CubicBezTo& oSrc) CubicBezTo& operator=(const CubicBezTo& oSrc)
{ {
parentFile = oSrc.parentFile; parentFile = oSrc.parentFile;
parentElement = oSrc.parentElement; parentElement = oSrc.parentElement;
x1 = oSrc.x1; x[0] = oSrc.x[0];
y1 = oSrc.y1; y[0] = oSrc.y[0];
x2 = oSrc.x2; x[1] = oSrc.x[1];
y2 = oSrc.y2; y[1] = oSrc.y[1];
x3 = oSrc.x3; x[2] = oSrc.x[2];
y3 = oSrc.y3; y[2] = oSrc.y[2];
return *this; return *this;
} }
public:
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
XmlUtils::CXmlNodes oNodes; XmlUtils::CXmlNodes oNodes;
...@@ -73,23 +73,53 @@ namespace PPTX ...@@ -73,23 +73,53 @@ namespace PPTX
XmlUtils::CXmlNode oNode; XmlUtils::CXmlNode oNode;
oNodes.GetAt(0, oNode); oNodes.GetAt(0, oNode);
x1 = oNode.GetAttribute(_T("x")); x[0] = oNode.GetAttribute(_T("x"));
y1 = oNode.GetAttribute(_T("y")); y[0] = oNode.GetAttribute(_T("y"));
oNodes.GetAt(1, oNode); oNodes.GetAt(1, oNode);
x2 = oNode.GetAttribute(_T("x")); x[1] = oNode.GetAttribute(_T("x"));
y2 = oNode.GetAttribute(_T("y")); y[1] = oNode.GetAttribute(_T("y"));
oNodes.GetAt(2, oNode); oNodes.GetAt(2, oNode);
x3 = oNode.GetAttribute(_T("x")); x[2] = oNode.GetAttribute(_T("x"));
y3 = oNode.GetAttribute(_T("y")); y[2] = oNode.GetAttribute(_T("y"));
}
}
}
virtual OOX::EElementType getType() const
{
return OOX::et_a_cubicBezTo;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
int count = 0;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:pos")
{
ReadAttributes2(oReader, x[count], y[count]);
count++;
} }
} }
} }
void ReadAttributes2(XmlUtils::CXmlLiteReader& oReader, std::wstring & x, std::wstring & y)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), x )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("y"), y )
WritingElement_ReadAttributes_End( oReader )
}
virtual std::wstring toXML() const virtual std::wstring toXML() const
{ {
std::wstring str1 = L"<a:pt x=\"" + x1 + L"\" y=\"" + y1 + L"\" />"; std::wstring str1 = L"<a:pt x=\"" + x[0] + L"\" y=\"" + y[0] + L"\" />";
std::wstring str2 = L"<a:pt x=\"" + x2 + L"\" y=\"" + y2 + L"\" />"; std::wstring str2 = L"<a:pt x=\"" + x[1] + L"\" y=\"" + y[1] + L"\" />";
std::wstring str3 = L"<a:pt x=\"" + x3 + L"\" y=\"" + y3 + L"\" />"; std::wstring str3 = L"<a:pt x=\"" + x[2] + L"\" y=\"" + y[2] + L"\" />";
return _T("<a:cubicBezTo>") + str1 + str2 + str3 + _T("</a:cubicBezTo>"); return _T("<a:cubicBezTo>") + str1 + str2 + str3 + _T("</a:cubicBezTo>");
} }
...@@ -101,22 +131,22 @@ namespace PPTX ...@@ -101,22 +131,22 @@ namespace PPTX
pWriter->StartNode(_T("a:pt")); pWriter->StartNode(_T("a:pt"));
pWriter->StartAttributes(); pWriter->StartAttributes();
pWriter->WriteAttribute(_T("x"), x1); pWriter->WriteAttribute(_T("x"), x[0]);
pWriter->WriteAttribute(_T("y"), y1); pWriter->WriteAttribute(_T("y"), y[0]);
pWriter->EndAttributes(); pWriter->EndAttributes();
pWriter->EndNode(_T("a:pt")); pWriter->EndNode(_T("a:pt"));
pWriter->StartNode(_T("a:pt")); pWriter->StartNode(_T("a:pt"));
pWriter->StartAttributes(); pWriter->StartAttributes();
pWriter->WriteAttribute(_T("x"), x2); pWriter->WriteAttribute(_T("x"), x[1]);
pWriter->WriteAttribute(_T("y"), y2); pWriter->WriteAttribute(_T("y"), y[1]);
pWriter->EndAttributes(); pWriter->EndAttributes();
pWriter->EndNode(_T("a:pt")); pWriter->EndNode(_T("a:pt"));
pWriter->StartNode(_T("a:pt")); pWriter->StartNode(_T("a:pt"));
pWriter->StartAttributes(); pWriter->StartAttributes();
pWriter->WriteAttribute(_T("x"), x3); pWriter->WriteAttribute(_T("x"), x[2]);
pWriter->WriteAttribute(_T("y"), y3); pWriter->WriteAttribute(_T("y"), y[2]);
pWriter->EndAttributes(); pWriter->EndAttributes();
pWriter->EndNode(_T("a:pt")); pWriter->EndNode(_T("a:pt"));
...@@ -128,33 +158,29 @@ namespace PPTX ...@@ -128,33 +158,29 @@ namespace PPTX
pWriter->StartRecord(GEOMETRY_TYPE_PATH_CUBICBEZTO); pWriter->StartRecord(GEOMETRY_TYPE_PATH_CUBICBEZTO);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString1(0, x1); pWriter->WriteString1(0, x[0]);
pWriter->WriteString1(1, y1); pWriter->WriteString1(1, y[0]);
pWriter->WriteString1(2, x2); pWriter->WriteString1(2, x[1]);
pWriter->WriteString1(3, y2); pWriter->WriteString1(3, y[1]);
pWriter->WriteString1(4, x3); pWriter->WriteString1(4, x[2]);
pWriter->WriteString1(5, y3); pWriter->WriteString1(5, y[2]);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
pWriter->EndRecord(); pWriter->EndRecord();
} }
public: public:
std::wstring x1; std::wstring x[3];
std::wstring y1; std::wstring y[3];
std::wstring x2;
std::wstring y2;
std::wstring x3;
std::wstring y3;
protected: protected:
virtual void FillParentPointersForChilds(){}; virtual void FillParentPointersForChilds(){};
public: public:
virtual std::wstring GetODString()const virtual std::wstring GetODString()const
{ {
std::wstring str1 = L"<pt x=\"" + x1 + L"\" y=\"" + y1 + L"\"/>"; std::wstring str1 = L"<pt x=\"" + x[0] + L"\" y=\"" + y[0] + L"\"/>";
std::wstring str2 = L"<pt x=\"" + x2 + L"\" y=\"" + y2 + L"\"/>"; std::wstring str2 = L"<pt x=\"" + x[1] + L"\" y=\"" + y[1] + L"\"/>";
std::wstring str3 = L"<pt x=\"" + x3 + L"\" y=\"" + y3 + L"\"/>"; std::wstring str3 = L"<pt x=\"" + x[2] + L"\" y=\"" + y[2] + L"\"/>";
return _T("<cubicBezTo>") + str1 + str2 + str3 + _T("</cubicBezTo>"); return _T("<cubicBezTo>") + str1 + str2 + str3 + _T("</cubicBezTo>");
} }
......
...@@ -43,7 +43,8 @@ namespace PPTX ...@@ -43,7 +43,8 @@ namespace PPTX
class LineTo : public PathBase class LineTo : public PathBase
{ {
public: public:
PPTX_LOGIC_BASE(LineTo) WritingElement_AdditionConstructors(LineTo)
PPTX_LOGIC_BASE2(LineTo)
LineTo& operator=(const LineTo& oSrc) LineTo& operator=(const LineTo& oSrc)
{ {
...@@ -55,7 +56,33 @@ namespace PPTX ...@@ -55,7 +56,33 @@ namespace PPTX
return *this; return *this;
} }
public: virtual OOX::EElementType getType() const
{
return OOX::et_a_lineTo;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:pos")
{
ReadAttributes2(oReader);
}
}
}
void ReadAttributes2(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), x )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("y"), y )
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
XmlUtils::CXmlNode oNode; XmlUtils::CXmlNode oNode;
......
...@@ -43,7 +43,8 @@ namespace PPTX ...@@ -43,7 +43,8 @@ namespace PPTX
class MoveTo : public PathBase class MoveTo : public PathBase
{ {
public: public:
PPTX_LOGIC_BASE(MoveTo) WritingElement_AdditionConstructors(MoveTo)
PPTX_LOGIC_BASE2(MoveTo)
MoveTo& operator=(const MoveTo& oSrc) MoveTo& operator=(const MoveTo& oSrc)
{ {
...@@ -54,8 +55,34 @@ namespace PPTX ...@@ -54,8 +55,34 @@ namespace PPTX
y = oSrc.y; y = oSrc.y;
return *this; return *this;
} }
virtual OOX::EElementType getType() const
{
return OOX::et_a_moveTo;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
public: int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:pos")
{
ReadAttributes2(oReader);
}
}
}
void ReadAttributes2(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), x )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("y"), y )
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
XmlUtils::CXmlNode oNode; XmlUtils::CXmlNode oNode;
......
...@@ -42,21 +42,52 @@ namespace PPTX ...@@ -42,21 +42,52 @@ namespace PPTX
class QuadBezTo : public PathBase class QuadBezTo : public PathBase
{ {
public: public:
PPTX_LOGIC_BASE(QuadBezTo) WritingElement_AdditionConstructors(QuadBezTo)
PPTX_LOGIC_BASE2(QuadBezTo)
QuadBezTo& operator=(const QuadBezTo& oSrc) QuadBezTo& operator=(const QuadBezTo& oSrc)
{ {
parentFile = oSrc.parentFile; parentFile = oSrc.parentFile;
parentElement = oSrc.parentElement; parentElement = oSrc.parentElement;
x1 = oSrc.x1; x[0] = oSrc.x[0];
y1 = oSrc.y1; y[0] = oSrc.y[0];
x2 = oSrc.x2; x[1] = oSrc.x[1];
y2 = oSrc.y2; y[1] = oSrc.y[1];
return (*this); return (*this);
} }
public: virtual OOX::EElementType getType() const
{
return OOX::et_a_quadBezTo;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
if ( oReader.IsEmptyNode() )
return;
int count = 0;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:pos")
{
ReadAttributes2(oReader, x[count], y[count]);
count++;
}
}
}
void ReadAttributes2(XmlUtils::CXmlLiteReader& oReader, std::wstring & x, std::wstring & y)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_Read_if ( oReader, _T("x"), x )
WritingElement_ReadAttributes_Read_else_if ( oReader, _T("y"), y )
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
XmlUtils::CXmlNodes oNodes; XmlUtils::CXmlNodes oNodes;
...@@ -69,19 +100,19 @@ namespace PPTX ...@@ -69,19 +100,19 @@ namespace PPTX
XmlUtils::CXmlNode oNode; XmlUtils::CXmlNode oNode;
oNodes.GetAt(0, oNode); oNodes.GetAt(0, oNode);
x1 = oNode.GetAttribute(_T("x")); x[0] = oNode.GetAttribute(_T("x"));
y1 = oNode.GetAttribute(_T("y")); y[0] = oNode.GetAttribute(_T("y"));
oNodes.GetAt(1, oNode); oNodes.GetAt(1, oNode);
x2 = oNode.GetAttribute(_T("x")); x[1] = oNode.GetAttribute(_T("x"));
y2 = oNode.GetAttribute(_T("y")); y[1] = oNode.GetAttribute(_T("y"));
} }
} }
} }
virtual std::wstring toXML() const virtual std::wstring toXML() const
{ {
std::wstring str1 = L"<a:pt x=\"" + x1 + L"\" y=\"" + y1 + L"\" />"; std::wstring str1 = L"<a:pt x=\"" + x[0] + L"\" y=\"" + y[0] + L"\" />";
std::wstring str2 = L"<a:pt x=\"" + x2 + L"\" y=\"" + y2 + L"\" />"; std::wstring str2 = L"<a:pt x=\"" + x[1] + L"\" y=\"" + y[1] + L"\" />";
return _T("<a:quadBezTo>") + str1 + str2 + _T("</a:quadBezTo>"); return _T("<a:quadBezTo>") + str1 + str2 + _T("</a:quadBezTo>");
} }
...@@ -93,15 +124,15 @@ namespace PPTX ...@@ -93,15 +124,15 @@ namespace PPTX
pWriter->StartNode(_T("a:pt")); pWriter->StartNode(_T("a:pt"));
pWriter->StartAttributes(); pWriter->StartAttributes();
pWriter->WriteAttribute(_T("x"), x1); pWriter->WriteAttribute(_T("x"), x[0]);
pWriter->WriteAttribute(_T("y"), y1); pWriter->WriteAttribute(_T("y"), y[0]);
pWriter->EndAttributes(); pWriter->EndAttributes();
pWriter->EndNode(_T("a:pt")); pWriter->EndNode(_T("a:pt"));
pWriter->StartNode(_T("a:pt")); pWriter->StartNode(_T("a:pt"));
pWriter->StartAttributes(); pWriter->StartAttributes();
pWriter->WriteAttribute(_T("x"), x2); pWriter->WriteAttribute(_T("x"), x[1]);
pWriter->WriteAttribute(_T("y"), y2); pWriter->WriteAttribute(_T("y"), y[1]);
pWriter->EndAttributes(); pWriter->EndAttributes();
pWriter->EndNode(_T("a:pt")); pWriter->EndNode(_T("a:pt"));
...@@ -113,27 +144,25 @@ namespace PPTX ...@@ -113,27 +144,25 @@ namespace PPTX
pWriter->StartRecord(GEOMETRY_TYPE_PATH_QUADBEZTO); pWriter->StartRecord(GEOMETRY_TYPE_PATH_QUADBEZTO);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
pWriter->WriteString1(0, x1); pWriter->WriteString1(0, x[0]);
pWriter->WriteString1(1, y1); pWriter->WriteString1(1, y[0]);
pWriter->WriteString1(2, x2); pWriter->WriteString1(2, x[1]);
pWriter->WriteString1(3, y2); pWriter->WriteString1(3, y[1]);
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
pWriter->EndRecord(); pWriter->EndRecord();
} }
public: public:
std::wstring x1; std::wstring x[2];
std::wstring y1; std::wstring y[2];
std::wstring x2;
std::wstring y2;
protected: protected:
virtual void FillParentPointersForChilds(){}; virtual void FillParentPointersForChilds(){};
public: public:
virtual std::wstring GetODString()const virtual std::wstring GetODString()const
{ {
std::wstring str1 = L"<a:pt x=\"" + x1 + L"\" y=\"" + y1 + L"\" />"; std::wstring str1 = L"<a:pt x=\"" + x[0] + L"\" y=\"" + y[0] + L"\" />";
std::wstring str2 = L"<a:pt x=\"" + x2 + L"\" y=\"" + y2 + L"\" />"; std::wstring str2 = L"<a:pt x=\"" + x[1] + L"\" y=\"" + y[1] + L"\" />";
return _T("<quadBezTo>") + str1 + str2 + _T("</quadBezTo>"); return _T("<quadBezTo>") + str1 + str2 + _T("</quadBezTo>");
} }
......
...@@ -44,7 +44,8 @@ namespace PPTX ...@@ -44,7 +44,8 @@ namespace PPTX
class PrstGeom : public WrapperWritingElement class PrstGeom : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(PrstGeom) WritingElement_AdditionConstructors(PrstGeom)
PPTX_LOGIC_BASE2(PrstGeom)
PrstGeom& operator=(const PrstGeom& oSrc) PrstGeom& operator=(const PrstGeom& oSrc)
{ {
...@@ -56,8 +57,47 @@ namespace PPTX ...@@ -56,8 +57,47 @@ namespace PPTX
return *this; return *this;
} }
virtual OOX::EElementType getType() const
{
return OOX::et_a_prstGeom;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
public: if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (sName == L"a:avLst")
{
int nParentDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth1 ) )
{
std::wstring sName1 = oReader.GetName();
if (sName1 == L"a:gd")
{
Gd gd;
avLst.push_back(gd);
avLst.back().fromXML(oReader);
}
}
}
}
FillParentPointersForChilds();
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("r:prst"), prst)
WritingElement_ReadAttributes_End( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
node.ReadAttributeBase(L"prst", prst); node.ReadAttributeBase(L"prst", prst);
......
...@@ -44,7 +44,8 @@ namespace PPTX ...@@ -44,7 +44,8 @@ namespace PPTX
class PrstTxWarp : public WrapperWritingElement class PrstTxWarp : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(PrstTxWarp) WritingElement_AdditionConstructors(PrstTxWarp)
PPTX_LOGIC_BASE2(PrstTxWarp)
PrstTxWarp& operator=(const PrstTxWarp& oSrc) PrstTxWarp& operator=(const PrstTxWarp& oSrc)
{ {
...@@ -56,8 +57,45 @@ namespace PPTX ...@@ -56,8 +57,45 @@ namespace PPTX
return *this; return *this;
} }
virtual OOX::EElementType getType () const
{
return OOX::et_a_prstTxWarp;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
ReadAttributes( oReader );
public: if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring strName = oReader.GetName();
if (_T("a:avLst") == strName)
{
int nCurDepth1 = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth1 ) )
{
std::wstring strName1 = oReader.GetName();
if (_T("a:gd") == strName1)
{
Gd gd;
avLst.push_back(gd);
avLst.back().fromXML(oReader);
}
}
}
}
}
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start ( oReader )
WritingElement_ReadAttributes_ReadSingle ( oReader, _T("prst"), prst )
WritingElement_ReadAttributes_End ( oReader )
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
node.ReadAttributeBase(L"prst", prst); node.ReadAttributeBase(L"prst", prst);
......
...@@ -176,7 +176,7 @@ namespace PPTX ...@@ -176,7 +176,7 @@ namespace PPTX
if (pWriter->m_lDocType != XMLWRITER_DOC_TYPE_DOCX) if (pWriter->m_lDocType != XMLWRITER_DOC_TYPE_DOCX)
{ {
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX && txBody.is_init()) if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX && txBody.is_init())
txBody->m_ns = _T("xdr"); txBody->m_name = _T("xdr:txBody");
pWriter->Write(txBody); pWriter->Write(txBody);
} }
...@@ -198,7 +198,7 @@ namespace PPTX ...@@ -198,7 +198,7 @@ namespace PPTX
} }
else if (txBody.is_init()) else if (txBody.is_init())
{ {
txBody->m_ns = _T("wps"); txBody->m_name = _T("wps:txBody");
pWriter->Write(txBody); pWriter->Write(txBody);
} }
...@@ -371,7 +371,7 @@ namespace PPTX ...@@ -371,7 +371,7 @@ namespace PPTX
pWriter->m_pMainDocument->getBinaryContent(strContent, *pWriter, lDataSize); pWriter->m_pMainDocument->getBinaryContent(strContent, *pWriter, lDataSize);
pWriter->EndRecord(); pWriter->EndRecord();
pWriter->WriteRecord1(5, txBody->bodyPr); pWriter->WriteRecord2(5, txBody->bodyPr);
} }
} }
else else
...@@ -597,7 +597,9 @@ namespace PPTX ...@@ -597,7 +597,9 @@ namespace PPTX
if(!shape.txBody.is_init()) if(!shape.txBody.is_init())
shape.txBody = new TxBody(); shape.txBody = new TxBody();
txBody->bodyPr.Merge(shape.txBody->bodyPr); if (txBody->bodyPr.IsInit())
txBody->bodyPr->Merge(shape.txBody->bodyPr);
if(txBody->lstStyle.is_init()) if(txBody->lstStyle.is_init())
{ {
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
...@@ -738,9 +740,9 @@ namespace PPTX ...@@ -738,9 +740,9 @@ namespace PPTX
if (txBody.is_init()) if (txBody.is_init())
{ {
if (txBody->bodyPr.anchor.is_init()) if (txBody->bodyPr.IsInit() && txBody->bodyPr->anchor.is_init())
{ {
std::wstring _strAnchor = txBody->bodyPr.anchor->get(); std::wstring _strAnchor = txBody->bodyPr->anchor->get();
if (_strAnchor == L"t") if (_strAnchor == L"t")
oStylesWriter.WriteAttributeCSS(L"v-text-anchor", L"top"); oStylesWriter.WriteAttributeCSS(L"v-text-anchor", L"top");
else if (_strAnchor == L"b") else if (_strAnchor == L"b")
......
...@@ -65,7 +65,9 @@ namespace PPTX ...@@ -65,7 +65,9 @@ namespace PPTX
{ {
if(Src.IsInit()) if(Src.IsInit())
{ {
Src->bodyPr.Merge(bodyPr); if (Src->bodyPr.IsInit())
Src->bodyPr->Merge(bodyPr);
if(Src->lstStyle.IsInit()) if(Src->lstStyle.IsInit())
{ {
for(int i = 0; i < 10; i++) for(int i = 0; i < 10; i++)
...@@ -753,7 +755,9 @@ namespace PPTX ...@@ -753,7 +755,9 @@ namespace PPTX
void ShapeProperties::SetParentFilePointer(const WrapperFile* pFile) void ShapeProperties::SetParentFilePointer(const WrapperFile* pFile)
{ {
bodyPr.SetParentFilePointer(pFile); if (bodyPr.IsInit())
bodyPr->SetParentFilePointer(pFile);
for(int i = 0; i < 10; i ++) for(int i = 0; i < 10; i ++)
{ {
levels[i]->SetParentFilePointer(pFile); levels[i]->SetParentFilePointer(pFile);
...@@ -766,45 +770,53 @@ namespace PPTX ...@@ -766,45 +770,53 @@ namespace PPTX
DWORD ShapeProperties::GetHyperlinkRGBA()const DWORD ShapeProperties::GetHyperlinkRGBA()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetRGBAFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetRGBAFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetRGBAFromMap(_T("hlink"));
else return 0; else return 0;
} }
DWORD ShapeProperties::GetHyperlinkARGB()const DWORD ShapeProperties::GetHyperlinkARGB()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetARGBFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetARGBFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetARGBFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetARGBFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetARGBFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetARGBFromMap(_T("hlink"));
else return 0; else return 0;
} }
DWORD ShapeProperties::GetHyperlinkBGRA()const DWORD ShapeProperties::GetHyperlinkBGRA()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetBGRAFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetBGRAFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetBGRAFromMap(_T("hlink"));
else return 0; else return 0;
} }
DWORD ShapeProperties::GetHyperlinkABGR()const DWORD ShapeProperties::GetHyperlinkABGR()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetABGRFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetABGRFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetABGRFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetABGRFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetABGRFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetABGRFromMap(_T("hlink"));
else return 0; else return 0;
} }
......
...@@ -56,7 +56,7 @@ namespace PPTX ...@@ -56,7 +56,7 @@ namespace PPTX
nullable<FontRef> fontStyle; nullable<FontRef> fontStyle;
nullable<TextParagraphPr> levels[10]; nullable<TextParagraphPr> levels[10];
nullable<TextParagraphPr> masters[10]; nullable<TextParagraphPr> masters[10];
BodyPr bodyPr; nullable<BodyPr> bodyPr;
//std::string MajorLatin; //std::string MajorLatin;
//std::string MinorLatin; //std::string MinorLatin;
...@@ -80,7 +80,7 @@ namespace PPTX ...@@ -80,7 +80,7 @@ namespace PPTX
void SetMajorLatin(const TextFont& mjltFont){MajorLatin = mjltFont;}; void SetMajorLatin(const TextFont& mjltFont){MajorLatin = mjltFont;};
void SetMinorLatin(const TextFont& mnltFont){MinorLatin = mnltFont;}; void SetMinorLatin(const TextFont& mnltFont){MinorLatin = mnltFont;};
std::wstring GetAnchor()const{return bodyPr.anchor.get_value_or(_T("t"));}; std::wstring GetAnchor()const{return bodyPr.IsInit() ? bodyPr->anchor.get_value_or(L"t") : L"t";};
std::wstring GetParagraphAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const; std::wstring GetParagraphAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const;
int GetParagraphLeftMargin (int level, const nullable<TextParagraphPr>& pParagraph)const; int GetParagraphLeftMargin (int level, const nullable<TextParagraphPr>& pParagraph)const;
......
...@@ -101,7 +101,9 @@ namespace PPTX ...@@ -101,7 +101,9 @@ namespace PPTX
{ {
if (Src.IsInit()) if (Src.IsInit())
{ {
Src->bodyPr.Merge(bodyPr); if (Src->bodyPr.IsInit())
Src->bodyPr->Merge(bodyPr);
if (Src->lstStyle.IsInit()) if (Src->lstStyle.IsInit())
{ {
for(int i = 0; i < 10; i++) for(int i = 0; i < 10; i++)
...@@ -589,48 +591,57 @@ namespace PPTX ...@@ -589,48 +591,57 @@ namespace PPTX
DWORD CShapeTextProperties::GetHyperlinkRGBA()const DWORD CShapeTextProperties::GetHyperlinkRGBA()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetRGBAFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetRGBAFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetRGBAFromMap(_T("hlink"));
else return 0; else return 0;
} }
DWORD CShapeTextProperties::GetHyperlinkARGB()const DWORD CShapeTextProperties::GetHyperlinkARGB()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetARGBFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetARGBFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetARGBFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetARGBFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetARGBFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetARGBFromMap(_T("hlink"));
else return 0; else return 0;
} }
DWORD CShapeTextProperties::GetHyperlinkBGRA()const DWORD CShapeTextProperties::GetHyperlinkBGRA()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetBGRAFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetBGRAFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetBGRAFromMap(_T("hlink"));
else return 0; else return 0;
} }
DWORD CShapeTextProperties::GetHyperlinkABGR()const DWORD CShapeTextProperties::GetHyperlinkABGR()const
{ {
if(bodyPr.parentFileIs<Slide>()) if (!bodyPr.IsInit()) return 0;
return bodyPr.parentFileAs<Slide>().GetABGRFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideLayout>()) if(bodyPr->parentFileIs<Slide>())
return bodyPr.parentFileAs<SlideLayout>().GetABGRFromMap(_T("hlink")); return bodyPr->parentFileAs<Slide>().GetABGRFromMap(_T("hlink"));
else if(bodyPr.parentFileIs<SlideMaster>()) else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr.parentFileAs<SlideMaster>().GetABGRFromMap(_T("hlink")); return bodyPr->parentFileAs<SlideLayout>().GetABGRFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetABGRFromMap(_T("hlink"));
else return 0; else return 0;
} }
void CShapeTextProperties::SetParentFilePointer(const WrapperFile* pFile) void CShapeTextProperties::SetParentFilePointer(const WrapperFile* pFile)
{ {
bodyPr.SetParentFilePointer(pFile); if (bodyPr.IsInit())
bodyPr->SetParentFilePointer(pFile);
m_pFile = pFile; m_pFile = pFile;
......
...@@ -90,7 +90,7 @@ namespace PPTX ...@@ -90,7 +90,7 @@ namespace PPTX
LONG m_lTextType; LONG m_lTextType;
nullable<TextParagraphPr> m_levels[10]; nullable<TextParagraphPr> m_levels[10];
nullable<TextParagraphPr> m_body[10]; nullable<TextParagraphPr> m_body[10];
BodyPr bodyPr; nullable<BodyPr> bodyPr;
// просто указатель - он должен выставиться из темы // просто указатель - он должен выставиться из темы
std::vector<nullable<TextParagraphPr>*>* m_masters; std::vector<nullable<TextParagraphPr>*>* m_masters;
...@@ -135,7 +135,7 @@ namespace PPTX ...@@ -135,7 +135,7 @@ namespace PPTX
return -1; return -1;
} }
std::wstring GetAnchor()const{return bodyPr.anchor.get_value_or(_T("t"));}; std::wstring GetAnchor()const{return bodyPr.IsInit() ? bodyPr->anchor.get_value_or(L"t") : L"t"; };
nullable_base<WORD> GetParagraphAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const; nullable_base<WORD> GetParagraphAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<LONG> GetParagraphLeftMargin (int level, const nullable<TextParagraphPr>& pParagraph)const; nullable_base<LONG> GetParagraphLeftMargin (int level, const nullable<TextParagraphPr>& pParagraph)const;
......
...@@ -44,26 +44,73 @@ namespace PPTX ...@@ -44,26 +44,73 @@ namespace PPTX
{ {
Fill.m_type = UniFill::notInit; Fill.m_type = UniFill::notInit;
} }
SpPr::~SpPr() SpPr::~SpPr()
{ {
} }
SpPr::SpPr(XmlUtils::CXmlNode& node) SpPr::SpPr(XmlUtils::CXmlNode& node)
{ {
fromXML(node); fromXML(node);
} }
SpPr::SpPr(XmlUtils::CXmlLiteReader& oReader)
{
fromXML(oReader);
}
const SpPr& SpPr::operator =(XmlUtils::CXmlNode& node) const SpPr& SpPr::operator =(XmlUtils::CXmlNode& node)
{ {
fromXML(node); fromXML(node);
return *this; return *this;
} }
const SpPr& SpPr::operator =(XmlUtils::CXmlLiteReader& oReader)
{
fromXML(oReader);
return *this;
}
void SpPr::fromXML(XmlUtils::CXmlLiteReader& oReader)
{
m_namespace = XmlUtils::GetNamespace(oReader.GetName());
ReadAttributes( oReader );
if ( oReader.IsEmptyNode() )
return;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = XmlUtils::GetNameNoNS(oReader.GetName());
if ( L"xfrm" == sName)
xfrm = oReader;
else if ( L"ln" == sName)
ln = oReader;
else if ( L"scene3d" == sName)
scene3d = oReader;
else if ( L"sp3d" == sName)
sp3d = oReader;
else if ( L"blipFill" == sName ||
L"gradFill" == sName ||
L"grpFill" == sName ||
L"noFill" == sName ||
L"pattFill" == sName ||
L"solidFill" == sName )
{
Fill.fromXML(oReader);
}
else if ( L"effectDag" == sName ||
L"effectLst" == sName ||
L"extLst" == sName )
{
EffectList.fromXML(oReader);
}
else if ( L"prstGeom" == sName ||
L"custGeom" == sName)
{
Geometry.fromXML(oReader);
}
}
FillParentPointersForChilds();
}
void SpPr::fromXML(XmlUtils::CXmlNode& node) void SpPr::fromXML(XmlUtils::CXmlNode& node)
{ {
m_namespace = XmlUtils::GetNamespace(node.GetName()); m_namespace = XmlUtils::GetNamespace(node.GetName());
......
...@@ -57,12 +57,24 @@ namespace PPTX ...@@ -57,12 +57,24 @@ namespace PPTX
explicit SpPr(XmlUtils::CXmlNode& node); explicit SpPr(XmlUtils::CXmlNode& node);
const SpPr& operator =(XmlUtils::CXmlNode& node); const SpPr& operator =(XmlUtils::CXmlNode& node);
explicit SpPr(XmlUtils::CXmlLiteReader& oReader);
const SpPr& operator =(XmlUtils::CXmlLiteReader& oReader);
virtual OOX::EElementType getType () const virtual OOX::EElementType getType () const
{ {
return OOX::et_p_spPr; return OOX::et_a_spPr;
} }
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
virtual void fromXML(XmlUtils::CXmlNode& node); virtual void fromXML(XmlUtils::CXmlNode& node);
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
WritingElement_ReadAttributes_Start( oReader )
WritingElement_ReadAttributes_ReadSingle( oReader, _T("bwMode"), bwMode )
WritingElement_ReadAttributes_End( oReader )
}
virtual std::wstring toXML() const; virtual std::wstring toXML() const;
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
......
...@@ -148,7 +148,7 @@ namespace PPTX ...@@ -148,7 +148,7 @@ namespace PPTX
{ {
txBody = new Logic::TxBody(); txBody = new Logic::TxBody();
txBody->fromPPTY(pReader); txBody->fromPPTY(pReader);
txBody->m_ns = _T("a"); txBody->m_name = _T("a:txBody");
break; break;
} }
default: default:
......
...@@ -44,9 +44,9 @@ namespace PPTX ...@@ -44,9 +44,9 @@ namespace PPTX
class TextListStyle : public WrapperWritingElement class TextListStyle : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(TextListStyle) WritingElement_AdditionConstructors(TextListStyle)
PPTX_LOGIC_BASE2(TextListStyle)
public:
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
m_name = node.GetName(); m_name = node.GetName();
...@@ -64,6 +64,44 @@ namespace PPTX ...@@ -64,6 +64,44 @@ namespace PPTX
FillParentPointersForChilds(); FillParentPointersForChilds();
} }
virtual OOX::EElementType getType () const
{
return OOX::et_Unknown;//a_bodyStyle;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
m_name = oReader.GetName();
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring strName = XmlUtils::GetNameNoNS(oReader.GetName());
if (_T("defPPr") == strName)
levels[9] = oReader;
else if (_T("lvl1pPr") == strName)
levels[0] = oReader;
else if (_T("lvl2pPr") == strName)
levels[1] = oReader;
else if (_T("lvl3pPr") == strName)
levels[2] = oReader;
else if (_T("lvl4pPr") == strName)
levels[3] = oReader;
else if (_T("lvl5pPr") == strName)
levels[4] = oReader;
else if (_T("lvl6pPr") == strName)
levels[5] = oReader;
else if (_T("lvl7pPr") == strName)
levels[6] = oReader;
else if (_T("lvl8pPr") == strName)
levels[7] = oReader;
else if (_T("lvl9pPr") == strName)
levels[8] = oReader;
}
}
virtual std::wstring toXML() const virtual std::wstring toXML() const
{ {
XmlUtils::CNodeValue oValue; XmlUtils::CNodeValue oValue;
...@@ -140,8 +178,6 @@ namespace PPTX ...@@ -140,8 +178,6 @@ namespace PPTX
} }
public: public:
nullable<TextParagraphPr> levels[10]; nullable<TextParagraphPr> levels[10];
//private:
public:
mutable std::wstring m_name; mutable std::wstring m_name;
protected: protected:
virtual void FillParentPointersForChilds() virtual void FillParentPointersForChilds()
......
...@@ -49,15 +49,27 @@ namespace PPTX ...@@ -49,15 +49,27 @@ namespace PPTX
public: public:
TxBody() TxBody()
{ {
m_ns = _T("p"); m_name = _T("p:txBody");
} }
virtual ~TxBody() {} virtual ~TxBody() {}
explicit TxBody(XmlUtils::CXmlNode& node) { fromXML(node); } explicit TxBody(XmlUtils::CXmlNode& node)
{
fromXML(node);
}
const TxBody& operator =(XmlUtils::CXmlNode& node) const TxBody& operator =(XmlUtils::CXmlNode& node)
{ {
fromXML(node); fromXML(node);
return *this; return *this;
} }
explicit TxBody(XmlUtils::CXmlLiteReader& oReader)
{
fromXML(oReader);
}
const TxBody& operator =(XmlUtils::CXmlLiteReader& oReader)
{
fromXML(oReader);
return *this;
}
TxBody(const TxBody& oSrc) { *this = oSrc; } TxBody(const TxBody& oSrc) { *this = oSrc; }
TxBody& operator=(const TxBody& oSrc) TxBody& operator=(const TxBody& oSrc)
...@@ -69,16 +81,45 @@ namespace PPTX ...@@ -69,16 +81,45 @@ namespace PPTX
lstStyle = oSrc.lstStyle; lstStyle = oSrc.lstStyle;
Paragrs = oSrc.Paragrs; Paragrs = oSrc.Paragrs;
m_ns = oSrc.m_ns; m_name = oSrc.m_name;
return *this; return *this;
} }
public: virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
m_name = oReader.GetName();
if ( oReader.IsEmptyNode() )
return;
int nCurDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nCurDepth ) )
{
std::wstring strName = oReader.GetName();
if (_T("a:bodyPr") == strName)
{
bodyPr = oReader;
}
else if (_T("a:lstStyle") == strName)
{
lstStyle = oReader;
}
else if (_T("a:p") == strName)
{
Paragraph p;
Paragrs.push_back(p);
Paragrs.back().fromXML(oReader);
}
}
FillParentPointersForChilds();
}
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
Paragrs.clear(); Paragrs.clear();
m_name = node.GetName();
bodyPr = node.ReadNode(_T("a:bodyPr")); bodyPr = node.ReadNode(_T("a:bodyPr"));
lstStyle = node.ReadNode(_T("a:lstStyle")); lstStyle = node.ReadNode(_T("a:lstStyle"));
...@@ -89,22 +130,25 @@ namespace PPTX ...@@ -89,22 +130,25 @@ namespace PPTX
virtual std::wstring toXML() const virtual std::wstring toXML() const
{ {
XmlUtils::CNodeValue oValue; XmlUtils::CNodeValue oValue;
oValue.Write(bodyPr);
oValue.WriteNullable(bodyPr);
oValue.WriteNullable(lstStyle); oValue.WriteNullable(lstStyle);
oValue.WriteArray(Paragrs); oValue.WriteArray(Paragrs);
return XmlUtils::CreateNode(_T("p:txBody"), oValue); return XmlUtils::CreateNode(m_name, oValue);
} }
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
{ {
pWriter->StartNode(m_ns + _T(":txBody")); pWriter->StartNode(m_name);
pWriter->EndAttributes(); pWriter->EndAttributes();
bodyPr.m_namespace = _T("a"); if (bodyPr.IsInit())
bodyPr.toXmlWriter(pWriter); {
bodyPr->m_namespace = _T("a");
if (lstStyle.is_init()) bodyPr->toXmlWriter(pWriter);
}
if (lstStyle.IsInit())
lstStyle->m_name = _T("a:lstStyle"); lstStyle->m_name = _T("a:lstStyle");
pWriter->Write(lstStyle); pWriter->Write(lstStyle);
...@@ -112,7 +156,7 @@ namespace PPTX ...@@ -112,7 +156,7 @@ namespace PPTX
for (size_t i = 0; i < nCount; ++i) for (size_t i = 0; i < nCount; ++i)
Paragrs[i].toXmlWriter(pWriter); Paragrs[i].toXmlWriter(pWriter);
pWriter->EndNode(m_ns + _T(":txBody")); pWriter->EndNode(m_name);
} }
void toXmlWriterExcel(NSBinPptxRW::CXmlWriter* pWriter) const void toXmlWriterExcel(NSBinPptxRW::CXmlWriter* pWriter) const
...@@ -121,9 +165,11 @@ namespace PPTX ...@@ -121,9 +165,11 @@ namespace PPTX
pWriter->StartNode(_T("c:rich")); pWriter->StartNode(_T("c:rich"));
pWriter->EndAttributes(); pWriter->EndAttributes();
*/ */
if (bodyPr.IsInit())
bodyPr.m_namespace = _T("a"); {
bodyPr.toXmlWriter(pWriter); bodyPr->m_namespace = _T("a");
bodyPr->toXmlWriter(pWriter);
}
if (lstStyle.is_init()) if (lstStyle.is_init())
lstStyle->m_name = _T("a:lstStyle"); lstStyle->m_name = _T("a:lstStyle");
...@@ -150,16 +196,18 @@ namespace PPTX ...@@ -150,16 +196,18 @@ namespace PPTX
void Merge(nullable<TxBody>& txBody)const void Merge(nullable<TxBody>& txBody)const
{ {
if(!txBody.is_init()) if(!txBody.is_init()) return;
txBody = new TxBody();
bodyPr.Merge(txBody->bodyPr); if(bodyPr.IsInit())
if(lstStyle.is_init()) bodyPr->Merge(txBody->bodyPr);
if(lstStyle.IsInit())
lstStyle->Merge(txBody->lstStyle); lstStyle->Merge(txBody->lstStyle);
} }
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{ {
pWriter->WriteRecord1(0, bodyPr); pWriter->WriteRecord2(0, bodyPr);
pWriter->WriteRecord2(1, lstStyle); pWriter->WriteRecord2(1, lstStyle);
pWriter->WriteRecordArray(2, 0, Paragrs); pWriter->WriteRecordArray(2, 0, Paragrs);
} }
...@@ -174,7 +222,8 @@ namespace PPTX ...@@ -174,7 +222,8 @@ namespace PPTX
{ {
case 0: case 0:
{ {
bodyPr.fromPPTY(pReader); bodyPr = new Logic::BodyPr();
bodyPr->fromPPTY(pReader);
break; break;
} }
case 1: case 1:
...@@ -206,15 +255,17 @@ namespace PPTX ...@@ -206,15 +255,17 @@ namespace PPTX
} }
public: public:
BodyPr bodyPr; nullable<BodyPr> bodyPr;
nullable<TextListStyle> lstStyle; nullable<TextListStyle> lstStyle;
std::vector<Paragraph> Paragrs; std::vector<Paragraph> Paragrs;
std::wstring m_ns; std::wstring m_name;
protected: protected:
virtual void FillParentPointersForChilds() virtual void FillParentPointersForChilds()
{ {
bodyPr.SetParentPointer(this); if(bodyPr.is_init())
bodyPr->SetParentPointer(this);
if(lstStyle.is_init()) if(lstStyle.is_init())
lstStyle->SetParentPointer(this); lstStyle->SetParentPointer(this);
...@@ -226,9 +277,11 @@ namespace PPTX ...@@ -226,9 +277,11 @@ namespace PPTX
public: public:
bool IsOneLineParagraphs() const bool IsOneLineParagraphs() const
{ {
if (!bodyPr.wrap.is_init()) if (!bodyPr.is_init()) return false;
return false;
return (bodyPr.wrap->get() == _T("none")); if (!bodyPr->wrap.is_init()) return false;
return (bodyPr->wrap->get() == _T("none"));
} }
std::wstring GetDocxTxBoxContent(NSBinPptxRW::CBinaryFileWriter* pWriter, const nullable<PPTX::Logic::ShapeStyle>& shape_style); std::wstring GetDocxTxBoxContent(NSBinPptxRW::CBinaryFileWriter* pWriter, const nullable<PPTX::Logic::ShapeStyle>& shape_style);
......
...@@ -49,9 +49,35 @@ namespace PPTX ...@@ -49,9 +49,35 @@ namespace PPTX
class UniPath2D : public WrapperWritingElement class UniPath2D : public WrapperWritingElement
{ {
public: public:
PPTX_LOGIC_BASE(UniPath2D) WritingElement_AdditionConstructors(UniPath2D)
PPTX_LOGIC_BASE2(UniPath2D)
virtual OOX::EElementType getType() const
{
if (Path2D.IsInit())
return Path2D->getType();
return OOX::et_Unknown;
}
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader)
{
std::wstring name = XmlUtils::GetNameNoNS(oReader.GetName());
if (name == _T("moveTo"))
Path2D.reset(new Logic::MoveTo(oReader));
else if (name == _T("lnTo"))
Path2D.reset(new Logic::LineTo(oReader));
else if (name == _T("cubicBezTo"))
Path2D.reset(new Logic::CubicBezTo(oReader));
else if (name == _T("close"))
Path2D.reset(new Logic::Close(oReader));
else if (name == _T("arcTo"))
Path2D.reset(new Logic::ArcTo(oReader));
else if (name == _T("quadBezTo"))
Path2D.reset(new Logic::QuadBezTo(oReader));
else Path2D.reset();
}
public:
virtual void fromXML(XmlUtils::CXmlNode& node) virtual void fromXML(XmlUtils::CXmlNode& node)
{ {
std::wstring name = XmlUtils::GetNameNoNS(node.GetName()); std::wstring name = XmlUtils::GetNameNoNS(node.GetName());
......
<?xml version="1.0" encoding="windows-1251"?> <?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="8,00" Version="8.00"
Name="PPTXFormat" Name="PPTXFormat"
ProjectGUID="{36636678-AE25-4BE6-9A34-2561D1BCF302}" ProjectGUID="{36636678-AE25-4BE6-9A34-2561D1BCF302}"
RootNamespace="PPTXFormat" RootNamespace="PPTXFormat"
......
...@@ -249,6 +249,7 @@ namespace OOX ...@@ -249,6 +249,7 @@ namespace OOX
et_a_latin, // <a:latin> et_a_latin, // <a:latin>
et_a_lightRig, // <a:lightRig> et_a_lightRig, // <a:lightRig>
et_a_lin, // <a:lin> et_a_lin, // <a:lin>
et_a_lineTo, // <a:lineTo>
et_a_ln, // <a:ln> et_a_ln, // <a:ln>
et_a_lnDef, // <a:lnDef> et_a_lnDef, // <a:lnDef>
et_a_lnRef, // <a:lnRef> et_a_lnRef, // <a:lnRef>
......
...@@ -41,6 +41,9 @@ ...@@ -41,6 +41,9 @@
#include "../DocxFormat/Drawing/DrawingTextProperties.h" #include "../DocxFormat/Drawing/DrawingTextProperties.h"
#include "../DocxFormat/Drawing/DrawingParagraph.h" #include "../DocxFormat/Drawing/DrawingParagraph.h"
#include "../../../../ASCOfficePPTXFile/PPTXFormat/Logic/SpPr.h"
#include "../../../../ASCOfficePPTXFile/PPTXFormat/Logic/TxBody.h"
#include "ComplexTypes_Spreadsheet.h" #include "ComplexTypes_Spreadsheet.h"
#include "FileTypes_Spreadsheet.h" #include "FileTypes_Spreadsheet.h"
#include "WritingElement.h" #include "WritingElement.h"
......
<?xml version="1.0" encoding="windows-1251"?> <?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="8,00" Version="8.00"
Name="X2tTest" Name="X2tTest"
ProjectGUID="{355A22F4-1394-4B82-B2F1-FF0ECFB9E3EF}" ProjectGUID="{355A22F4-1394-4B82-B2F1-FF0ECFB9E3EF}"
RootNamespace="X2tTest" RootNamespace="X2tTest"
...@@ -356,12 +356,16 @@ ...@@ -356,12 +356,16 @@
<Filter <Filter
Name="Common" Name="Common"
> >
<File
RelativePath="..\..\..\XlsxSerializerCom\Writer\BinaryReader.h"
>
</File>
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Common\BinReaderWriterDefines.h" RelativePath="..\..\..\XlsxSerializerCom\Common\BinReaderWriterDefines.h"
> >
</File> </File>
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Common\Common.cpp" RelativePath="..\..\..\XlsxSerializerCom\Reader\ChartFromToBinary.cpp"
> >
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
...@@ -376,33 +380,16 @@ ...@@ -376,33 +380,16 @@
> >
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Common\Common.h" RelativePath="..\..\..\XlsxSerializerCom\Reader\ChartFromToBinary.h"
>
</File>
<File
RelativePath="..\..\..\Common\FileDownloader\FileDownloader_win.cpp"
>
</File>
</Filter>
<Filter
Name="Reader"
>
<File
RelativePath="..\..\..\XlsxSerializerCom\Writer\BinaryCommonReader.h"
>
</File>
<File
RelativePath="..\..\..\XlsxSerializerCom\Writer\BinaryReader.h"
> >
</File> </File>
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Reader\CSVReader.cpp" RelativePath="..\..\..\XlsxSerializerCom\Common\Common.cpp"
> >
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
...@@ -417,24 +404,29 @@ ...@@ -417,24 +404,29 @@
> >
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalOptions="/bigobj"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
/> />
</FileConfiguration> </FileConfiguration>
</File> </File>
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Reader\CSVReader.h" RelativePath="..\..\..\XlsxSerializerCom\Common\Common.h"
>
</File>
<File
RelativePath="..\..\..\Common\FileDownloader\FileDownloader_win.cpp"
> >
</File> </File>
</Filter> </Filter>
<Filter <Filter
Name="Writer" Name="Reader"
> >
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Reader\BinaryWriter.h" RelativePath="..\..\..\XlsxSerializerCom\Writer\BinaryCommonReader.h"
> >
</File> </File>
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Reader\ChartFromToBinary.cpp" RelativePath="..\..\..\XlsxSerializerCom\Reader\CSVReader.cpp"
> >
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
...@@ -454,7 +446,15 @@ ...@@ -454,7 +446,15 @@
</FileConfiguration> </FileConfiguration>
</File> </File>
<File <File
RelativePath="..\..\..\XlsxSerializerCom\Reader\ChartFromToBinary.h" RelativePath="..\..\..\XlsxSerializerCom\Reader\CSVReader.h"
>
</File>
</Filter>
<Filter
Name="Writer"
>
<File
RelativePath="..\..\..\XlsxSerializerCom\Reader\BinaryWriter.h"
> >
</File> </File>
<File <File
......
...@@ -59,7 +59,6 @@ namespace BinXlsxRW { ...@@ -59,7 +59,6 @@ namespace BinXlsxRW {
int ReadCT_RelId (long length, CT_RelId* poResult); int ReadCT_RelId (long length, CT_RelId* poResult);
private: private:
std::wstring* GetRecordXml (long length, int nRecordType); std::wstring* GetRecordXml (long length, int nRecordType);
std::wstring* GetTxBodyXml (long length);
int ReadCT_extLst (BYTE type, long length, void* poResult); int ReadCT_extLst (BYTE type, long length, void* poResult);
int ReadCT_ChartSpace (BYTE type, long length, void* poResult); int ReadCT_ChartSpace (BYTE type, long length, void* poResult);
...@@ -201,6 +200,8 @@ namespace BinXlsxRW { ...@@ -201,6 +200,8 @@ namespace BinXlsxRW {
int ReadAlternateContent (BYTE type, long length, void* poResult); int ReadAlternateContent (BYTE type, long length, void* poResult);
int ReadAlternateContentChoice (BYTE type, long length, void* poResult); int ReadAlternateContentChoice (BYTE type, long length, void* poResult);
int ReadAlternateContentFallback(BYTE type, long length, void* poResult); int ReadAlternateContentFallback(BYTE type, long length, void* poResult);
int ReadCT_SpPr (BYTE type, long length, void* poResult);
int ReadCT_TxPr (BYTE type, long length, void* poResult);
}; };
class BinaryChartWriter class BinaryChartWriter
{ {
...@@ -353,10 +354,9 @@ namespace BinXlsxRW { ...@@ -353,10 +354,9 @@ namespace BinXlsxRW {
void toBin(ItemsChoiceType5 eType, void* pVal); void toBin(ItemsChoiceType5 eType, void* pVal);
void toBin(ItemsChoiceType6 eType, void* pVal); void toBin(ItemsChoiceType6 eType, void* pVal);
void toBin(ItemsChoiceType4 eType, void* pVal); void toBin(ItemsChoiceType4 eType, void* pVal);
void GetRecordBinary(int nType, std::wstring& sXml, int nRecordType);
void GetTxBodyBinary(int nType, std::wstring& sXml);
void toBin(ItemsChoiceType3 eType, void* pVal); void toBin(ItemsChoiceType3 eType, void* pVal);
void GetRecordBinary(int nType, std::wstring& sXml, int nRecordType);
}; };
} }
#endif // #ifndef CHART_FROM_TO_BINARY #endif // #ifndef CHART_FROM_TO_BINARY
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment