mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 03:42:47 +08:00
1434 lines
54 KiB
C++
1434 lines
54 KiB
C++
/*
|
||
* (c) Copyright Ascensio System SIA 2010-2016
|
||
*
|
||
* This program is a free software product. You can redistribute it and/or
|
||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||
* version 3 as published by the Free Software Foundation. In accordance with
|
||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||
* of any third-party rights.
|
||
*
|
||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||
*
|
||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||
* EU, LV-1021.
|
||
*
|
||
* The interactive user interfaces in modified source and object code versions
|
||
* of the Program must display Appropriate Legal Notices, as required under
|
||
* Section 5 of the GNU AGPL version 3.
|
||
*
|
||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||
* grant you any rights under trademark law for use of our trademarks.
|
||
*
|
||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||
* well as technical writing content are licensed under the terms of the
|
||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||
*
|
||
*/
|
||
#include "RtfShape.h"
|
||
#include "Writer/OOXWriter.h"
|
||
#include "RtfOle.h"
|
||
|
||
void RtfShape::SetDefault()
|
||
{
|
||
m_eAnchorTypeShape = st_none;
|
||
|
||
//Common
|
||
DEFAULT_PROPERTY( m_nLeft )
|
||
DEFAULT_PROPERTY( m_nTop )
|
||
DEFAULT_PROPERTY( m_nBottom )
|
||
DEFAULT_PROPERTY( m_nRight )
|
||
DEFAULT_PROPERTY( m_nID )
|
||
DEFAULT_PROPERTY( m_nZOrder )
|
||
DEFAULT_PROPERTY( m_nHeader )
|
||
DEFAULT_PROPERTY( m_nWrapType )
|
||
DEFAULT_PROPERTY( m_nWrapSideType )
|
||
DEFAULT_PROPERTY( m_nZOrderRelative )
|
||
DEFAULT_PROPERTY( m_bLockAnchor )
|
||
DEFAULT_PROPERTY_DEF( m_eXAnchor, ax_column ) //по умолчанию - привязка к тексту
|
||
DEFAULT_PROPERTY_DEF( m_eYAnchor, ay_Para )//по умолчанию - привязка к тексту
|
||
|
||
//Position absolute
|
||
DEFAULT_PROPERTY( m_nPositionH )
|
||
DEFAULT_PROPERTY( m_nPositionHRelative )
|
||
DEFAULT_PROPERTY( m_nPositionV )
|
||
DEFAULT_PROPERTY( m_nPositionVRelative )
|
||
DEFAULT_PROPERTY( m_bLayoutInCell )
|
||
DEFAULT_PROPERTY( m_bAllowOverlap )
|
||
|
||
//Position relative
|
||
DEFAULT_PROPERTY( m_nPositionHPct )
|
||
DEFAULT_PROPERTY( m_nPositionVPct )
|
||
DEFAULT_PROPERTY( m_nPctWidth )
|
||
DEFAULT_PROPERTY( m_nPctHeight )
|
||
DEFAULT_PROPERTY( m_nPctWidthRelative )
|
||
DEFAULT_PROPERTY( m_nPctHeightRelative )
|
||
DEFAULT_PROPERTY( m_nColStart )
|
||
DEFAULT_PROPERTY( m_nColSpan )
|
||
|
||
//Object Type
|
||
DEFAULT_PROPERTY( m_bIsBullet )
|
||
DEFAULT_PROPERTY( m_nRotation )
|
||
DEFAULT_PROPERTY( m_bFlipV )
|
||
DEFAULT_PROPERTY( m_bFlipH )
|
||
DEFAULT_PROPERTY( m_nShapeType )
|
||
DEFAULT_PROPERTY( m_nWrapDistLeft )
|
||
DEFAULT_PROPERTY( m_nWrapDistTop )
|
||
DEFAULT_PROPERTY( m_nWrapDistRight )
|
||
DEFAULT_PROPERTY( m_nWrapDistBottom )
|
||
|
||
DEFAULT_PROPERTY( m_bHidden )
|
||
|
||
//Text box
|
||
DEFAULT_PROPERTY( m_nAnchorText )
|
||
DEFAULT_PROPERTY_DEF( m_nTexpLeft, 91440 )
|
||
DEFAULT_PROPERTY_DEF( m_nTexpTop, 45720 )
|
||
DEFAULT_PROPERTY_DEF( m_nTexpRight, 91440 )
|
||
DEFAULT_PROPERTY_DEF( m_nTexpBottom, 45720 )
|
||
DEFAULT_PROPERTY( m_nTexpLeft )
|
||
DEFAULT_PROPERTY( m_nTexpTop )
|
||
DEFAULT_PROPERTY( m_nTexpRight )
|
||
DEFAULT_PROPERTY( m_nTexpBottom )
|
||
DEFAULT_PROPERTY( m_bFitShapeToText )
|
||
DEFAULT_PROPERTY( m_bFitTextToShape )
|
||
DEFAULT_PROPERTY( m_nCcol )
|
||
DEFAULT_PROPERTY( m_nTxdir )
|
||
DEFAULT_PROPERTY( m_nWrapText )
|
||
//Geometry
|
||
DEFAULT_PROPERTY( m_nAdjustValue )
|
||
DEFAULT_PROPERTY( m_nAdjustValue2 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue3 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue4 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue5 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue6 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue7 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue8 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue9 )
|
||
DEFAULT_PROPERTY( m_nAdjustValue10 )
|
||
//Custom
|
||
DEFAULT_PROPERTY( m_nGeoLeft)
|
||
DEFAULT_PROPERTY( m_nGeoTop)
|
||
DEFAULT_PROPERTY( m_nGeoRight)
|
||
DEFAULT_PROPERTY( m_nGeoBottom)
|
||
DEFAULT_PROPERTY( m_nShapePath)
|
||
//Picture Effects
|
||
DEFAULT_PROPERTY( m_nCropFromTop )
|
||
DEFAULT_PROPERTY( m_nCropFromBottom )
|
||
DEFAULT_PROPERTY( m_nCropFromLeft )
|
||
DEFAULT_PROPERTY( m_nCropFromRight )
|
||
|
||
//Grouped Shapes
|
||
DEFAULT_PROPERTY( m_nGroupBottom )
|
||
DEFAULT_PROPERTY( m_nGroupLeft )
|
||
DEFAULT_PROPERTY( m_nGroupRight )
|
||
DEFAULT_PROPERTY( m_nGroupTop )
|
||
|
||
DEFAULT_PROPERTY( m_nRelBottom )
|
||
DEFAULT_PROPERTY( m_nRelLeft )
|
||
DEFAULT_PROPERTY( m_nRelRight )
|
||
DEFAULT_PROPERTY( m_nRelTop )
|
||
DEFAULT_PROPERTY( m_nRelRotation )
|
||
DEFAULT_PROPERTY( m_nRelZOrder )
|
||
|
||
//Rehydration
|
||
m_sMetroBlob = _T("");
|
||
m_sMetroBlobRels = _T("");
|
||
m_sMetroBlobData = _T("");
|
||
//Connectors
|
||
DEFAULT_PROPERTY( m_nConnectionType )
|
||
DEFAULT_PROPERTY( m_nConnectorStyle )
|
||
|
||
//Fill
|
||
DEFAULT_PROPERTY_DEF( m_bFilled, true )
|
||
DEFAULT_PROPERTY( m_nFillType )
|
||
DEFAULT_PROPERTY( m_nFillColor )
|
||
DEFAULT_PROPERTY( m_nFillColor2 )
|
||
DEFAULT_PROPERTY( m_nFillOpacity )
|
||
DEFAULT_PROPERTY( m_nFillFocus )
|
||
DEFAULT_PROPERTY( m_nFillAngle )
|
||
//Line
|
||
DEFAULT_PROPERTY_DEF( m_bLine, true )
|
||
DEFAULT_PROPERTY( m_nLineColor )
|
||
DEFAULT_PROPERTY( m_nLineStartArrow )
|
||
DEFAULT_PROPERTY( m_nLineStartArrowWidth )
|
||
DEFAULT_PROPERTY( m_nLineStartArrowLength )
|
||
DEFAULT_PROPERTY( m_nLineEndArrow )
|
||
DEFAULT_PROPERTY( m_nLineEndArrowWidth )
|
||
DEFAULT_PROPERTY( m_nLineEndArrowLength )
|
||
DEFAULT_PROPERTY( m_nLineWidth )
|
||
DEFAULT_PROPERTY( m_nLineDashing )
|
||
|
||
DEFAULT_PROPERTY( m_nGtextSize )
|
||
DEFAULT_PROPERTY( m_bGtext )
|
||
|
||
m_aTextItems = TextItemContainerPtr();
|
||
m_oPicture = RtfPicturePtr();
|
||
|
||
m_bIsOle = false;
|
||
m_bInGroup = false;
|
||
}
|
||
|
||
CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
|
||
{
|
||
if( PROP_DEF == m_nShapeType) return L"";
|
||
|
||
CString sResult;
|
||
//запоминаем координаты и если нужно поворачиваем
|
||
int nLeft = m_nLeft;
|
||
int nTop = m_nTop;
|
||
int nRight = m_nRight;
|
||
int nBottom = m_nBottom;
|
||
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 &&
|
||
PROP_DEF != m_nRight && PROP_DEF != m_nBottom )
|
||
ToRtfRotation( m_nRotation, m_nLeft, m_nTop, m_nRight, m_nBottom );
|
||
|
||
if( PROP_DEF != m_nRelRotation && PROP_DEF != m_nRelLeft && PROP_DEF != m_nRelTop &&
|
||
PROP_DEF != m_nRelRight && PROP_DEF != m_nRelBottom )
|
||
ToRtfRotation( m_nRelRotation, m_nRelLeft, m_nRelTop, m_nRelRight, m_nRelBottom );
|
||
|
||
if( st_inline == m_eAnchorTypeShape )
|
||
{
|
||
if( NULL != m_oPicture && m_nShapeType == 75)
|
||
{
|
||
if (m_oPicture->m_nWidth == PROP_DEF)
|
||
{
|
||
m_oPicture->m_nWidth = m_nRight;
|
||
m_oPicture->m_nHeight = m_nBottom;
|
||
}
|
||
if (m_oPicture->m_nWidthGoal == PROP_DEF)
|
||
{
|
||
m_oPicture->m_nWidthGoal = m_oPicture->m_nWidth;
|
||
m_oPicture->m_nHeightGoal = m_oPicture->m_nHeight;
|
||
}
|
||
if( RtfPicture::dt_wmf == m_oPicture->eDataType )
|
||
{
|
||
sResult += m_oPicture->RenderToRtf( oRenderParameter );
|
||
}
|
||
else
|
||
{
|
||
sResult += _T("{\\*\\shppict");
|
||
sResult += m_oPicture->RenderToRtf( oRenderParameter );
|
||
sResult += _T("}");
|
||
sResult += _T("{\\nonshppict");
|
||
sResult += m_oPicture->GenerateWMF( oRenderParameter );
|
||
|
||
sResult += _T("}");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
sResult += _T("{\\shp");
|
||
sResult += _T("{\\*\\shpinst");
|
||
RENDER_RTF_INT( m_nID , sResult, _T("shplid") );
|
||
|
||
if (!m_bInGroup)
|
||
{
|
||
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_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") );
|
||
|
||
sResult += _T("\\shpbxignore");
|
||
sResult += _T("\\shpbyignore");
|
||
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fUseShapeAnchor}{\\sv %d}}"), false);
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fPseudoInline}{\\sv %d}}"), true);
|
||
}
|
||
|
||
sResult += RenderToRtfShapeProperty( oRenderParameter );
|
||
|
||
//picture
|
||
if( 0 != m_oPicture && m_nFillType == 1 || m_nFillType == 2 || m_nFillType == 9)
|
||
{
|
||
sResult += _T("{\\sp{\\sn fillBlip}{\\sv ");
|
||
sResult += m_oPicture->RenderToRtf( oRenderParameter );
|
||
sResult += _T("}}");
|
||
}
|
||
//textbox
|
||
if( 0 != m_aTextItems )
|
||
{
|
||
sResult += _T("{\\shptxt ");
|
||
sResult += m_aTextItems->RenderToRtf( oRenderParameter );
|
||
sResult += _T("}");
|
||
}
|
||
sResult += _T("}");
|
||
//if( 0 != m_oPicture )
|
||
//{
|
||
// sResult += _T("{\\shprslt\\par\\plain"));
|
||
// sResult += m_oPicture->GenerateWMF( oRenderParameter ) );
|
||
// sResult += _T("\\par}"));
|
||
//}
|
||
sResult += _T("}");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
sResult += _T("{\\shp");
|
||
sResult += _T("{\\*\\shpinst");
|
||
|
||
RENDER_RTF_INT( m_nID , sResult, _T("shplid") );
|
||
|
||
if (!m_bInGroup)
|
||
{
|
||
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_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") );
|
||
|
||
switch(m_eXAnchor)
|
||
{
|
||
case ax_page: sResult += _T("\\shpbxpage"); break;
|
||
case ax_margin: sResult += _T("\\shpbxmargin"); break;
|
||
case ax_column: sResult += _T("\\shpbxcolumn"); break;
|
||
}
|
||
sResult += _T("\\shpbxignore");
|
||
switch(m_eYAnchor)
|
||
{
|
||
case ay_page: sResult += _T("\\shpbypage"); break;
|
||
case ay_margin: sResult += _T("\\shpbymargin"); break;
|
||
case ay_Para: sResult += _T("\\shpbypara"); break;
|
||
}
|
||
sResult += _T("\\shpbyignore");
|
||
RENDER_RTF_INT( m_nZOrderRelative, sResult, _T("shpfblwtxt"));
|
||
}
|
||
|
||
sResult += RenderToRtfShapeProperty( oRenderParameter );
|
||
|
||
//picture
|
||
if( 0 != m_oPicture)
|
||
{
|
||
if (m_nShapeType == 75)
|
||
{
|
||
sResult += _T("{\\sp{\\sn pib}{\\sv ");
|
||
sResult += m_oPicture->RenderToRtf( oRenderParameter );
|
||
sResult += _T("}}");
|
||
}
|
||
else if (m_nFillType == 1 || m_nFillType == 2 || m_nFillType == 9)
|
||
{
|
||
sResult += _T("{\\sp{\\sn fillType}{\\sv 2}}");
|
||
sResult += _T("{\\sp{\\sn fillBlip}{\\sv ");
|
||
sResult += m_oPicture->RenderToRtf( oRenderParameter );
|
||
sResult += _T("}}");
|
||
}
|
||
}
|
||
//textbox
|
||
if( m_aTextItems )
|
||
{
|
||
sResult += _T("{\\shptxt ");
|
||
sResult += m_aTextItems->RenderToRtf( oRenderParameter );
|
||
sResult += _T("}");
|
||
}
|
||
sResult += _T("}");
|
||
if( m_oPicture && m_nShapeType == 75 )
|
||
{
|
||
sResult += _T("{\\shprslt\\par\\plain");
|
||
sResult += m_oPicture->GenerateWMF( oRenderParameter );
|
||
sResult += _T("\\par}");
|
||
}
|
||
sResult += _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 sResult;
|
||
|
||
//Position absolute
|
||
if( PROP_DEF != m_nPositionH )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn posh}{\\sv %d}}"), m_nPositionH);
|
||
if( PROP_DEF != m_nPositionHRelative )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn posrelh}{\\sv %d}}"), m_nPositionHRelative);
|
||
if( PROP_DEF != m_nPositionV )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn posv}{\\sv %d}}"), m_nPositionV);
|
||
|
||
if( PROP_DEF != m_nPositionVRelative )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn posrelv}{\\sv %d}}"), m_nPositionVRelative);
|
||
if( PROP_DEF != m_bLayoutInCell )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fLayoutInCell}{\\sv %d}}"), m_bLayoutInCell);
|
||
if( PROP_DEF != m_bAllowOverlap )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fAllowOverlap}{\\sv %d}}"), m_bAllowOverlap);
|
||
|
||
//Position relative
|
||
if( PROP_DEF != m_nPositionHPct )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn pctHorizPos}{\\sv %d}}"), m_nPositionHPct);
|
||
if( PROP_DEF != m_nPositionVPct )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn pctVertPos}{\\sv %d}}"), m_nPositionVPct);
|
||
if( PROP_DEF != m_nPctWidth )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn pctHoriz}{\\sv %d}}"), m_nPctWidth);
|
||
if( PROP_DEF != m_nPctHeight )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn pctVert}{\\sv %d}}"), m_nPctHeight);
|
||
if( PROP_DEF != m_nPctWidthRelative )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn sizerelh}{\\sv %d}}"), m_nPctWidthRelative);
|
||
if( PROP_DEF != m_nPctHeightRelative )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn sizerelv}{\\sv %d}}"), m_nPctHeightRelative);
|
||
if( PROP_DEF != m_nColStart )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn colStart}{\\sv %d}}"), m_nColStart);
|
||
if( PROP_DEF != m_nColSpan )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"), m_nColSpan);
|
||
//Rehydration
|
||
if( _T("") != m_sMetroBlob )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn metroBlob}{\\sv %d}}"), m_sMetroBlob.GetBuffer());
|
||
|
||
//Object Type
|
||
if( PROP_DEF != m_bIsBullet )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fIsBullet}{\\sv %d}}"), m_bIsBullet);
|
||
if( PROP_DEF != m_nRotation )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn rotation}{\\sv %d}}"), m_nRotation);
|
||
if( PROP_DEF != m_bFlipV )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fFlipV}{\\sv %d}}"), m_bFlipV);
|
||
if( PROP_DEF != m_bFlipH )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fFlipH}{\\sv %d}}"), m_bFlipH);
|
||
if( PROP_DEF != m_nShapeType )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn shapeType}{\\sv %d}}"), m_nShapeType);
|
||
if( PROP_DEF != m_nZOrderRelative )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fBehindDocument}{\\sv %d}}"), m_nZOrderRelative);
|
||
if( PROP_DEF != m_bHidden )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fHidden}{\\sv %d}}"), m_bHidden);
|
||
//Text
|
||
//sResult += _T("{\\sp{\\sn fLockText}{\\sv 0}}");
|
||
|
||
if( PROP_DEF != m_nTexpLeft)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dxTextLeft}{\\sv %d}}"), m_nTexpLeft);
|
||
if( PROP_DEF != m_nTexpTop)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dyTextTop}{\\sv %d}}"), m_nTexpTop);
|
||
if( PROP_DEF != m_nTexpRight)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dxTextRight}{\\sv %d}}"), m_nTexpRight);
|
||
if( PROP_DEF != m_nTexpBottom)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dyTextBottom}{\\sv %d}}"), m_nTexpBottom);
|
||
|
||
if( PROP_DEF != m_nAnchorText )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn anchorText}{\\sv %d}}"), m_nAnchorText);
|
||
//else
|
||
{
|
||
if( PROP_DEF != m_nWrapDistLeft )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistLeft}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistLeft ));
|
||
if( PROP_DEF != m_nWrapDistTop )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistTop}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistTop ));
|
||
if( PROP_DEF != m_nWrapDistRight )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistRight}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistRight ));
|
||
if( PROP_DEF != m_nWrapDistBottom )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistBottom}{\\sv %d}}"),RtfUtility::Twips2Emu( m_nWrapDistBottom ));
|
||
}
|
||
if( PROP_DEF != m_bFitShapeToText )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fFitShapeToText}{\\sv %d}}"), m_bFitShapeToText);
|
||
if( PROP_DEF != m_bFitTextToShape )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fFitTextToShape}{\\sv %d}}"), m_bFitTextToShape);
|
||
if( PROP_DEF != m_nCcol )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn ccol}{\\sv %d}}"), m_nCcol);
|
||
if( PROP_DEF != m_nTxdir )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn txdir}{\\sv %d}}"), m_nTxdir);
|
||
if( PROP_DEF != m_nWrapText )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn WrapText}{\\sv %d}}"), m_nWrapText);
|
||
//Geometry
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjustValue}{\\sv %d}}"), m_nAdjustValue );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust2Value}{\\sv %d}}"), m_nAdjustValue2 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust3Value}{\\sv %d}}"), m_nAdjustValue3 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust4Value}{\\sv %d}}"), m_nAdjustValue4 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust5Value}{\\sv %d}}"), m_nAdjustValue5 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust6Value}{\\sv %d}}"), m_nAdjustValue6 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust7Value}{\\sv %d}}"), m_nAdjustValue7 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust8Value}{\\sv %d}}"), m_nAdjustValue8 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust9Value}{\\sv %d}}"), m_nAdjustValue9 );
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn adjust10Value}{\\sv %d}}"), m_nAdjustValue10 );
|
||
//custom
|
||
if( PROP_DEF != m_nGeoLeft)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn geoLeft}{\\sv %d}}"), m_nGeoLeft );
|
||
if( PROP_DEF != m_nGeoTop)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn geoTop}{\\sv %d}}"), m_nGeoTop);
|
||
if( PROP_DEF != m_nGeoRight)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn geoRight}{\\sv %d}}"), m_nGeoRight );
|
||
if( PROP_DEF != m_nGeoBottom)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn geoBottom}{\\sv %d}}"), m_nGeoBottom );
|
||
if( PROP_DEF != m_nShapePath)
|
||
sResult.AppendFormat( _T("{\\sp{\\sn shapePath}{\\sv %d}}"), m_nShapePath );
|
||
if( !m_aPVerticles.empty())
|
||
{
|
||
sResult.AppendFormat( _T("{\\sp{\\sn pVerticies}{\\sv 8;%d"), m_aPVerticles.size() );
|
||
for( int i = 0; i < m_aPVerticles.size(); i ++ )
|
||
sResult.AppendFormat( _T(";(%d,%d)"), m_aPVerticles[i].first, m_aPVerticles[i].second );
|
||
sResult += _T("}}");
|
||
}
|
||
if( !m_aPSegmentInfo.empty())
|
||
{
|
||
sResult += _T("{\\sp{\\sn pSegmentInfo}{\\sv ");
|
||
sResult.AppendFormat( _T("{\\sp{\\sn pSegmentInfo}{\\sv 2;%d"), m_aPSegmentInfo.size() );
|
||
for( int i = 0; i < m_aPSegmentInfo.size(); i ++ )
|
||
sResult.AppendFormat( _T(";%d"), m_aPSegmentInfo[i] );
|
||
sResult += _T("}}");
|
||
}
|
||
//Connectors
|
||
if( PROP_DEF != m_nConnectionType )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn cxk}{\\sv %d}}"), m_nConnectionType );
|
||
if( PROP_DEF != m_nConnectorStyle )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn cxstyle}{\\sv %d}}"), m_nConnectorStyle );
|
||
//Picture Effects
|
||
if( PROP_DEF != m_nCropFromTop )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn cropFromTop}{\\sv %d}}"), m_nCropFromTop );
|
||
if( PROP_DEF != m_nCropFromBottom )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn cropFromBottom}{\\sv %d}}"), m_nCropFromBottom );
|
||
if( PROP_DEF != m_nCropFromLeft )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn cropFromLeft}{\\sv %d}}"), m_nCropFromLeft );
|
||
if( PROP_DEF != m_nCropFromRight )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn cropFromRight}{\\sv %d}}"), m_nCropFromRight );
|
||
//Grouped Shapes
|
||
if( PROP_DEF != m_nGroupBottom )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn groupBottom}{\\sv %d}}"), m_nGroupBottom );
|
||
if( PROP_DEF != m_nGroupLeft )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn groupLeft}{\\sv %d}}"), m_nGroupLeft );
|
||
if( PROP_DEF != m_nGroupRight )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn groupRight}{\\sv %d}}"), m_nGroupRight );
|
||
if( PROP_DEF != m_nGroupTop )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn groupTop}{\\sv %d}}"), m_nGroupTop );
|
||
if( PROP_DEF != m_nRelBottom )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn relBottom}{\\sv %d}}"), m_nRelBottom );
|
||
if( PROP_DEF != m_nRelLeft )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn relLeft}{\\sv %d}}"), m_nRelLeft );
|
||
if( PROP_DEF != m_nRelRight )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn relRight}{\\sv %d}}"), m_nRelRight );
|
||
if( PROP_DEF != m_nRelTop )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn relTop}{\\sv %d}}"), m_nRelTop );
|
||
if( PROP_DEF != m_nRelRotation )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn relRotation}{\\sv %d}}"), m_nRelRotation );
|
||
if( PROP_DEF != m_nRelZOrder )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn dhgt}{\\sv %d}}"), m_nRelZOrder );
|
||
//Fill
|
||
if( 0 == m_bFilled )
|
||
sResult += _T("{\\sp{\\sn fFilled}{\\sv 0}}");
|
||
if( PROP_DEF != m_nFillType )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fillType}{\\sv %d}}"), m_nFillType );
|
||
if( PROP_DEF != m_nFillColor )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fillColor}{\\sv %d}}"), m_nFillColor );
|
||
if( PROP_DEF != m_nFillColor2 )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fillBackColor}{\\sv %d}}"), m_nFillColor2 );
|
||
if( PROP_DEF != m_nFillOpacity )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fillOpacity}{\\sv %d}}"), ( m_nFillOpacity * 65536 /100 ) );
|
||
if( PROP_DEF != m_nFillFocus )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fillFocus}{\\sv %d}}"), m_nFillFocus );
|
||
if( PROP_DEF != m_nFillAngle )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fillAngle}{\\sv %d}}"), m_nFillAngle * 65536 );
|
||
//Line
|
||
if( 0 == m_bLine )
|
||
sResult += _T("{\\sp{\\sn fLine}{\\sv 0}}");
|
||
if( PROP_DEF != m_nLineColor )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineColor}{\\sv %d}}"), m_nLineColor );
|
||
if( PROP_DEF != m_nLineStartArrow )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowhead}{\\sv %d}}"), m_nLineStartArrow );
|
||
if( PROP_DEF != m_nLineEndArrow )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowhead}{\\sv %d}}"), m_nLineEndArrow );
|
||
if( PROP_DEF != m_nLineStartArrowWidth )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowWidth}{\\sv %d}}"), m_nLineStartArrowWidth );
|
||
if( PROP_DEF != m_nLineStartArrowLength )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineStartArrowLength}{\\sv %d}}"), m_nLineStartArrowLength );
|
||
if( PROP_DEF != m_nLineEndArrowWidth )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowWidth}{\\sv %d}}"), m_nLineEndArrowWidth );
|
||
if( PROP_DEF != m_nLineEndArrowLength )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineEndArrowLength}{\\sv %d}}"), m_nLineEndArrowLength );
|
||
if( PROP_DEF != m_nLineWidth )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineWidth}{\\sv %d}}"), m_nLineWidth );
|
||
if( PROP_DEF != m_nLineDashing )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn lineDashing}{\\sv %d}}"), m_nLineDashing );
|
||
|
||
//pWrapPolygonVertices Points of the text wrap polygon.
|
||
if( !m_aWrapPoints.empty())
|
||
{
|
||
sResult.AppendFormat( _T("{\\sp{\\sn pWrapPolygonVertices}{\\sv 8;%d"), m_aWrapPoints.size() );
|
||
for( int i = 0; i < m_aWrapPoints.size(); i ++ )
|
||
sResult.AppendFormat( _T(";(%d,%d)"), m_aWrapPoints[i].first, m_aWrapPoints[i].second );
|
||
sResult += _T("}}");
|
||
}
|
||
//WordArt
|
||
if( PROP_DEF != m_bGtext )
|
||
{
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fGtext}{\\sv %d}}"), m_bGtext );
|
||
if( !m_sGtextUNICODE.IsEmpty() )
|
||
{
|
||
sResult += _T("{\\sp{\\sn gtextUNICODE}{\\sv ");
|
||
sResult += m_sGtextUNICODE + _T("}}");
|
||
}
|
||
if( !m_sGtextFont.IsEmpty() )
|
||
{
|
||
sResult += _T("{\\sp{\\sn gtextFont}{\\sv ");
|
||
sResult += m_sGtextFont + _T("}}");
|
||
}
|
||
if( PROP_DEF != m_nGtextSize )
|
||
sResult.AppendFormat( _T("{\\sp{\\sn gtextSize}{\\sv %d}}"), m_nGtextSize );
|
||
}
|
||
|
||
return sResult;
|
||
}
|
||
CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
|
||
{
|
||
CString sResult;
|
||
RtfDocument* poDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
|
||
|
||
if( PROP_DEF != m_nShapeType && 0 != m_nShapeType )
|
||
{
|
||
TextItemContainerPtr aTempTextItems;
|
||
|
||
if( 75 == m_nShapeType && 0 != m_aTextItems )
|
||
{//Значит это Ole обьект с anchor, для него все также только TextBox надо делать по-другому
|
||
aTempTextItems = m_aTextItems;
|
||
m_aTextItems = TextItemContainerPtr();
|
||
m_bIsOle = true;
|
||
}
|
||
|
||
sResult = RenderToOOXBegin(oRenderParameter);
|
||
|
||
if( !sResult.IsEmpty() )
|
||
sResult += RenderToOOXEnd(oRenderParameter);
|
||
|
||
CString sOle;
|
||
if( 0 != aTempTextItems )
|
||
{//пишем только Ole обьект
|
||
//ищем первый ole обьект
|
||
RtfOlePtr poFirstOle;
|
||
int nTempTextItemsCount = aTempTextItems->GetCount();
|
||
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 )
|
||
{
|
||
bool bBreak = false;
|
||
for( int j = 0; j < poCurParagraph->GetCount(); j++ )
|
||
{
|
||
IDocumentElementPtr piCurIDocumentElement;
|
||
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 );
|
||
if( NULL != poCurOle )
|
||
{
|
||
sOle += poCurOle->RenderToOOX( oNewParam );
|
||
bBreak = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if( true == bBreak )
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
//возвращаем text box на место
|
||
m_aTextItems = aTempTextItems;
|
||
}
|
||
if( false == sOle.IsEmpty() )
|
||
sResult.Replace( _T("</w:pict>"), sOle + _T("</w:pict>") );
|
||
}
|
||
return sResult;
|
||
}
|
||
CString RtfShape::GetShapeNodeName(int type)
|
||
{
|
||
switch(type)
|
||
{
|
||
case NSOfficeDrawing::sptRectangle: return _T("v:rect");
|
||
case NSOfficeDrawing::sptEllipse: return _T("v:oval");
|
||
case NSOfficeDrawing::sptRoundRectangle: return _T("v:roundrect");
|
||
case NSOfficeDrawing::sptLine: return _T("v:line");
|
||
case NSOfficeDrawing::sptArc: return _T("v:arc");
|
||
default: return _T("v:shape");
|
||
}
|
||
}
|
||
CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
|
||
{
|
||
if( false == IsValid() )
|
||
return _T("");
|
||
|
||
RtfDocument* poDocument = static_cast<RtfDocument*>( oRenderParameter.poDocument );
|
||
CString sResult;
|
||
|
||
if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2 == oRenderParameter.nType )
|
||
;
|
||
else if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE == oRenderParameter.nType )
|
||
sResult += _T("<w:pict>");
|
||
else
|
||
sResult += _T("<w:r><w:pict>");//работает по умолчанию
|
||
|
||
if (oRenderParameter.sValue.IsEmpty())
|
||
oRenderParameter.sValue = GetShapeNodeName(m_nShapeType);
|
||
|
||
sResult += _T("<") + oRenderParameter.sValue;
|
||
|
||
CString strUniqId;
|
||
if (m_sName.IsEmpty())
|
||
{
|
||
m_sName.AppendFormat(L"_x0000_s%d", poDocument->GetShapeId( m_nID ));
|
||
}
|
||
sResult += _T(" id=\"") + m_sName + _T("\"");
|
||
|
||
|
||
if( PROP_DEF != m_nShapeType )
|
||
{
|
||
sResult.AppendFormat( _T(" type=\"#_x0000_t%d\""), m_nShapeType );
|
||
|
||
if (m_nShapeType > 0)
|
||
sResult.AppendFormat( _T(" o:spt=\"%d\""), m_nShapeType );
|
||
}
|
||
if( 0 == m_bFilled) sResult += _T(" filled=\"f\"");
|
||
else sResult += _T(" filled=\"t\"");
|
||
|
||
if( 0 == m_bLine) sResult += _T(" stroked=\"f\"");
|
||
else sResult += _T(" stroked=\"t\"");
|
||
|
||
if( PROP_DEF != m_nFillColor)
|
||
{
|
||
RtfColor color(m_nFillColor);
|
||
sResult.AppendFormat( _T(" fillcolor=\"#") + color.ToHexColor(true) + _T("\""));
|
||
}
|
||
if( PROP_DEF != m_nLineColor)
|
||
{
|
||
RtfColor color(m_nLineColor);
|
||
sResult.AppendFormat( _T(" strokecolor=\"#") + color.ToHexColor(true) + _T("\""));
|
||
}
|
||
//path
|
||
switch( m_nConnectionType )
|
||
{
|
||
case 0: sResult += _T(" o:connecttype=\"custom\""); break;
|
||
case 1: sResult += _T(" o:connecttype=\"none\""); break;
|
||
case 2: sResult += _T(" o:connecttype=\"rect\""); break;
|
||
case 3: sResult += _T(" o:connecttype=\"segments\""); break;
|
||
}
|
||
//Connectors
|
||
switch( m_nConnectorStyle )
|
||
{
|
||
case 0: sResult += _T(" o:connectortype=\"straight\""); break;
|
||
case 1: sResult += _T(" o:connectortype=\"elbow\""); break;
|
||
case 2: sResult += _T(" o:connectortype=\"curved\""); break;
|
||
case 3: sResult += _T(" o:connectortype=\"none\""); break;
|
||
}
|
||
//-----------------------------------------------------------------------------------------------------------------
|
||
CString sStyle ;
|
||
if( PROP_DEF != m_nLeft && PROP_DEF != m_nRight && PROP_DEF != m_nTop && PROP_DEF != m_nBottom )
|
||
{
|
||
//не пишем если inline
|
||
if( 3 != m_nPositionHRelative || 3 != m_nPositionVRelative )
|
||
{
|
||
sStyle .Append ( _T("position:absolute;") );
|
||
if (oRenderParameter.nType != RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2)
|
||
{
|
||
sStyle.AppendFormat ( _T("margin-left:%.2fpt;") , RtfUtility::Twip2pt(m_nLeft) );
|
||
sStyle.AppendFormat ( _T("margin-top:%.2fpt;") , RtfUtility::Twip2pt(m_nTop) );
|
||
sStyle.AppendFormat ( _T("margin-bottom:%.2fpt;") , RtfUtility::Twip2pt(m_nBottom) );
|
||
sStyle.AppendFormat ( _T("margin-right:%.2fpt;") , RtfUtility::Twip2pt(m_nRight) );
|
||
}
|
||
}
|
||
int nWidth = m_nRight - m_nLeft;
|
||
int nHeight = m_nBottom - m_nTop;
|
||
|
||
if (oRenderParameter.nType == RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2)
|
||
sStyle.AppendFormat(_T("width:%.2f;height:%.2f;"), RtfUtility::Twip2pt(nWidth), RtfUtility::Twip2pt(nHeight));
|
||
else
|
||
sStyle.AppendFormat(_T("width:%.2fpt;height:%.2fpt;"), RtfUtility::Twip2pt(nWidth), RtfUtility::Twip2pt(nHeight));
|
||
}
|
||
else if( PROP_DEF != m_nRelLeft && PROP_DEF != m_nRelRight && PROP_DEF != m_nRelTop && PROP_DEF != m_nRelBottom )
|
||
{
|
||
int nWidth = m_nRelRight - m_nRelLeft;
|
||
int nHeight = m_nRelBottom - m_nRelTop;
|
||
|
||
sStyle.Append ( _T("position:absolute;") );
|
||
sStyle.AppendFormat ( _T("left:%d;") , m_nRelLeft );
|
||
sStyle.AppendFormat ( _T("top:%d;") , m_nRelTop);
|
||
//sStyle.AppendFormat ( _T("bottom:%d;") , m_nRelBottom );
|
||
//sStyle.AppendFormat ( _T("right:%d;") , m_nRelRight);
|
||
sStyle.AppendFormat ( _T("width:%d;height:%d;") , nWidth, nHeight);
|
||
}
|
||
else if( 0 != m_oPicture && PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != (int)m_oPicture->m_dScaleX && PROP_DEF != (int)m_oPicture->m_dScaleY )
|
||
{
|
||
float nWidth = (int)(m_oPicture->m_nWidthGoal * m_oPicture->m_dScaleX / 100.);
|
||
if( PROP_DEF != m_oPicture->m_nCropL )
|
||
nWidth -= m_oPicture->m_nCropL;
|
||
if( PROP_DEF != m_oPicture->m_nCropR )
|
||
nWidth -= m_oPicture->m_nCropR;
|
||
|
||
float nHeight = (int)(m_oPicture->m_nHeightGoal * m_oPicture->m_dScaleY / 100.);
|
||
if( PROP_DEF != m_oPicture->m_nCropT )
|
||
nHeight -= m_oPicture->m_nCropT;
|
||
if( PROP_DEF != m_oPicture->m_nCropB )
|
||
nHeight -= m_oPicture->m_nCropB;
|
||
|
||
if (oRenderParameter.nType == RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2)
|
||
sStyle.AppendFormat(_T("width:%.2f;height:%.2f;"), RtfUtility::Twip2pt(nWidth), RtfUtility::Twip2pt(nHeight));
|
||
else
|
||
sStyle.AppendFormat(_T("width:%.2fpt;height:%.2fpt;"), RtfUtility::Twip2pt(nWidth), RtfUtility::Twip2pt(nHeight));
|
||
}
|
||
|
||
switch( m_nPositionH )
|
||
{
|
||
case 0: sStyle += _T("mso-position-horizontal:absolute;"); break;
|
||
case 1: sStyle += _T("mso-position-horizontal:left;"); break;
|
||
case 2: sStyle += _T("mso-position-horizontal:center;"); break;
|
||
case 3: sStyle += _T("mso-position-horizontal:right;"); break;
|
||
case 4: sStyle += _T("mso-position-horizontal:inside;"); break;
|
||
case 5: sStyle += _T("mso-position-horizontal:outside;"); break;
|
||
}
|
||
if( PROP_DEF != m_nPositionHPct )//todo
|
||
{
|
||
sStyle.AppendFormat(_T("mso-left-percent:%d;"), m_nPositionHPct);
|
||
}
|
||
if( PROP_DEF != m_nPositionH && PROP_DEF == m_nPositionHRelative )
|
||
m_nPositionHRelative = 2;
|
||
if( PROP_DEF != m_nPositionHRelative )
|
||
{
|
||
switch( m_nPositionHRelative )
|
||
{
|
||
case 0: sStyle += _T("mso-position-horizontal-relative:margin;"); break;
|
||
case 1: sStyle += _T("mso-position-horizontal-relative:page;"); break;
|
||
case 2: sStyle += _T("mso-position-horizontal-relative:text;"); break;
|
||
case 3: sStyle += _T("mso-position-horizontal-relative:char;"); break;
|
||
case 4: sStyle += _T("mso-position-horizontal-relative:left-margin-area;"); break;
|
||
case 5: sStyle += _T("mso-position-horizontal-relative:right-margin-area;"); break;
|
||
case 6: sStyle += _T("mso-position-horizontal-relative:inner-margin-area;"); break;
|
||
case 7: sStyle += _T("mso-position-horizontal-relative:outer-margin-area;"); break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
switch( m_eXAnchor )
|
||
{
|
||
case ax_page: sStyle += _T("mso-position-horizontal-relative:page;"); break;
|
||
case ax_margin: sStyle += _T("mso-position-horizontal-relative:margin;"); break;
|
||
//case ax_column: sStyle += _T("mso-position-horizontal-relative:text;"));break;
|
||
}
|
||
}
|
||
|
||
switch( m_nPositionV )
|
||
{
|
||
case 0: sStyle += _T("mso-position-vertical:absolute;"); break;
|
||
case 1: sStyle += _T("mso-position-vertical:top;"); break;
|
||
case 2: sStyle += _T("mso-position-vertical:center;"); break;
|
||
case 3: sStyle += _T("mso-position-vertical:bottom;"); break;
|
||
case 4: sStyle += _T("mso-position-vertical:inside;"); break;
|
||
case 5: sStyle += _T("mso-position-vertical:outside;"); break;
|
||
}
|
||
if( PROP_DEF != m_nPositionVPct )
|
||
sStyle.AppendFormat(_T("mso-top-percent:%d;"), m_nPositionVPct);
|
||
|
||
if( PROP_DEF != m_nPositionV && PROP_DEF == m_nPositionVRelative )
|
||
m_nPositionVRelative =2;
|
||
if( PROP_DEF != m_nPositionVRelative )
|
||
{
|
||
switch( m_nPositionVRelative )
|
||
{
|
||
case 0: sStyle += _T("mso-position-vertical-relative:margin;"); break;
|
||
case 1: sStyle += _T("mso-position-vertical-relative:page;"); break;
|
||
case 2: sStyle += _T("mso-position-vertical-relative:text;"); break;
|
||
case 3: sStyle += _T("mso-position-vertical-relative:line;"); break;
|
||
case 4: sStyle += _T("mso-position-vertical-relative:top-margin-area;"); break;
|
||
case 5: sStyle += _T("mso-position-vertical-relative:bottom-margin-area;"); break;
|
||
case 6: sStyle += _T("mso-position-vertical-relative:inner-margin-area;"); break;
|
||
case 7: sStyle += _T("mso-position-vertical-relative:outer-margin-area;"); break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
switch( m_eYAnchor )
|
||
{
|
||
case ay_page: sStyle += _T("mso-position-vertical-relative:page;"); break;
|
||
case ay_margin: sStyle += _T("mso-position-vertical-relative:margin;"); break;
|
||
//case ay_Para: sStyle += _T("mso-position-vertical-relative:text;"); break;
|
||
}
|
||
}
|
||
if( PROP_DEF != m_nPctWidth )
|
||
sStyle.AppendFormat(_T("mso-width-percent:%d;"), m_nPctWidth);
|
||
switch( m_nPctWidthRelative )
|
||
{
|
||
case 0: sStyle += _T("mso-width-relative:margin;"); break;
|
||
case 1: sStyle += _T("mso-width-relative:page;"); break;
|
||
case 2: sStyle += _T("mso-width-relative:left-margin-area;"); break;
|
||
case 3: sStyle += _T("mso-width-relative:right-margin-area;"); break;
|
||
case 4: sStyle += _T("mso-width-relative:inner-margin-area;"); break;
|
||
case 5: sStyle += _T("mso-width-relative:outer-margin-area;"); break;
|
||
}
|
||
|
||
if( PROP_DEF != m_nPctHeight )
|
||
sStyle.AppendFormat(_T("mso-height-percent:%d;"), m_nPctHeight);
|
||
|
||
switch( m_nPctHeightRelative )
|
||
{
|
||
case 0: sStyle += _T("mso-height-relative:margin;"); break;
|
||
case 1: sStyle += _T("mso-height-relative:page;"); break;
|
||
case 2: sStyle += _T("mso-height-relative:top-margin-area;"); break;
|
||
case 3: sStyle += _T("mso-height-relative:bottom-margin-area;"); break;
|
||
case 4: sStyle += _T("mso-height-relative:inner-margin-area;"); break;
|
||
case 5: sStyle += _T("mso-height-relative:outer-margin-area;"); break;
|
||
}
|
||
|
||
if( PROP_DEF != m_nRotation )
|
||
sStyle.AppendFormat(_T("rotation:%d;"), m_nRotation / 65536 );
|
||
else if( PROP_DEF != m_nRelRotation )
|
||
sStyle.AppendFormat(_T("rotation:%d;"), m_nRelRotation / 65536 );
|
||
|
||
int nZIndex = PROP_DEF;
|
||
if( PROP_DEF != m_nRelZOrder )
|
||
nZIndex = m_nRelZOrder;
|
||
else if( PROP_DEF != m_nZOrder )
|
||
nZIndex = m_nZOrder;
|
||
else if (oRenderParameter.nType != RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2)
|
||
nZIndex = 100; //на свое усмотрение ставлю 100
|
||
|
||
if( PROP_DEF != m_nZOrderRelative && PROP_DEF != nZIndex)
|
||
{
|
||
//берем большое значение чтобы сделать строго выше или ниже текста
|
||
if( 0 == m_nZOrderRelative ) nZIndex += 10000;
|
||
else nZIndex -= 10000;
|
||
}
|
||
if (PROP_DEF != nZIndex)
|
||
sStyle.AppendFormat( _T("z-index:%d;"), nZIndex );
|
||
|
||
if( PROP_DEF != m_nWrapDistLeft )
|
||
sStyle.AppendFormat( _T("mso-wrap-distance-left:%.2fpt;"), RtfUtility::Twip2pt( m_nWrapDistLeft ));
|
||
if( PROP_DEF != m_nWrapDistTop )
|
||
sStyle.AppendFormat( _T("mso-wrap-distance-top:%.2fpt;"), RtfUtility::Twip2pt( m_nWrapDistTop ));
|
||
if( PROP_DEF != m_nWrapDistRight )
|
||
sStyle.AppendFormat( _T("mso-wrap-distance-right:%.2fpt;"), RtfUtility::Twip2pt( m_nWrapDistRight ));
|
||
if( PROP_DEF != m_nWrapDistBottom )
|
||
sStyle.AppendFormat( _T("mso-wrap-distance-bottom:%.2fpt;"), RtfUtility::Twip2pt( m_nWrapDistBottom ));
|
||
|
||
switch( m_nAnchorText)
|
||
{
|
||
case 0: sStyle += _T("v-text-anchor:top;"); break;
|
||
case 1: sStyle += _T("v-text-anchor:middle;"); break;
|
||
case 2: sStyle += _T("v-text-anchor:bottom;"); break;
|
||
case 3: sStyle += _T("v-text-anchor:topcenter;"); break;
|
||
case 4: sStyle += _T("v-text-anchor:middle-center;"); break;
|
||
case 5: sStyle += _T("v-text-anchor:bottom-center;"); break;
|
||
case 6: sStyle += _T("v-text-anchor:top-baseline;"); break;
|
||
case 7: sStyle += _T("v-text-anchor:bottom-baseline;"); break;
|
||
case 8: sStyle += _T("v-text-anchor:top-center-baseline;"); break;
|
||
case 9: sStyle += _T("v-text-anchor:bottom-center-baseline;"); break;
|
||
}
|
||
|
||
//---------------------------------------------------------------------------------------------------------------------------
|
||
if( false == sStyle.IsEmpty() )
|
||
{
|
||
sStyle.Delete( sStyle.GetLength() - 1 );
|
||
sResult += _T(" style=\"") + sStyle + _T("\"");
|
||
}
|
||
//----------------------------------------------------------------------------------------------------------------------------
|
||
if( true == m_bIsOle ) sResult += _T(" o:ole=\"\"");
|
||
|
||
if( PROP_DEF != m_nGroupLeft && PROP_DEF != m_nGroupTop )
|
||
sResult.AppendFormat( _T(" coordorigin=\"%d,%d\""), m_nGroupLeft, m_nGroupTop);
|
||
if( PROP_DEF != m_nGroupLeft && PROP_DEF != m_nGroupTop && PROP_DEF != m_nGroupRight && PROP_DEF != m_nGroupBottom)
|
||
sResult.AppendFormat( _T(" coordsize=\"%d,%d\""), m_nGroupRight - m_nGroupLeft, m_nGroupBottom - m_nGroupTop );
|
||
|
||
if (oRenderParameter.nType != RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2)
|
||
{
|
||
if( PROP_DEF != m_bLayoutInCell )
|
||
{
|
||
if( 0 == m_bLayoutInCell )
|
||
sResult += _T(" o:allowincell=\"false\"");
|
||
else
|
||
sResult += _T(" o:allowincell=\"true\"");
|
||
}
|
||
if( PROP_DEF != m_bAllowOverlap )
|
||
{
|
||
if( 0 == m_bAllowOverlap )
|
||
sResult += _T(" o:allowoverlap=\"false\"");
|
||
else
|
||
sResult += _T(" o:allowoverlap=\"true\"");
|
||
}
|
||
}
|
||
//Position
|
||
|
||
//Geometry
|
||
CString sAdjust;
|
||
if( PROP_DEF != m_nAdjustValue )
|
||
{
|
||
sAdjust.AppendFormat( _T("%d"), m_nAdjustValue);
|
||
if( PROP_DEF != m_nAdjustValue2 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue2);
|
||
if( PROP_DEF != m_nAdjustValue3 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue3);
|
||
if( PROP_DEF != m_nAdjustValue4 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue4);
|
||
if( PROP_DEF != m_nAdjustValue5 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue5);
|
||
if( PROP_DEF != m_nAdjustValue6 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue6);
|
||
if( PROP_DEF != m_nAdjustValue7 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue7);
|
||
if( PROP_DEF != m_nAdjustValue8 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue8);
|
||
if( PROP_DEF != m_nAdjustValue9 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue9);
|
||
if( PROP_DEF != m_nAdjustValue10 )
|
||
{
|
||
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue10);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
sResult.AppendFormat( _T(" adj=\"%ls\""),sAdjust.GetBuffer() );
|
||
}
|
||
//Geometry
|
||
if( !m_aWrapPoints.empty())
|
||
{
|
||
sResult += _T(" wrapcoords=\"");
|
||
sResult.AppendFormat( _T("%d,%d"), m_aWrapPoints[0].first, m_aWrapPoints[0].second);
|
||
|
||
for( int i = 0; i < (int)m_aWrapPoints.size(); i++ )
|
||
{
|
||
sResult.AppendFormat( _T(",%d,%d"), m_aWrapPoints[i].first, m_aWrapPoints[i].second);
|
||
}
|
||
|
||
sResult += _T("\"");
|
||
}
|
||
|
||
if(PROP_DEF != m_nLineWidth)
|
||
sResult.AppendFormat( _T(" strokeweight=\"%fpt\""), RtfUtility::Emu2Pt(m_nLineWidth) );
|
||
|
||
sResult += _T(">");
|
||
//-------------------------------------------------------------------------------------------------------------- nodes
|
||
if( PROP_DEF != m_nWrapType && 3 != m_nWrapType)
|
||
{
|
||
sResult += _T("<w10:wrap");
|
||
|
||
switch( m_nWrapType )
|
||
{
|
||
case 1:sResult += _T(" type=\"topAndBottom\""); break;
|
||
case 2:sResult += _T(" type=\"square\""); break;
|
||
case 3:sResult += _T(" type=\"none\""); break;
|
||
case 4:sResult += _T(" type=\"tight\""); break;
|
||
case 5:sResult += _T(" type=\"through\""); break;
|
||
}
|
||
switch( m_nWrapSideType )
|
||
{
|
||
case 0:sResult += _T(" side=\"both\""); break;
|
||
case 1:sResult += _T(" side=\"left\""); break;
|
||
case 2:sResult += _T(" side=\"right\""); break;
|
||
case 3:sResult += _T(" side=\"largest\""); break;
|
||
}
|
||
sResult += _T("/>");
|
||
}
|
||
|
||
//Line
|
||
if( 0 != m_bLine)
|
||
{
|
||
CString sStroke;
|
||
switch( m_nLineDashing )
|
||
{
|
||
case 1: sStroke += _T(" dashstyle=\"shortdash\""); break;
|
||
case 2: sStroke += _T(" dashstyle=\"shortdot\""); break;
|
||
case 3: sStroke += _T(" dashstyle=\"shortdashdot\""); break;
|
||
case 4: sStroke += _T(" dashstyle=\"shortdashdotdot\"");break;
|
||
case 5: sStroke += _T(" dashstyle=\"dot\""); break;
|
||
case 6: sStroke += _T(" dashstyle=\"dash\""); break;
|
||
case 7: sStroke += _T(" dashstyle=\"longdash\""); break;
|
||
case 8: sStroke += _T(" dashstyle=\"dashdot\""); break;
|
||
case 9: sStroke += _T(" dashstyle=\"longdashdot\""); break;
|
||
case 10: sStroke += _T(" dashstyle=\"longdashdotdot\"");break;
|
||
}
|
||
switch( m_nLineStartArrow )
|
||
{
|
||
case 0: sStroke += _T(" startarrow=\"none\""); break;
|
||
case 1: sStroke += _T(" startarrow=\"block\""); break;
|
||
case 2: sStroke += _T(" startarrow=\"classic\""); break;
|
||
case 3: sStroke += _T(" startarrow=\"diamond\""); break;
|
||
case 4: sStroke += _T(" startarrow=\"oval\""); break;
|
||
case 5: sStroke += _T(" startarrow=\"open\""); break;
|
||
case 6: sStroke += _T(" startarrow=\"block\""); break;
|
||
case 7: sStroke += _T(" startarrow=\"block\""); break;
|
||
}
|
||
switch( m_nLineStartArrowLength )
|
||
{
|
||
case 0: sStroke += _T(" startarrowlength=\"short\""); break;
|
||
case 1: sStroke += _T(" startarrowlength=\"medium\""); break;
|
||
case 2: sStroke += _T(" startarrowlength=\"long\""); break;
|
||
}
|
||
switch( m_nLineStartArrowWidth )
|
||
{
|
||
case 0: sStroke += _T(" startarrowwidth=\"narrow\""); break;
|
||
case 1: sStroke += _T(" startarrowwidth=\"medium\""); break;
|
||
case 2: sStroke += _T(" startarrowwidth=\"wide\""); break;
|
||
}
|
||
switch( m_nLineEndArrow )
|
||
{
|
||
case 0: sStroke += _T(" endarrow=\"none\""); break;
|
||
case 1: sStroke += _T(" endarrow=\"block\""); break;
|
||
case 2: sStroke += _T(" endarrow=\"classic\""); break;
|
||
case 3: sStroke += _T(" endarrow=\"diamond\""); break;
|
||
case 4: sStroke += _T(" endarrow=\"oval\""); break;
|
||
case 5: sStroke += _T(" endarrow=\"open\""); break;
|
||
case 6: sStroke += _T(" endarrow=\"block\""); break;
|
||
case 7: sStroke += _T(" endarrow=\"block\""); break;
|
||
}
|
||
switch( m_nLineEndArrowLength )
|
||
{
|
||
case 0: sStroke += _T(" endarrowlength=\"short\""); break;
|
||
case 1: sStroke += _T(" endarrowlength=\"medium\""); break;
|
||
case 2: sStroke += _T(" endarrowlength=\"long\""); break;
|
||
}
|
||
switch( m_nLineEndArrowWidth )
|
||
{
|
||
case 0: sStroke += _T(" endarrowwidth=\"narrow\""); break;
|
||
case 1: sStroke += _T(" endarrowwidth=\"medium\""); break;
|
||
case 2: sStroke += _T(" endarrowwidth=\"wide\""); break;
|
||
}
|
||
|
||
if( false == sStroke.IsEmpty())
|
||
{
|
||
sResult += _T("<v:stroke ") + sStroke + _T("/>");
|
||
}
|
||
}
|
||
|
||
if( 0 != m_aTextItems )
|
||
{
|
||
RenderParameter oNewParam = oRenderParameter;
|
||
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
|
||
|
||
sResult += _T("<v:textbox");
|
||
if (m_nTexpLeft != PROP_DEF && m_nTexpTop != PROP_DEF && m_nTexpRight != PROP_DEF && m_nTexpBottom != PROP_DEF)
|
||
{
|
||
sResult.AppendFormat( _T(" inset=\"%dpt, %dpt, %dpt, %dpt\">"),
|
||
(int)RtfUtility::Emu2Pt(m_nTexpLeft), (int)RtfUtility::Emu2Pt(m_nTexpTop), (int)RtfUtility::Emu2Pt(m_nTexpRight), (int)RtfUtility::Emu2Pt(m_nTexpBottom) );
|
||
}
|
||
else
|
||
sResult += _T(">");
|
||
|
||
sResult += _T("<w:txbxContent>");
|
||
sResult += m_aTextItems->RenderToOOX(oNewParam);
|
||
sResult += _T("</w:txbxContent>");
|
||
sResult += _T("</v:textbox>");
|
||
}
|
||
|
||
CString sPicture;
|
||
if( m_oPicture )
|
||
{
|
||
sPicture = m_oPicture->RenderToOOX(oRenderParameter);
|
||
|
||
if (m_nShapeType == PROP_DEF || m_nShapeType == 75)
|
||
{
|
||
if( sPicture.IsEmpty() )//если не сохранилась картинка, то весь shape-picture будет бесполезным
|
||
return _T("");
|
||
|
||
int nCropLeft = PROP_DEF;
|
||
int nCropTop = PROP_DEF;
|
||
int nCropRight = PROP_DEF;
|
||
int nCropBottom = PROP_DEF;
|
||
|
||
if( PROP_DEF != m_nCropFromLeft )
|
||
nCropLeft = m_nCropFromLeft;
|
||
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropL )
|
||
nCropLeft = (int)( 65536 * ( 1.0 * m_oPicture->m_nCropL / m_oPicture->m_nWidthGoal) ); //This numeric value can also be specified in 1/65536-ths if a trailing "f" is supplied
|
||
if( PROP_DEF != m_nCropFromTop )
|
||
nCropTop = m_nCropFromTop;
|
||
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropT )
|
||
nCropTop = (int)( 65536 * ( 1.0 * m_oPicture->m_nCropT / m_oPicture->m_nHeightGoal) );
|
||
if( PROP_DEF != m_nCropFromRight )
|
||
nCropRight = m_nCropFromRight;
|
||
else if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nCropR )
|
||
nCropRight = (int)( 65536 * ( 1.0 * m_oPicture->m_nCropR / m_oPicture->m_nWidthGoal) );
|
||
if( PROP_DEF != m_nCropFromBottom )
|
||
nCropBottom = m_nCropFromBottom;
|
||
else if( PROP_DEF != m_oPicture->m_nHeightGoal && PROP_DEF != m_oPicture->m_nCropB )
|
||
nCropBottom = (int)( 65536 * ( 1.0 * m_oPicture->m_nCropB / m_oPicture->m_nHeightGoal) );
|
||
|
||
sResult += _T("<v:imagedata r:id=\"") + sPicture + _T("\"");
|
||
|
||
if( PROP_DEF != nCropLeft )
|
||
sResult.AppendFormat( _T(" cropleft=\"%df\""), nCropLeft );
|
||
if( PROP_DEF != nCropTop )
|
||
sResult.AppendFormat( _T(" croptop=\"%df\""), nCropTop );
|
||
if( PROP_DEF != nCropRight )
|
||
sResult.AppendFormat( _T(" cropright=\"%df\""), nCropRight );
|
||
if( PROP_DEF != nCropBottom )
|
||
sResult.AppendFormat( _T(" cropbottom=\"%df\""), nCropBottom );
|
||
|
||
sResult += _T(" o:title=\"\"/>");
|
||
}
|
||
}
|
||
//-----------------------------------------------------------------------------------------------
|
||
if( 0 != m_bFilled)
|
||
{
|
||
sResult += _T("<v:fill");
|
||
|
||
if (!sPicture.IsEmpty() && m_nShapeType != 75)
|
||
{
|
||
sResult += _T(" r:id=\"") + sPicture + _T("\"");
|
||
|
||
if( PROP_DEF == m_nFillType) m_nFillType = 2;
|
||
}
|
||
switch(m_nFillType)
|
||
{
|
||
case 1: sResult += _T(" type=\"pattern\""); break;
|
||
case 2: sResult += _T(" type=\"tile\""); break;
|
||
case 3: sResult += _T(" type=\"frame\""); break;
|
||
case 4: sResult += _T(" type=\"gradient\""); break;
|
||
case 5: sResult += _T(" type=\"gradient\""); break;
|
||
case 6: sResult += _T(" type=\"gradient\""); break;
|
||
case 7: sResult += _T(" type=\"gradient\""); break;
|
||
case 8: sResult += _T(" type=\"gradient\""); break;
|
||
case 9: sResult += _T(" type=\"gradient\""); break;
|
||
}//todooo center radial ...
|
||
|
||
if ( PROP_DEF != m_nFillOpacity)
|
||
{
|
||
CString sOpacity; sOpacity.Format(L"%d", /*100 - */m_nFillOpacity);
|
||
sResult += _T(" opacity=\"") + sOpacity +_T("%\"");
|
||
//sResult.AppendFormat( _T(" opacity=\"%df\""), m_nFillOpacity );
|
||
}
|
||
if ( PROP_DEF != m_nFillColor2)
|
||
{
|
||
RtfColor color(m_nFillColor2);
|
||
sResult += _T(" color2=\"#") + color.ToHexColor(true) + _T("\"");
|
||
}
|
||
if ( PROP_DEF != m_nFillFocus)
|
||
{
|
||
CString sFocus; sFocus.Format(L"%d", m_nFillFocus );
|
||
sResult += _T(" focus=\"")+ sFocus +_T("%\"");
|
||
}
|
||
|
||
if ( PROP_DEF != m_nFillAngle)
|
||
sResult.AppendFormat( _T(" angle=\"%d\""), m_nFillAngle );
|
||
|
||
sResult += _T("/>");
|
||
}
|
||
//---------------------------------------------------------------------------------------------------------------------------
|
||
if( false == m_sGtextUNICODE.IsEmpty())
|
||
{
|
||
sResult += _T("<v:textpath");
|
||
|
||
CString sTextStyle;
|
||
|
||
if ( !m_sGtextFont.IsEmpty() )
|
||
{
|
||
sTextStyle += _T("font-family:") + XmlUtils::EncodeXmlString(m_sGtextFont) + _T(";");//todooo значения как в кавычках так и без - проверить как без
|
||
}
|
||
|
||
if (!sTextStyle.IsEmpty())
|
||
sResult += _T(" style=\"") + sTextStyle + _T("\"");
|
||
|
||
if ( PROP_DEF != m_nGtextSize )
|
||
sTextStyle.AppendFormat( _T("font-size:%dpt;"), m_nGtextSize );
|
||
|
||
sResult += _T(" string=\"") + XmlUtils::EncodeXmlString(m_sGtextUNICODE) + _T("\"");
|
||
sResult += _T("/>");
|
||
}
|
||
return sResult;
|
||
}
|
||
CString RtfShape::RenderToOOXEnd(RenderParameter oRenderParameter)
|
||
{
|
||
CString sResult;
|
||
|
||
if (oRenderParameter.sValue.IsEmpty())
|
||
oRenderParameter.sValue = GetShapeNodeName(m_nShapeType);
|
||
|
||
sResult += _T("</") + oRenderParameter.sValue + _T(">");
|
||
|
||
if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2 == oRenderParameter.nType )
|
||
;
|
||
else if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE == oRenderParameter.nType )
|
||
sResult += _T("</w:pict>");
|
||
else
|
||
sResult += _T("</w:pict></w:r>");//работает по умолчанию
|
||
return sResult;
|
||
}
|
||
CString RtfShapeGroup::RenderToRtf(RenderParameter oRenderParameter)
|
||
{
|
||
CString sResult;
|
||
//запоминаем координаты и если нужно поворачиваем
|
||
int nLeft = m_nLeft;
|
||
int nTop = m_nTop;
|
||
int nRight = m_nRight;
|
||
int nBottom = m_nBottom;
|
||
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 &&
|
||
PROP_DEF != m_nRight && PROP_DEF != m_nBottom )
|
||
ToRtfRotation( m_nRotation, m_nLeft, m_nTop, m_nRight, m_nBottom );
|
||
|
||
if( PROP_DEF != m_nRelRotation && PROP_DEF != m_nRelLeft && PROP_DEF != m_nRelTop &&
|
||
PROP_DEF != m_nRelRight && PROP_DEF != m_nRelBottom )
|
||
ToRtfRotation( m_nRelRotation, m_nRelLeft, m_nRelTop, m_nRelRight, m_nRelBottom );
|
||
|
||
if( st_inline == m_eAnchorTypeShape )
|
||
{
|
||
sResult += _T("{\\shpgrp");
|
||
sResult += _T("{\\*\\shpinst");
|
||
|
||
RENDER_RTF_INT( m_nID , sResult, _T("shplid") );
|
||
|
||
if (!m_bInGroup)
|
||
{
|
||
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_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") );
|
||
|
||
sResult += _T("\\shpbxignore");
|
||
sResult += _T("\\shpbyignore");
|
||
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fUseShapeAnchor}{\\sv %d}}"), false);
|
||
sResult.AppendFormat( _T("{\\sp{\\sn fPseudoInline}{\\sv %d}}"), true);
|
||
}
|
||
|
||
|
||
sResult += RenderToRtfShapeProperty( oRenderParameter );
|
||
|
||
for (int i = 0 ; i < m_aArray.size(); i++)
|
||
{
|
||
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
|
||
}
|
||
sResult += _T("}");
|
||
sResult += _T("}");
|
||
}
|
||
else
|
||
{
|
||
sResult += _T("{\\shpgrp");
|
||
sResult += _T("{\\*\\shpinst");
|
||
|
||
RENDER_RTF_INT( m_nID , sResult, _T("shplid") );
|
||
|
||
if (!m_bInGroup)
|
||
{
|
||
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_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") );
|
||
|
||
switch(m_eXAnchor)
|
||
{
|
||
case ax_page: sResult += _T("\\shpbxpage"); break;
|
||
case ax_margin: sResult += _T("\\shpbxmargin"); break;
|
||
case ax_column: sResult += _T("\\shpbxcolumn"); break;
|
||
}
|
||
sResult += _T("\\shpbxignore");
|
||
switch(m_eYAnchor)
|
||
{
|
||
case ay_page: sResult += _T("\\shpbypage"); break;
|
||
case ay_margin: sResult += _T("\\shpbymargin"); break;
|
||
case ay_Para: sResult += _T("\\shpbypara"); break;
|
||
}
|
||
sResult += _T("\\shpbyignore");
|
||
RENDER_RTF_INT( m_nZOrderRelative, sResult, _T("shpfblwtxt"));
|
||
}
|
||
sResult += _T("{\\sp{\\sn lidRegroup}{\\sv 0}}");
|
||
|
||
sResult += RenderToRtfShapeProperty( oRenderParameter );
|
||
|
||
for (int i = 0 ; i < m_aArray.size(); i++)
|
||
{
|
||
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
|
||
}
|
||
|
||
sResult += _T("}");
|
||
sResult += _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 RtfShapeGroup::RenderToOOX(RenderParameter oRenderParameter)
|
||
{
|
||
CString sResult;
|
||
RenderParameter oNewParamGroup = oRenderParameter;
|
||
oNewParamGroup.sValue = _T("v:group");
|
||
|
||
sResult = RenderToOOXBegin( oNewParamGroup );
|
||
|
||
for( int i = 0; i < (int)m_aArray.size(); i++ )
|
||
{
|
||
RenderParameter oNewParamShape = oRenderParameter;
|
||
oNewParamShape.sValue = L"";
|
||
oNewParamShape.nType = RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2; //in group
|
||
|
||
sResult += m_aArray[i]->RenderToOOX( oNewParamShape );
|
||
}
|
||
|
||
sResult += RenderToOOXEnd( oNewParamGroup );
|
||
return sResult;
|
||
}
|