Commit 077623f9 authored by Oleg.Korshul's avatar Oleg.Korshul Committed by Alexander Trofimov

(1.0.0.66) ASC version full

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@52662 954022d7-b5bf-4e40-9824-e11837661b57
parent 7d922236
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#include "version.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#pragma code_page(1251)
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""winres.h""\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION INTVER
PRODUCTVERSION INTVER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "CompanyName"), "Online Media Technologies Ltd."
VALUE "FileDescription"), "AVSOfficePPTFile ActiveX DLL"
VALUE "FileVersion"), STRVER
VALUE "LegalCopyright"), "Online Media Technologies Ltd. Copyright (c) 2009"
VALUE "InternalName"), "AVSOfficePPTFile.dll"
VALUE "OriginalFilename"), "AVSOfficePPTFile.dll"
VALUE "ProductName"), "AVSOfficePPTFile ActiveX DLL"
VALUE "ProductVersion"), STRVER
VALUE "OLESelfRegister"), ""
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation"), 0x0409, 0x04B0
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_PROJNAME "AVSOfficePPTFile"
END
IDR_AVSOFFICEPPTFILE REGISTRY "AVSOfficePPTFile.rgs"
////////////////////////////////////////////////////////////////////////////
#endif
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
HKCR
{
NoRemove AppID
{
'%APPID%' = s 'AVSOfficePPTFile'
'AVSOfficePPTFile.DLL'
{
val AppID = s '%APPID%'
}
}
}
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AVSOfficePPTFile", "AVSOfficePPTFile.vcproj", "{C1E5043D-4844-4893-980D-BD79CDCD05C1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Debug|Win32.ActiveCfg = Debug|Win32
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Debug|Win32.Build.0 = Debug|Win32
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Release|Win32.ActiveCfg = Release|Win32
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AVSOfficePPTFile", "AVSOfficePPTFile_vs2008.vcproj", "{C1E5043D-4844-4893-980D-BD79CDCD05C1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Debug|Win32.ActiveCfg = Debug|Win32
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Debug|Win32.Build.0 = Debug|Win32
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Release|Win32.ActiveCfg = Release|Win32
{C1E5043D-4844-4893-980D-BD79CDCD05C1}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
// OfficePPTFile3.h : Declaration of the CPPTFile3
#pragma once
#include "resource.h" // main symbols
#include "AVSUtils.h"
#include "..\..\Common\OfficeFileTemplate.h"
#include "..\..\Common\RSA\XMLEncoder.h"
#include "VideoFileErrorDescription.h"
#include "Reader\PPTFileReader.h"
// IAVSOfficePPTFile
[object, uuid("01AB4BA0-7AE9-4539-8B12-608233D307BC"), dual, pointer_default(unique)]
__interface IAVSOfficePPTFile : IAVSOfficeFileTemplate
{
[id(100 + 0), propget] HRESULT DrawingXml( [out, retval] BSTR* pbstrXml );
[id(100 + 1), propget] HRESULT TempDirectory( [out, retval] BSTR* pbstrDir );
[id(100 + 1), propput] HRESULT TempDirectory( [in] BSTR bstrDir );
[id(1000 + 0)] HRESULT Is_PPTFile([in] BSTR fileName, [out, retval] VARIANT_BOOL* Result);
[id(1000 + 1)] HRESULT GetDVDXml([out, retval] BSTR* bstrPTTXml);
[id(1000 + 2)] HRESULT GetBluRayXml([out, retval] BSTR* bstrDVDXml);
[id(2000 + 0)] HRESULT SetAdditionalParam([in] BSTR ParamName, [in] VARIANT ParamValue);
[id(2001 + 1)] HRESULT GetAdditionalParam([in] BSTR ParamName, [out, retval] VARIANT* ParamValue);
};
// _IAVSOfficePPTFileEvents
[dispinterface, uuid("DF3BE363-8404-4173-830A-984BF11790F5")]
__interface _IAVSOfficePPTFileEvents
{
[id(1)] HRESULT ProcessVideoFile([in] LONG ID, [in] LONG Percent, [in, out, ref] SHORT* Cancel);
};
// CAVSOfficePPTFile
[coclass, uuid("FC1AD867-FFA6-454a-82A0-1538465A55EB"), event_source(com), threading(apartment), vi_progid("AVSOfficePPTFile.OfficePPTFile"), progid("AVSOfficePPTFile.OfficePPTFile.1"), version(1.0)]
class ATL_NO_VTABLE CAVSOfficePPTFile :
public IAVSOfficePPTFile,
public CAVSATLError
{
public:
CAVSOfficePPTFile() :
CAVSATLError(__uuidof(CAVSOfficePPTFile), __uuidof(IAVSOfficePPTFile)), m_hSynchMutex(NULL),
m_arUserSources()
{
m_strTempDirectory = L"";
}
__event __interface _IAVSOfficePPTFileEvents;
__event __interface _IAVSOfficeFileTemplateEvents2;
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
m_hSynchMutex = CreateMutex(NULL, FALSE, NULL);
m_pReader = NULL;
m_Status = NULLMODE;
return S_OK;
}
void FinalRelease()
{
RELEASEHANDLE ( m_hSynchMutex );
CloseFile();
}
private:
HANDLE m_hSynchMutex;
LONG m_Status;
CPPTFileReader* m_pReader;
CAtlArray<CString> m_arUserSources;
CStringW m_strTempDirectory;
CXMLEncoder m_oEncoder;
public:
STDMETHOD(get_DrawingXml)(BSTR* pbstrXml)
{
if (NULL == pbstrXml)
return S_FALSE;
if (1 == m_arUserSources.GetCount())
{
CString strXml = m_arUserSources[0];
#ifdef _DEBUG
XmlUtils::CXmlWriter oWriter;
oWriter.WriteString(strXml);
oWriter.SaveToFile(_T("C:\\PPT_drawing.xml"), TRUE);
#endif
strXml = m_oEncoder.EncryptXML(strXml);
*pbstrXml = strXml.AllocSysString();
return S_OK;
}
CString strXml = _T("");
for (size_t nIndex = 0; nIndex < m_arUserSources.GetCount(); ++nIndex)
{
strXml += m_arUserSources[nIndex];
}
strXml = _T("<Tracks>") + strXml + _T("</Tracks>");
#ifdef _DEBUG
XmlUtils::CXmlWriter oWriter;
oWriter.WriteString(strXml);
oWriter.SaveToFile(_T("C:\\PPT_drawing.xml"), TRUE);
#endif
CStringA strA = m_oEncoder.EncryptXML(strXml);
*pbstrXml = strA.AllocSysString();
return S_OK;
}
STDMETHOD(get_TempDirectory)(BSTR* pbstrDir)
{
if (NULL == pbstrDir)
return S_FALSE;
*pbstrDir = m_strTempDirectory.AllocSysString();
return S_OK;
}
STDMETHOD(put_TempDirectory)(BSTR bstrDir)
{
m_strTempDirectory = (CStringW)bstrDir;
return S_OK;
}
STDMETHOD(Is_PPTFile)(BSTR fileName, VARIANT_BOOL* Result)
{
CSynchAccess oSynchAccess(m_hSynchMutex);
return S_OK;
}
STDMETHOD(LoadFromFile)(BSTR sSrcFileName, BSTR sDstPath, BSTR sXMLOptions)
{
CSynchAccess oSynchAccess(m_hSynchMutex);
m_arUserSources.RemoveAll();
m_strTempDirectory = (CStringW)sDstPath;
BOOL bRes = OpenFile(sSrcFileName);
if (!bRes)
{
CloseFile();
m_Status = NULLMODE;
return S_FALSE;
}
for (size_t nIndex = 0; nIndex < m_pReader->m_oDocumentInfo.m_arUsers.GetCount(); ++nIndex)
{
CPPTUserInfo* pUser = m_pReader->m_oDocumentInfo.m_arUsers[nIndex];
m_arUserSources.Add();
/*m_arUserSources[nIndex] = _T("<MultiSource><SingleSource>") +
pUser->m_strXmlVideoSource + _T("<DestinationFormat></DestinationFormat>") +
pUser->m_strXmlTransforms + _T("</SingleSource>") +
pUser->m_strXmlOverlays + _T("</MultiSource>");*/
m_arUserSources[nIndex] = pUser->m_strXmlVideoSource;
}
return S_OK;
}
STDMETHOD(SaveToFile)(BSTR sDstFileName, BSTR sSrcPath, BSTR sXMLOptions)
{
return S_OK;
}
// ...
STDMETHOD(GetDVDXml)(BSTR* bstrDVDXml)
{
return S_OK;
}
STDMETHOD(GetBluRayXml)(BSTR* bstrBluRayXml)
{
return S_OK;
}
STDMETHOD(SetAdditionalParam)(BSTR ParamName, VARIANT ParamValue)
{
return S_OK;
}
STDMETHOD(GetAdditionalParam)(BSTR ParamName, VARIANT* ParamValue)
{
if (NULL == ParamValue)
return S_FALSE;
CString sParamName; sParamName = ParamName;
if (g_csBlowfishKeyParamName == sParamName)
{
ParamValue->punkVal = m_oEncoder.GetBlowfishKey();
}
return S_OK;
}
private:
BOOL OpenFile(BSTR bstrFileName)
{
CloseFile();
HRESULT hr;
IStorage *pStgFrom = NULL;
hr = StgOpenStorage(bstrFileName, NULL, STGM_READ | STGM_TRANSACTED | STGM_SHARE_DENY_NONE, NULL, 0, &pStgFrom);
if (FAILED(hr))
{
RELEASEINTERFACE(pStgFrom);
return FALSE;
}
RELEASEOBJECT(m_pReader);
m_pReader = new CPPTFileReader(pStgFrom, m_strTempDirectory);
m_pReader->m_oDocumentInfo.m_strFileDirectory = GetDirectory(CString(bstrFileName));
if (!m_pReader->IsPowerPoint())
{
RELEASEINTERFACE(pStgFrom);
RELEASEOBJECT(m_pReader);
return FALSE;
}
m_pReader->ReadPersistDirectory();
m_pReader->ReadSlideList();
RELEASEINTERFACE(pStgFrom);
m_Status = READMODE;
return TRUE;
}
BOOL CloseFile()
{
CSynchAccess oSynchAccess(m_hSynchMutex);
m_Status = NULLMODE;
RELEASEOBJECT(m_pReader);
return S_OK;
}
CString GetDirectory(CString strFileName)
{
int nIndex = strFileName.ReverseFind(TCHAR('\\'));
if (-1 != nIndex)
{
return strFileName.Mid(0, nIndex + 1);
}
return strFileName;
}
};
#pragma once
#include "..\stdafx.h"
#include "..\..\..\Common\OfficeDrawing\Elements.h"
class CAudioPart
{
public:
CString m_strFile;
double m_dStartTime;
double m_dEndTime;
double m_dClipStartTime;
double m_dClipEndTime;
double m_dAudioDuration;
bool m_bLoop;
bool m_bStop;
bool m_bIsTransition;
double m_dAmplify;
public:
CAudioPart()
{
m_strFile = _T("");
m_dStartTime = 0.0;
m_dEndTime = -1.0;
m_dClipStartTime = 0.0;
m_dClipEndTime = -1.0;
m_dAudioDuration = 0.0;
m_bLoop = false;
m_bStop = false;
m_bIsTransition = false;
m_dAmplify = 100.0;
}
~CAudioPart()
{
}
CAudioPart(const CAudioPart& oSrc)
{
*this = oSrc;
}
CAudioPart& operator=(const CAudioPart& oSrc)
{
m_strFile = oSrc.m_strFile;
m_dStartTime = oSrc.m_dStartTime;
m_dEndTime = oSrc.m_dEndTime;
m_dClipStartTime = oSrc.m_dClipStartTime;
m_dClipEndTime = oSrc.m_dClipEndTime;
m_dAudioDuration = oSrc.m_dAudioDuration;
m_bLoop = oSrc.m_bLoop;
m_bStop = oSrc.m_bStop;
m_bIsTransition = oSrc.m_bIsTransition;
m_dAmplify = oSrc.m_dAmplify;
return *this;
}
CAudioPart(CAudioElement* pAudioElem)
{
if (NULL == pAudioElem)
{
m_strFile = _T("");
m_dStartTime = 0.0;
m_dEndTime = -1.0;
m_dClipStartTime = 0.0;
m_dClipEndTime = -1.0;
m_dAudioDuration = 0.0;
m_bLoop = false;
m_bStop = false;
m_bIsTransition = false;
m_dAmplify = 100.0;
}
else
{
m_strFile = pAudioElem->m_strFileName;
m_dStartTime = pAudioElem->m_dStartTime;
m_dEndTime = pAudioElem->m_dEndTime;
m_dClipStartTime = pAudioElem->m_dClipStartTime;
m_dClipEndTime = pAudioElem->m_dClipEndTime;
m_dAudioDuration = pAudioElem->m_dAudioDuration;
m_bLoop = pAudioElem->m_bLoop;
m_bStop = false;
m_bIsTransition = false;
m_dAmplify = 100.0;
}
}
public:
void CalculateDuration()
{
if (0.0 < m_dAudioDuration || _T("") == m_strFile)
return;
VideoFile::IVideoFile3* pVideoFile = NULL;
if (SUCCEEDED(CoCreateInstance(VideoFile::CLSID_CVideoFile3, NULL, CLSCTX_ALL, VideoFile::IID_IVideoFile3, (void**)(&pVideoFile))))
{
if (NULL != pVideoFile)
{
BSTR bsFile = m_strFile.AllocSysString();
if (S_OK == pVideoFile->OpenFile(bsFile))
{
pVideoFile->get_audioDuration(&m_dAudioDuration);
}
SysFreeString(bsFile);
RELEASEINTERFACE(pVideoFile);
}
}
}
};
class CAudioOverlay
{
public:
CAtlArray<CAudioPart> m_arParts;
double m_dAllDuration;
public:
CAudioOverlay() : m_arParts(), m_dAllDuration(0.0)
{
}
~CAudioOverlay()
{
}
CAudioOverlay(const CAudioOverlay& oSrc)
{
*this = oSrc;
}
CAudioOverlay& operator=(const CAudioOverlay& oSrc)
{
m_arParts.Copy(oSrc.m_arParts);
m_dAllDuration = oSrc.m_dAllDuration;
return *this;
}
public:
void Calculate()
{
size_t nCount = m_arParts.GetCount();
//
for (size_t i = 0; i < nCount; ++i)
{
CAudioPart* pPart = &m_arParts[i];
pPart->CalculateDuration();
if (pPart->m_dStartTime < 0.0)
pPart->m_dStartTime = 0.0;
pPart->m_dEndTime = pPart->m_dStartTime + pPart->m_dAudioDuration;
if (pPart->m_dEndTime > m_dAllDuration)
{
pPart->m_dEndTime = m_dAllDuration;
}
if (pPart->m_bLoop)
{
pPart->m_dEndTime = m_dAllDuration;
}
}
//
for (size_t i = 0; i < nCount; ++i)
{
CAudioPart* pPart = &m_arParts[i];
if (pPart->m_bIsTransition)
{
if (pPart->m_bStop)
{
//
for (size_t j = 0; j < nCount; ++j)
{
if (j == i)
continue;
CAudioPart* pMem = &m_arParts[j];
if (pMem->m_dStartTime <= pPart->m_dStartTime && pMem->m_dEndTime > pPart->m_dStartTime)
{
pMem->m_dEndTime = pPart->m_dStartTime;
}
}
}
if (pPart->m_bLoop)
{
//
double dMin = m_dAllDuration;
for (size_t j = 0; j < nCount; ++j)
{
if (j == i)
continue;
CAudioPart* pMem = &m_arParts[j];
if (pMem->m_dStartTime > pPart->m_dEndTime)
{
if (dMin > pMem->m_dStartTime)
dMin = pMem->m_dStartTime;
}
}
pPart->m_dEndTime = dMin;
}
}
else
{
if (pPart->m_bLoop)
{
pPart->m_dEndTime = m_dAllDuration;
}
}
}
}
CString GetAudioOverlay()
{
CString strRes = _T("");
size_t nCount = m_arParts.GetCount();
for (size_t i = 0; i < nCount; ++i)
{
CAudioPart* pPart = &m_arParts[i];
CString strOverlay1 = _T("");
CString strOverlay2 = _T("");
strOverlay1.Format(_T("<AudioSource StartTime='%lf' Duration='%lf' Amplify='%lf'>"),
pPart->m_dStartTime, pPart->m_dEndTime - pPart->m_dStartTime, pPart->m_dAmplify);
int lIndex = pPart->m_strFile.Find(L"file:///");
if (0 == lIndex)
{
pPart->m_strFile = pPart->m_strFile.Mid(8);
pPart->m_strFile.Replace('/', '\\');
pPart->m_strFile.Replace(L"%20", L" ");
}
CString strFile_ = pPart->m_strFile;
CorrectXmlString(strFile_);
strOverlay2.Format(_T("<Source StartTime='%lf' EndTime='%lf' FilePath='%s'/></AudioSource>"),
pPart->m_dClipStartTime, pPart->m_dClipEndTime, strFile_);
strOverlay1 += strOverlay2;
strRes += strOverlay1;
}
return strRes;
}
};
\ No newline at end of file
#pragma once
#include "../Records/CurrentUserAtom.h"
using namespace NSOfficePPT;
class CUserEdit
{
public:
DWORD m_nOffsetLastEdit;
DWORD m_nOffsetPersistDirectory;
DWORD m_nDocumentRef;
DWORD m_nMaxPersistWritten;
public:
CUserEdit()
{
m_nOffsetLastEdit = 0;
m_nOffsetPersistDirectory = 0;
m_nDocumentRef = 0;
m_nMaxPersistWritten = 0;
}
~CUserEdit()
{
}
CUserEdit& operator =(const CUserEdit& oSrc)
{
m_nOffsetLastEdit = oSrc.m_nOffsetLastEdit;
m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory;
m_nDocumentRef = oSrc.m_nDocumentRef;
m_nMaxPersistWritten = oSrc.m_nMaxPersistWritten;
return (*this);
}
void FromAtom(CRecordUserEditAtom* pAtom)
{
m_nOffsetLastEdit = pAtom->m_nOffsetLastEdit;
m_nOffsetPersistDirectory = pAtom->m_nOffsetPersistDirectory;
m_nDocumentRef = pAtom->m_nOffsetDocPersistIdRef;
m_nMaxPersistWritten = pAtom->m_nPersistIdSeed;
}
};
class CCurrentUser
{
public:
bool m_bIsEncrypt;
DWORD m_nOffsetToCurrentEdit;
CStringW m_strName;
public:
CCurrentUser()
{
m_bIsEncrypt = false;
m_nOffsetToCurrentEdit = 0;
m_strName = _T("");
}
~CCurrentUser()
{
}
CCurrentUser& operator =(const CCurrentUser& oSrc)
{
m_bIsEncrypt = oSrc.m_bIsEncrypt;
m_nOffsetToCurrentEdit = oSrc.m_nOffsetToCurrentEdit;
m_strName = oSrc.m_strName;
return (*this);
}
void FromAtom(CRecordCurrentUserAtom* pAtom)
{
m_bIsEncrypt = (NO_ENCRYPT == pAtom->m_nToken);
m_nOffsetToCurrentEdit = pAtom->m_nOffsetToCurEdit;
m_strName = pAtom->m_strUNICODEUserName;
}
CString ToString()
{
CString str = _T("");
str.Format(_T("<CurrentUser Name='%s' />"), (CString)m_strName);
return str;
}
};
///----------- constants----------
const int MST_FLAG_OBJECTS = 0x01;
const int MST_FLAG_SCHEME = 0x02;
const int MST_FLAG_BACKGROUND = 0x04;
#define MAX_OBJECTS_IN_LAYOUT 8
const int S_HEADERFOOTER_DATE = 0x01;
const int S_HEADERFOOTER_TODAYDATE = 0x02;
const int S_HEADERFOOTER_USERDATE = 0x04;
const int S_HEADERFOOTER_SLIDENUMBER = 0x08;
const int S_HEADERFOOTER_HEADER = 0x10;
const int S_HEADERFOOTER_FOOTER = 0x20;
#define PSR_NAMEDSHOW_SIZE 32
//---------------------------------
struct SDocInfoAtom
{
SColorAtom PenColor;
INT RestartTime;
SHORT StartSlide;
SHORT EndSlide;
USHORT NamedShow[PSR_NAMEDSHOW_SIZE];
BYTE Flags;
};
struct SSlideInfoAtom
{
INT SlideTime; // how long to show the slide in ticks
UINT SoundRef;
USHORT Effect; // type of transition (2 character signature)
USHORT Flags; // set of flags that determine type of build
BYTE Speed; // speed of transition
};
struct PSR_AnimationInfoAtom
{
SColorAtom DimColor;
UINT Flags;
UINT SoundRef;
USHORT OrderID;
USHORT DelayTime;
USHORT SlideCount;
BYTE BuildType;
BYTE FlyMethod;
BYTE FlyDirection;
BYTE AfterEffect;
BYTE SubEffect;
BYTE OleVerb;
};
struct SInteractiveInfoAtom
{
UINT SoundRef;
UINT ExHyperlinkID;
BYTE Action;
BYTE OleVerb;
BYTE Jump;
BYTE Flags;
};
#pragma once
// zlib - .
// -
#include "zlib.h"
#pragma comment(lib, "zlib.lib")
namespace NSZLib
{
static BOOL Decompress(const BYTE* pSrcBuffer, const ULONG& lSrcBufferLen,
BYTE* pDstBuffer, ULONG& lDstBufferLen)
{
try
{
if (Z_OK == uncompress(pDstBuffer, &lDstBufferLen, pSrcBuffer, lSrcBufferLen))
{
return TRUE;
}
}
catch(...)
{
}
return FALSE;
}
}
\ No newline at end of file
#pragma once
#include "PPTDocumentInfoOneUser.h"
class CPPTDocumentInfo
{
public:
CCurrentUser m_oCurrentUser;
CAtlArray<CPPTUserInfo*> m_arUsers;
CString m_strFileDirectory;
public:
CPPTDocumentInfo() : m_oCurrentUser(), m_arUsers()
{
m_strFileDirectory = _T("");
}
~CPPTDocumentInfo()
{
Clear();
}
void Clear()
{
size_t nCount = m_arUsers.GetCount();
while(0 != nCount)
{
if (NULL != m_arUsers[0])
delete m_arUsers[0];
m_arUsers.RemoveAt(0);
--nCount;
}
}
#pragma region READ
void ReadFromStream(CRecordCurrentUserAtom* pCurrentUser, IStream* pStream, CStringW strFolderMem)
{
m_oCurrentUser.FromAtom(pCurrentUser);
DWORD offsetToEdit = m_oCurrentUser.m_nOffsetToCurrentEdit;
SRecordHeader oHeader;
CRecordUserEditAtom oUserAtom;
Clear();
size_t nCountUsers = 0;
while (0 < offsetToEdit)
{
StreamUtils::StreamSeek(offsetToEdit, pStream);
pStream->Read(&oHeader, sizeof(SRecordHeader), NULL);
oUserAtom.ReadFromStream(oHeader, pStream);
CPPTUserInfo* pInfo = new CPPTUserInfo();
pInfo->m_strFileDirectory = m_strFileDirectory;
BOOL bRes = pInfo->ReadFromStream(&oUserAtom, pStream, strFolderMem);
offsetToEdit = pInfo->m_oUser.m_nOffsetLastEdit;
if (!bRes)
{
delete pInfo;
continue;
}
m_arUsers.Add(pInfo);
//
pInfo->m_pDocumentInfo = this;
pInfo->m_lIndexThisUser = m_arUsers.GetCount() - 1;
pInfo = NULL;
}
// , blip. -
LONG lCount = m_arUsers.GetCount();
if (1 < lCount)
{
m_arUsers[0]->m_arEmptyPictures.Copy(m_arUsers[lCount - 1]->m_arEmptyPictures);
}
// FromDocument...
for (size_t i = 0; i < m_arUsers.GetCount(); ++i)
{
m_arUsers[i]->FromDocument();
}
/*#ifdef _DEBUG
SaveXmlInfo();
#endif*/
}
#pragma endregion
void SaveXmlInfo()
{
if (!PPT_DUMP_LOG)
return;
XmlUtils::CXmlWriter oWriter;
oWriter.WriteNodeBegin(_T("PPTInfo"));
oWriter.WriteString(m_oCurrentUser.ToString());
for (size_t nIndex = 0; nIndex < m_arUsers.GetCount(); ++nIndex)
{
oWriter.WriteString(m_arUsers[nIndex]->m_strXmlInfo);
}
oWriter.WriteNodeEnd(_T("PPTInfo"));
//CDirectory::SaveToFile(_T("C:\\PPTInfo.xml"), oWriter.GetXmlString());
oWriter.SaveToFile(_T("C:\\PPTInfo.xml"), TRUE);
}
LONG GetCountPicturesUsed(size_t nUser)
{
LONG lRes = 0;
for (size_t i = 0; i < m_arUsers[nUser]->m_arEmptyPictures.GetCount(); ++i)
{
if (!m_arUsers[nUser]->m_arEmptyPictures[i])
++lRes;
}
return lRes;
}
};
\ No newline at end of file
#pragma once
#include "ClassesAtom.h"
#include "Slide.h"
//#include "Document.h"
#include "../Records/Animations/AnimationTypes.h"
#include "../Records/ExObjListContainer.h"
#include "AudioOverlay.h"
class CPPTDocumentInfo;
typedef CAtlArray<Animations::TimeLineElement> AnimationsArray;
class CPPTUserInfo
{
public:
CUserEdit m_oUser;
CSimpleMap<DWORD, DWORD> m_mapOffsetInPIDs;
CRecordDocument m_oDocument;
CSimpleMap<DWORD, CRecordSlide*> m_mapSlides;
CSimpleMap<DWORD, CRecordSlide*> m_mapMasters;
CSimpleMap<DWORD, CRecordSlide*> m_mapNotes;
CAtlArray<CSlide> m_arNormalSlides;
CSimpleMap<DWORD, CSlide*> m_arNormalMasters;
// ...
CSimpleMap<DWORD, CExFilesInfo*> m_mapExFiles;
// ...
CSimpleArray<CFont_> m_arrFonts;
CString m_strXmlVideoSource;
CString m_strXmlTransforms;
CString m_strXmlOverlays;
// - xml
CString m_strXmlInfo;
// ()
CPPTDocumentInfo* m_pDocumentInfo;
size_t m_lIndexThisUser;
// , -
CSimpleMap<DWORD, CTextMasterStyle*> m_mapTextStyles;
// Animations structures
CSimpleMap <DWORD, Animations::CSlideTimeLine*> m_mapAnimations;
double m_nWriteSlideTimeOffset;
double m_nWriteSlideTime;
CSimpleMap <DWORD, CSlideShowSlideInfoAtom> m_mapTransitions;
CSimpleMap <DWORD, CString> m_mapSoundCollection;
// "" -
CAtlArray<BOOL> m_arEmptyPictures;
BOOL m_bIsSetupEmpty;
CString m_strFileDirectory;
public:
CPPTUserInfo();
~CPPTUserInfo();
void Clear();
BOOL ReadFromStream(CRecordUserEditAtom* pUser, IStream* pStream, CStringW strFolderMem);
void FromDocument();
void NormalizeCoords(long lWidth, long lHeight);
void LoadSlide(int nIndex);
void LoadMasters(const LONG& lOriginWidth, const LONG& lOriginHeight);
void LoadNoMainMaster(int nIndex, const LONG& lOriginWidth, const LONG& lOriginHeight);
void LoadMainMaster(int nIndex, const LONG& lOriginWidth, const LONG& lOriginHeight);
void UpdateXMLSource();
void UpdateXMLInfo();
void WriteAnimationXml ( Animations::CSlideTimeLine* pTimeLine, CSlide* pSlide, double nScaleW, double nScaleH );
CString GetXmlImageSource ( CImageElement* pImage );
CString GetXmlShapeSource ( CShapeElement* pShape );
CString GetAnimationShapeXml ( double fX, double fY, CShapeElement* pShape, AnimationsArray* pSource );
CString GetAnimationImageXml ( double fX, double fY, CImageElement* pImage, AnimationsArray* pSource );
CString GetXmlAnimationSource ( double fX, double fY, AnimationsArray* pSource );
CString GetXmlSlideTransition ( CSlideShowSlideInfoAtom InfoAtom , double dStartTime, CString& strAudioOverlay, CAudioOverlay& oAudioOverlay );
void LoadSlideFromPrevUsers(int nSlideIndex);
void LoadMasterFromPrevUsers(int nSlideIndex);
void LoadNoteFromPrevUsers(int nSlideIndex);
void LoadExternal(CRecordExObjListContainer* pExObjects);
void LoadExternal(CRecordsContainer* pExObject, CExFilesInfo::ExFilesType eType);
double CalculateTimes(CAudioOverlay& oAudioOverlay);
void CaclulateSlideTimes();
void CalculateSlideElements(int nIndex, CAudioOverlay& oAudioOverlay);
};
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
#pragma once
#include "stdafx.h"
#include "Records.h"
#include "..\Records\RecordsIncluder.h"
void SRecordHeader::ToXmlWriter(XmlUtils::CXmlWriter* pWriter, IStream* pStream)
{
if (IsContainer())
{
pWriter->WriteNodeBegin(GetRecordName((DWORD)RecType), TRUE);
pWriter->WriteAttribute(_T("length"), (int)RecLen);
pWriter->WriteNodeEnd(GetRecordName((DWORD)RecType), TRUE, FALSE);
UINT lCurLen = 0;
ULONG lReadLen = 0;
SRecordHeader oRec;
while (lCurLen < RecLen)
{
pStream->Read(&oRec, sizeof(oRec), &lReadLen);
if (0 >= lReadLen)
{
break;
}
lCurLen += (8 + oRec.RecLen);
oRec.ToXmlWriter(pWriter, pStream);
}
pWriter->WriteNodeEnd(GetRecordName((DWORD)RecType));
}
else
{
IRecord* pRecord = CreateByType(*this);
pRecord->ReadFromStream(*this, pStream);
pWriter->WriteString(pRecord->ToString());
}
}
void CRecordsContainer::ReadFromStream(SRecordHeader oHeader, IStream* pStream)
{
m_oHeader = oHeader;
m_arRecords.RemoveAll();
LONG lPosition = 0;
StreamUtils::StreamPosition(lPosition, pStream);
m_oHeader = oHeader;
UINT lCurLen = 0;
ULONG lReadLen = 0;
SRecordHeader oRec;
while (lCurLen < m_oHeader.RecLen)
{
pStream->Read(&oRec, sizeof(oRec), &lReadLen);
if (0 >= lReadLen)
{
break;
}
IRecord* pRecord = CreateByType(oRec);
pRecord->ReadFromStream(oRec, pStream);
m_arRecords.Add(pRecord);
lCurLen += (8 + oRec.RecLen);
}
if (lCurLen != m_oHeader.RecLen)
{
// , !!!
LONG lPosition = 0;
StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream);
}
}
IRecord* CreateByType(SRecordHeader oHeader)
{
IRecord* pRecord = NULL;
switch (oHeader.RecType)
{
CREATE_BY_TYPE(RECORD_TYPE_SLIDELISTWITHTEXT, CRecordSlideListWithText)
CREATE_BY_TYPE(RECORD_TYPE_DOCUMENT_ATOM, CRecordDocumentAtom)
//CREATE_BY_TYPE(RECORD_TYPE_ENDDOCUMENT, CRecordEndDocument)
//CREATE_BY_TYPE(RECORD_TYPE_SSLIDE_LAYOUT_ATOM, CRecordSSlideLayoutAtom)
CREATE_BY_TYPE(RECORD_TYPE_SLIDE_ATOM, CRecordSlideAtom)
CREATE_BY_TYPE(RECORD_TYPE_NOTES_ATOM, CRecordNotesAtom)
CREATE_BY_TYPE(RECORD_TYPE_SLIDE_PERSIST_ATOM, CRecordSlidePersistAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordMasterPersistAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordNotesPersistAtom)
CREATE_BY_TYPE(RECORD_TYPE_SSSLIDE_INFO_ATOM, CSlideShowSlideInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_GUIDE_ATOM, CRecordGuideAtom)
//CREATE_BY_TYPE(RECORD_TYPE_VIEWINFO_ATOM, CRecordZoomViewInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_VIEWINFO_ATOM, CRecordNoZoomViewInfoAtom)
CREATE_BY_TYPE(RECORD_TYPE_VIEWINFO_ATOM, CRecordViewInfoAtom)
CREATE_BY_TYPE(RECORD_TYPE_SLIDE_VIEWINFO_ATOM, CRecordSlideViewInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_VBAINFO_ATOM, CRecordVBAInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_SSDOCINFO_ATOM, CRecordSSDocInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_DOC_ROUTING_SLIP, CRecordDocRoutingSlipAtom)
//CREATE_BY_TYPE(RECORD_TYPE_EXOBJLIST_ATOM, CRecordExObjListAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordGridSpacing10Atom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordRoundTripThemeAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordRoundTripColorMappingAtom)
//CREATE_BY_TYPE(RECORD_TYPE_NAMEDSHOW_SLIDES, CRecordNamedShowSlidesAtom)
//CREATE_BY_TYPE(RECORD_TYPE_SHEET_PROPERTIES, CRecordNormalViewSetInfoAtom)
CREATE_BY_TYPE(RECORD_TYPE_COLOR_SCHEME_ATOM, CRecordColorSchemeAtom)
//CREATE_BY_TYPE(RECORD_TYPE_ORIGINALMAINMASTERID, CRecordRoundTripOriginalMainMasterId12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_COMPOSITEMASTERID, CRecordRoundTripCompositeMasterId12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPCONTENTMASTERINFO12, CRecordRoundTripContentMasterInfo12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPSHAPEID12, CRecordRoundTripShapeId12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPHFPLACEHOLDER12, CRecordRoundTripHFPlaceholder12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPCONTENTMASTERID, CRecordRoundTripContentMasterId12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPOARTTEXTSTYLES12, CRecordRoundTripOArtTextStyles12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPHEADERFOOTERDEFAULTS12ATOM, CRecordRoundTripHeaderFooterDefaults12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPDOCFLAGS12, CRecordRoundTripDocFlags12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPSHAPECHECKSUMFORCUSTOMLAYOUTS12, CRecordRoundTripShapeCheckSumForCustomLayouts12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPNOTESMASTERTEXTSTYLES12, CRecordRoundTripNotesMasterTextStyles12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_ROUNDTRIPCUSTOMTABLESTYLES12, CRecordRoundTripCustomTableStyles12Atom)
//CREATE_BY_TYPE(RECORD_TYPE_BOOKMARK_SEED_ATOM, CRecordBookmarkSeedAtom)
//CREATE_BY_TYPE(RECORD_TYPE_COLOR_SCHEME_ATOM, CRecordSlideColorSchemeAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordSchemeListElementColorSchemeAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordBlipEntityAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordExObjRefAtom)
CREATE_BY_TYPE(RECORD_TYPE_OEPLACEHOLDER_ATOM, CRecordPlaceHolderAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordShapeFlagsAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordShapeFlags10Atom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordRoundTripNewPlaceholderId12Atom)
CREATE_BY_TYPE(RECORD_TYPE_OUTLINE_TEXTREF_ATOM, CRecordOutlineTextRefAtom)
CREATE_BY_TYPE(RECORD_TYPE_TEXT_HEADER_ATOM, CRecordTextHeaderAtom)
CREATE_BY_TYPE(RECORD_TYPE_TEXT_CHARS_ATOM, CRecordTextCharsAtom)
CREATE_BY_TYPE(RECORD_TYPE_STYLE_TEXTPROP_ATOM, CRecordStyleTextPropAtom)
CREATE_BY_TYPE(RECORD_TYPE_TEXTSPECINFO_ATOM, CRecordTextSpecInfoAtom)
CREATE_BY_TYPE(RECORD_TYPE_BASE_TEXTPROP_ATOM, CRecordMasterTextPropAtom)
CREATE_BY_TYPE(RECORD_TYPE_TXMASTERSTYLE_ATOM, CRecordTextMasterStyleAtom)
CREATE_BY_TYPE(RECORD_TYPE_TXCFSTYLE_ATOM, CRecordTextCFExceptionAtom)
CREATE_BY_TYPE(RECORD_TYPE_TXPFSTYLE_ATOM, CRecordTextPFExceptionAtom)
CREATE_BY_TYPE(RECORD_TYPE_TXSISTYLE_ATOM, CRecordTextSIExceptionAtom)
CREATE_BY_TYPE(RECORD_TYPE_TEXTRULER_ATOM, CRecordTextRulerAtom)
//CREATE_BY_TYPE(RECORD_TYPE_TEXTBOOKMARK_ATOM, CRecordTextBookmarkAtom)
CREATE_BY_TYPE(RECORD_TYPE_TEXTBYTES_ATOM, CRecordTextBytesAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordOutlineTextPropsHeaderExAtom)
CREATE_BY_TYPE(RECORD_TYPE_GUIDE_ATOM, CRecordGuideAtom)
CREATE_BY_TYPE(RECORD_TYPE_FONTENTITY_ATOM, CRecordFontEntityAtom)
//CREATE_BY_TYPE(RECORD_TYPE_FONT_EMBEDDEDDATA, CRecordFontEmbedDataBlob)
//CREATE_BY_TYPE(RECORD_TYPE_METAFILE, CRecordMetafileBlob)
CREATE_BY_TYPE(RECORD_TYPE_CSTRING, CRecordCString)
//CREATE_BY_TYPE(RECORD_TYPE_EXOLEOBJ_ATOM, CRecordExOleObjAtom)
//CREATE_BY_TYPE(RECORD_TYPE_EXEMBEDATOM, CRecordExOleEmbedAtom)
//CREATE_BY_TYPE(RECORD_TYPE_BOOKMARK_ENTITY_ATOM, CRecordBookmarkEntityAtom)
//CREATE_BY_TYPE(RECORD_TYPE_EXLINK_ATOM, CRecordExOleLinkAtom)
//CREATE_BY_TYPE(RECORD_TYPE_SRKINSOKU_ATOM, CRecordKinsokuAtom)
//CREATE_BY_TYPE(RECORD_TYPE_EXHYPERLINK_ATOM, CRecordExHyperlinkAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordSlideNumberMCAtom)
CREATE_BY_TYPE(RECORD_TYPE_HEADERSFOOTERS_ATOM, CRecordHeadersFootersAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordMouseTextInteractiveInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordRecolorInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordAnimationInfoAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordDateTimeMCAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN, CRecordGenericDateMCAtom)
CREATE_BY_TYPE(RECORD_TYPE_EX_VIDEOCONTAINER, CRecordExVideoContainer)
CREATE_BY_TYPE(RECORD_TYPE_EX_OBJREF_ATOM, CRecordExObjRefAtom)
CREATE_BY_TYPE(RECORD_TYPE_EX_MEDIA_ATOM, CRecordExMediaAtom)
//CREATE_BY_TYPE(RECORD_TYPE_EXCONTROL_ATOM, CRecordExControlAtom)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_BSTORE_CONTAINER, CRecordBlipStoreContainer)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_BSE, CRecordBlipStoreEntry)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_DGG, CRecordDrawingGroup)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_DG, CRecordDrawingRecord)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_SPGR, CRecordGroupShape)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_SPGR_CONTAINER, CRecordGroupShapeContainer)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_SP_CONTAINER, CRecordShapeContainer)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_SP, CRecordShape)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_CLIENTANCHOR, CRecordClientAnchor)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_CHILDANCHOR, CRecordChildAnchor)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_OPT, CRecordShapeProperties)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_SECONDARY_OPT, CRecordShapeProperties)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_TETRIARY_OPT, CRecordShapeProperties)
CREATE_BY_TYPE(RECORD_TYPE_ESCHER_REGROUPITEMS, CRecordRegGroupItems)
CREATE_BY_TYPE(RECORD_TYPE_EX_CDAUDIO, CRecordExCDAudioContainer)
CREATE_BY_TYPE(RECORD_TYPE_EX_WAVAUDIOLINK, CRecordWAVAudioLinkContainer)
CREATE_BY_TYPE(RECORD_TYPE_EX_WAVAUDIOEMBEDDED, CRecordWAVAudioEmbeddedContainer)
CREATE_BY_TYPE(RECORD_TYPE_EX_MIDIAUDIO, CRecordExMIDIAudioContainer)
//
CREATE_BY_TYPE(RECORD_TYPE_INTERACTIVEINFO_ATOM, CRecordInteractiveInfoAtom)
CREATE_BY_TYPE(RECORD_TYPE_TXINTERACTIVEINFO_ATOM, CRecordTextInteractiveInfoAtom)
//
CREATE_BY_TYPE ( RECORD_PROG_TAGS, SlideProgTagsContainer )
CREATE_BY_TYPE(RECORD_TYPE_SOUNDCOLLECTION, CRecordSoundCollectionContainer)
CREATE_BY_TYPE(RECORD_TYPE_EXOBJLIST, CRecordExObjListContainer)
CREATE_BY_TYPE(RECORD_TYPE_SOUND, CRecordSoundContainer)
CREATE_BY_TYPE(RECORD_TYPE_SOUNDDATA, CRecordSoundDataBlob)
default: break;
};
if (NULL == pRecord)
{
if (oHeader.IsContainer())
{
pRecord = new CRecordsContainer();
}
else
{
pRecord = new CUnknownRecord();
}
}
return pRecord;
}
This diff is collapsed.
This diff is collapsed.
#pragma once
#include "stdafx.h"
#include "SlidePersist.h"
#include "../Records/TextFullSettings.h"
SSlidePersist::SSlidePersist() : m_arTextAttrs()
{
}
SSlidePersist::SSlidePersist(const SSlidePersist& oSrc)
{
*this = oSrc;
}
CString SSlidePersist::ToString()
{
CString str = _T("");
str.Format(_T("<SlideInfo PsrRef='%d' SlideID='%d' />"), m_nPsrRef, m_nSlideID);
return str;
}
SSlidePersist& SSlidePersist::operator =(const SSlidePersist& oSrc)
{
m_nPsrRef = oSrc.m_nPsrRef;
m_nSlideID = oSrc.m_nSlideID;
m_arTextAttrs.Append(oSrc.m_arTextAttrs);
return (*this);
}
\ No newline at end of file
#pragma once
/**************************************************************
...
**************************************************************/
class CTextFullSettings;
struct SSlidePersist
{
DWORD m_nPsrRef;
DWORD m_nSlideID;
CAtlArray<CTextFullSettings> m_arTextAttrs;
SSlidePersist();
SSlidePersist(const SSlidePersist& oSrc);
CString ToString();
SSlidePersist& operator =(const SSlidePersist& oSrc);
};
\ No newline at end of file
This diff is collapsed.
#pragma once
#include "..\Reader\Records.h"
class CRecordAnimationInfoAtom : public CUnknownRecord
{
// ...
public:
CRecordAnimationInfoAtom()
{
}
~CRecordAnimationInfoAtom()
{
}
virtual void ReadFromStream(SRecordHeader oHeader, IStream* pStream)
{
return CUnknownRecord::ReadFromStream(oHeader, pStream);
}
virtual CString ToString()
{
return CUnknownRecord::ToString();
}
};
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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