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

RtfFormatWriter - fix styled tables

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@67841 954022d7-b5bf-4e40-9824-e11837661b57
parent 59c16015
...@@ -43,22 +43,11 @@ public: ...@@ -43,22 +43,11 @@ public:
if (m_ooxBorder) if (m_ooxBorder)
{ {
if ((m_ooxBorder->m_oColor.IsInit()) && (m_ooxBorder->m_oColor->GetValue() == SimpleTypes::hexcolorRGB))
{
RtfColor oColor(m_ooxBorder->m_oColor->Get_R(), m_ooxBorder->m_oColor->Get_G(), m_ooxBorder->m_oColor->Get_B());
oOutputBorder.m_nColor = oParam.oRtf->m_oColorTable.AddItem( oColor );
}
if (m_ooxBorder->m_oSpace.IsInit())
{
oOutputBorder.m_nSpace = RtfUtility::pt2Twip(m_ooxBorder->m_oSpace->ToPoints());
}
if (m_ooxBorder->m_oSz.IsInit())
{
oOutputBorder.m_nWidth = RtfUtility::pt2Twip(m_ooxBorder->m_oSz->ToPoints());// = 5 * nSize / 2;//w:sz 1/8 twips (equivalent to 1/576th of an inch)
}
if (m_ooxBorder->m_oVal.IsInit()) if (m_ooxBorder->m_oVal.IsInit())
{ {
if (m_ooxBorder->m_oVal->GetValue() == SimpleTypes::bordervalueNone ) return true;
// это отсутствие свойства а не бордера (Nil)
switch(m_ooxBorder->m_oVal->GetValue()) switch(m_ooxBorder->m_oVal->GetValue())
{ {
//case SimpleTypes::bordervalueApples : return _T("apples"); //case SimpleTypes::bordervalueApples : return _T("apples");
...@@ -252,12 +241,27 @@ public: ...@@ -252,12 +241,27 @@ public:
//case SimpleTypes::bordervalueWoodwork : return _T("woodwork"); //case SimpleTypes::bordervalueWoodwork : return _T("woodwork");
//case SimpleTypes::bordervalueXIllusions : return _T("xIllusions"); //case SimpleTypes::bordervalueXIllusions : return _T("xIllusions");
//case SimpleTypes::bordervalueZanyTriangles : return _T("zanyTriangles"); //case SimpleTypes::bordervalueZanyTriangles : return _T("zanyTriangles");
}
//case SimpleTypes::bordervalueZigZag : return _T("zigZag"); //case SimpleTypes::bordervalueZigZag : return _T("zigZag");
//case SimpleTypes::SimpleTypes::bordervalueZigZagStitch : return _T("zigZagStitch"); //case SimpleTypes::SimpleTypes::bordervalueZigZagStitch : return _T("zigZagStitch");
//oOutputBorder.m_eType = RtfBorder::bt_brdrsh; //oOutputBorder.m_eType = RtfBorder::bt_brdrsh;
//oOutputBorder.m_eType = RtfBorder::bt_brdrhair; //oOutputBorder.m_eType = RtfBorder::bt_brdrhair;
}
} }
if ((m_ooxBorder->m_oColor.IsInit()) && (m_ooxBorder->m_oColor->GetValue() == SimpleTypes::hexcolorRGB))
{
RtfColor oColor(m_ooxBorder->m_oColor->Get_R(), m_ooxBorder->m_oColor->Get_G(), m_ooxBorder->m_oColor->Get_B());
oOutputBorder.m_nColor = oParam.oRtf->m_oColorTable.AddItem( oColor );
}
if (m_ooxBorder->m_oSpace.IsInit())
{
oOutputBorder.m_nSpace = RtfUtility::pt2Twip(m_ooxBorder->m_oSpace->ToPoints());
}
if (m_ooxBorder->m_oSz.IsInit())
{
oOutputBorder.m_nWidth = RtfUtility::pt2Twip(m_ooxBorder->m_oSz->ToPoints());// = 5 * nSize / 2;//w:sz 1/8 twips (equivalent to 1/576th of an inch)
}
} }
return true; return true;
} }
......
...@@ -135,7 +135,7 @@ public: ...@@ -135,7 +135,7 @@ public:
oNewSubStyle->m_sName = oNewStyle->m_sName; oNewSubStyle->m_sName = oNewStyle->m_sName;
if( true == oNewSubStyle->IsValid() && RtfStyle::stTable == oNewSubStyle->m_eType ) if( /*true == oNewSubStyle->IsValid() && */RtfStyle::stTable == oNewSubStyle->m_eType )
{ {
oNewSubStyle->m_nID = oParam.oRtf->m_oStyleTable.GetCount() + 1; oNewSubStyle->m_nID = oParam.oRtf->m_oStyleTable.GetCount() + 1;
...@@ -233,7 +233,10 @@ public: ...@@ -233,7 +233,10 @@ public:
if (oox_tableStyle == NULL) return false; if (oox_tableStyle == NULL) return false;
if (oOutputStyle == NULL) if (oOutputStyle == NULL)
oOutputStyle = RtfStylePtr( new RtfTableStyle() ); {
oOutputStyle = RtfStylePtr( new RtfTableStyle() );
oOutputStyle->m_nID = oParam.oRtf->m_oStyleTable.GetCount() + 1;
}
RtfStyle::StyleType eStyleType = oOutputStyle->m_eType;//todooo проверить RtfStyle::StyleType eStyleType = oOutputStyle->m_eType;//todooo проверить
if (oox_tableStyle->m_oRunPr.IsInit() && if (oox_tableStyle->m_oRunPr.IsInit() &&
......
...@@ -11,7 +11,7 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable ) ...@@ -11,7 +11,7 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
if(m_ooxTable->m_oTableProperties ) if(m_ooxTable->m_oTableProperties )
{ {
OOXtblPrReader otblPrReader(m_ooxTable->m_oTableProperties); OOXtblPrReader otblPrReader(m_ooxTable->m_oTableProperties);
otblPrReader.Parse( oParam, oOutputTable.m_oProperty); otblPrReader.Parse( oParam, oOutputTable.m_oProperty);
bExistTablPr = true; bExistTablPr = true;
} }
...@@ -26,15 +26,18 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable ) ...@@ -26,15 +26,18 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
if( RtfStyle::stTable == oResultStyle->m_eType ) if( RtfStyle::stTable == oResultStyle->m_eType )
{ {
poTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oResultStyle ); poTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oResultStyle );
poTableStyle->m_oTableProp = oOutputTable.m_oProperty; //TableProperty ставим как уже прочитали чтобы не терять порядок применения свойст
poTableStyle->m_oTableProp = oOutputTable.m_oProperty;
//TableProperty ставим как уже прочитали чтобы не терять порядок применения свойст
//например индент последовательно затирает друг друга в стилях, numbering, просто в свойствах //например индент последовательно затирает друг друга в стилях, numbering, просто в свойствах
//затирает свойства и на First, Last .... todoooo
} }
} }
} }
else if( true == bExistTablPr ) else if( true == bExistTablPr )
{ {
RtfTableStylePtr poTableStyle = RtfTableStylePtr( new RtfTableStyle() ); RtfTableStylePtr poTableStyle = RtfTableStylePtr( new RtfTableStyle() );
poTableStyle->m_oTableProp.Merge( oOutputTable.m_oProperty ); poTableStyle->m_oTableProp.Merge( oOutputTable.m_oProperty ); // будут использованы ниже
} }
if( m_ooxTable->m_oTblGrid.IsInit() ) if( m_ooxTable->m_oTblGrid.IsInit() )
...@@ -46,13 +49,16 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable ) ...@@ -46,13 +49,16 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
} }
} }
long nRowCount = m_ooxTable->m_nCountRow; long nRowCount = m_ooxTable->m_nCountRow, nCurRow = 0;
for( int i = 0; i < m_ooxTable->m_arrItems.size(); i++ ) for( int i = 0; i < m_ooxTable->m_arrItems.size(); i++ )
{ {
if (m_ooxTable->m_arrItems[i] == NULL) continue; if (m_ooxTable->m_arrItems[i] == NULL) continue;
if (m_ooxTable->m_arrItems[i]->getType() != OOX::et_w_tr) continue; if (m_ooxTable->m_arrItems[i]->getType() != OOX::et_w_tr) continue;
ReaderParameter newParam = oParam;
newParam.poTableStyle = poTableStyle;
RtfTableRowPtr oNewRow( new RtfTableRow() ); RtfTableRowPtr oNewRow( new RtfTableRow() );
//применяем свойства таблицы к каждому row //применяем свойства таблицы к каждому row
//т.к. в RTF нет свойств таблиц и все свойства записываются в свойства row //т.к. в RTF нет свойств таблиц и все свойства записываются в свойства row
...@@ -61,7 +67,7 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable ) ...@@ -61,7 +67,7 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
OOX::Logic::CTr *ooxRow = dynamic_cast<OOX::Logic::CTr *>(m_ooxTable->m_arrItems[i]); OOX::Logic::CTr *ooxRow = dynamic_cast<OOX::Logic::CTr *>(m_ooxTable->m_arrItems[i]);
OOXTableRowReader oRowReader(ooxRow); OOXTableRowReader oRowReader(ooxRow);
oRowReader.Parse( oParam, *oNewRow, i, nRowCount ); oRowReader.Parse( newParam, *oNewRow, nCurRow++, nRowCount );
oOutputTable.AddItem( oNewRow ); oOutputTable.AddItem( oNewRow );
} }
oOutputTable.CalculateCellx( *oParam.oRtf ); oOutputTable.CalculateCellx( *oParam.oRtf );
......
...@@ -28,26 +28,26 @@ public: ...@@ -28,26 +28,26 @@ public:
otrPrReader.Parse( oParam, oOutputRow.m_oProperty, oConditionStyle);// может поменяться на любой condition(first row) otrPrReader.Parse( oParam, oOutputRow.m_oProperty, oConditionStyle);// может поменяться на любой condition(first row)
} }
int nCellCount = m_ooxRowTable->m_nCountCell; int nCellCount = m_ooxRowTable->m_nCountCell, nCurCell = 0;
for( int nCurCell = 0; nCurCell < nCellCount; nCurCell++) for( int i = 0; i < m_ooxRowTable->m_arrItems.size(); i++)
{ {
if (m_ooxRowTable->m_arrItems[i] == NULL) continue;
if (m_ooxRowTable->m_arrItems[i]->getType() != OOX::et_w_tc)continue;//todooo bookmarks
RtfTableCellPtr oNewCell( new RtfTableCell() ); RtfTableCellPtr oNewCell( new RtfTableCell() );
OOX::Logic::CTc *ooxCell = NULL; OOX::Logic::CTc *ooxCell = NULL;
if (nCurCell < m_ooxRowTable->m_arrItems.size()) if (nCurCell < m_ooxRowTable->m_arrItems.size())
ooxCell = dynamic_cast<OOX::Logic::CTc *>(m_ooxRowTable->m_arrItems[nCurCell]); ooxCell = dynamic_cast<OOX::Logic::CTc *>(m_ooxRowTable->m_arrItems[i]);
if (ooxCell) OOXTableCellReader oCellReader(ooxCell);
{ oCellReader.Parse( oParam, *oNewCell, oConditionStyle, nCurCell++, nCurRow, nCellCount, nRowCount );
OOXTableCellReader oCellReader(ooxCell); //добавляем cell
oCellReader.Parse( oParam, *oNewCell, oConditionStyle, nCurCell, nCurRow, nCellCount, nRowCount ); oOutputRow.AddItem(oNewCell);
//добавляем cell //свойства cell в row
oOutputRow.AddItem(oNewCell); oOutputRow.m_oProperty.AddItem( oNewCell->m_oProperty );
//свойства cell в row
oOutputRow.m_oProperty.AddItem( oNewCell->m_oProperty );
}
} }
return true; return true;
} }
......
...@@ -246,7 +246,7 @@ private: ...@@ -246,7 +246,7 @@ private:
oOutputProperty.m_oBorderLeft.Merge( oInputStyle->m_oTableProp.m_oBorderLeft ); oOutputProperty.m_oBorderLeft.Merge( oInputStyle->m_oTableProp.m_oBorderLeft );
if( nBoundRight == nCurX ) if( nBoundRight == nCurX )
oOutputProperty.m_oBorderRight.Merge( oInputStyle->m_oTableProp.m_oBorderRight ); oOutputProperty.m_oBorderRight.Merge( oInputStyle->m_oTableProp.m_oBorderRight );
else else if (oInputStyle->m_oTableProp.m_bAutoNoColBand != 1)
oOutputProperty.m_oBorderRight.Merge( oInputStyle->m_oTableProp.m_oBorderVert ); oOutputProperty.m_oBorderRight.Merge( oInputStyle->m_oTableProp.m_oBorderVert );
} }
else if( nBoundRight == nCurX ) else if( nBoundRight == nCurX )
...@@ -265,7 +265,7 @@ private: ...@@ -265,7 +265,7 @@ private:
oOutputProperty.m_oBorderTop.Merge( oInputStyle->m_oTableProp.m_oBorderTop ); oOutputProperty.m_oBorderTop.Merge( oInputStyle->m_oTableProp.m_oBorderTop );
if( nBoundBottom == nCurY ) if( nBoundBottom == nCurY )
oOutputProperty.m_oBorderBottom.Merge( oInputStyle->m_oTableProp.m_oBorderBottom ); oOutputProperty.m_oBorderBottom.Merge( oInputStyle->m_oTableProp.m_oBorderBottom );
else else if (oInputStyle->m_oTableProp.m_bAutoNoRowBand != 1)
oOutputProperty.m_oBorderBottom.Merge( oInputStyle->m_oTableProp.m_oBorderHor ); oOutputProperty.m_oBorderBottom.Merge( oInputStyle->m_oTableProp.m_oBorderHor );
} }
else if( nBoundBottom == nCurY ) else if( nBoundBottom == nCurY )
......
...@@ -2,32 +2,32 @@ ...@@ -2,32 +2,32 @@
#include "RtfDocument.h" #include "RtfDocument.h"
CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter) CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter)
{ {
////записывает default charset и codepage ////записывает default charset и codepage
//RtfDocument* poDocument = static_cast<RtfDocument*>( oRenderParameter.poDocument ); //RtfDocument* poDocument = static_cast<RtfDocument*>( oRenderParameter.poDocument );
//if( PROP_DEF != poDocument->m_oProperty.m_nAnsiCodePage ) //if( PROP_DEF != poDocument->m_oProperty.m_nAnsiCodePage )
//{ //{
// int nCodepage = poDocument->m_oProperty.m_nAnsiCodePage; // int nCodepage = poDocument->m_oProperty.m_nAnsiCodePage;
// int nCharset = RtfUtility::CodepageToCharset( nCodepage ); // int nCharset = RtfUtility::CodepageToCharset( nCodepage );
// for( int i = 0; i < (int)m_aArray.size(); i++ ) // for( int i = 0; i < (int)m_aArray.size(); i++ )
// { // {
// m_aArray[i].m_nCharset = nCharset; // m_aArray[i].m_nCharset = nCharset;
// m_aArray[i].m_nCodePage = nCodepage; // m_aArray[i].m_nCodePage = nCodepage;
// } // }
//} //}
CString sResult; CString sResult;
if( m_aArray.size() > 0 ) if( m_aArray.size() > 0 )
{ {
sResult.Append(_T("{\\fonttbl")); sResult.Append(_T("{\\fonttbl"));
RenderParameter oNewParameter = oRenderParameter; RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL; oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL;
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter ).GetBuffer()); sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter ).GetBuffer());
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
return sResult; return sResult;
} }
CString RtfListTable::RenderToOOX(RenderParameter oRenderParameter) CString RtfListTable::RenderToOOX(RenderParameter oRenderParameter)
{ {
CString sResult; CString sResult;
......
...@@ -154,28 +154,29 @@ public: ...@@ -154,28 +154,29 @@ public:
{ {
RtfStylePtr oResultStyle; RtfStylePtr oResultStyle;
RtfStyle::StyleType eStyleType = RtfStyle::st_none; RtfStyle::StyleType eStyleType = RtfStyle::st_none;
int nStyleId = oInputStyle->m_nID; int nStyleId = oInputStyle->m_nID;
int nLinked = PROP_DEF; int nLinked = PROP_DEF;
int nBaseOn = oInputStyle->m_nBasedOn; int nBaseOn = oInputStyle->m_nBasedOn;
if( RtfStyle::stCharacter == oInputStyle->m_eType )
{ if( RtfStyle::stCharacter == oInputStyle->m_eType )
{
eStyleType = RtfStyle::stCharacter; eStyleType = RtfStyle::stCharacter;
oResultStyle = RtfCharStylePtr( new RtfCharStyle() ); oResultStyle = RtfCharStylePtr( new RtfCharStyle() );
} }
else if( RtfStyle::stParagraph == oInputStyle->m_eType ) else if( RtfStyle::stParagraph == oInputStyle->m_eType )
{ {
eStyleType = RtfStyle::stParagraph; eStyleType = RtfStyle::stParagraph;
oResultStyle = RtfParagraphStylePtr( new RtfParagraphStyle() ); oResultStyle = RtfParagraphStylePtr( new RtfParagraphStyle() );
nLinked = oInputStyle->m_nLink;//linked будем смотреть только у стилей параграфа, чтобы избежать рекурсии nLinked = oInputStyle->m_nLink;//linked будем смотреть только у стилей параграфа, чтобы избежать рекурсии
} }
else if( RtfStyle::stTable == oInputStyle->m_eType ) else if( RtfStyle::stTable == oInputStyle->m_eType )
{ {
eStyleType = RtfStyle::stTable; eStyleType = RtfStyle::stTable;
oResultStyle = RtfTableStylePtr( new RtfTableStyle() ); oResultStyle = RtfTableStylePtr( new RtfTableStyle() );
} }
else else
return oInputStyle; return oInputStyle; //ОПАСНО .. потом может другим затереться todooo
RtfStylePtr oLinkedStyle; RtfStylePtr oLinkedStyle;
//if( PROP_DEF != nLinked && nStyleId != nLinked) //if( PROP_DEF != nLinked && nStyleId != nLinked)
...@@ -191,21 +192,18 @@ public: ...@@ -191,21 +192,18 @@ public:
if( true == GetStyle( nBaseOn, oTemStyle) ) if( true == GetStyle( nBaseOn, oTemStyle) )
oBaseStyle = GetStyleResulting( oTemStyle ); oBaseStyle = GetStyleResulting( oTemStyle );
} }
if( NULL == oLinkedStyle && NULL == oBaseStyle )
return oInputStyle; //Опытным путем установлено - Base старше Link
else if( NULL != oLinkedStyle )
{ {
//Опытным путем установлено - Base старше Link oResultStyle->Merge( oLinkedStyle );
if( NULL != oLinkedStyle ) }
{ if( NULL != oBaseStyle )
oResultStyle->Merge( oLinkedStyle ); {
} oResultStyle->Merge( oBaseStyle );
if( NULL != oBaseStyle ) }
{ oResultStyle->Merge( oInputStyle );
oResultStyle->Merge( oBaseStyle );
}
oResultStyle->Merge( oInputStyle );
}
return oResultStyle; return oResultStyle;
} }
CString RenderToRtf(RenderParameter oRenderParameter) CString RenderToRtf(RenderParameter oRenderParameter)
......
...@@ -128,73 +128,4 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter) ...@@ -128,73 +128,4 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
//sResult.AppendFormat( _T("<v:imagedata r:id=\"%ls\""), srId ); //sResult.AppendFormat( _T("<v:imagedata r:id=\"%ls\""), srId );
return srId; return srId;
} }
//bool RtfPicture::LoadPicture( IUnknown** piImage, CString sPath ) \ No newline at end of file
//{
// ImageStudio::IImageTransformsPtr piTransform = NULL;
// HRESULT hRes = piTransform.CreateInstance( ImageStudio::CLSID_ImageTransforms );
// if( FAILED(hRes) || NULL == piTransform )
// return false;
//
// VARIANT vImage;
// CString sTransformation = _T("<ImageFile-LoadImage sourcepath='") + sPath + _T("'/>");
// BSTR bstrLoad = sTransformation.AllocSysString();
// if( piTransform->SetXml(bstrLoad) )
// if(piTransform->Transform())
// piTransform->GetResult( 0, &vImage );
// (*piImage) = vImage.punkVal;
// SysFreeString( bstrLoad );
// if( NULL == (*piImage) )
// return false;
//
// //ImageFile::IImageFile3* piImageFile = NULL;
// //CoCreateInstance( __uuidof(ImageFile::ImageFile3) , NULL, CLSCTX_INPROC, __uuidof(ImageFile::IImageFile3), (void**)(&piImageFile));
// //BSTR bstrFilePath = sTempFile.AllocSysString();
// //piImageFile->SaveImage2( &m_piPicture, IMAGEFORMAT_PNG, bstrFilePath);
// //SysFreeString( bstrFilePath );
// return true;
//}
//bool RtfPicture::SavePicture( IUnknown* piImage, CString sPath, long nFormat )
//{
// if( NULL == piImage )
// return false;
// ImageStudio::IImageTransformsPtr piTransform = NULL;
// HRESULT hRes = piTransform.CreateInstance( ImageStudio::CLSID_ImageTransforms );
// if( FAILED(hRes) || NULL == piTransform )
// return false;
// CString sFormat = _T("");
// switch( nFormat )
// {
// case IMAGEFORMAT_WMF: sFormat = _T("Wmf");break;
// case IMAGEFORMAT_PNG: sFormat = _T("Png");break;
// case IMAGEFORMAT_JPE: sFormat = _T("Jpg");break;
// }
// if( _T("") == sFormat )
// return false;
//
// VARIANT vImage;
// vImage.vt = VT_UNKNOWN;
// vImage.punkVal = piImage;
// piTransform->SetSource( 0, vImage);
//
// CString sTransformation = _T("<ImageFile-SaveAs");
// sTransformation.Append( sFormat );
// sTransformation.Append( _T(" destinationpath=\"") );
// sTransformation.Append( sPath );
// sTransformation.Append( _T("\" format=\"8888\" />") );
//
// BSTR bstrLoad = sTransformation.AllocSysString();
//
// if( piTransform->SetXml(bstrLoad) )
// if(piTransform->Transform())
// piTransform->GetResult( 0, &vImage );
// RELEASEINTERFACE( vImage.punkVal );
// SysFreeString( bstrLoad );
//
// //ImageFile::IImageFile3* piImageFile = NULL;
// //CoCreateInstance( __uuidof(ImageFile::ImageFile3) , NULL, CLSCTX_INPROC, __uuidof(ImageFile::IImageFile3), (void**)(&piImageFile));
// //BSTR bstrFilePath = sTempFile.AllocSysString();
// //piImageFile->SaveImage2( &m_piPicture, IMAGEFORMAT_PNG, bstrFilePath);
// //SysFreeString( bstrFilePath );
// return true;
//}
...@@ -502,12 +502,12 @@ CString RtfBorder::RenderToRtf(RenderParameter oRenderParameter) ...@@ -502,12 +502,12 @@ CString RtfBorder::RenderToRtf(RenderParameter oRenderParameter)
case bt_brdroutset: sResult = _T("\\brdroutset"); break; case bt_brdroutset: sResult = _T("\\brdroutset"); break;
case bt_brdrnone: sResult = _T("\\brdrnone"); break; case bt_brdrnone: sResult = _T("\\brdrnone"); break;
} }
if( PROP_DEF != m_nWidth ) if( PROP_DEF != m_nWidth && m_nWidth > 0)
sResult.AppendFormat( _T("\\brdrw%d"),m_nWidth ); sResult.AppendFormat( _T("\\brdrw%d"), m_nWidth );
if( PROP_DEF != m_nSpace ) if( PROP_DEF != m_nSpace && m_nSpace > 0)
sResult.AppendFormat( _T("\\brsp%d"),m_nSpace ); sResult.AppendFormat( _T("\\brsp%d"), m_nSpace );
if( PROP_DEF != m_nColor ) if( PROP_DEF != m_nColor )
sResult.AppendFormat( _T("\\brdrcf%d"),m_nColor ); sResult.AppendFormat( _T("\\brdrcf%d"), m_nColor );
return sResult; return sResult;
} }
CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter) CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter)
...@@ -1624,36 +1624,41 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter) ...@@ -1624,36 +1624,41 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter)
if( true == m_oShading.IsValid() ) if( true == m_oShading.IsValid() )
sResult.Append( m_oShading.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oShading.RenderToRtf( oRenderParameter ) );
bool border_sides = false;
if( true == m_oBorderTop.IsValid() ) if( true == m_oBorderTop.IsValid() )
{ {
sResult.Append(_T("\\brdrt")); sResult.Append(_T("\\brdrt"));
sResult.Append( m_oBorderTop.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oBorderTop.RenderToRtf( oRenderParameter ) );
border_sides = true;
} }
if( true == m_oBorderLeft.IsValid() ) if( true == m_oBorderLeft.IsValid() )
{ {
sResult.Append(_T("\\brdrl")); sResult.Append(_T("\\brdrl"));
sResult.Append( m_oBorderLeft.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oBorderLeft.RenderToRtf( oRenderParameter ) );
border_sides = true;
} }
if( true == m_oBorderBottom.IsValid() ) if( true == m_oBorderBottom.IsValid() )
{ {
sResult.Append(_T("\\brdrb")); sResult.Append(_T("\\brdrb"));
sResult.Append( m_oBorderBottom.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oBorderBottom.RenderToRtf( oRenderParameter ) );
border_sides = true;
} }
if( true == m_oBorderRight.IsValid() ) if( true == m_oBorderRight.IsValid() )
{ {
sResult.Append(_T("\\brdrr")); sResult.Append(_T("\\brdrr"));
sResult.Append( m_oBorderRight.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oBorderRight.RenderToRtf( oRenderParameter ) );
} border_sides = true;
if( true == m_oBorderBox.IsValid() )
{
sResult.Append(_T("\\box"));
sResult.Append( m_oBorderBox.RenderToRtf( oRenderParameter ) );
} }
if( true == m_oBorderBar.IsValid() ) if( true == m_oBorderBar.IsValid() )
{ {
sResult.Append(_T("\\brdrbar")); sResult.Append(_T("\\brdrbar"));
sResult.Append( m_oBorderBar.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oBorderBar.RenderToRtf( oRenderParameter ) );
} }
if( true == m_oBorderBox.IsValid() && !border_sides)
{
sResult.Append(_T("\\box"));
sResult.Append( m_oBorderBox.RenderToRtf( oRenderParameter ) );
}
if( true == m_oFrame.IsValid() ) if( true == m_oFrame.IsValid() )
sResult.Append( m_oFrame.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oFrame.RenderToRtf( oRenderParameter ) );
...@@ -1923,8 +1928,6 @@ CString RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter) ...@@ -1923,8 +1928,6 @@ CString RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_BOOL( m_bHideMark, sResult, _T("clhidemark") ) RENDER_RTF_BOOL( m_bHideMark, sResult, _T("clhidemark") )
if( true == m_oBorderDiagonalLR.IsValid() ) if( true == m_oBorderDiagonalLR.IsValid() )
{ {
sResult.Append(_T("\\cldglu")); sResult.Append(_T("\\cldglu"));
...@@ -2236,12 +2239,12 @@ CString RtfTableProperty::RenderToRtf(RenderParameter oRenderParameter) ...@@ -2236,12 +2239,12 @@ CString RtfTableProperty::RenderToRtf(RenderParameter oRenderParameter)
sResult.Append(_T("\\trbrdrb")); sResult.Append(_T("\\trbrdrb"));
sResult.Append(m_oBorderBottom.RenderToRtf( oRenderParameter ) ); sResult.Append(m_oBorderBottom.RenderToRtf( oRenderParameter ) );
} }
if( m_oBorderVert.IsValid() == true ) if( m_oBorderVert.IsValid() == true && m_bAutoNoColBand != 1)
{ {
sResult.Append(_T("\\trbrdrv")); sResult.Append(_T("\\trbrdrv"));
sResult.Append(m_oBorderVert.RenderToRtf( oRenderParameter ) ); sResult.Append(m_oBorderVert.RenderToRtf( oRenderParameter ) );
} }
if( m_oBorderHor.IsValid() == true ) if( m_oBorderHor.IsValid() == true && m_bAutoNoRowBand != 1)
{ {
sResult.Append(_T("\\trbrdrh")); sResult.Append(_T("\\trbrdrh"));
sResult.Append(m_oBorderHor.RenderToRtf( oRenderParameter ) ); sResult.Append(m_oBorderHor.RenderToRtf( oRenderParameter ) );
...@@ -2903,85 +2906,88 @@ else if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() ) ...@@ -2903,85 +2906,88 @@ else if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
} }
void RtfTableStyle::Merge( RtfStylePtr oStyle ) void RtfTableStyle::Merge( RtfStylePtr oStyle )
{ {
RtfStyle::Merge( oStyle ); RtfStyle::Merge( oStyle );
if( TYPE_RTF_PROPERTY_STYLE_CHAR == oStyle->GetType() ) if( TYPE_RTF_PROPERTY_STYLE_CHAR == oStyle->GetType() )
{
RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( oStyle );
m_oCharProp.Merge( oCharStyle->m_oCharProp );
}
else if( TYPE_RTF_PROPERTY_STYLE_PARAGRAPH == oStyle->GetType() )
{
RtfParagraphStylePtr oParagraphStyle = boost::static_pointer_cast<RtfParagraphStyle, RtfStyle>( oStyle );
m_oParProp.Merge( oParagraphStyle->m_oParProp );
m_oCharProp.Merge( oParagraphStyle->m_oCharProp );
}
if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
{
RtfTableStylePtr oTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oStyle );
m_oTableProp.Merge( oTableStyle->m_oTableProp );
m_oRowProp.Merge( oTableStyle->m_oRowProp );
m_oCellProp.Merge( oTableStyle->m_oCellProp );
m_oParProp.Merge( oTableStyle->m_oParProp );
m_oCharProp.Merge( oTableStyle->m_oCharProp );
if( NULL != oTableStyle->m_oFirstRow )
{
m_oFirstRow = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstRow->Merge( oTableStyle->m_oFirstRow );
}
if( NULL != oTableStyle->m_oLastRow )
{
m_oLastRow = RtfTableStylePtr( new RtfTableStyle() );
m_oLastRow->Merge( oTableStyle->m_oLastRow );
}
if( NULL != oTableStyle->m_oFirstCol )
{
m_oFirstCol = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstCol->Merge( oTableStyle->m_oFirstCol );
}
if( NULL != oTableStyle->m_oLastCol )
{
m_oLastCol = RtfTableStylePtr( new RtfTableStyle() );
m_oLastCol->Merge( oTableStyle->m_oLastCol );
}
if( NULL != oTableStyle->m_oBandHorEven )
{
m_oBandHorEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorEven->Merge( oTableStyle->m_oBandHorEven );
}
if( NULL != oTableStyle->m_oBandVerEven )
{
m_oBandVerEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerEven->Merge( oTableStyle->m_oBandVerEven );
}
if( NULL != oTableStyle->m_oBandHorOdd )
{
m_oBandHorOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorOdd->Merge( oTableStyle->m_oBandHorOdd );
}
if( NULL != oTableStyle->m_oBandVerOdd )
{
m_oBandVerOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerOdd->Merge( oTableStyle->m_oBandVerOdd );
}
if( NULL != oTableStyle->m_oNWCell )
{
m_oNWCell = RtfTableStylePtr( new RtfTableStyle() );
m_oNWCell->Merge( oTableStyle->m_oNWCell );
}
if( NULL != oTableStyle->m_oNECell )
{ {
m_oNECell = RtfTableStylePtr( new RtfTableStyle() ); RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( oStyle );
m_oNECell->Merge( oTableStyle->m_oNECell );
m_oCharProp.Merge( oCharStyle->m_oCharProp );
} }
if( NULL != oTableStyle->m_oSWCell ) else if( TYPE_RTF_PROPERTY_STYLE_PARAGRAPH == oStyle->GetType() )
{ {
m_oSWCell = RtfTableStylePtr( new RtfTableStyle() ); RtfParagraphStylePtr oParagraphStyle = boost::static_pointer_cast<RtfParagraphStyle, RtfStyle>( oStyle );
m_oSWCell->Merge( oTableStyle->m_oSWCell );
m_oParProp.Merge( oParagraphStyle->m_oParProp );
m_oCharProp.Merge( oParagraphStyle->m_oCharProp );
} }
if( NULL != oTableStyle->m_oSECell ) if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
{ {
m_oSECell = RtfTableStylePtr( new RtfTableStyle() ); RtfTableStylePtr oTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oStyle );
m_oSECell->Merge( oTableStyle->m_oSECell );
m_oTableProp.Merge( oTableStyle->m_oTableProp );
m_oRowProp.Merge( oTableStyle->m_oRowProp );
m_oCellProp.Merge( oTableStyle->m_oCellProp );
m_oParProp.Merge( oTableStyle->m_oParProp );
m_oCharProp.Merge( oTableStyle->m_oCharProp );
if( NULL != oTableStyle->m_oFirstRow )
{
m_oFirstRow = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstRow->Merge( oTableStyle->m_oFirstRow );
}
if( NULL != oTableStyle->m_oLastRow )
{
m_oLastRow = RtfTableStylePtr( new RtfTableStyle() );
m_oLastRow->Merge( oTableStyle->m_oLastRow );
}
if( NULL != oTableStyle->m_oFirstCol )
{
m_oFirstCol = RtfTableStylePtr( new RtfTableStyle() );
m_oFirstCol->Merge( oTableStyle->m_oFirstCol );
}
if( NULL != oTableStyle->m_oLastCol )
{
m_oLastCol = RtfTableStylePtr( new RtfTableStyle() );
m_oLastCol->Merge( oTableStyle->m_oLastCol );
}
if( NULL != oTableStyle->m_oBandHorEven )
{
m_oBandHorEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorEven->Merge( oTableStyle->m_oBandHorEven );
}
if( NULL != oTableStyle->m_oBandVerEven )
{
m_oBandVerEven = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerEven->Merge( oTableStyle->m_oBandVerEven );
}
if( NULL != oTableStyle->m_oBandHorOdd )
{
m_oBandHorOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandHorOdd->Merge( oTableStyle->m_oBandHorOdd );
}
if( NULL != oTableStyle->m_oBandVerOdd )
{
m_oBandVerOdd = RtfTableStylePtr( new RtfTableStyle() );
m_oBandVerOdd->Merge( oTableStyle->m_oBandVerOdd );
}
if( NULL != oTableStyle->m_oNWCell )
{
m_oNWCell = RtfTableStylePtr( new RtfTableStyle() );
m_oNWCell->Merge( oTableStyle->m_oNWCell );
}
if( NULL != oTableStyle->m_oNECell )
{
m_oNECell = RtfTableStylePtr( new RtfTableStyle() );
m_oNECell->Merge( oTableStyle->m_oNECell );
}
if( NULL != oTableStyle->m_oSWCell )
{
m_oSWCell = RtfTableStylePtr( new RtfTableStyle() );
m_oSWCell->Merge( oTableStyle->m_oSWCell );
}
if( NULL != oTableStyle->m_oSECell )
{
m_oSECell = RtfTableStylePtr( new RtfTableStyle() );
m_oSECell->Merge( oTableStyle->m_oSECell );
}
} }
} }
}
...@@ -2322,6 +2322,7 @@ public: ...@@ -2322,6 +2322,7 @@ public:
m_oBorderBottom.Merge( oCellPr.m_oBorderBottom ); m_oBorderBottom.Merge( oCellPr.m_oBorderBottom );
m_oBorderInsideH.Merge( oCellPr.m_oBorderInsideH ); m_oBorderInsideH.Merge( oCellPr.m_oBorderInsideH );
m_oBorderInsideV.Merge( oCellPr.m_oBorderInsideV ); m_oBorderInsideV.Merge( oCellPr.m_oBorderInsideV );
m_oShading.Merge( oCellPr.m_oShading ); m_oShading.Merge( oCellPr.m_oShading );
MERGE_PROPERTY_DEF( m_eAlign, oCellPr, ca_none ) MERGE_PROPERTY_DEF( m_eAlign, oCellPr, ca_none )
...@@ -2908,102 +2909,43 @@ public: ...@@ -2908,102 +2909,43 @@ public:
SetDefault(); SetDefault();
m_eType = stCharacter; m_eType = stCharacter;
} }
int GetType() int GetType()
{ {
return TYPE_RTF_PROPERTY_STYLE_CHAR; return TYPE_RTF_PROPERTY_STYLE_CHAR;
} }
void Merge( RtfStylePtr oStyle ); void Merge( RtfStylePtr oStyle );
CString RenderToRtf(RenderParameter oRenderParameter); CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter); CString RenderToOOX(RenderParameter oRenderParameter);
}; };
class RtfParagraphStyle: public RtfCharStyle class RtfParagraphStyle: public RtfCharStyle
{ {
public: RtfParagraphProperty m_oParProp; public:
RtfParagraphProperty m_oParProp;
public:RtfParagraphStyle()
{ RtfParagraphStyle()
SetDefault(); {
m_eType = stParagraph; SetDefault();
} m_eType = stParagraph;
int GetType() }
{ int GetType()
return TYPE_RTF_PROPERTY_STYLE_PARAGRAPH; {
} return TYPE_RTF_PROPERTY_STYLE_PARAGRAPH;
void Merge( RtfStylePtr oStyle ); }
CString RenderToRtf(RenderParameter oRenderParameter); void Merge( RtfStylePtr oStyle );
CString RenderToOOX(RenderParameter oRenderParameter);
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
}; };
//class RtfTableStyleProperty : public IRenderableProperty
//{
//public: typedef enum{ av_none,
// av_tsvertalt, //\tsvertalt Top vertical alignment of cell
// av_tsvertalc, //\tsvertalc Center vertical alignment of cell
// av_tsvertalb //\tsvertalb Bottom vertical alignment of cell
// }AlignVertical;
// int m_nPaddingLeft; //\tscellpaddlN Left padding value.
// int m_nIsPaddingLeft; //\tscellpaddflN Units for \tscellpaddlN
// int m_nPaddingRight; //\tscellpaddrN Right padding value
// int m_nIsPaddingRight; //\tscellpaddfrN Units for \tscellpaddrN
// int m_nPaddingTop; //\tscellpaddtN Top padding value.
// int m_nIsPaddingTop; //\tscellpaddftN Units for \tscellpaddtN
// int m_nPaddingBottom; //\tscellpaddbN Bottom padding value
// int m_nIsPaddingBottom; //\tscellpaddfbN Units for \tscellpaddbN
//
// AlignVertical m_eAlign;
// int m_bNoCellWrap;//\tsnowrap No cell wrapping
//
// RtfShadingTableStyle m_oShading;
//
//
// RtfBorder m_oCellTopBorder; //\tsbrdrt Top border for cell
// RtfBorder m_oCellBottomBorder; //\tsbrdrb Bottom border for cell
// RtfBorder m_oCellLeftBorder; //\tsbrdrl Left border for cell
// RtfBorder m_oCellRightBorder; //\tsbrdrr Right border for cell
// RtfBorder m_oCellHorBorder; //\tsbrdrh Horizontal (inside) border for cell
// RtfBorder m_oCellVerBorder; //\tsbrdrv Vertical (inside) border for cell
// int m_nRowBandNumber; //\tscbandshN Count of rows in a row band
// int m_nCellBandNumber; //\tscbandsvN Count of cells in a cell band
//
// RtfTableStyleProperty()
// {
// SetDefault();
// }
// void SetDefault()
// {
// DEFAULT_PROPERTY( m_nPaddingLeft )
// DEFAULT_PROPERTY( m_nIsPaddingLeft )
// DEFAULT_PROPERTY( m_nPaddingRight )
// DEFAULT_PROPERTY( m_nIsPaddingRight )
// DEFAULT_PROPERTY( m_nPaddingTop )
// DEFAULT_PROPERTY( m_nIsPaddingTop )
// DEFAULT_PROPERTY( m_nPaddingBottom )
// DEFAULT_PROPERTY( m_nIsPaddingBottom )
// m_eAlign = av_none;
// DEFAULT_PROPERTY( m_bNoCellWrap )
// DEFAULT_PROPERTY( m_nRowBandNumber )
// DEFAULT_PROPERTY( m_nCellBandNumber )
//
// m_oShading.SetDefault();
// m_oCellTopBorder.SetDefault();
// m_oCellBottomBorder.SetDefault();
// m_oCellLeftBorder.SetDefault();
// m_oCellRightBorder.SetDefault();
// m_oCellHorBorder.SetDefault();
// m_oCellVerBorder.SetDefault();
// }
// CString RenderToRtf(RenderParameter oRenderParameter);
// CString RenderToOOX(RenderParameter oRenderParameter);
//};
class RtfTableStyle; class RtfTableStyle;
typedef boost::shared_ptr<RtfTableStyle> RtfTableStylePtr; typedef boost::shared_ptr<RtfTableStyle> RtfTableStylePtr;
class RtfTableStyle: public RtfParagraphStyle class RtfTableStyle: public RtfParagraphStyle
{ {
public: public:
RtfTableProperty m_oTableProp; RtfTableProperty m_oTableProp;
RtfRowProperty m_oRowProp; RtfRowProperty m_oRowProp;
RtfCellProperty m_oCellProp; RtfCellProperty m_oCellProp;
// RtfTableStyleProperty m_oTableStyleProperty;
RtfTableStylePtr m_oFirstRow; RtfTableStylePtr m_oFirstRow;
RtfTableStylePtr m_oLastRow; RtfTableStylePtr m_oLastRow;
...@@ -3043,6 +2985,7 @@ public: ...@@ -3043,6 +2985,7 @@ public:
return TYPE_RTF_PROPERTY_STYLE_TABLE; return TYPE_RTF_PROPERTY_STYLE_TABLE;
} }
void Merge( RtfStylePtr oStyle ); void Merge( RtfStylePtr oStyle );
CString RenderToRtf(RenderParameter oRenderParameter); CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter); CString RenderToOOX(RenderParameter oRenderParameter);
}; };
......
...@@ -3,707 +3,707 @@ ...@@ -3,707 +3,707 @@
#include "RtfOle.h" #include "RtfOle.h"
CString RtfShape::RenderToRtf(RenderParameter oRenderParameter) CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
{ {
CString sResult; CString sResult;
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType ) if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
{ {
//запоминаем координаты и если нужно поворачиваем //запоминаем координаты и если нужно поворачиваем
int nLeft = m_nLeft; int nLeft = m_nLeft;
int nTop = m_nTop; int nTop = m_nTop;
int nRight = m_nRight; int nRight = m_nRight;
int nBottom = m_nBottom; int nBottom = m_nBottom;
int nRotate = m_nRotation; int nRotate = m_nRotation;
int nRelLeft = m_nRelLeft;
int nRelTop = m_nRelTop;
int nRelRight = m_nRelRight;
int nRelBottom = m_nRelBottom;
int nRelRotate = m_nRelRotation;
if( PROP_DEF != m_nRotation && PROP_DEF != m_nLeft && PROP_DEF != m_nTop && int nRelLeft = m_nRelLeft;
PROP_DEF != m_nRight && PROP_DEF != m_nBottom ) int nRelTop = m_nRelTop;
ToRtfRotation( m_nRotation, m_nLeft, m_nTop, m_nRight, m_nBottom ); int nRelRight = m_nRelRight;
int nRelBottom = m_nRelBottom;
int nRelRotate = m_nRelRotation;
if( PROP_DEF != m_nRelRotation && PROP_DEF != m_nRelLeft && PROP_DEF != m_nRelTop && if( PROP_DEF != m_nRotation && PROP_DEF != m_nLeft && PROP_DEF != m_nTop &&
PROP_DEF != m_nRelRight && PROP_DEF != m_nRelBottom ) PROP_DEF != m_nRight && PROP_DEF != m_nBottom )
ToRtfRotation( m_nRelRotation, m_nRelLeft, m_nRelTop, m_nRelRight, m_nRelBottom ); ToRtfRotation( m_nRotation, m_nLeft, m_nTop, m_nRight, m_nBottom );
if( st_inline == m_eShapeType ) if( PROP_DEF != m_nRelRotation && PROP_DEF != m_nRelLeft && PROP_DEF != m_nRelTop &&
{ PROP_DEF != m_nRelRight && PROP_DEF != m_nRelBottom )
if( NULL != m_oPicture ) ToRtfRotation( m_nRelRotation, m_nRelLeft, m_nRelTop, m_nRelRight, m_nRelBottom );
{
if( RtfPicture::dt_wmf == m_oPicture->eDataType )
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
else
{
sResult.Append( _T("{\\*\\shppict") );
//CString sPictProp = RenderToRtfShapeProperty( oRenderParameter );
//if( false == sPictProp.IsEmpty() )
// sResult.AppendFormat( _T("{\\*\\picprop %ls}"), sPictProp );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
sResult.Append( _T("{\\nonshppict") );
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
sResult.Append( _T("}") ); if( st_inline == m_eShapeType )
} {
} if( NULL != m_oPicture )
} {
if( RtfPicture::dt_wmf == m_oPicture->eDataType )
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
else else
{ {
sResult.Append(_T("{\\shp{\\*\\shpinst")); sResult.Append( _T("{\\*\\shppict") );
RENDER_RTF_INT( m_nLeft, sResult, _T("shpleft") ); //CString sPictProp = RenderToRtfShapeProperty( oRenderParameter );
RENDER_RTF_INT( m_nTop, sResult, _T("shptop") ); //if( false == sPictProp.IsEmpty() )
RENDER_RTF_INT( m_nBottom, sResult, _T("shpbottom") ); // sResult.AppendFormat( _T("{\\*\\picprop %ls}"), sPictProp );
RENDER_RTF_INT( m_nRight, sResult, _T("shpright") );
RENDER_RTF_INT( m_nID, sResult, _T("shplid") ); sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
RENDER_RTF_INT( m_nZOrder, sResult, _T("shpz") ); sResult.Append( _T("}") );
RENDER_RTF_INT( m_nHeader, sResult, _T("shpfhdr") ); sResult.Append( _T("{\\nonshppict") );
RENDER_RTF_INT( m_nWrapType, sResult, _T("shpwr") ); sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
RENDER_RTF_INT( m_nWrapSideType, sResult, _T("shpwrk") );
RENDER_RTF_BOOL( m_bLockAnchor, sResult, _T("shplockanchor") );
switch(m_eXAnchor) sResult.Append( _T("}") );
{
case ax_page: sResult.Append( _T("\\shpbxpage") );break;
case ax_margin: sResult.Append( _T("\\shpbxmargin") );break;
case ax_column: sResult.Append( _T("\\shpbxcolumn") );break;
}
sResult.Append( _T("\\shpbxignore") );
switch(m_eYAnchor)
{
case ay_page: sResult.Append( _T("\\shpbypage") );break;
case ay_margin: sResult.Append( _T("\\shpbymargin") );break;
case ay_Para: sResult.Append( _T("\\shpbypara") );break;
}
sResult.Append( _T("\\shpbyignore") );
RENDER_RTF_INT( m_nZOrderRelative, sResult, _T("shpfblwtxt") );
sResult.Append( RenderToRtfShapeProperty( oRenderParameter ) );
//picture
if( 0 != m_oPicture )
{
sResult.Append( _T("{\\sp{\\sn pib}{\\sv ") );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
}
//textbox
if( 0 != m_aTextItems )
{
sResult.Append( _T("{\\shptxt ") );
sResult.Append( m_aTextItems->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
}
sResult.Append(_T("}"));
if( 0 != m_oPicture )
{
sResult.Append(_T("{\\shprslt\\par\\plain"));
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
sResult.Append(_T("\\par}"));
}
sResult.Append(_T("}"));
} }
//восстанавливаем координаты и если нужно поворачиваем }
m_nLeft = nLeft; }
m_nTop = nTop; else
m_nRight = nRight; {
m_nBottom = nBottom; sResult.Append(_T("{\\shp{\\*\\shpinst"));
m_nRotation = nRotate; RENDER_RTF_INT( m_nLeft, sResult, _T("shpleft") );
RENDER_RTF_INT( m_nTop, sResult, _T("shptop") );
RENDER_RTF_INT( m_nBottom, sResult, _T("shpbottom") );
RENDER_RTF_INT( m_nRight, sResult, _T("shpright") );
RENDER_RTF_INT( m_nID, sResult, _T("shplid") );
RENDER_RTF_INT( m_nZOrder, sResult, _T("shpz") );
RENDER_RTF_INT( m_nHeader, sResult, _T("shpfhdr") );
RENDER_RTF_INT( m_nWrapType, sResult, _T("shpwr") );
RENDER_RTF_INT( m_nWrapSideType, sResult, _T("shpwrk") );
RENDER_RTF_BOOL( m_bLockAnchor, sResult, _T("shplockanchor") );
m_nRelLeft = nRelLeft; switch(m_eXAnchor)
m_nRelTop = nRelTop; {
m_nRelRight = nRelRight; case ax_page: sResult.Append( _T("\\shpbxpage") );break;
m_nRelBottom = nRelBottom; case ax_margin: sResult.Append( _T("\\shpbxmargin") );break;
m_nRelRotation = nRelRotate; case ax_column: sResult.Append( _T("\\shpbxcolumn") );break;
}
sResult.Append( _T("\\shpbxignore") );
switch(m_eYAnchor)
{
case ay_page: sResult.Append( _T("\\shpbypage") );break;
case ay_margin: sResult.Append( _T("\\shpbymargin") );break;
case ay_Para: sResult.Append( _T("\\shpbypara") );break;
}
sResult.Append( _T("\\shpbyignore") );
RENDER_RTF_INT( m_nZOrderRelative, sResult, _T("shpfblwtxt") );
sResult.Append( RenderToRtfShapeProperty( oRenderParameter ) );
//picture
if( 0 != m_oPicture )
{
sResult.Append( _T("{\\sp{\\sn pib}{\\sv ") );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
}
//textbox
if( 0 != m_aTextItems )
{
sResult.Append( _T("{\\shptxt ") );
sResult.Append( m_aTextItems->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
} }
return sResult; sResult.Append(_T("}"));
if( 0 != m_oPicture )
{
sResult.Append(_T("{\\shprslt\\par\\plain"));
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
sResult.Append(_T("\\par}"));
}
sResult.Append(_T("}"));
} }
//восстанавливаем координаты и если нужно поворачиваем
m_nLeft = nLeft;
m_nTop = nTop;
m_nRight = nRight;
m_nBottom = nBottom;
m_nRotation = nRotate;
m_nRelLeft = nRelLeft;
m_nRelTop = nRelTop;
m_nRelRight = nRelRight;
m_nRelBottom = nRelBottom;
m_nRelRotation = nRelRotate;
}
return sResult;
}
CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter) CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
{ {
CString sResult; CString sResult;
//Position absolute //Position absolute
if( PROP_DEF != m_nPositionH ) if( PROP_DEF != m_nPositionH )
sResult.AppendFormat( _T("{\\sp{\\sn posh}{\\sv %d}}"),m_nPositionH); sResult.AppendFormat( _T("{\\sp{\\sn posh}{\\sv %d}}"),m_nPositionH);
if( PROP_DEF != m_nPositionHRelative ) if( PROP_DEF != m_nPositionHRelative )
sResult.AppendFormat( _T("{\\sp{\\sn posrelh}{\\sv %d}}"),m_nPositionHRelative); sResult.AppendFormat( _T("{\\sp{\\sn posrelh}{\\sv %d}}"),m_nPositionHRelative);
if( PROP_DEF != m_nPositionV ) if( PROP_DEF != m_nPositionV )
sResult.AppendFormat( _T("{\\sp{\\sn posv}{\\sv %d}}"),m_nPositionV); sResult.AppendFormat( _T("{\\sp{\\sn posv}{\\sv %d}}"),m_nPositionV);
if( PROP_DEF != m_nPositionVRelative ) if( PROP_DEF != m_nPositionVRelative )
sResult.AppendFormat( _T("{\\sp{\\sn posrelv}{\\sv %d}}"),m_nPositionVRelative); sResult.AppendFormat( _T("{\\sp{\\sn posrelv}{\\sv %d}}"),m_nPositionVRelative);
if( PROP_DEF != m_bLayoutInCell ) if( PROP_DEF != m_bLayoutInCell )
sResult.AppendFormat( _T("{\\sp{\\sn fLayoutInCell}{\\sv %d}}"),m_bLayoutInCell); sResult.AppendFormat( _T("{\\sp{\\sn fLayoutInCell}{\\sv %d}}"),m_bLayoutInCell);
if( PROP_DEF != m_bAllowOverlap ) if( PROP_DEF != m_bAllowOverlap )
sResult.AppendFormat( _T("{\\sp{\\sn fAllowOverlap}{\\sv %d}}"),m_bAllowOverlap); sResult.AppendFormat( _T("{\\sp{\\sn fAllowOverlap}{\\sv %d}}"),m_bAllowOverlap);
//Position relative //Position relative
if( PROP_DEF != m_nPositionHPct ) if( PROP_DEF != m_nPositionHPct )
sResult.AppendFormat( _T("{\\sp{\\sn pctHorizPos}{\\sv %d}}"),m_nPositionHPct); sResult.AppendFormat( _T("{\\sp{\\sn pctHorizPos}{\\sv %d}}"),m_nPositionHPct);
if( PROP_DEF != m_nPositionVPct ) if( PROP_DEF != m_nPositionVPct )
sResult.AppendFormat( _T("{\\sp{\\sn pctVertPos}{\\sv %d}}"),m_nPositionVPct); sResult.AppendFormat( _T("{\\sp{\\sn pctVertPos}{\\sv %d}}"),m_nPositionVPct);
if( PROP_DEF != m_nPctWidth ) if( PROP_DEF != m_nPctWidth )
sResult.AppendFormat( _T("{\\sp{\\sn pctHoriz}{\\sv %d}}"),m_nPctWidth); sResult.AppendFormat( _T("{\\sp{\\sn pctHoriz}{\\sv %d}}"),m_nPctWidth);
if( PROP_DEF != m_nPctHeight ) if( PROP_DEF != m_nPctHeight )
sResult.AppendFormat( _T("{\\sp{\\sn pctVert}{\\sv %d}}"),m_nPctHeight); sResult.AppendFormat( _T("{\\sp{\\sn pctVert}{\\sv %d}}"),m_nPctHeight);
if( PROP_DEF != m_nPctWidthRelative ) if( PROP_DEF != m_nPctWidthRelative )
sResult.AppendFormat( _T("{\\sp{\\sn sizerelh}{\\sv %d}}"),m_nPctWidthRelative); sResult.AppendFormat( _T("{\\sp{\\sn sizerelh}{\\sv %d}}"),m_nPctWidthRelative);
if( PROP_DEF != m_nPctHeightRelative ) if( PROP_DEF != m_nPctHeightRelative )
sResult.AppendFormat( _T("{\\sp{\\sn sizerelv}{\\sv %d}}"),m_nPctHeightRelative); sResult.AppendFormat( _T("{\\sp{\\sn sizerelv}{\\sv %d}}"),m_nPctHeightRelative);
if( PROP_DEF != m_nColStart ) if( PROP_DEF != m_nColStart )
sResult.AppendFormat( _T("{\\sp{\\sn colStart}{\\sv %d}}"),m_nColStart); sResult.AppendFormat( _T("{\\sp{\\sn colStart}{\\sv %d}}"),m_nColStart);
if( PROP_DEF != m_nColSpan ) if( PROP_DEF != m_nColSpan )
sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"),m_nColSpan); sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"),m_nColSpan);
//Rehydration //Rehydration
if( _T("") != m_sMetroBlob ) if( _T("") != m_sMetroBlob )
sResult.AppendFormat( _T("{\\sp{\\sn metroBlob}{\\sv %d}}"),m_sMetroBlob.GetBuffer()); sResult.AppendFormat( _T("{\\sp{\\sn metroBlob}{\\sv %d}}"),m_sMetroBlob.GetBuffer());
//Object Type //Object Type
if( PROP_DEF != m_bIsBullet ) if( PROP_DEF != m_bIsBullet )
sResult.AppendFormat( _T("{\\sp{\\sn fIsBullet}{\\sv %d}}"),m_bIsBullet); sResult.AppendFormat( _T("{\\sp{\\sn fIsBullet}{\\sv %d}}"),m_bIsBullet);
if( PROP_DEF != m_nRotation ) if( PROP_DEF != m_nRotation )
sResult.AppendFormat( _T("{\\sp{\\sn rotation}{\\sv %d}}"),m_nRotation); sResult.AppendFormat( _T("{\\sp{\\sn rotation}{\\sv %d}}"),m_nRotation);
if( PROP_DEF != m_bFlipV ) if( PROP_DEF != m_bFlipV )
sResult.AppendFormat( _T("{\\sp{\\sn fFlipV}{\\sv %d}}"),m_bFlipV); sResult.AppendFormat( _T("{\\sp{\\sn fFlipV}{\\sv %d}}"),m_bFlipV);
if( PROP_DEF != m_bFlipH ) if( PROP_DEF != m_bFlipH )
sResult.AppendFormat( _T("{\\sp{\\sn fFlipH}{\\sv %d}}"),m_bFlipH); sResult.AppendFormat( _T("{\\sp{\\sn fFlipH}{\\sv %d}}"),m_bFlipH);
if( PROP_DEF != m_nShapeType ) if( PROP_DEF != m_nShapeType )
sResult.AppendFormat( _T("{\\sp{\\sn shapeType}{\\sv %d}}"),m_nShapeType); sResult.AppendFormat( _T("{\\sp{\\sn shapeType}{\\sv %d}}"),m_nShapeType);
if( PROP_DEF != m_nWrapDistLeft ) if( PROP_DEF != m_nWrapDistLeft )
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistLeft}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistLeft )); sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistLeft}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistLeft ));
if( PROP_DEF != m_nWrapDistTop ) if( PROP_DEF != m_nWrapDistTop )
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistTop}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistTop )); sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistTop}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistTop ));
if( PROP_DEF != m_nWrapDistRight ) if( PROP_DEF != m_nWrapDistRight )
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistRight}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistRight )); sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistRight}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistRight ));
if( PROP_DEF != m_nWrapDistBottom ) if( PROP_DEF != m_nWrapDistBottom )
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistBottom}{\\sv %d}}"),RtfUtility::Twips2Emu( m_nWrapDistBottom )); sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistBottom}{\\sv %d}}"),RtfUtility::Twips2Emu( m_nWrapDistBottom ));
if( PROP_DEF != m_nZOrderRelative ) if( PROP_DEF != m_nZOrderRelative )
sResult.AppendFormat( _T("{\\sp{\\sn fBehindDocument}{\\sv %d}}"),m_nZOrderRelative); sResult.AppendFormat( _T("{\\sp{\\sn fBehindDocument}{\\sv %d}}"),m_nZOrderRelative);
if( PROP_DEF != m_bHidden ) if( PROP_DEF != m_bHidden )
sResult.AppendFormat( _T("{\\sp{\\sn fHidden}{\\sv %d}}"),m_bHidden); sResult.AppendFormat( _T("{\\sp{\\sn fHidden}{\\sv %d}}"),m_bHidden);
//Geometry //Geometry
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjustValue}{\\sv %d}}"),m_nAdjustValue ); sResult.AppendFormat( _T("{\\sp{\\sn adjustValue}{\\sv %d}}"),m_nAdjustValue );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust2Value}{\\sv %d}}"),m_nAdjustValue2 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust2Value}{\\sv %d}}"),m_nAdjustValue2 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust3Value}{\\sv %d}}"),m_nAdjustValue3 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust3Value}{\\sv %d}}"),m_nAdjustValue3 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust4Value}{\\sv %d}}"),m_nAdjustValue4 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust4Value}{\\sv %d}}"),m_nAdjustValue4 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust5Value}{\\sv %d}}"),m_nAdjustValue5 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust5Value}{\\sv %d}}"),m_nAdjustValue5 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust6Value}{\\sv %d}}"),m_nAdjustValue6 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust6Value}{\\sv %d}}"),m_nAdjustValue6 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust7Value}{\\sv %d}}"),m_nAdjustValue7 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust7Value}{\\sv %d}}"),m_nAdjustValue7 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust8Value}{\\sv %d}}"),m_nAdjustValue8 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust8Value}{\\sv %d}}"),m_nAdjustValue8 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust9Value}{\\sv %d}}"),m_nAdjustValue9 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust9Value}{\\sv %d}}"),m_nAdjustValue9 );
if( PROP_DEF != m_nAdjustValue ) if( PROP_DEF != m_nAdjustValue )
sResult.AppendFormat( _T("{\\sp{\\sn adjust10Value}{\\sv %d}}"),m_nAdjustValue10 ); sResult.AppendFormat( _T("{\\sp{\\sn adjust10Value}{\\sv %d}}"),m_nAdjustValue10 );
//Connectors //Connectors
if( PROP_DEF != m_nConnectionType ) if( PROP_DEF != m_nConnectionType )
sResult.AppendFormat( _T("{\\sp{\\sn cxk}{\\sv %d}}"),m_nConnectionType ); sResult.AppendFormat( _T("{\\sp{\\sn cxk}{\\sv %d}}"),m_nConnectionType );
if( PROP_DEF != m_nConnectorStyle ) if( PROP_DEF != m_nConnectorStyle )
sResult.AppendFormat( _T("{\\sp{\\sn cxstyle}{\\sv %d}}"),m_nConnectorStyle ); sResult.AppendFormat( _T("{\\sp{\\sn cxstyle}{\\sv %d}}"),m_nConnectorStyle );
//WordArt Effects //WordArt Effects
if( PROP_DEF != m_nCropFromTop ) if( PROP_DEF != m_nCropFromTop )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromTop}{\\sv %d}}"),m_nCropFromTop ); sResult.AppendFormat( _T("{\\sp{\\sn cropFromTop}{\\sv %d}}"),m_nCropFromTop );
if( PROP_DEF != m_nCropFromBottom ) if( PROP_DEF != m_nCropFromBottom )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromBottom}{\\sv %d}}"),m_nCropFromBottom ); sResult.AppendFormat( _T("{\\sp{\\sn cropFromBottom}{\\sv %d}}"),m_nCropFromBottom );
if( PROP_DEF != m_nCropFromLeft ) if( PROP_DEF != m_nCropFromLeft )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromLeft}{\\sv %d}}"),m_nCropFromLeft ); sResult.AppendFormat( _T("{\\sp{\\sn cropFromLeft}{\\sv %d}}"),m_nCropFromLeft );
if( PROP_DEF != m_nCropFromRight ) if( PROP_DEF != m_nCropFromRight )
sResult.AppendFormat( _T("{\\sp{\\sn cropFromRight}{\\sv %d}}"),m_nCropFromRight ); sResult.AppendFormat( _T("{\\sp{\\sn cropFromRight}{\\sv %d}}"),m_nCropFromRight );
//Grouped Shapes //Grouped Shapes
if( PROP_DEF != m_nGroupBottom ) if( PROP_DEF != m_nGroupBottom )
sResult.AppendFormat( _T("{\\sp{\\sn groupBottom}{\\sv %d}}"),m_nCropFromRight ); sResult.AppendFormat( _T("{\\sp{\\sn groupBottom}{\\sv %d}}"),m_nCropFromRight );
if( PROP_DEF != m_nGroupLeft ) if( PROP_DEF != m_nGroupLeft )
sResult.AppendFormat( _T("{\\sp{\\sn groupLeft}{\\sv %d}}"),m_nGroupLeft ); sResult.AppendFormat( _T("{\\sp{\\sn groupLeft}{\\sv %d}}"),m_nGroupLeft );
if( PROP_DEF != m_nGroupRight ) if( PROP_DEF != m_nGroupRight )
sResult.AppendFormat( _T("{\\sp{\\sn groupRight}{\\sv %d}}"),m_nGroupRight ); sResult.AppendFormat( _T("{\\sp{\\sn groupRight}{\\sv %d}}"),m_nGroupRight );
if( PROP_DEF != m_nGroupTop ) if( PROP_DEF != m_nGroupTop )
sResult.AppendFormat( _T("{\\sp{\\sn groupTop}{\\sv %d}}"),m_nGroupTop ); sResult.AppendFormat( _T("{\\sp{\\sn groupTop}{\\sv %d}}"),m_nGroupTop );
if( PROP_DEF != m_nRelBottom ) if( PROP_DEF != m_nRelBottom )
sResult.AppendFormat( _T("{\\sp{\\sn relBottom}{\\sv %d}}"),m_nRelBottom ); sResult.AppendFormat( _T("{\\sp{\\sn relBottom}{\\sv %d}}"),m_nRelBottom );
if( PROP_DEF != m_nRelLeft ) if( PROP_DEF != m_nRelLeft )
sResult.AppendFormat( _T("{\\sp{\\sn relLeft}{\\sv %d}}"),m_nRelLeft ); sResult.AppendFormat( _T("{\\sp{\\sn relLeft}{\\sv %d}}"),m_nRelLeft );
if( PROP_DEF != m_nRelRight ) if( PROP_DEF != m_nRelRight )
sResult.AppendFormat( _T("{\\sp{\\sn relRight}{\\sv %d}}"),m_nRelRight ); sResult.AppendFormat( _T("{\\sp{\\sn relRight}{\\sv %d}}"),m_nRelRight );
if( PROP_DEF != m_nRelTop ) if( PROP_DEF != m_nRelTop )
sResult.AppendFormat( _T("{\\sp{\\sn relTop}{\\sv %d}}"),m_nRelTop ); sResult.AppendFormat( _T("{\\sp{\\sn relTop}{\\sv %d}}"),m_nRelTop );
if( PROP_DEF != m_nRelRotation ) if( PROP_DEF != m_nRelRotation )
sResult.AppendFormat( _T("{\\sp{\\sn relRotation}{\\sv %d}}"),m_nRelRotation ); sResult.AppendFormat( _T("{\\sp{\\sn relRotation}{\\sv %d}}"),m_nRelRotation );
if( PROP_DEF != m_nRelZOrder ) if( PROP_DEF != m_nRelZOrder )
sResult.AppendFormat( _T("{\\sp{\\sn dhgt}{\\sv %d}}"),m_nRelZOrder ); sResult.AppendFormat( _T("{\\sp{\\sn dhgt}{\\sv %d}}"),m_nRelZOrder );
//Line //Line
if( PROP_DEF != m_nLineStartArrow ) if( PROP_DEF != m_nLineStartArrow )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowhead}{\\sv %d}}"),m_nLineStartArrow ); sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowhead}{\\sv %d}}"),m_nLineStartArrow );
if( PROP_DEF != m_nLineEndArrow ) if( PROP_DEF != m_nLineEndArrow )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowhead}{\\sv %d}}"),m_nLineEndArrow ); sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowhead}{\\sv %d}}"),m_nLineEndArrow );
if( PROP_DEF != m_nLineStartArrowWidth ) if( PROP_DEF != m_nLineStartArrowWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowWidth}{\\sv %d}}"),m_nLineStartArrowWidth ); sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowWidth}{\\sv %d}}"),m_nLineStartArrowWidth );
if( PROP_DEF != m_nLineStartArrowLength ) if( PROP_DEF != m_nLineStartArrowLength )
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowLength}{\\sv %d}}"),m_nLineStartArrowLength ); sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowLength}{\\sv %d}}"),m_nLineStartArrowLength );
if( PROP_DEF != m_nLineEndArrowWidth ) if( PROP_DEF != m_nLineEndArrowWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowWidth}{\\sv %d}}"),m_nLineEndArrowWidth ); sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowWidth}{\\sv %d}}"),m_nLineEndArrowWidth );
if( PROP_DEF != m_nLineEndArrowLength ) if( PROP_DEF != m_nLineEndArrowLength )
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowLength}{\\sv %d}}"),m_nLineEndArrowLength ); sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowLength}{\\sv %d}}"),m_nLineEndArrowLength );
if( PROP_DEF != m_nLineWidth ) if( PROP_DEF != m_nLineWidth )
sResult.AppendFormat( _T("{\\sp{\\sn lineWidth}{\\sv %d}}"),m_nLineWidth ); sResult.AppendFormat( _T("{\\sp{\\sn lineWidth}{\\sv %d}}"),m_nLineWidth );
//pWrapPolygonVertices Points of the text wrap polygon. //pWrapPolygonVertices Points of the text wrap polygon.
int nWrapPointCount = (int)m_aWrapPoints.size(); int nWrapPointCount = (int)m_aWrapPoints.size();
if( nWrapPointCount > 0 ) if( nWrapPointCount > 0 )
{ {
sResult.AppendFormat( _T("{\\sp{\\sn pWrapPolygonVertices}{\\sv 8;%d"), nWrapPointCount / 2 ); sResult.AppendFormat( _T("{\\sp{\\sn pWrapPolygonVertices}{\\sv 8;%d"), nWrapPointCount / 2 );
for( int i = 0; i < nWrapPointCount - 1; i += 2 ) for( int i = 0; i < nWrapPointCount - 1; i += 2 )
sResult.AppendFormat( _T(";(%d,%d)"), m_aWrapPoints[i], m_aWrapPoints[ i + 1 ] ); sResult.AppendFormat( _T(";(%d,%d)"), m_aWrapPoints[i], m_aWrapPoints[ i + 1 ] );
sResult.Append( _T("}}") ); sResult.Append( _T("}}") );
} }
return sResult; return sResult;
} }
CString RtfShape::RenderToOOX(RenderParameter oRenderParameter) CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
RtfDocument* poDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
{
if( false && RENDER_TO_OOX_PARAM_SHAPE_WSHAPE != oRenderParameter.nType && NULL != m_oPicture ) //картинки пишем как drawing
{ {
CString sResult; if( st_inline == m_eShapeType )
RtfDocument* poDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
{ {
if( false && RENDER_TO_OOX_PARAM_SHAPE_WSHAPE != oRenderParameter.nType && NULL != m_oPicture ) //картинки пишем как drawing if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{ {
if( st_inline == m_eShapeType ) sResult.Append( _T("<w:r><w:drawing><wp:inline") );
{ int nDistLeft = 0;
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal ) int nDistTop = 0;
{ int nDistRight = 0;
sResult.Append( _T("<w:r><w:drawing><wp:inline") ); int nDistBottom = 0;
int nDistLeft = 0; if( PROP_DEF != m_nWrapDistLeft )
int nDistTop = 0; nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft );
int nDistRight = 0; if( PROP_DEF != m_nWrapDistTop )
int nDistBottom = 0; nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop );
if( PROP_DEF != m_nWrapDistLeft ) if( PROP_DEF != m_nWrapDistRight )
nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft ); nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight );
if( PROP_DEF != m_nWrapDistTop ) if( PROP_DEF != m_nWrapDistBottom )
nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop ); nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom );
if( PROP_DEF != m_nWrapDistRight ) RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") )
nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight ); RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") )
if( PROP_DEF != m_nWrapDistBottom ) RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") )
nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom ); RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") )
RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") ) sResult.Append( _T(">") );
RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") )
RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") )
RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") )
sResult.Append( _T(">") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal ) if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( m_oPicture->m_nWidthGoal ), RtfUtility::Twips2Emu( m_oPicture->m_nHeightGoal ) ); sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( m_oPicture->m_nWidthGoal ), RtfUtility::Twips2Emu( m_oPicture->m_nHeightGoal ) );
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId(); int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), m_sName.GetBuffer(), nImageID ); sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), m_sName.GetBuffer(), nImageID );
int nCropLeft = PROP_DEF; int nCropLeft = PROP_DEF;
int nCropTop = PROP_DEF; int nCropTop = PROP_DEF;
int nCropRight = PROP_DEF; int nCropRight = PROP_DEF;
int nCropBottom = PROP_DEF; int nCropBottom = PROP_DEF;
if( PROP_DEF != m_nCropFromLeft ) if( PROP_DEF != m_nCropFromLeft )
nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 ); nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL ) else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL )
nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal ); nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromTop ) if( PROP_DEF != m_nCropFromTop )
nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 ); nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT ) else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT )
nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal ); nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal );
if( PROP_DEF != m_nCropFromRight ) if( PROP_DEF != m_nCropFromRight )
nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 ); nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 );
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR ) else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR )
nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal ); nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal );
if( PROP_DEF != m_nCropFromBottom ) if( PROP_DEF != m_nCropFromBottom )
nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 ); nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB ) else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB )
nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal ); nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal );
sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"));
sResult.Append( _T("<pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
if( 0 == m_bLockAnchor )
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
else
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() ); sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"));
CString sCrop;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
if( PROP_DEF != nCropTop )
sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop );
if( PROP_DEF != nCropRight )
sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight );
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<pic:spPr bwMode=\"auto\">") );
sResult.Append( _T("<a:xfrm") );
int nRotation = PROP_DEF;
if( PROP_DEF != m_nRotation )
nRotation = m_nRotation;
else
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation )
{
int nOOXRotation = (int)( 60000.0 * nRotation / 0x10000 );//Опытным путем 1 градус == 60000
sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation );
}
sResult.Append( _T(">") );
sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal );
sResult.Append( _T("</a:xfrm>") );
sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") );
sResult.Append( _T("</pic:spPr>") );
}
sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") );
sResult.Append( _T("</wp:inline></w:drawing></w:r>") ); sResult.Append( _T("<pic:nvPicPr>") );
} sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
} if( 0 == m_bLockAnchor )
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
else else
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
CString sCrop;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
if( PROP_DEF != nCropTop )
sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop );
if( PROP_DEF != nCropRight )
sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight );
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{ {
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal ) sResult.Append( _T("<pic:spPr bwMode=\"auto\">") );
sResult.Append( _T("<a:xfrm") );
int nRotation = PROP_DEF;
if( PROP_DEF != m_nRotation )
nRotation = m_nRotation;
else
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation )
{ {
sResult.Append( _T("<w:r><w:drawing><wp:anchor") ); int nOOXRotation = (int)( 60000.0 * nRotation / 0x10000 );//Опытным путем 1 градус == 60000
int nDistLeft = 0;//аттрибуты обязательные sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation );
int nDistTop = 0; }
int nDistRight = 0; sResult.Append( _T(">") );
int nDistBottom = 0; sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal );
int nOverlap = 1; sResult.Append( _T("</a:xfrm>") );
int nBehind = 0; sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") );
int nLayout = 1; sResult.Append( _T("</pic:spPr>") );
int nLocked = 0; }
int nZIndex = 100; sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") );
sResult.Append( _T("</wp:inline></w:drawing></w:r>") );
}
}
else
{
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<w:r><w:drawing><wp:anchor") );
int nDistLeft = 0;//аттрибуты обязательные
int nDistTop = 0;
int nDistRight = 0;
int nDistBottom = 0;
int nOverlap = 1;
int nBehind = 0;
int nLayout = 1;
int nLocked = 0;
int nZIndex = 100;
if( PROP_DEF != m_nWrapDistLeft )
nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft );
if( PROP_DEF != m_nWrapDistTop )
nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop );
if( PROP_DEF != m_nWrapDistRight )
nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight );
if( PROP_DEF != m_nWrapDistBottom )
nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom );
if( PROP_DEF != m_bAllowOverlap )
nOverlap = m_bAllowOverlap;
if( PROP_DEF != m_nZOrderRelative )
nBehind = m_nZOrderRelative;
if( PROP_DEF != m_bLayoutInCell )
nLayout = m_bLayoutInCell;
if( PROP_DEF != m_bLockAnchor )
nLocked = m_bLockAnchor;
if( PROP_DEF != m_nZOrder )
nZIndex = m_nZOrder;
RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") ) if( PROP_DEF != m_nWrapDistLeft )
RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") ) nDistLeft = RtfUtility::Twips2Emu( m_nWrapDistLeft );
RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") ) if( PROP_DEF != m_nWrapDistTop )
RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") ) nDistTop = RtfUtility::Twips2Emu( m_nWrapDistTop );
RENDER_OOX_BOOL_ATTRIBUTE( nOverlap, sResult, _T("allowOverlap") ) if( PROP_DEF != m_nWrapDistRight )
RENDER_OOX_BOOL_ATTRIBUTE( nBehind, sResult, _T("behindDoc") ) nDistRight = RtfUtility::Twips2Emu( m_nWrapDistRight );
RENDER_OOX_BOOL_ATTRIBUTE( m_bHidden, sResult, _T("hidden") ) if( PROP_DEF != m_nWrapDistBottom )
RENDER_OOX_BOOL_ATTRIBUTE( nLayout, sResult, _T("layoutInCell") ) nDistBottom = RtfUtility::Twips2Emu( m_nWrapDistBottom );
RENDER_OOX_BOOL_ATTRIBUTE( nLocked, sResult, _T("locked") ) if( PROP_DEF != m_bAllowOverlap )
RENDER_OOX_INT_ATTRIBUTE( nZIndex, sResult, _T("relativeHeight") ) nOverlap = m_bAllowOverlap;
RENDER_OOX_BOOL_ATTRIBUTE( 0, sResult, _T("simplePos") ) if( PROP_DEF != m_nZOrderRelative )
sResult.Append( _T(">") ); nBehind = m_nZOrderRelative;
if( PROP_DEF != m_bLayoutInCell )
nLayout = m_bLayoutInCell;
if( PROP_DEF != m_bLockAnchor )
nLocked = m_bLockAnchor;
if( PROP_DEF != m_nZOrder )
nZIndex = m_nZOrder;
if( PROP_DEF != m_nLeft && PROP_DEF != m_nTop ) RENDER_OOX_INT_ATTRIBUTE( nDistLeft, sResult, _T("distL") )
sResult.AppendFormat( _T("<wp:simplePos x=\"%d\" y=\"%d\"/>"),RtfUtility::Twips2Emu(m_nLeft), RtfUtility::Twips2Emu(m_nTop) ); RENDER_OOX_INT_ATTRIBUTE( nDistTop, sResult, _T("distT") )
RENDER_OOX_INT_ATTRIBUTE( nDistRight, sResult, _T("distR") )
RENDER_OOX_INT_ATTRIBUTE( nDistBottom, sResult, _T("distB") )
RENDER_OOX_BOOL_ATTRIBUTE( nOverlap, sResult, _T("allowOverlap") )
RENDER_OOX_BOOL_ATTRIBUTE( nBehind, sResult, _T("behindDoc") )
RENDER_OOX_BOOL_ATTRIBUTE( m_bHidden, sResult, _T("hidden") )
RENDER_OOX_BOOL_ATTRIBUTE( nLayout, sResult, _T("layoutInCell") )
RENDER_OOX_BOOL_ATTRIBUTE( nLocked, sResult, _T("locked") )
RENDER_OOX_INT_ATTRIBUTE( nZIndex, sResult, _T("relativeHeight") )
RENDER_OOX_BOOL_ATTRIBUTE( 0, sResult, _T("simplePos") )
sResult.Append( _T(">") );
if( ( PROP_DEF != m_nPositionHRelative || ax_none != m_eXAnchor ) && (PROP_DEF != m_nPositionH || PROP_DEF != m_nLeft ) ) if( PROP_DEF != m_nLeft && PROP_DEF != m_nTop )
sResult.AppendFormat( _T("<wp:simplePos x=\"%d\" y=\"%d\"/>"),RtfUtility::Twips2Emu(m_nLeft), RtfUtility::Twips2Emu(m_nTop) );
if( ( PROP_DEF != m_nPositionHRelative || ax_none != m_eXAnchor ) && (PROP_DEF != m_nPositionH || PROP_DEF != m_nLeft ) )
{
sResult.Append( _T("<wp:positionH") );
if( PROP_DEF != m_nPositionHRelative )
{
switch( m_nPositionHRelative )
{ {
sResult.Append( _T("<wp:positionH") ); case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
if( PROP_DEF != m_nPositionHRelative ) case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break;
{ case 2: sResult.Append( _T(" relativeFrom=\"column\"") );break;
switch( m_nPositionHRelative ) case 3: sResult.Append( _T(" relativeFrom=\"character\"") );break;
{ case 4: sResult.Append( _T(" relativeFrom=\"leftMargin\"") );break;
case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break; case 5: sResult.Append( _T(" relativeFrom=\"rightMargin\"") );break;
case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break; case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 2: sResult.Append( _T(" relativeFrom=\"column\"") );break; case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
case 3: sResult.Append( _T(" relativeFrom=\"character\"") );break;
case 4: sResult.Append( _T(" relativeFrom=\"leftMargin\"") );break;
case 5: sResult.Append( _T(" relativeFrom=\"rightMargin\"") );break;
case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
}
}
else
{
switch( m_eXAnchor )
{
case ax_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case ax_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case ax_column: sResult.Append( _T(" relativeFrom=\"column\"") );break;
}
}
sResult.Append( _T(">") );
if( PROP_DEF != m_nPositionH )
{
switch( m_nPositionH )
{
case 1: sResult.Append( _T("<wp:align>left</wp:align>") );break;
case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>right</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
}
}
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nLeft ) );
}
sResult.Append( _T("</wp:positionH>") );
} }
if( ( PROP_DEF != m_nPositionVRelative || ax_none != m_eYAnchor ) && (PROP_DEF != m_nPositionV || PROP_DEF != m_nTop ) ) }
else
{
switch( m_eXAnchor )
{ {
sResult.Append( _T("<wp:positionV") ); case ax_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
if( PROP_DEF != m_nPositionVRelative ) case ax_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
{ case ax_column: sResult.Append( _T(" relativeFrom=\"column\"") );break;
switch( m_nPositionVRelative )
{
case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case 2: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
case 3: sResult.Append( _T(" relativeFrom=\"line\"") );break;
case 4: sResult.Append( _T(" relativeFrom=\"topMargin\"") );break;
case 5: sResult.Append( _T(" relativeFrom=\"bottomMargin\"") );break;
case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
}
}
else
{
switch( m_eYAnchor )
{
case ay_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
case ay_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case ay_Para: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
}
}
sResult.Append( _T(">") );
if( PROP_DEF != m_nPositionV )
{
switch( m_nPositionV )
{
case 1: sResult.Append( _T("<wp:align>top</wp:align>") );break;
case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>bottom</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
}
}
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nTop ) );
}
sResult.Append( _T("</wp:positionV>") );
} }
}
int nWidth; sResult.Append( _T(">") );
int nHeight; if( PROP_DEF != m_nPositionH )
if( PROP_DEF != m_nLeft && PROP_DEF != m_nRight && PROP_DEF != m_nTop && PROP_DEF != m_nBottom ) {
switch( m_nPositionH )
{ {
nWidth = m_nRight - m_nLeft; case 1: sResult.Append( _T("<wp:align>left</wp:align>") );break;
nHeight = m_nBottom - m_nTop; case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>right</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
} }
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal ) }
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nLeft ) );
}
sResult.Append( _T("</wp:positionH>") );
}
if( ( PROP_DEF != m_nPositionVRelative || ax_none != m_eYAnchor ) && (PROP_DEF != m_nPositionV || PROP_DEF != m_nTop ) )
{
sResult.Append( _T("<wp:positionV") );
if( PROP_DEF != m_nPositionVRelative )
{
switch( m_nPositionVRelative )
{ {
nWidth = m_oPicture->m_nWidthGoal; case 0: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
nHeight = m_oPicture->m_nHeightGoal; case 1: sResult.Append( _T(" relativeFrom=\"page\"") );break;
case 2: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
case 3: sResult.Append( _T(" relativeFrom=\"line\"") );break;
case 4: sResult.Append( _T(" relativeFrom=\"topMargin\"") );break;
case 5: sResult.Append( _T(" relativeFrom=\"bottomMargin\"") );break;
case 6: sResult.Append( _T(" relativeFrom=\"insideMargin\"") );break;
case 7: sResult.Append( _T(" relativeFrom=\"outsideMargin\"") );break;
} }
if( PROP_DEF != nWidth && PROP_DEF != nHeight ) }
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( nWidth ), RtfUtility::Twips2Emu( nHeight ) ); else
{
if( PROP_DEF != m_nWrapType && 3 != m_nWrapType) switch( m_eYAnchor )
{ {
sResult.Append( _T("<") ); case ay_margin: sResult.Append( _T(" relativeFrom=\"margin\"") );break;
CString sTag; case ay_page: sResult.Append( _T(" relativeFrom=\"page\"") );break;
switch( m_nWrapType ) case ay_Para: sResult.Append( _T(" relativeFrom=\"paragraph\"") );break;
{
case 1:sTag.Append( _T("wp:wrapTopAndBottom") );break;
case 2:sTag.Append( _T("wp:wrapSquare") );break;
case 3:sTag.Append( _T("wp:wrapNone") );break;
case 4:sTag.Append( _T("wp:wrapTight") );break;
case 5:sTag.Append( _T("wp:wrapThrough") );break;
}
sResult.Append( sTag );
switch( m_nWrapSideType )
{
case 0:sResult.Append( _T(" wrapText=\"bothSides\"") );break;
case 1:sResult.Append( _T(" wrapText=\"left\"") );break;
case 2:sResult.Append( _T(" wrapText=\"right\"") );break;
case 3:sResult.Append( _T(" wrapText=\"largest\"") );break;
}
if( m_aWrapPoints.size() == 0 )
sResult.Append( _T("/>") );
else
{
sResult.Append( _T(">") );
sResult.Append( _T("<wp:wrapPolygon>") );
if( m_aWrapPoints.size() > 1 )
sResult.AppendFormat( _T("<wp:start x=\"%d\" y=\"%d\" />"), m_aWrapPoints[0], m_aWrapPoints[1] );
for( int i = 2; i < (int)m_aWrapPoints.size() - 1; i+=2 )
sResult.AppendFormat( _T("<wp:lineTo x=\"%d\" y=\"%d\" />"), m_aWrapPoints[i], m_aWrapPoints[i+1] );
sResult.Append( _T("</wp:wrapPolygon>") );
sResult.AppendFormat( _T("</%ls>"), sTag.GetBuffer() );
}
} }
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId(); }
sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() ); sResult.Append( _T(">") );
if( PROP_DEF != m_nPositionV )
{
switch( m_nPositionV )
{
case 1: sResult.Append( _T("<wp:align>top</wp:align>") );break;
case 2: sResult.Append( _T("<wp:align>center</wp:align>") );break;
case 3: sResult.Append( _T("<wp:align>bottom</wp:align>") );break;
case 4: sResult.Append( _T("<wp:align>inside</wp:align>") );break;
case 5: sResult.Append( _T("<wp:align>outside</wp:align>") );break;
}
}
else
{
sResult.AppendFormat( _T("<wp:posOffset>%d</wp:posOffset>"), RtfUtility::Twips2Emu( m_nTop ) );
}
sResult.Append( _T("</wp:positionV>") );
}
int nCropLeft = PROP_DEF; int nWidth;
int nCropTop = PROP_DEF; int nHeight;
int nCropRight = PROP_DEF; if( PROP_DEF != m_nLeft && PROP_DEF != m_nRight && PROP_DEF != m_nTop && PROP_DEF != m_nBottom )
int nCropBottom = PROP_DEF; {
nWidth = m_nRight - m_nLeft;
nHeight = m_nBottom - m_nTop;
}
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
nWidth = m_oPicture->m_nWidthGoal;
nHeight = m_oPicture->m_nHeightGoal;
}
if( PROP_DEF != nWidth && PROP_DEF != nHeight )
sResult.AppendFormat( _T("<wp:extent cx=\"%d\" cy=\"%d\"/>"), RtfUtility::Twips2Emu( nWidth ), RtfUtility::Twips2Emu( nHeight ) );
if( PROP_DEF != m_nCropFromLeft ) if( PROP_DEF != m_nWrapType && 3 != m_nWrapType)
nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 ); {
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL ) sResult.Append( _T("<") );
nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal ); CString sTag;
if( PROP_DEF != m_nCropFromTop ) switch( m_nWrapType )
nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 ); {
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT ) case 1:sTag.Append( _T("wp:wrapTopAndBottom") );break;
nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal ); case 2:sTag.Append( _T("wp:wrapSquare") );break;
if( PROP_DEF != m_nCropFromRight ) case 3:sTag.Append( _T("wp:wrapNone") );break;
nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 ); case 4:sTag.Append( _T("wp:wrapTight") );break;
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR ) case 5:sTag.Append( _T("wp:wrapThrough") );break;
nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal ); }
if( PROP_DEF != m_nCropFromBottom ) sResult.Append( sTag );
nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 ); switch( m_nWrapSideType )
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB ) {
nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal ); case 0:sResult.Append( _T(" wrapText=\"bothSides\"") );break;
case 1:sResult.Append( _T(" wrapText=\"left\"") );break;
case 2:sResult.Append( _T(" wrapText=\"right\"") );break;
case 3:sResult.Append( _T(" wrapText=\"largest\"") );break;
}
sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">")); if( m_aWrapPoints.size() == 0 )
sResult.Append( _T("/>") );
else
{
sResult.Append( _T(">") );
sResult.Append( _T("<wp:wrapPolygon>") );
if( m_aWrapPoints.size() > 1 )
sResult.AppendFormat( _T("<wp:start x=\"%d\" y=\"%d\" />"), m_aWrapPoints[0], m_aWrapPoints[1] );
for( int i = 2; i < (int)m_aWrapPoints.size() - 1; i+=2 )
sResult.AppendFormat( _T("<wp:lineTo x=\"%d\" y=\"%d\" />"), m_aWrapPoints[i], m_aWrapPoints[i+1] );
sResult.Append( _T("</wp:wrapPolygon>") );
sResult.AppendFormat( _T("</%ls>"), sTag.GetBuffer() );
}
}
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
sResult.AppendFormat( _T("<wp:docPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
sResult.Append( _T("<pic:nvPicPr>") ); int nCropLeft = PROP_DEF;
sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() ); int nCropTop = PROP_DEF;
if( 0 == m_bLockAnchor ) int nCropRight = PROP_DEF;
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") ); int nCropBottom = PROP_DEF;
else
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() ); if( PROP_DEF != m_nCropFromLeft )
CString sCrop; nCropLeft = (int)( 100000.0 * m_nCropFromLeft / 65536 );
if( PROP_DEF != nCropLeft ) else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента nCropLeft = (int)( 100000.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal );
if( PROP_DEF != nCropTop ) if( PROP_DEF != m_nCropFromTop )
sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop ); nCropTop = (int)( 100000.0 * m_nCropFromTop / 65536 );
if( PROP_DEF != nCropRight ) else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT )
sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight ); nCropTop = (int)( 100000.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal );
if( PROP_DEF != nCropBottom ) if( PROP_DEF != m_nCropFromRight )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom ); nCropRight = (int)( 100000.0 * m_nCropFromRight / 65536 );
if( false == sCrop.IsEmpty() ) else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() ); nCropRight = (int)( 100000.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") ); if( PROP_DEF != m_nCropFromBottom )
nCropBottom = (int)( 100000.0 * m_nCropFromBottom / 65536 );
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB )
nCropBottom = (int)( 100000.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal );
sResult.Append( _T("</pic:blipFill>") ); sResult.Append( _T("<a:graphic><a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"><pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"));
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{ sResult.Append( _T("<pic:nvPicPr>") );
sResult.Append( _T("<pic:spPr bwMode=\"auto\">") ); sResult.AppendFormat( _T("<pic:cNvPr id=\"%d\" name=\"%ls\" descr=\"\"/>"), nImageID, m_sName.GetBuffer() );
sResult.Append( _T("<a:xfrm") ); if( 0 == m_bLockAnchor )
int nRotation = PROP_DEF; sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"0\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
if( PROP_DEF != m_nRotation ) else
nRotation = m_nRotation; sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
else sResult.Append( _T("</pic:nvPicPr>") );
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation ) sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
{ CString sCrop;
int nOOXRotation = (int)( 60000.0 * nRotation / 65536 );//Опытным путем 1 градус == 60000 if( PROP_DEF != nCropLeft )
sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation ); sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
} if( PROP_DEF != nCropTop )
sResult.Append( _T(">") ); sCrop.AppendFormat( _T(" t=\"%d\""), nCropTop );
sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal ); if( PROP_DEF != nCropRight )
sResult.Append( _T("</a:xfrm>") ); sCrop.AppendFormat( _T(" r=\"%d\""), nCropRight );
sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") ); if( PROP_DEF != nCropBottom )
sResult.Append( _T("</pic:spPr>") ); sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
} if( false == sCrop.IsEmpty() )
sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") ); sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</wp:anchor></w:drawing></w:r>") ); sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
{
sResult.Append( _T("<pic:spPr bwMode=\"auto\">") );
sResult.Append( _T("<a:xfrm") );
int nRotation = PROP_DEF;
if( PROP_DEF != m_nRotation )
nRotation = m_nRotation;
else
nRotation = m_nRelRotation;
if( PROP_DEF != nRotation )
{
int nOOXRotation = (int)( 60000.0 * nRotation / 65536 );//Опытным путем 1 градус == 60000
sResult.AppendFormat( _T(" rot=\"%d\""), nOOXRotation );
}
sResult.Append( _T(">") );
sResult.AppendFormat( _T("<a:off x=\"0\" y=\"0\"/><a:ext cx=\"%d\" cy=\"%d\"/>"), m_oPicture->m_nWidthGoal, m_oPicture->m_nHeightGoal );
sResult.Append( _T("</a:xfrm>") );
sResult.Append( _T("<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom>") );
sResult.Append( _T("</pic:spPr>") );
} }
} sResult.Append( _T("</pic:pic></a:graphicData></a:graphic>") );
sResult.Append( _T("</wp:anchor></w:drawing></w:r>") );
} }
else }
{ }
TextItemContainerPtr aTempTextItems; else
if( 75 == m_nShapeType && 0 != m_aTextItems ) {
{//Значит это Ole обьект с anchor, для него все также только TextBox надо делать по-другому TextItemContainerPtr aTempTextItems;
aTempTextItems = m_aTextItems; if( 75 == m_nShapeType && 0 != m_aTextItems )
m_aTextItems = TextItemContainerPtr(); {//Значит это Ole обьект с anchor, для него все также только TextBox надо делать по-другому
m_bIsOle = true; aTempTextItems = m_aTextItems;
} m_aTextItems = TextItemContainerPtr();
m_bIsOle = true;
}
sResult = RenderToOOXBegin(oRenderParameter); sResult = RenderToOOXBegin(oRenderParameter);
if( _T("") != sResult ) if( _T("") != sResult )
sResult.Append( RenderToOOXEnd(oRenderParameter) ); sResult.Append( RenderToOOXEnd(oRenderParameter) );
CString sOle; CString sOle;
if( 0 != aTempTextItems ) if( 0 != aTempTextItems )
{//пишем только Ole обьект {//пишем только Ole обьект
//ищем первый ole обьект //ищем первый ole обьект
RtfOlePtr poFirstOle; RtfOlePtr poFirstOle;
int nTempTextItemsCount = aTempTextItems->GetCount(); int nTempTextItemsCount = aTempTextItems->GetCount();
for( int i = 0; i < nTempTextItemsCount; i++ ) for( int i = 0; i < nTempTextItemsCount; i++ )
{
ITextItemPtr piCurTextItem;
aTempTextItems->GetItem( piCurTextItem, i );
if( NULL != piCurTextItem && TYPE_RTF_PARAGRAPH == piCurTextItem->GetType() )
{
RtfParagraphPtr poCurParagraph = boost::static_pointer_cast< RtfParagraph, ITextItem >( piCurTextItem );
if( NULL != poCurParagraph )
{ {
ITextItemPtr piCurTextItem; bool bBreak = false;
aTempTextItems->GetItem( piCurTextItem, i ); for( int j = 0; j < poCurParagraph->GetCount(); j++ )
if( NULL != piCurTextItem && TYPE_RTF_PARAGRAPH == piCurTextItem->GetType() )
{ {
RtfParagraphPtr poCurParagraph = boost::static_pointer_cast< RtfParagraph, ITextItem >( piCurTextItem ); IDocumentElementPtr piCurIDocumentElement;
if( NULL != poCurParagraph ) poCurParagraph->GetItem( piCurIDocumentElement, j );
if( NULL != piCurIDocumentElement && TYPE_RTF_OLE == piCurIDocumentElement->GetType() )
{ {
bool bBreak = false; //рендерим только Ole часть
for( int j = 0; j < poCurParagraph->GetCount(); j++ ) RenderParameter oNewParam = oRenderParameter;
{ oNewParam.nType = RENDER_TO_OOX_PARAM_OLE_ONLY;
IDocumentElementPtr piCurIDocumentElement; oNewParam.nValue = m_nID;
poCurParagraph->GetItem( piCurIDocumentElement, j );
if( NULL != piCurIDocumentElement && TYPE_RTF_OLE == piCurIDocumentElement->GetType() )
{
//рендерим только Ole часть
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_OLE_ONLY;
oNewParam.nValue = m_nID;
RtfOlePtr poCurOle = boost::static_pointer_cast< RtfOle, IDocumentElement >( piCurIDocumentElement ); RtfOlePtr poCurOle = boost::static_pointer_cast< RtfOle, IDocumentElement >( piCurIDocumentElement );
if( NULL != poCurOle ) if( NULL != poCurOle )
{ {
sOle.Append( poCurOle->RenderToOOX( oNewParam ) ); sOle.Append( poCurOle->RenderToOOX( oNewParam ) );
bBreak = true; bBreak = true;
break;
}
}
}
if( true == bBreak )
break; break;
}
} }
} }
if( true == bBreak )
break;
} }
//возвращаем text box на место
m_aTextItems = aTempTextItems;
} }
if( false == sOle.IsEmpty() )
sResult.Replace( _T("</w:pict>"), sOle + _T("</w:pict>") );
} }
//возвращаем text box на место
m_aTextItems = aTempTextItems;
} }
return sResult; if( false == sOle.IsEmpty() )
sResult.Replace( _T("</w:pict>"), sOle + _T("</w:pict>") );
} }
}
return sResult;
}
CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
{ {
if( false == IsValid() ) if( false == IsValid() )
......
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