Commit 8e862127 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

PPTFormat

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@65667 954022d7-b5bf-4e40-9824-e11837661b57
parent 27aac365
......@@ -311,25 +311,17 @@ void CPPTUserInfo::FromDocument()
if (0 != oArrayHeadersFootersInfo.size())
{
std::vector<CRecordHeadersFootersAtom*> oHeadersFootersInfo;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersInfo, true, false);
if (!oHeadersFootersInfo.empty())
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom)
{
m_bHasDate = oHeadersFootersInfo[0]->m_bHasDate || oHeadersFootersInfo[0]->m_bHasTodayDate || oHeadersFootersInfo[0]->m_bHasUserDate;
m_bHasFooter = oHeadersFootersInfo[0]->m_bHasFooter;
m_bHasSlideNumber = oHeadersFootersInfo[0]->m_bHasSlideNumber;
if (oHeadersFootersInfo[0]->m_bHasUserDate) m_nFormatDate = 2;
}
m_bHasDate = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasTodayDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate;
m_bHasFooter = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasFooter;
m_bHasSlideNumber = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasSlideNumber;
std::vector<CRecordCString*> oHeadersFootersStr;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersStr, true, false);
for (int i = 0 ;i < oHeadersFootersStr.size(); i++)
{
m_oFootersHeaderString.push_back(oHeadersFootersStr[i]->m_strText);
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate) m_nFormatDate = 2;
}
for (int i = 0 ; i < 3; i++) m_PlaceholdersReplaceString[i] = oArrayHeadersFootersInfo[0]->m_HeadersFootersString[i];
}
LONG lOriginWidth = oArrayDoc[0]->m_oSlideSize.X;
......@@ -568,39 +560,33 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
}
}
//------------------------------------------------------------------------------------
pSlide->m_bHasDate = pLayout->m_bHasDate;
pSlide->m_bHasFooter = pLayout->m_bHasFooter;
pSlide->m_bHasSlideNumber = pLayout->m_bHasSlideNumber;
pSlide->m_nFormatDate = m_nFormatDate;
std::vector<std::wstring> users_placeholders = m_oFootersHeaderString;
//------------------------------------------------------------------------------------
std::vector<std::wstring> users_placeholders[3];
std::vector<CRecordHeadersFootersContainer*> oArrayHeadersFootersInfo;
pRecordSlide->GetRecordsByType(&oArrayHeadersFootersInfo, false, true);
pRecordSlide->GetRecordsByType(&oArrayHeadersFootersInfo, true, false);
if (0 != oArrayHeadersFootersInfo.size())
{
std::vector<CRecordHeadersFootersAtom*> oHeadersFootersInfo;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersInfo, true, false);
if (!oHeadersFootersInfo.empty())
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom)
{
pSlide->m_bHasDate = oHeadersFootersInfo[0]->m_bHasDate || oHeadersFootersInfo[0]->m_bHasTodayDate || oHeadersFootersInfo[0]->m_bHasUserDate;
pSlide->m_bHasFooter = oHeadersFootersInfo[0]->m_bHasFooter;
pSlide->m_bHasSlideNumber = oHeadersFootersInfo[0]->m_bHasSlideNumber;
pSlide->m_bHasDate = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasTodayDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate;
pSlide->m_bHasFooter = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasFooter;
pSlide->m_bHasSlideNumber = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasSlideNumber;
if (oHeadersFootersInfo[0]->m_bHasUserDate) pSlide->m_nFormatDate = 2;
else pSlide->m_nFormatDate = 1;
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate) pSlide->m_nFormatDate = 2;
}
for (int i = 0 ; i < 3; i++) users_placeholders[i] = oArrayHeadersFootersInfo[0]->m_HeadersFootersString[i];
}
else
{
pSlide->m_bHasDate = pLayout->m_bHasDate;
pSlide->m_bHasFooter = pLayout->m_bHasFooter;
pSlide->m_bHasSlideNumber = pLayout->m_bHasSlideNumber;
pSlide->m_nFormatDate = m_nFormatDate;
std::vector<CRecordCString*> oHeadersFootersStr;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersStr, true, false);
if (!oHeadersFootersStr.empty()) users_placeholders.clear();
for (int i = 0 ;i < oHeadersFootersStr.size(); i++)
{
users_placeholders.push_back(oHeadersFootersStr[i]->m_strText);
}
for (int i = 0 ; i < 3; i++) users_placeholders[i] = m_PlaceholdersReplaceString[i];
}
//-------------------------------------------------------------------------------------------------------
std::vector<CRecordCString*> oArrayStrings;
......@@ -621,8 +607,6 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
pSlide->m_bShowMasterShapes = bMasterObjects;
pSlide->m_bIsBackground = false;
std::map<int,int> slidePlaceholders;
for (int nShape = 0; nShape < oArrayShapes.size(); ++nShape)
{
IElement* pElem = NULL;
......@@ -652,74 +636,126 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
{
pSlide->m_arElements.push_back(pElem);
}
if (pElem->m_lPlaceholderType > 0 )
if (pElem->m_lPlaceholderType >= 0 )
{
if (pElem->m_lPlaceholderUserStr >= 0 && pElem->m_lPlaceholderUserStr < users_placeholders.size())
{
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElem);
if (NULL != pShape)
pShape->SetUpText(users_placeholders[pElem->m_lPlaceholderUserStr]);
}
slidePlaceholders.insert(std::pair<int,int>(pElem->m_lPlaceholderType, pSlide->m_arElements.size() - 1) );
pSlide->m_mapPlaceholders.insert(std::pair<int,int>(pElem->m_lPlaceholderType, pSlide->m_arElements.size() - 1) );
}
}
}
//-------------
std::map<int, int>::iterator it;
AddLayoutSlidePlaceholder(pSlide, MasterSlideNumber , pLayout);
AddLayoutSlidePlaceholder(pSlide, MasterDate , pLayout);
//-------------
std::multimap<int, int>::iterator it;
IElement* pElement = NULL;
if (pSlide->m_bHasSlideNumber)
{
it = pLayout->m_mapPlaceholders.find(NSOfficePPT::MasterSlideNumber);
if ( it != pLayout->m_mapPlaceholders.end() &&
slidePlaceholders.find(NSOfficePPT::MasterSlideNumber) == slidePlaceholders.end())
{
pElement = pLayout->m_arElements[it->second]->CreateDublicate();
pSlide->m_arElements.push_back(pElement);
}
AddLayoutSlidePlaceholder(pSlide, MasterSlideNumber, pLayout, true);
}
if (pSlide->m_bHasDate)
{
it = pLayout->m_mapPlaceholders.find(MasterDate);
if ( it != pLayout->m_mapPlaceholders.end() &&
slidePlaceholders.find(NSOfficePPT::MasterDate) == slidePlaceholders.end())
{
pElement = pLayout->m_arElements[it->second]->CreateDublicate();
pSlide->m_arElements.push_back(pElement);
}
else
IElement *pElement = AddLayoutSlidePlaceholder(pSlide, MasterDate, pLayout, true);
if (pElement)
{
it = slidePlaceholders.find(NSOfficePPT::MasterDate);
pElement = pSlide->m_arElements[it->second];
pElement->m_nFormatDate = pSlide->m_nFormatDate;
if ( pElement->m_lPlaceholderUserStr >= 0)
{
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElement);
if (NULL != pShape)
{
if (pElement->m_lPlaceholderUserStr < users_placeholders[0].size())
{
pShape->SetUpTextPlaceholder(users_placeholders[0][pElement->m_lPlaceholderUserStr]);
}
else pShape->SetUpTextPlaceholder(L"");
}
}
}
pElement->m_nFormatDate = pSlide->m_nFormatDate;
}
if (pSlide->m_bHasFooter)
{
it = pLayout->m_mapPlaceholders.find(MasterFooter);
if ( it != pLayout->m_mapPlaceholders.end() &&
slidePlaceholders.find(NSOfficePPT::MasterFooter) == slidePlaceholders.end())
IElement *pElement = AddLayoutSlidePlaceholder(pSlide, MasterFooter, pLayout, true);
if ((pElement) && (pElement->m_lPlaceholderUserStr >= 0))
{
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElement);
if (NULL != pShape)
{
if (pElement->m_lPlaceholderUserStr < users_placeholders[2].size())
{
pShape->SetUpTextPlaceholder(users_placeholders[2][pElement->m_lPlaceholderUserStr]);
}
else pShape->SetUpTextPlaceholder(L"");
}
}
}
}
IElement* CPPTUserInfo::AddLayoutSlidePlaceholder (CSlide *pSlide, int placeholderType, CLayout *pLayout, bool idx_only)
{
IElement* pElement = NULL;
for (std::multimap<int, int>::iterator it = pLayout->m_mapPlaceholders.begin(); it != pLayout->m_mapPlaceholders.end(); it++)
{
if (it->first == placeholderType )
{
pElement = pLayout->m_arElements[it->second]->CreateDublicate();
pSlide->m_arElements.push_back(pElement);
if (idx_only == false)
{
if (pLayout->m_arElements[it->second]->m_lPlaceholderID >= 0 ) continue;
pElement = pLayout->m_arElements[it->second]->CreateDublicate();
pSlide->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pSlide->m_mapPlaceholders.insert(std::pair<int, int>(placeholderType, pSlide->m_arElements.size()-1));
}
else
{
if (pLayout->m_arElements[it->second]->m_lPlaceholderID < 0 ) continue;
for (std::multimap<int, int>::iterator it1 = pSlide->m_mapPlaceholders.begin(); it1 != pSlide->m_mapPlaceholders.end(); it1++)
{
if (it1->first == placeholderType && pSlide->m_arElements[it1->second]->m_lPlaceholderID >= 0)
{
pElement = pSlide->m_arElements[it1->second];
break;
}
}
if (pElement == NULL)
{
pElement = pLayout->m_arElements[it->second]->CreateDublicate();
pSlide->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pSlide->m_mapPlaceholders.insert(std::pair<int, int>(placeholderType, pSlide->m_arElements.size()-1));
}
}
}
}
return pElement;
}
IElement* CPPTUserInfo::AddThemeLayoutPlaceholder (CLayout *pLayout, int placeholderType, NSPresentationEditor::CTheme* pTheme)
IElement* CPPTUserInfo::AddThemeLayoutPlaceholder (CLayout *pLayout, int placeholderType, CTheme* pTheme)
{
IElement* pElement = NULL;
std::map<int, int>::iterator it = pTheme->m_mapPlaceholders.find(placeholderType);
if ((it != pTheme->m_mapPlaceholders.end()) && (pLayout->m_mapPlaceholders.find(placeholderType) == pLayout->m_mapPlaceholders.end()))
for (std::multimap<int, int>::iterator it = pTheme->m_mapPlaceholders.begin(); it != pTheme->m_mapPlaceholders.end(); it++)
{
pElement = pTheme->m_arElements[it->second]->CreateDublicate();
pLayout->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pLayout->m_mapPlaceholders.insert(std::pair<int, int>(it->first, pLayout->m_arElements.size()-1));
if (it->first == placeholderType )
{
pElement = pTheme->m_arElements[it->second]->CreateDublicate();
pLayout->m_arElements.push_back(dynamic_cast<IElement*>(pElement));
pLayout->m_mapPlaceholders.insert(std::pair<int, int>(placeholderType, pLayout->m_arElements.size()-1));
}
}
return pElement;
return pElement; //last added
}
IElement* CPPTUserInfo::AddNewLayoutPlaceholder (CLayout *pLayout, int placeholderType, int placeholderSizePreset)
......@@ -841,19 +877,9 @@ int CPPTUserInfo::AddNewLayout(CTheme* pTheme, CRecordSlide* pRecordSlide, bool
pLayout->m_bHasSlideNumber = pTheme->m_bHasSlideNumber;
pLayout->m_nFormatDate = pTheme->m_nFormatDate;
if (pLayout->m_bHasSlideNumber)
{
AddThemeLayoutPlaceholder(pLayout, MasterSlideNumber, pTheme);
}
if (pLayout->m_bHasDate)
{
AddThemeLayoutPlaceholder(pLayout, MasterDate, pTheme);
}
if (pLayout->m_bHasFooter)
{
AddThemeLayoutPlaceholder(pLayout, MasterFooter, pTheme);
}
AddThemeLayoutPlaceholder(pLayout, MasterSlideNumber, pTheme);
AddThemeLayoutPlaceholder(pLayout, MasterDate, pTheme);
AddThemeLayoutPlaceholder(pLayout, MasterFooter, pTheme);
return ind;
}
......@@ -946,40 +972,22 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
pTheme->m_lOriginalWidth = lOriginWidth;
pTheme->m_lOriginalHeight = lOriginHeight;
pTheme->m_bHasDate = m_bHasDate;
pTheme->m_bHasFooter = m_bHasFooter;
pTheme->m_bHasSlideNumber = m_bHasSlideNumber;
pTheme->m_nFormatDate = m_nFormatDate;
std::vector<std::wstring> users_placeholders = m_oFootersHeaderString;
std::vector<CRecordHeadersFootersContainer*> oArrayHeadersFootersInfo;
pMaster->GetRecordsByType(&oArrayHeadersFootersInfo, false, true);
pMaster->GetRecordsByType(&oArrayHeadersFootersInfo, true, false);
if (0 != oArrayHeadersFootersInfo.size())
{
std::vector<CRecordHeadersFootersAtom*> oHeadersFootersInfo;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersInfo, true, false);
if (!oHeadersFootersInfo.empty())
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom)
{
pTheme->m_bHasDate = oHeadersFootersInfo[0]->m_bHasDate || oHeadersFootersInfo[0]->m_bHasTodayDate || oHeadersFootersInfo[0]->m_bHasUserDate;
pTheme->m_bHasFooter = oHeadersFootersInfo[0]->m_bHasFooter;
pTheme->m_bHasSlideNumber = oHeadersFootersInfo[0]->m_bHasSlideNumber;
pTheme->m_bHasDate = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasTodayDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate;
pTheme->m_bHasFooter = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasFooter;
pTheme->m_bHasSlideNumber = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasSlideNumber;
if (oHeadersFootersInfo[0]->m_bHasUserDate )
m_nFormatDate = 2;
else m_nFormatDate = 1;
}
std::vector<CRecordCString*> oHeadersFootersStr;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersStr, true, false);
if (!oHeadersFootersStr.empty()) users_placeholders.clear();
for (int i = 0 ;i < oHeadersFootersStr.size(); i++)
{
users_placeholders.push_back(oHeadersFootersStr[i]->m_strText);
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate ) pTheme->m_nFormatDate = 2;
}
for(int i = 0 ; i< 3; i++) pTheme->m_PlaceholdersReplaceString[i] = oArrayHeadersFootersInfo[0]->m_HeadersFootersString[i];
}
std::vector<CRecordCString*> oArrayStrings;
pMaster->GetRecordsByType(&oArrayStrings, false, false);
......@@ -1070,8 +1078,6 @@ 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);
......@@ -1125,12 +1131,12 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
if ( pElem->m_lPlaceholderType >0)
{
if (pElem->m_lPlaceholderUserStr >= 0 && pElem->m_lPlaceholderUserStr < users_placeholders.size())
if (pElem->m_lPlaceholderID >=0)
{
CShapeElement* pShape = dynamic_cast<CShapeElement*>(pElem);
if (NULL != pShape)
pShape->SetUpText(users_placeholders[pElem->m_lPlaceholderUserStr]);
}
if (pElem->m_lPlaceholderType == MasterSlideNumber) pTheme->m_bHasSlideNumber = true;
if (pElem->m_lPlaceholderType == MasterDate) pTheme->m_bHasDate = true;
if (pElem->m_lPlaceholderType == MasterFooter) pTheme->m_bHasFooter = true;
}
pTheme->m_mapPlaceholders.insert(std::pair<int, int>(pElem->m_lPlaceholderType, pTheme->m_arElements.size()-1));
}
}
......@@ -1138,24 +1144,30 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
if (pTheme->m_bHasSlideNumber)
{
IElement *pElem = NULL;
if (pTheme->m_mapPlaceholders.find(MasterSlideNumber) == pTheme->m_mapPlaceholders.end())
{
AddNewThemePlaceholder(pTheme, MasterSlideNumber, 2);
pElem = AddNewThemePlaceholder(pTheme, MasterSlideNumber, 2);
}
}
if (pTheme->m_bHasDate && pTheme->m_nFormatDate == 1)
if (pTheme->m_bHasDate)
{
if (pTheme->m_mapPlaceholders.find(MasterDate) == pTheme->m_mapPlaceholders.end())
IElement *pElem = NULL;
if (pTheme->m_mapPlaceholders.find(MasterDate) == pTheme->m_mapPlaceholders.end() && pTheme->m_nFormatDate == 1)
{
AddNewThemePlaceholder(pTheme, MasterDate, 2);
pElem = AddNewThemePlaceholder(pTheme, MasterDate, 2);
}
}
if (pTheme->m_bHasFooter)
{
IElement *pElem = NULL;
if (pTheme->m_mapPlaceholders.find(MasterFooter) == pTheme->m_mapPlaceholders.end())
{
AddNewThemePlaceholder(pTheme, MasterFooter, 1);
pElem = AddNewThemePlaceholder(pTheme, MasterFooter, 1);
}
}
}
......@@ -1296,28 +1308,19 @@ void CPPTUserInfo::LoadNoMainMaster(DWORD dwMasterID, const LONG& lOriginWidth,
}
}
std::vector<CRecordHeadersFootersContainer*> oArrayHeadersFootersInfo;
pCurMaster->GetRecordsByType(&oArrayHeadersFootersInfo, false, true);
pCurMaster->GetRecordsByType(&oArrayHeadersFootersInfo, true, false);
if (0 != oArrayHeadersFootersInfo.size())
{
std::vector<CRecordHeadersFootersAtom*> oHeadersFootersInfo;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersInfo, true, false);
if (!oHeadersFootersInfo.empty())
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom)
{
pLayout->m_bHasDate = oHeadersFootersInfo[0]->m_bHasDate || oHeadersFootersInfo[0]->m_bHasTodayDate || oHeadersFootersInfo[0]->m_bHasUserDate;
pLayout->m_bHasFooter = oHeadersFootersInfo[0]->m_bHasFooter;
pLayout->m_bHasSlideNumber = oHeadersFootersInfo[0]->m_bHasSlideNumber;
pLayout->m_bHasDate = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasTodayDate ||
oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate;
pLayout->m_bHasFooter = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasFooter;
pLayout->m_bHasSlideNumber = oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasSlideNumber;
if (oHeadersFootersInfo[0]->m_bHasUserDate) pLayout->m_nFormatDate = 2;
}
std::vector<CRecordCString*> oHeadersFootersStr;
oArrayHeadersFootersInfo[0]->GetRecordsByType(&oHeadersFootersStr, true, false);
for (int i = 0 ;i < oHeadersFootersStr.size(); i++)
{
m_oFootersHeaderString.push_back(oHeadersFootersStr[i]->m_strText);
if (oArrayHeadersFootersInfo[0]->m_oHeadersFootersAtom->m_bHasUserDate) pLayout->m_nFormatDate = 2;
}
}
......@@ -1363,7 +1366,15 @@ void CPPTUserInfo::LoadNoMainMaster(DWORD dwMasterID, const LONG& lOriginWidth,
pLayout->m_arElements.push_back(pElem);
if ( pElem->m_lPlaceholderType >0)
{
if (pElem->m_lPlaceholderID >=0)
{
if (pElem->m_lPlaceholderType == MasterSlideNumber) pLayout->m_bHasSlideNumber = true;
if (pElem->m_lPlaceholderType == MasterDate) pLayout->m_bHasDate = true;
if (pElem->m_lPlaceholderType == MasterFooter) pLayout->m_bHasFooter = true;
}
pLayout->m_mapPlaceholders.insert(std::pair<int, int>(pElem->m_lPlaceholderType, pLayout->m_arElements.size()-1));
}
}
}
......
......@@ -42,7 +42,8 @@ public:
std::vector<CFont> m_arrFonts;
NSPresentationEditor::CTextStyles m_oDefaultTextStyle;
std::vector<std::wstring> m_oFootersHeaderString;
std::vector<std::wstring> m_PlaceholdersReplaceString[3]; //0-dates, 1 - headers, 2 - footers
bool m_bHasDate;
bool m_bHasSlideNumber;
bool m_bHasFooter;
......@@ -260,8 +261,10 @@ public:
int AddNewLayout(NSPresentationEditor::CTheme* pTheme, CRecordSlide* pRecordSlide, bool addShapes, bool bMasterObjects);
IElement* AddNewLayoutPlaceholder (CLayout *pLayout, int placeholderType, int placeholderSizePreset = -1);
IElement* AddThemeLayoutPlaceholder (CLayout *pLayout, int placeholderType, CTheme* pTheme);
IElement* AddNewLayoutPlaceholder (CLayout *pLayout, int placeholderType, int placeholderSizePreset = -1);
IElement* AddNewThemePlaceholder (CTheme* pTheme, int placeholderType, int placeholderSizePreset = -1);
IElement* AddNewThemePlaceholder (CTheme* pTheme, int placeholderType, int placeholderSizePreset = -1);
IElement* AddThemeLayoutPlaceholder (CLayout *pLayout, int placeholderType, CTheme* pTheme);
IElement* AddLayoutSlidePlaceholder (CSlide *pSlide, int placeholderType, CLayout *pLayout, bool idx_only = false);
};
......@@ -1474,7 +1474,18 @@ public:
if (0 < oArrayDateMeta.size())
{
pElem->m_lPlaceholderType = PT_MasterDate;
pElem->m_lPlaceholderUserStr = oArrayDateMeta[0]->m_nPosition;
CRecordDateTimeMetaAtom* format_data = dynamic_cast<CRecordDateTimeMetaAtom*>(oArrayDateMeta[0]);
if (format_data)
{
pElem->m_nFormatDate = 1;
//todooo
}
else
{
pElem->m_lPlaceholderUserStr = oArrayDateMeta[0]->m_nPosition;
pElem->m_nFormatDate = 2;
}
}
//------------- ---------------------------------------------------------------------------------
std::vector<CRecordClientAnchor*> oArrayAnchor;
......@@ -1601,7 +1612,10 @@ public:
}
if (pElem->m_lPlaceholderType == PT_MasterSlideNumber && strShapeText.length() > 5)
pElem->m_lPlaceholderType = PT_MasterFooter; ///???? 1-(33).ppt
{
int pos = strShapeText.find(L"*");
if (pos < 0) pElem->m_lPlaceholderType = PT_MasterFooter; ///???? 1-(33).ppt
}
//------ shape properties ----------------------------------------------------------------------------------------
for (int nIndexProp = 0; nIndexProp < oArrayOptions.size(); ++nIndexProp)
......
#pragma once
#include "../Reader/Records.h"
class CRecordHeadersFootersContainer : public CRecordsContainer
{
};
#include "CString.h"
class CRecordHeadersFootersAtom : public CUnknownRecord
{
......@@ -31,13 +28,15 @@ public:
m_nFormatID = StreamUtils::ReadWORD(pStream);
USHORT nFlag = StreamUtils::ReadWORD(pStream);
BYTE nFlag = StreamUtils::ReadBYTE(pStream);
m_bHasDate = ((nFlag & 0x01) == 0x01);
m_bHasTodayDate = ((nFlag & 0x02) == 0x02);
m_bHasUserDate = ((nFlag & 0x04) == 0x04);
m_bHasSlideNumber = ((nFlag & 0x08) == 0x08);
m_bHasHeader = ((nFlag & 0x10) == 0x10);
m_bHasFooter = ((nFlag & 0x20) == 0x20);
StreamUtils::ReadBYTE(pStream);//reserved
}
};
......@@ -92,7 +91,10 @@ public:
{
m_oHeader = oHeader;
m_nPosition = StreamUtils::ReadDWORD(pStream);
if (oHeader.RecLen >=4)
{
m_nPosition = StreamUtils::ReadDWORD(pStream);
}
}
};
......@@ -116,13 +118,23 @@ public:
class CRecordDateTimeMetaAtom : public CRecordGenericDateMetaAtom
{
public:
BYTE m_FormatID;
DWORD m_FormatID;
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
int lPosition = pStream->tell();
CRecordGenericDateMetaAtom::ReadFromStream(oHeader, pStream);
m_FormatID = StreamUtils::ReadBYTE(pStream);
if (oHeader.RecLen == 8)
{
m_FormatID = StreamUtils::ReadDWORD(pStream);
}
else if (oHeader.RecLen >4)
{
m_FormatID = StreamUtils::ReadBYTE(pStream);
StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream);
}
}
};
......@@ -137,4 +149,44 @@ class CRecordHeaderMetaAtom : public CRecordMetaCharacterAtom
class CRecordSlideNumberMetaAtom : public CRecordMetaCharacterAtom
{
};
\ No newline at end of file
};
class CRecordHeadersFootersContainer : public CRecordsContainer
{
public:
std::vector<std::wstring> m_HeadersFootersString[3]; //0-dates, 1 - headers, 2 - footers
CRecordHeadersFootersAtom *m_oHeadersFootersAtom;
CRecordHeadersFootersContainer()
{
m_oHeadersFootersAtom = NULL;
}
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
{
CRecordsContainer::ReadFromStream(oHeader, pStream);
for (int i = 0 ; i < m_arRecords.size(); i++)
{
switch(m_arRecords[i]->m_oHeader.RecType)
{
case 0x0FDA:
m_oHeadersFootersAtom = dynamic_cast<CRecordHeadersFootersAtom *>(m_arRecords[i]);
break;
case 0xFBA:
{
CRecordCString *str = dynamic_cast<CRecordCString *>(m_arRecords[i]);
switch(m_arRecords[i]->m_oHeader.RecInstance)
{
case 0x000: m_HeadersFootersString[0].push_back(str->m_strText); break;
case 0x001: m_HeadersFootersString[1].push_back(str->m_strText); break;
case 0x002: m_HeadersFootersString[2].push_back(str->m_strText); break;
}
}break;
}
}
}
};
......@@ -530,10 +530,6 @@
RelativePath="..\Records\CurrentUserAtom.h"
>
</File>
<File
RelativePath="..\Records\DateTimeMCAtom.h"
>
</File>
<File
RelativePath="..\Records\DocRoutingSlipAtom.h"
>
......
......@@ -89,20 +89,23 @@ void NSPresentationEditor::CShapeElement::SetupTextProperties(CSlide* pSlide, CT
}
}
void NSPresentationEditor::CShapeElement::SetUpText(std::wstring newText)
bool NSPresentationEditor::CShapeElement::SetUpTextPlaceholder(std::wstring newText)
{
bool result = false;
NSPresentationEditor::CTextAttributesEx* pText = &m_oShape.m_oText;
if (pText->m_arParagraphs.size() > 0)
{
if (pText->m_arParagraphs[0].m_arSpans.size() >0)
{
ReplaceAll(pText->m_arParagraphs[0].m_arSpans[0].m_strText, L"*", newText);
pText->m_arParagraphs[0].m_arSpans.erase(pText->m_arParagraphs[0].m_arSpans.begin()+1,pText->m_arParagraphs[0].m_arSpans.end());
int pos = pText->m_arParagraphs[0].m_arSpans[0].m_strText.find(L"*");
if (pos >= 0)
{
ReplaceAll(pText->m_arParagraphs[0].m_arSpans[0].m_strText, L"*", newText);
result = true;
}
}
pText->m_arParagraphs.erase(pText->m_arParagraphs.begin()+1,pText->m_arParagraphs.end());
}
return result;
}
\ No newline at end of file
......@@ -509,7 +509,7 @@ namespace NSPresentationEditor
m_oShape.SetToDublicate(&pShapeElement->m_oShape);
return (IElement*)pShapeElement;
}
void SetUpText(std::wstring newText);
bool SetUpTextPlaceholder(std::wstring newText);
virtual void SetupProperties(CSlide* pSlide, CTheme* pTheme, CLayout* pLayout)
{
......
......@@ -8,8 +8,7 @@ namespace NSPresentationEditor
public:
std::vector<IElement*> m_arElements;
std::vector<CColor> m_arColorScheme;
std::map<int,int> m_mapPlaceholders;
std::multimap<int,int> m_mapPlaceholders;
bool m_bUseThemeColorScheme;
......
......@@ -12,6 +12,7 @@ namespace NSPresentationEditor
std::vector<IElement*> m_arElements;
CSlideShowInfo m_oSlideShow;
std::multimap<int,int> m_mapPlaceholders;
//
long m_lWidth;
......
......@@ -13,7 +13,7 @@ namespace NSPresentationEditor
std::map<_UINT64, LONG> m_mapGeomToLayout;//
std::map<DWORD, LONG> m_mapTitleLayout; //
std::map<int,int> m_mapPlaceholders;
std::multimap<int,int> m_mapPlaceholders;
std::vector<CColor> m_arColorScheme;
std::vector<CFont> m_arFonts;
......@@ -44,7 +44,7 @@ namespace NSPresentationEditor
int m_nFormatDate;//1- current, 2 - user
std::vector<std::wstring> m_oFootersHeaderString;
std::vector<std::wstring> m_PlaceholdersReplaceString[3]; //0-dates, 1 - headers, 2 - footers
//------------------------------------------------------------------------------------
CTheme() : m_arColorScheme(), m_arFonts(), m_arBrushes(),
......
......@@ -541,7 +541,7 @@ void NSPresentationEditor::CShapeWriter::WriteImageInfo()
if (-1 != m_pImageElement->m_lPlaceholderID)
{
CString strIdx; strIdx.Format(_T("%d"), m_pImageElement->m_lPlaceholderID);
CString strIdx; strIdx.Format(_T("%d"), m_pImageElement->m_lPlaceholderID );
m_oWriter.WriteString(std::wstring(L" idx=\"") + string2std_string(strIdx) + _T("\""));
}
......@@ -610,7 +610,7 @@ void NSPresentationEditor::CShapeWriter::WriteShapeInfo()
if ( m_pShapeElement->m_lPlaceholderID != -1)
{
CString strIdx; strIdx.Format(_T("%d"), m_pShapeElement->m_lPlaceholderID);
CString strIdx; strIdx.Format(_T("%d"), m_pShapeElement->m_lPlaceholderID );
m_oWriter.WriteString(std::wstring(L" idx=\"") + string2std_string(strIdx) + _T("\""));
}
......
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