Commit 74615c14 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

PPTFormat

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@65642 954022d7-b5bf-4e40-9824-e11837661b57
parent ce29eae0
......@@ -303,6 +303,19 @@ void CPPTUserInfo::FromDocument()
m_oDefaultTextStyle.SetLanguage(m_wLanguage);
}
}
std::vector<CRecordHeadersFootersContainer*> oArrayHeadersFootersInfo;
m_oDocument.GetRecordsByType(&oArrayHeadersFootersInfo, true, false);
for (int j = 0 ; j < oArrayHeadersFootersInfo.size(); j++)
{
std::vector<CRecordCString*> oHeadersFootersInfo;
oArrayHeadersFootersInfo[j]->GetRecordsByType(&oHeadersFootersInfo, true, false);
for (int i = 0 ;i < oHeadersFootersInfo.size(); i++)
{
m_oFootersHeaderString.push_back(oHeadersFootersInfo[i]->m_strText);
}
}
LONG lOriginWidth = oArrayDoc[0]->m_oSlideSize.X;
LONG lOriginHeight = oArrayDoc[0]->m_oSlideSize.Y;
......@@ -465,7 +478,7 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
//????? !!!
pPairTheme = m_mapMasterToTheme.begin();
}
//------------------
//------------------ ( ... )
std::vector<CRecordHeadersFootersAtom*> oArrayHeadersFootersAtoms;
pRecordSlide->GetRecordsByType(&oArrayHeadersFootersAtoms, true, true);
......@@ -493,7 +506,7 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
if (pPairLayoutGeom == pTheme->m_mapGeomToLayout.end())
{
pSlide->m_lLayoutID = AddNewLayout(pTheme, &oArraySlideAtoms[0]->m_oLayout, pRecordSlide->m_oPersist.m_arTextAttrs, headers_footers);
pSlide->m_lLayoutID = AddNewLayout(pTheme, &oArraySlideAtoms[0]->m_oLayout, pRecordSlide->m_oPersist.m_arTextAttrs, headers_footers, true, bMasterObjects);
pLayout = &pTheme->m_arLayouts[pSlide->m_lLayoutID];
pLayout->m_bShowMasterShapes = true;
}
......@@ -636,6 +649,20 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
}
IElement* CPPTUserInfo::AddThemeLayoutElement (CLayout *pLayout, int placeholderType, NSPresentationEditor::CTheme* pTheme)
{
IElement* pElement = NULL;
std::map<int, int>::iterator it = pTheme->m_pPlaceholders.find(placeholderType);
if ((it != pTheme->m_pPlaceholders.end()) && (pLayout->m_pPlaceholders.find(placeholderType) == pLayout->m_pPlaceholders.end()))
{
pElement = pTheme->m_arElements[it->second]->CreateDublicate();
pLayout->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pLayout->m_pPlaceholders.insert(std::pair<int, int>(it->first, pLayout->m_arElements.size()-1));
}
return pElement;
}
IElement* CPPTUserInfo::AddNewLayoutElement (CLayout *pLayout, int placeholderType, int placeholderSizePreset)
{
if (placeholderType < 1) return NULL;
......@@ -661,7 +688,7 @@ IElement* CPPTUserInfo::AddNewLayoutElement (CLayout *pLayout, int placeholderTy
}
int CPPTUserInfo::AddNewLayout(NSPresentationEditor::CTheme* pTheme, SSlideLayoutAtom* layoutRecord, std::vector<CTextFullSettings> & text,
CRecordHeadersFootersAtom* headers_footers, bool addShapes)
CRecordHeadersFootersAtom* headers_footers, bool addShapes, bool bMasterObjects)
{
if (pTheme == NULL) return -1;
......@@ -692,10 +719,10 @@ int CPPTUserInfo::AddNewLayout(NSPresentationEditor::CTheme* pTheme, SSlideLayou
switch (layoutRecord->m_nGeom)
{
case 0x01: // SL_TitleBody
defObjSize = 1; break;
defObjSize = 0; break;
case 0x08: //SL_TwoColumns
case 0x09: //SL_TwoRows
defObjSize = 2; break;
defObjSize = 1; break;
case 0x0A: //SL_ColumnTwoRows
defObjSize = 3; break;
case 0x0B: //SL_TwoRowsColumn
......@@ -703,11 +730,11 @@ int CPPTUserInfo::AddNewLayout(NSPresentationEditor::CTheme* pTheme, SSlideLayou
case 0x0D: //SL_TwoColumnsRow
defObjSize = 3; break;
case 0x0E://SL_FourObjects
defObjSize = 4; break;
defObjSize = 2; break;
case 0x0F: //SL_BigObject
case 0x11: //SL_VerticalTitleBody
case 0x12: //SL_VerticalTwoRows
defObjSize = 1; break;
defObjSize = 0; break;
}
for (int i = 0 ; i < 8; i ++)
......@@ -746,81 +773,48 @@ int CPPTUserInfo::AddNewLayout(NSPresentationEditor::CTheme* pTheme, SSlideLayou
}
}
if (layoutRecord->m_nGeom==0x0F) return ind;
if (headers_footers)
{
std::map<int, int>::iterator it;
if (headers_footers->m_bHasSlideNumber)
{
IElement* pElement = NULL;
it = pLayout->m_pPlaceholders.find(NSOfficePPT::MasterSlideNumber);
if ( it == pLayout->m_pPlaceholders.end())
if (!AddThemeLayoutElement(pLayout, MasterSlideNumber, pTheme))
{
it = pTheme->m_pPlaceholders.find(NSOfficePPT::MasterSlideNumber);
if (it != pTheme->m_pPlaceholders.end())
{
pElement = pTheme->m_arElements[it->second]->CreateDublicate();
pLayout->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pLayout->m_pPlaceholders.insert(std::pair<int, int>(NSOfficePPT::MasterSlideNumber, pLayout->m_arElements.size()-1));
}
else
pElement = AddNewLayoutElement(pLayout, MasterSlideNumber, 4);
AddNewLayoutElement(pLayout, MasterSlideNumber, 2);
}
}
if (headers_footers->m_bHasTodayDate ||
headers_footers->m_bHasUserDate ||
headers_footers->m_bHasDate)
{
IElement* pElement = NULL;
it = pLayout->m_pPlaceholders.find(MasterDate);
if (it == pLayout->m_pPlaceholders.end())
if (!AddThemeLayoutElement(pLayout, MasterDate, pTheme))
{
it = pTheme->m_pPlaceholders.find(NSOfficePPT::MasterDate);
if (it != pTheme->m_pPlaceholders.end())
{
pElement = pTheme->m_arElements[it->second]->CreateDublicate();
pLayout->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pLayout->m_pPlaceholders.insert(std::pair<int, int>(NSOfficePPT::MasterDate, pLayout->m_arElements.size()-1));
}
else
pElement = AddNewLayoutElement(pLayout, MasterDate, 2);
AddNewLayoutElement(pLayout, MasterDate, 2);
}
}
if (headers_footers->m_bHasHeader)
{
IElement* pElement = NULL;
it = pLayout->m_pPlaceholders.find(MasterHeader);
if (it == pLayout->m_pPlaceholders.end())
if (!AddThemeLayoutElement(pLayout, MasterHeader, pTheme))
{
it = pTheme->m_pPlaceholders.find(NSOfficePPT::MasterHeader);
if (it != pTheme->m_pPlaceholders.end())
{
pElement = pTheme->m_arElements[it->second]->CreateDublicate();
pLayout->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pLayout->m_pPlaceholders.insert(std::pair<int, int>(NSOfficePPT::MasterHeader, pLayout->m_arElements.size()-1));
}
else
pElement = AddNewLayoutElement(pLayout, MasterHeader, 2);
AddNewLayoutElement(pLayout, MasterHeader, 2);
}
}
if (headers_footers->m_bHasFooter)
{
IElement* pElement = NULL;
it = pLayout->m_pPlaceholders.find(MasterFooter);
if (it == pLayout->m_pPlaceholders.end())
if (!AddThemeLayoutElement(pLayout, MasterFooter, pTheme))
{
it = pTheme->m_pPlaceholders.find(NSOfficePPT::MasterFooter);
if (it != pTheme->m_pPlaceholders.end())
{
pElement = pTheme->m_arElements[it->second]->CreateDublicate();
pLayout->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pLayout->m_pPlaceholders.insert(std::pair<int, int>(NSOfficePPT::MasterFooter, pLayout->m_arElements.size()-1));
}
else
pElement = AddNewLayoutElement(pLayout, MasterFooter, 4);
AddNewLayoutElement(pLayout, MasterFooter, 2);
}
}
}
else if (bMasterObjects)
{
AddThemeLayoutElement(pLayout, MasterSlideNumber ,pTheme);
AddThemeLayoutElement(pLayout, MasterDate ,pTheme);
AddThemeLayoutElement(pLayout, MasterFooter ,pTheme);
AddThemeLayoutElement(pLayout, MasterHeader ,pTheme);
}
return ind;
}
......@@ -980,6 +974,8 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
else
pMasterWrapper->m_pStyles[3] = m_oDefaultTextStyle;
pTheme->m_oFootersHeaderString = m_oFootersHeaderString;
CTextStyles oPPTDefaultStyle;
CreateDefaultStyle(oPPTDefaultStyle, pTheme);
oPPTDefaultStyle.ApplyAfter(m_oDefaultTextStyle);
......@@ -1165,7 +1161,7 @@ void CPPTUserInfo::LoadNoMainMaster(DWORD dwMasterID, const LONG& lOriginWidth,
CLayout* pLayout = NULL;
int lLayoutID = AddNewLayout(pTheme, &oArraySlideAtoms[0]->m_oLayout, pCurMaster->m_oPersist.m_arTextAttrs, NULL, false);
int lLayoutID = AddNewLayout(pTheme, &oArraySlideAtoms[0]->m_oLayout, pCurMaster->m_oPersist.m_arTextAttrs, NULL, false, false);
pLayout = &pTheme->m_arLayouts[lLayoutID];
pLayout->m_bShowMasterShapes = false;
......
......@@ -42,6 +42,8 @@ public:
std::vector<CFont> m_arrFonts;
NSPresentationEditor::CTextStyles m_oDefaultTextStyle;
std::vector<std::wstring> m_oFootersHeaderString;
// ()
CPPTDocumentInfo* m_pDocumentInfo;
int m_lIndexThisUser;
......@@ -237,6 +239,7 @@ public:
case 0x0E://SL_FourObjects
return _T("fourObj");
case 0x0F: //SL_BigObject
//return _T("tx");
return _T("objOnly");
case 0x10: //SL_Blank
return _T("blank");
......@@ -252,6 +255,8 @@ public:
void AddAudioTransition (DWORD dwSlideID, CTransition* pTransition, const std::wstring& strFilePath);
int AddNewLayout(NSPresentationEditor::CTheme* pTheme, SSlideLayoutAtom* layoutRecord, std::vector<CTextFullSettings> & text,
CRecordHeadersFootersAtom* headers_footers = NULL, bool addShapes = true);
IElement* AddNewLayoutElement (CLayout *pLayout, int placeholderType, int placeholderSizePreset = -1);
CRecordHeadersFootersAtom* headers_footers, bool addShapes, bool bMasterObjects);
IElement* AddNewLayoutElement (CLayout *pLayout, int placeholderType, int placeholderSizePreset = -1);
IElement* AddThemeLayoutElement (CLayout *pLayout, int placeholderType, NSPresentationEditor::CTheme* pTheme);
};
......@@ -95,7 +95,9 @@ typedef BYTE BOOL1;
#define RECORD_TYPE_SRKINSOKU_ATOM 4050
#define RECORD_TYPE_EXHYPERLINK_ATOM 4051
#define RECORD_TYPE_EXHYPERLINK 4055
#define RECORD_TYPE_SLIDE_NUMBERMC_ATOM 4056
#define RECORD_TYPE_SLIDENUMBER_META_ATOM 0x0FD8
#define RECORD_TYPE_HEADERSFOOTERS 4057
#define RECORD_TYPE_HEADERSFOOTERS_ATOM 4058
#define RECORD_TYPE_TXINTERACTIVEINFO_ATOM 4063
......@@ -111,9 +113,12 @@ typedef BYTE BOOL1;
#define RECORD_TYPE_INTERACTIVEINFO_ATOM 4083
#define RECORD_TYPE_USER_EDIT_ATOM 4085
#define RECORD_TYPE_CURRENTUSER_ATOM 4086
#define RECORD_TYPE_DATETIMEMC_ATOM 4087
#define RECORD_TYPE_GENERICDATEMC_ATOM 4088
#define RECORD_TYPE_FOOTERMC_ATOM 4090
#define RECORD_TYPE_DATETIME_META_ATOM 0x0FF7
#define RECORD_TYPE_GENERICDATE_META_ATOM 0x0FF8
#define RECORD_TYPE_HEADER_META_ATOM 0x0FF9
#define RECORD_TYPE_FOOTER_META_ATOM 0x0FFA
#define RECORD_TYPE_EXCONTROL_ATOM 4091
#define RECORD_TYPE_EX_MEDIA_ATOM 4100
#define RECORD_TYPE_EX_VIDEOCONTAINER 4101
......@@ -127,7 +132,7 @@ typedef BYTE BOOL1;
#define RECORD_TYPE_EX_CDAUDIO_ATOM 4114
#define RECORD_TYPE_EXWAVAUDIOEMBEDDED_ATOM 4115
#define RECORD_TYPE_ANIMATIONINFO 4116
#define RECORD_TYPE_RTFDATETIMEMC_ATOM 4117
#define RECORD_TYPE_RTFDATETIME_META_ATOM 0x1015
#define RECORD_TYPE_PROGTAGS 5000
#define RECORD_TYPE_PROGSTRINGTAG 5001
#define RECORD_TYPE_PROGBINARYTAG 5002
......@@ -300,7 +305,7 @@ static CString GetRecordName(DWORD dwType)
case RECORD_TYPE_SRKINSOKU_ATOM : { strName = _T("SrKinsokuAtom"); break; }
case RECORD_TYPE_EXHYPERLINK_ATOM : { strName = _T("ExHyperlinkAtom"); break; }
case RECORD_TYPE_EXHYPERLINK : { strName = _T("ExHyperlink"); break; }
case RECORD_TYPE_SLIDE_NUMBERMC_ATOM : { strName = _T("SlideNumberMcAtom"); break; }
case RECORD_TYPE_SLIDENUMBER_META_ATOM : { strName = _T("SlideNumberMcAtom"); break; }
case RECORD_TYPE_HEADERSFOOTERS : { strName = _T("HeadersFooters"); break; }
case RECORD_TYPE_HEADERSFOOTERS_ATOM : { strName = _T("HeadersFootersAtom"); break; }
case RECORD_TYPE_TXINTERACTIVEINFO_ATOM : { strName = _T("TxInteractiveInfoAtom"); break; }
......@@ -315,9 +320,9 @@ static CString GetRecordName(DWORD dwType)
case RECORD_TYPE_INTERACTIVEINFO_ATOM : { strName = _T("InteractiveInfoAtom"); break; }
case RECORD_TYPE_USER_EDIT_ATOM : { strName = _T("UserEditAtom"); break; }
case RECORD_TYPE_CURRENTUSER_ATOM : { strName = _T("CurrentUserAtom"); break; }
case RECORD_TYPE_DATETIMEMC_ATOM : { strName = _T("DateTimeMCAtom"); break; }
case RECORD_TYPE_GENERICDATEMC_ATOM : { strName = _T("GenericDateMCAtom"); break; }
case RECORD_TYPE_FOOTERMC_ATOM : { strName = _T("FooterMCAtom"); break; }
case RECORD_TYPE_DATETIME_META_ATOM : { strName = _T("DateTimeMCAtom"); break; }
case RECORD_TYPE_GENERICDATE_META_ATOM : { strName = _T("GenericDateMCAtom"); break; }
case RECORD_TYPE_FOOTER_META_ATOM : { strName = _T("FooterMCAtom"); break; }
case RECORD_TYPE_EXCONTROL_ATOM : { strName = _T("ExControlAtom"); break; }
case RECORD_TYPE_EX_MEDIA_ATOM : { strName = _T("ExMediaAtom"); break; }
case RECORD_TYPE_EX_VIDEOCONTAINER : { strName = _T("ExVideoContainer"); break; }
......@@ -332,7 +337,7 @@ static CString GetRecordName(DWORD dwType)
case RECORD_TYPE_EXWAVAUDIOEMBEDDED_ATOM : { strName = _T("ExWavAudioEmbeddedAtom"); break; }
case RECORD_TYPE_ANIMATIONINFO : { strName = _T("AnimationInfo"); break; }
case RECORD_TYPE_ANIMATIONINFO_ATOM : { strName = _T("AnimationInfoAtom"); break; }
case RECORD_TYPE_RTFDATETIMEMC_ATOM : { strName = _T("RtfDateTimeMCAtom"); break; }
case RECORD_TYPE_RTFDATETIME_META_ATOM : { strName = _T("RtfDateTimeMCAtom"); break; }
case RECORD_TYPE_PROGTAGS : { strName = _T("ProgTags"); break; }
case RECORD_TYPE_PROGSTRINGTAG : { strName = _T("ProgStringTag"); break; }
case RECORD_TYPE_PROGBINARYTAG : { strName = _T("ProgBinaryTag"); break; }
......
......@@ -197,34 +197,30 @@ namespace NSStreamReader
for (int i = 0; i < (int)tabStopsCount; ++i)
{
oRun.tabsStops.push_back(StreamUtils::ReadDWORD(pStream) * dScaleX);
WORD tabPos = StreamUtils::ReadWORD(pStream) ;
WORD tabType = StreamUtils::ReadWORD(pStream) ;
if ((tabPos & 0xff00) == 0xff00)
break;
tabType = 0x0000;
oRun.tabsStops.push_back( std::pair<int, int>(tabPos * dScaleX, tabType));
}
}
if (bLeftMargin1_)
oRun.LeftMargin1 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent1_)
oRun.Indent1 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin2_)
oRun.LeftMargin2 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent2_)
oRun.Indent2 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin3_)
oRun.LeftMargin3 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent3_)
oRun.Indent3 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin4_)
oRun.LeftMargin4 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent4_)
oRun.Indent4 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin5_)
oRun.LeftMargin5 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent5_)
oRun.Indent5 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin1_) oRun.LeftMargin1 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent1_) oRun.Indent1 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin2_) oRun.LeftMargin2 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent2_) oRun.Indent2 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin3_) oRun.LeftMargin3 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent3_) oRun.Indent3 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin4_) oRun.LeftMargin4 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent4_) oRun.Indent4 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bLeftMargin5_) oRun.LeftMargin5 = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (bIndent5_) oRun.Indent5 = StreamUtils::ReadSHORT(pStream) * dScaleX;
}
}
......@@ -363,42 +359,31 @@ void CTextPFRun_ppt::LoadFromStream(POLE::Stream* pStream, bool bIsIndentation)
}
}
if (textAlignment_)
m_oRun.textAlignment = StreamUtils::ReadWORD(pStream);
if (lineSpacing_)
m_oRun.lineSpacing = - StreamUtils::ReadSHORT(pStream);
if (spaceBefore_)
m_oRun.spaceBefore = - (LONG)StreamUtils::ReadSHORT(pStream);
if (spaceAfter_)
m_oRun.spaceAfter = - (LONG)StreamUtils::ReadSHORT(pStream);
if (leftMargin_)
m_oRun.leftMargin = (LONG)StreamUtils::ReadSHORT(pStream) * dScaleX;
if (indent_)
m_oRun.indent = (LONG)StreamUtils::ReadSHORT(pStream) * dScaleX;
if (defaultTabSize_)
m_oRun.defaultTabSize = (LONG)StreamUtils::ReadWORD(pStream) * dScaleX;
if (textAlignment_) m_oRun.textAlignment = StreamUtils::ReadWORD(pStream);
if (lineSpacing_) m_oRun.lineSpacing = - StreamUtils::ReadSHORT(pStream);
if (spaceBefore_) m_oRun.spaceBefore = - StreamUtils::ReadSHORT(pStream);
if (spaceAfter_) m_oRun.spaceAfter = - StreamUtils::ReadSHORT(pStream);
if (leftMargin_) m_oRun.leftMargin = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (indent_) m_oRun.indent = StreamUtils::ReadSHORT(pStream) * dScaleX;
if (defaultTabSize_) m_oRun.defaultTabSize = (_INT32)StreamUtils::ReadWORD(pStream) * dScaleX;
if (tabStops_)
{
WORD tabStopsCount = StreamUtils::ReadWORD(pStream);
m_oRun.tabStops.clear();
if (tabStopsCount > 10)
tabStopsCount = 10;
for (int i = 0; i < (int)tabStopsCount; ++i)
{
m_oRun.tabStops.push_back(StreamUtils::ReadDWORD(pStream) * dScaleX );
WORD tabPos = StreamUtils::ReadWORD(pStream);
WORD tabType = StreamUtils::ReadWORD(pStream);
if ((tabPos & 0xff00) == 0xff00)
break;
m_oRun.tabStops.push_back( std::pair<int, int> (tabPos * dScaleX, tabType) );
}
if (0 < m_oRun.tabStops.size())
m_oRun.defaultTabSize = m_oRun.tabStops[0];
//if (0 < m_oRun.tabStops.size())
// m_oRun.defaultTabSize = m_oRun.tabStops[0];
}
if (fontAlign_)
......
......@@ -130,13 +130,22 @@ IRecord* CreateByType(SRecordHeader oHeader)
//CREATE_BY_TYPE(RECORD_TYPE_SRKINSOKU_ATOM , CRecordKinsokuAtom)
CREATE_BY_TYPE(RECORD_TYPE_EXHYPERLINK , CRecordExHyperlinkContainer)
CREATE_BY_TYPE(RECORD_TYPE_EXHYPERLINK_ATOM , CRecordExHyperlinkAtom)
//CREATE_BY_TYPE(RECORD_TYPE_UNKNOWN , CRecordSlideNumberMCAtom)
CREATE_BY_TYPE(RECORD_TYPE_HEADERSFOOTERS , CRecordHeadersFootersContainer)
CREATE_BY_TYPE(RECORD_TYPE_HEADERSFOOTERS_ATOM , CRecordHeadersFootersAtom)
CREATE_BY_TYPE(RECORD_TYPE_SLIDENUMBER_META_ATOM , CRecordSlideNumberMetaAtom)
CREATE_BY_TYPE(RECORD_TYPE_DATETIME_META_ATOM , CRecordDateTimeMetaAtom)
CREATE_BY_TYPE(RECORD_TYPE_HEADER_META_ATOM , CRecordHeaderMetaAtom)
CREATE_BY_TYPE(RECORD_TYPE_FOOTER_META_ATOM , CRecordFooterMetaAtom)
CREATE_BY_TYPE(RECORD_TYPE_GENERICDATE_META_ATOM , CRecordGenericDateMetaAtom)
CREATE_BY_TYPE(RECORD_TYPE_RTFDATETIME_META_ATOM , CRecordRTFDateTimeMetaAtom)
//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)
......@@ -178,11 +187,11 @@ IRecord* CreateByType(SRecordHeader oHeader)
default:
{
//#ifdef _DEBUG
// char str[1024]={};
// sprintf(str, "Unknown record type: %xd\n" , oHeader.RecType);
// std::cout << str;
//#endif
#ifdef _DEBUG
char str[1024]={};
sprintf(str, "Unknown record type: %xd\n" , oHeader.RecType);
std::cout << str;
#endif
}break;
};
......
#pragma once
#include "../Reader/Records.h"
class CRecordDateTimeMCAtom : public CUnknownRecord
{
UINT m_mPosition;
BYTE m_nIndex;
public:
CRecordDateTimeMCAtom()
{
}
~CRecordDateTimeMCAtom()
{
}
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
return CUnknownRecord::ReadFromStream(oHeader, pStream);
}
};
\ No newline at end of file
......@@ -13,6 +13,7 @@
#include "../InteractiveInfoAtom.h"
#include "../TextInteractiveInfoAtom.h"
#include "../MasterTextPropAtom.h"
#include "../HeadersFootersAtom.h"
#include "../../Reader/ClassesAtom.h"
#include "../../Reader/SlideInfo.h"
......@@ -1185,7 +1186,10 @@ public:
pParentShape->m_dTextMarginY = 2.54;
pParentShape->m_dTextMarginBottom = 1.27;
}
}
}
if (bUseFitShapeToText)
pParentShape->m_oText.m_bAutoFit = bFitShapeToText;
}break;
default:
......@@ -1399,6 +1403,8 @@ public:
if (NULL == pElem)
return;
std::wstring strShapeText;
{
CExFilesInfo::ExFilesType exType = CExFilesInfo::eftNone;
CExFilesInfo * pTextureInfo = pMapIDs->Lock(0xFFFFFFFF, exType);
......@@ -1421,21 +1427,26 @@ public:
}
}
pElem->m_lID = oArrayShape[0]->m_nID;
//------------------------------------------------------------------------------------------------
// placeholder
std::vector<CRecordPlaceHolderAtom*> oArrayPlaceHolder;
GetRecordsByType(&oArrayPlaceHolder, true, true);
if (0 < oArrayPlaceHolder.size())
{
pElem->m_bLine = false; //
pElem->m_lPlaceholderID = (int)(oArrayPlaceHolder[0]->m_nPosition);
pElem->m_lPlaceholderType = (int)(oArrayPlaceHolder[0]->m_nPlacementID);
pElem->m_bLine = false; //
pElem->m_lPlaceholderID = oArrayPlaceHolder[0]->m_nPosition;
pElem->m_lPlaceholderType = oArrayPlaceHolder[0]->m_nPlacementID;
pElem->m_lPlaceholderSizePreset = oArrayPlaceHolder[0]->m_nSize;
if (pElementLayout)
pElementLayout->m_lPlaceholderSizePreset = oArrayPlaceHolder[0]->m_nSize;
CorrectPlaceholderType(pElem->m_lPlaceholderType);
}
std::vector<CRecordRoundTripHFPlaceholder12Atom*> oArrayHFPlaceholder;
this->GetRecordsByType(&oArrayHFPlaceholder, true, true);
GetRecordsByType(&oArrayHFPlaceholder, true, true);
if (0 < oArrayHFPlaceholder.size())
{
pElem->m_lPlaceholderType = oArrayHFPlaceholder[0]->m_nPlacementID;//PT_MasterDate, PT_MasterSlideNumber, PT_MasterFooter, or PT_MasterHeader
......@@ -1443,6 +1454,32 @@ public:
CorrectPlaceholderType(pElem->m_lPlaceholderType);
}
if (pElem->m_lPlaceholderType > 0) // meta
{
std::vector<CRecordFooterMetaAtom*> oArrayFooterMeta;
GetRecordsByType(&oArrayFooterMeta, true, true);
if (0 < oArrayFooterMeta.size())
{
pElem->m_lPlaceholderType = PT_MasterFooter;
DWORD posText = oArrayFooterMeta[0]->m_nPosition;
if (posText < pTheme->m_oFootersHeaderString.size())
strShapeText = pTheme->m_oFootersHeaderString[posText];
}
std::vector<CRecordSlideNumberMetaAtom*> oArraySlideNumberMeta;
GetRecordsByType(&oArraySlideNumberMeta, true, true);
if (0 < oArraySlideNumberMeta.size())
{
pElem->m_lPlaceholderType = PT_MasterSlideNumber;
DWORD posText = oArraySlideNumberMeta[0]->m_nPosition;
if (posText < pTheme->m_oFootersHeaderString.size())
strShapeText = pTheme->m_oFootersHeaderString[posText];
}
}
//----------------------------------------------------------------------------------------------
std::vector<CRecordClientAnchor*> oArrayAnchor;
this->GetRecordsByType(&oArrayAnchor, true, true);
......@@ -1551,21 +1588,23 @@ public:
oElementInfo.m_lPersistIndex = oArrayTextRefs[0]->m_nIndex;
}
std::wstring strText;
// ...
std::vector<CRecordTextBytesAtom*> oArrayTextBytes;
GetRecordsByType(&oArrayTextBytes, true, true);
if (0 < oArrayTextBytes.size())
if (0 < oArrayTextBytes.size() && strShapeText.empty())
{
strText = oArrayTextBytes[0]->m_strText;
strShapeText = oArrayTextBytes[0]->m_strText;
if (pElem->m_lPlaceholderType == PT_MasterSlideNumber && strShapeText.length() > 5)
pElem->m_lPlaceholderType = PT_MasterFooter; ///???? 1-(33).ppt
}
std::vector<CRecordTextCharsAtom*> oArrayTextChars;
GetRecordsByType(&oArrayTextChars, true, true);
if (0 < oArrayTextChars.size())
if (0 < oArrayTextChars.size() && strShapeText.empty())
{
strText = oArrayTextChars[0]->m_strText;
strShapeText = oArrayTextChars[0]->m_strText;
}
// ...
......@@ -1654,7 +1693,7 @@ public:
pSlideWrapper->m_mapElements.insert(std::pair<LONG, CElementInfo>(pShapeElem->m_lID, oElementInfo));
SetUpTextStyle(strText, pTheme, pLayout, pElem, pThemeWrapper, pSlideWrapper, pSlide, master_level);
SetUpTextStyle(strShapeText, pTheme, pLayout, pElem, pThemeWrapper, pSlideWrapper, pSlide, master_level);
//------------------------------------------------------------------------------------
......
#pragma once
#include "../Reader/Records.h"
class CRecordGenericDateMCAtom : public CUnknownRecord
{
UINT m_nPosition;
public:
CRecordGenericDateMCAtom()
{
}
~CRecordGenericDateMCAtom()
{
}
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
return CUnknownRecord::ReadFromStream(oHeader, pStream);
}
};
\ No newline at end of file
#pragma once
#include "../Reader/Records.h"
class CRecordHeadersFootersContainer : public CRecordsContainer
{
};
class CRecordHeadersFootersAtom : public CUnknownRecord
{
public:
......@@ -69,3 +73,70 @@ public:
}
};
class CRecordMetaCharacterAtom : public CUnknownRecord
{
public:
DWORD m_nPosition;
CRecordMetaCharacterAtom()
{
m_nPosition = -1;
}
~CRecordMetaCharacterAtom()
{
}
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
m_oHeader = oHeader;
m_nPosition = StreamUtils::ReadDWORD(pStream);
}
};
class CRecordRTFDateTimeMetaAtom : public CRecordMetaCharacterAtom
{
public:
std::string m_strFormat;
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
CRecordMetaCharacterAtom::ReadFromStream(oHeader, pStream);
m_strFormat = StreamUtils::ReadStringA(pStream, 128);
}
};
class CRecordDateTimeMetaAtom : public CRecordMetaCharacterAtom
{
public:
BYTE m_FormatID;
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
CRecordMetaCharacterAtom::ReadFromStream(oHeader, pStream);
m_FormatID = StreamUtils::ReadBYTE(pStream);
}
};
class CRecordGenericDateMetaAtom : public CRecordMetaCharacterAtom
{
};
class CRecordFooterMetaAtom : public CRecordMetaCharacterAtom
{
};
class CRecordHeaderMetaAtom : public CRecordMetaCharacterAtom
{
};
class CRecordSlideNumberMetaAtom : public CRecordMetaCharacterAtom
{
};
\ No newline at end of file
......@@ -29,7 +29,6 @@
#include "BookmarkSeedAtom.h"
#include "CString.h"
#include "ColorSchemeAtom.h"
#include "DateTimeMCAtom.h"
#include "DocRoutingSlipAtom.h"
#include "DocumentAtom.h"
#include "ExControlAtom.h"
......@@ -43,7 +42,6 @@
#include "ExOleLinkAtom.h"
#include "ExOleObjAtom.h"
#include "FontEntityAtom.h"
#include "GenericDateMCAtom.h"
#include "GridSpacing10Atom.h"
#include "GuideAtom.h"
#include "HeadersFootersAtom.h"
......@@ -62,7 +60,6 @@
#include "RoundTripColorMappingAtom.h"
#include "RoundTripNewPlaceholderId12Atom.h"
#include "RoundTripThemeAtom.h"
#include "SlideNumberMCAtom.h"
#include "TextRulerAtom.h"
#include "ShapeFlags10Atom.h"
#include "ShapeFlagsAtom.h"
......
#pragma once
#include "../Reader/Records.h"
class CRecordSlideNumberMCAtom : public CUnknownRecord
{
UINT m_nPosition;
public:
CRecordSlideNumberMCAtom()
{
}
~CRecordSlideNumberMCAtom()
{
}
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
return CUnknownRecord::ReadFromStream(oHeader, pStream);
}
};
\ No newline at end of file
......@@ -24,6 +24,7 @@ public:
m_oPFRun.LoadFromStream(pStream, false);
// ...
int current_pos = pStream->tell();
StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream);
}
......
......@@ -254,8 +254,8 @@ namespace NSPresentationEditor
{
pPar->tabStops = m_oRuler.tabsStops;
if (pPar->defaultTabSize.is_init() == false)
pPar->defaultTabSize = m_oRuler.tabsStops[0];
//if (pPar->defaultTabSize.is_init() == false)
// pPar->defaultTabSize = m_oRuler.tabsStops[0];
}
if (m_oRuler.DefaultTabSize.is_init())
......
......@@ -30,11 +30,12 @@ namespace NSPresentationEditor
CTextAttributes m_oAttributes;
std::vector<CParagraph> m_arParagraphs;
// ( )
bool m_bVertical;
bool m_bAutoFit;
int m_lWrapMode; // 0 - square, default; 1 - none wrap
// .
CTextRuler m_oRuler;
......@@ -68,6 +69,7 @@ namespace NSPresentationEditor
m_oBounds.bottom = 50;
m_bVertical = false;
m_bAutoFit = false;
m_lWrapMode = 0;
m_lTextMasterType = -1;
......@@ -86,6 +88,7 @@ namespace NSPresentationEditor
m_oAttributes = oSrc.m_oAttributes;
m_bVertical = oSrc.m_bVertical;
m_lWrapMode = oSrc.m_lWrapMode;
m_bAutoFit = oSrc.m_bAutoFit;
m_arParagraphs.insert(m_arParagraphs.end(), oSrc.m_arParagraphs.begin(), oSrc.m_arParagraphs.end());
m_oRuler = oSrc.m_oRuler;
......
......@@ -259,7 +259,7 @@ namespace NSPresentationEditor
NSCommon::nullable_base<LONG> indent;
NSCommon::nullable_base<LONG> defaultTabSize;
std::vector<DWORD> tabStops;
std::vector<std::pair<int, int>> tabStops;
bool bIsOneLine;
......@@ -366,10 +366,7 @@ namespace NSPresentationEditor
if (oSrc.textDirection.is_init()) textDirection = oSrc.textDirection;
if (oSrc.wrapFlags.is_init()) wrapFlags = oSrc.wrapFlags;
if (0 != oSrc.tabStops.size())
{
tabStops.insert(tabStops.begin(), oSrc.tabStops.begin(), oSrc.tabStops.end());
}
if (!oSrc.tabStops.empty()) tabStops = oSrc.tabStops;
}
CString ToString(LONG lCount)
......@@ -384,7 +381,9 @@ namespace NSPresentationEditor
public:
NSCommon::nullable_base<LONG> DefaultTabSize;
NSCommon::nullable_base<SHORT> CLevels;
NSCommon::nullable_base<SHORT> TabStops;
std::vector<std::pair<int,int>> tabsStops;
NSCommon::nullable_base<LONG> LeftMargin1;
NSCommon::nullable_base<LONG> LeftMargin2;
......@@ -398,7 +397,6 @@ namespace NSPresentationEditor
NSCommon::nullable_base<LONG> Indent4;
NSCommon::nullable_base<LONG> Indent5;
std::vector<DWORD> tabsStops;
public:
CTextRuler() : DefaultTabSize(), CLevels(), TabStops(),
......@@ -442,7 +440,7 @@ namespace NSPresentationEditor
void ApplyBefore(const CTextRuler& oSrc)
{
if (!DefaultTabSize.is_init()) DefaultTabSize = oSrc.DefaultTabSize;
if (!CLevels.is_init()) CLevels = oSrc.CLevels;
if (!CLevels.is_init()) CLevels = oSrc.CLevels;
if (!LeftMargin1.is_init()) LeftMargin1 = oSrc.LeftMargin1;
if (!LeftMargin2.is_init()) LeftMargin2 = oSrc.LeftMargin2;
......@@ -456,7 +454,7 @@ namespace NSPresentationEditor
if (!Indent4.is_init()) Indent4 = oSrc.Indent4;
if (!Indent5.is_init()) Indent5 = oSrc.Indent5;
tabsStops.insert(tabsStops.end(), oSrc.tabsStops.begin(), oSrc.tabsStops.end());
if (!tabsStops.empty()) tabsStops = oSrc.tabsStops;
}
CString ToString()
......
......@@ -41,6 +41,9 @@ namespace NSPresentationEditor
bool m_bHasSlideNumber;
bool m_bHasHeader;
bool m_bHasFooter;
std::vector<std::wstring> m_oFootersHeaderString;
//------------------------------------------------------------------------------------
CTheme() : m_arColorScheme(), m_arFonts(), m_arBrushes(),
m_arPens(), m_arEffects(), m_arLayouts()
......
......@@ -63,9 +63,13 @@ void CStylesWriter::ConvertStyleLevel(NSPresentationEditor::CTextStyleLevel& oLe
oWriter.WriteString(std::wstring(L"<a:tabLst>"));
for (int t = 0 ; t < pPF->tabStops.size(); t++)
{
CString strTab;
strTab.Format(L"<a:tab pos=\"%d\" algn=\"l\"/>", pPF->tabStops[t]) ;
oWriter.WriteString(strTab);
CString strTabPos; strTabPos.Format(L"%d", pPF->tabStops[t].first) ;
oWriter.WriteString(std::wstring(L"<a:tab pos=\"") + string2std_string(strTabPos) + _T("\""));
if (pPF->tabStops[t].second == 1) oWriter.WriteString(std::wstring(L" algn=\"ctr\"/>"));
else if (pPF->tabStops[t].second == 2) oWriter.WriteString(std::wstring(L" algn=\"r\"/>"));
else if (pPF->tabStops[t].second == 3) oWriter.WriteString(std::wstring(L" algn=\"dec\"/>"));
else oWriter.WriteString(std::wstring(L" algn=\"l\"/>"));
}
oWriter.WriteString(std::wstring(L"</a:tabLst>"));
}
......@@ -612,9 +616,9 @@ void NSPresentationEditor::CShapeWriter::WriteShapeInfo()
if (m_pShapeElement->m_lPlaceholderSizePreset > 1 && !isTitlePlaceholder(m_pShapeElement->m_lPlaceholderType))
{
if (m_pShapeElement->m_lPlaceholderSizePreset == 2)
if (m_pShapeElement->m_lPlaceholderSizePreset == 1)
m_oWriter.WriteString(std::wstring(L" size=\"half\""));
if (m_pShapeElement->m_lPlaceholderSizePreset == 4)
if (m_pShapeElement->m_lPlaceholderSizePreset == 2)
m_oWriter.WriteString(std::wstring(L" size=\"quarter\""));
if (m_pShapeElement->m_lPlaceholderSizePreset == 3)
{
......@@ -705,6 +709,10 @@ void NSPresentationEditor::CShapeWriter::WriteTextInfo()
m_oWriter.WriteString(std::wstring(L"</a:avLst>"));
m_oWriter.WriteString(std::wstring(L"</a:prstTxWarp>"));
}
if (m_pShapeElement->m_oShape.m_oText.m_bAutoFit)
{
m_oWriter.WriteString(std::wstring(L"<a:spAutoFit/>"));
}
m_oWriter.WriteString(std::wstring(L"</a:bodyPr>"));
if (0 == nCount)
......
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