mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-20 05:48:25 +08:00
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@61935 954022d7-b5bf-4e40-9824-e11837661b57
159 lines
3.3 KiB
C++
159 lines
3.3 KiB
C++
#pragma once
|
|
#include "../Reader/Records.h"
|
|
#include "../Records/Animations/AnimationTypes.h"
|
|
|
|
#include "../Records/SSSlideInfoAtom.h"
|
|
|
|
class CRecordSlide : public CRecordsContainer
|
|
{
|
|
public:
|
|
SSlidePersist m_oPersist;
|
|
SlideProgTagsContainer* m_pSlideProgTagsContainer;
|
|
|
|
bool m_bExistsTransition;
|
|
|
|
CSlideShowSlideInfoAtom m_oSlideShowSlideInfoAtom;
|
|
|
|
int m_Index;
|
|
|
|
private:
|
|
DWORD m_lCountReferences;
|
|
|
|
public:
|
|
|
|
CRecordSlide()
|
|
{
|
|
m_bExistsTransition = false;
|
|
m_pSlideProgTagsContainer = NULL;
|
|
m_lCountReferences = 0;
|
|
|
|
m_Index = -1;
|
|
|
|
AddRef();
|
|
}
|
|
|
|
virtual ~CRecordSlide()
|
|
{
|
|
Clear();
|
|
RELEASEOBJECT ( m_pSlideProgTagsContainer );
|
|
}
|
|
|
|
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
|
|
{
|
|
m_oHeader = oHeader;
|
|
m_arRecords.clear();
|
|
|
|
LONG lPosition = 0;
|
|
StreamUtils::StreamPosition(lPosition, pStream);
|
|
|
|
m_oHeader = oHeader;
|
|
|
|
UINT lCurLen = 0;
|
|
SRecordHeader oRec;
|
|
|
|
while (lCurLen < m_oHeader.RecLen)
|
|
{
|
|
if (oRec.ReadFromStream(pStream) == FALSE)
|
|
{
|
|
break;
|
|
}
|
|
|
|
if ( 0x03F9 == oRec.RecType )
|
|
{
|
|
m_bExistsTransition = true;
|
|
m_oSlideShowSlideInfoAtom.ReadFromStream ( oRec, pStream );
|
|
|
|
// TODO : âðåìåííî
|
|
if ( 0 == m_oSlideShowSlideInfoAtom.m_nEffectType )
|
|
m_bExistsTransition = false;
|
|
|
|
lCurLen += (8 + oRec.RecLen);
|
|
continue;
|
|
}
|
|
|
|
IRecord* pRecord = CreateByType ( oRec );
|
|
|
|
if ( RECORD_PROG_TAGS == oRec.RecType )
|
|
{
|
|
m_pSlideProgTagsContainer = new SlideProgTagsContainer ();
|
|
m_pSlideProgTagsContainer->ReadFromStream(oRec, pStream);
|
|
}
|
|
else
|
|
{
|
|
pRecord->ReadFromStream(oRec, pStream);
|
|
m_arRecords.push_back(pRecord);
|
|
}
|
|
|
|
lCurLen += (8 + oRec.RecLen);
|
|
}
|
|
if (lCurLen != m_oHeader.RecLen)
|
|
{
|
|
// íóæíî ðàçîáðàòüñÿ, ÷òî òóò òàêîå!!!
|
|
LONG lPosition = 0;
|
|
StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream);
|
|
}
|
|
}
|
|
|
|
virtual CString ToString()
|
|
{
|
|
XmlUtils::CXmlWriter oWriter;
|
|
CString strName = _T("__SLIDE__");
|
|
|
|
oWriter.WriteNodeBegin(strName);
|
|
|
|
oWriter.WriteString(m_oPersist.ToString());
|
|
oWriter.WriteString(CRecordsContainer::ToString());
|
|
|
|
oWriter.WriteNodeEnd(strName);
|
|
|
|
return oWriter.GetXmlString();
|
|
}
|
|
virtual CString ToString(DWORD nPID)
|
|
{
|
|
XmlUtils::CXmlWriter oWriter;
|
|
CString strName = _T("__SLIDE__");
|
|
|
|
oWriter.WriteNodeBegin(strName, TRUE);
|
|
oWriter.WriteAttribute(_T("id"), CDirectory::ToString(nPID));
|
|
oWriter.WriteNodeEnd(strName, TRUE, FALSE);
|
|
|
|
oWriter.WriteString(m_oPersist.ToString());
|
|
oWriter.WriteString(m_oSlideShowSlideInfoAtom.ToString());
|
|
oWriter.WriteString(CRecordsContainer::ToString());
|
|
|
|
oWriter.WriteNodeEnd(strName);
|
|
|
|
return oWriter.GetXmlString();
|
|
}
|
|
|
|
BOOL IsSlide()
|
|
{
|
|
for (int nIndex = 0; nIndex < m_arRecords.size(); ++nIndex)
|
|
{
|
|
if ((RECORD_TYPE_SLIDE == m_arRecords[nIndex]->m_oHeader.RecType) ||
|
|
(RECORD_TYPE_MAINMASTER == m_arRecords[nIndex]->m_oHeader.RecType) ||
|
|
(RECORD_TYPE_NOTES == m_arRecords[nIndex]->m_oHeader.RecType))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void AddRef()
|
|
{
|
|
++m_lCountReferences;
|
|
}
|
|
void Release()
|
|
{
|
|
--m_lCountReferences;
|
|
if (0 == m_lCountReferences)
|
|
delete this;
|
|
}
|
|
CRecordSlide* QueryInterface()
|
|
{
|
|
AddRef();
|
|
return this;
|
|
}
|
|
};
|