mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 08:22:08 +08:00
123 lines
2.9 KiB
C++
123 lines
2.9 KiB
C++
#pragma once
|
|
#ifndef PPTX_LOGIC_LINEEND_INCLUDE_H_
|
|
#define PPTX_LOGIC_LINEEND_INCLUDE_H_
|
|
|
|
#include "./../WrapperWritingElement.h"
|
|
#include "./../Limit/LineEndType.h"
|
|
#include "./../Limit/LineEndSize.h"
|
|
|
|
namespace PPTX
|
|
{
|
|
namespace Logic
|
|
{
|
|
class LineEnd : public WrapperWritingElement
|
|
{
|
|
public:
|
|
PPTX_LOGIC_BASE(LineEnd)
|
|
|
|
public:
|
|
virtual void fromXML(XmlUtils::CXmlNode& node)
|
|
{
|
|
m_name = node.GetName();
|
|
|
|
node.ReadAttributeBase(L"type", type);
|
|
node.ReadAttributeBase(L"w", w);
|
|
node.ReadAttributeBase(L"len", len);
|
|
}
|
|
virtual CString toXML() const
|
|
{
|
|
XmlUtils::CAttribute oAttr;
|
|
oAttr.WriteLimitNullable(_T("type"), type);
|
|
oAttr.WriteLimitNullable(_T("w"), w);
|
|
oAttr.WriteLimitNullable(_T("len"), len);
|
|
|
|
return XmlUtils::CreateNode(m_name, oAttr);
|
|
}
|
|
|
|
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
|
|
{
|
|
pWriter->StartNode(m_name);
|
|
|
|
pWriter->StartAttributes();
|
|
pWriter->WriteAttribute(_T("type"), type);
|
|
pWriter->WriteAttribute(_T("w"), w);
|
|
pWriter->WriteAttribute(_T("len"), len);
|
|
pWriter->EndAttributes();
|
|
|
|
pWriter->EndNode(m_name);
|
|
}
|
|
|
|
virtual void Merge(nullable<LineEnd>& line)const
|
|
{
|
|
if(!line.IsInit())
|
|
line = LineEnd();
|
|
if(type.IsInit())
|
|
line->type = *type;
|
|
if(w.IsInit())
|
|
line->w = *w;
|
|
if(len.IsInit())
|
|
line->len = *len;
|
|
}
|
|
|
|
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
|
|
{
|
|
LONG _end_rec = pReader->GetPos() + pReader->GetLong() + 4;
|
|
pReader->Skip(1); // start attributes
|
|
|
|
while (true)
|
|
{
|
|
BYTE _at = pReader->GetUChar_TypeNode();
|
|
if (_at == NSBinPptxRW::g_nodeAttributeEnd)
|
|
break;
|
|
|
|
switch (_at)
|
|
{
|
|
case 0:
|
|
{
|
|
type = new Limit::LineEndType();
|
|
type->SetBYTECode(pReader->GetUChar());
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
w = new Limit::LineEndSize();
|
|
w->SetBYTECode(pReader->GetUChar());
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
len = new Limit::LineEndSize();
|
|
len->SetBYTECode(pReader->GetUChar());
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
pReader->Seek(_end_rec);
|
|
}
|
|
|
|
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
|
|
{
|
|
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
|
|
pWriter->WriteLimit2(0, type);
|
|
pWriter->WriteLimit2(1, w);
|
|
pWriter->WriteLimit2(2, len);
|
|
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
|
|
}
|
|
|
|
public:
|
|
nullable_limit<Limit::LineEndType> type;
|
|
nullable_limit<Limit::LineEndSize> w;
|
|
nullable_limit<Limit::LineEndSize> len;
|
|
//private:
|
|
public:
|
|
CString m_name;
|
|
protected:
|
|
virtual void FillParentPointersForChilds(){};
|
|
};
|
|
} // namespace Logic
|
|
} // namespace PPTX
|
|
|
|
#endif // PPTX_LOGIC_LINEEND_INCLUDE_H_
|