Commit 4d528b2f authored by ElenaSubbotina's avatar ElenaSubbotina

RtfFormatReader/Writer - convert WordArt, fix bugs, ...

parent d0b4fc4b
......@@ -370,7 +370,8 @@ void OoxConverter::convert(OOX::Vml::CFill *vml_fill)
if (vml_fill->m_oColor2.IsInit())
odf_context()->drawing_context()->set_gradient_end(string2std_string(vml_fill->m_oColor2->ToString()),no_set);
odf_context()->drawing_context()->set_gradient_center(vml_fill->m_oFocusPosition.GetX(), vml_fill->m_oFocusPosition.GetY());
if (vml_fill->m_oFocusPosition.IsInit())
odf_context()->drawing_context()->set_gradient_center(vml_fill->m_oFocusPosition->GetX(), vml_fill->m_oFocusPosition->GetY());
odf_context()->drawing_context()->end_gradient_style();
}break;
......
......@@ -70,13 +70,13 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
{
case OOX::et_v_fill:
{
OOX::Vml::CFill* fill_ = dynamic_cast<OOX::Vml::CFill*>(m_arrElement->m_arrItems[i]);
OOX::VmlOffice::CFill * fill = fill_ ? dynamic_cast<OOX::VmlOffice::CFill*>(fill_->m_oFill.GetPointer()) : NULL;
OOX::Vml::CFill* fill = dynamic_cast<OOX::Vml::CFill*>(m_arrElement->m_arrItems[i]);
if (!fill) break;
CString srId = fill_->m_sId.IsInit() ? fill_->m_sId.get2() : _T("") ;
CString srId = fill->m_sId.IsInit() ? fill->m_sId.get2() : _T("") ;
if (srId.IsEmpty())
srId = fill_->m_rId.IsInit() ? fill_->m_rId->GetValue() : _T("") ;
srId = fill->m_rId.IsInit() ? fill->m_rId->GetValue() : _T("") ;
if (!srId.IsEmpty() && oParam.oReader->m_currentContainer)
{
......@@ -92,13 +92,53 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
OOXPictureGraphicReader::WriteDataToPicture( sImagePath, *oOutput->m_oPicture, oParam.oReader->m_sPath );
}
}
else
if (fill->m_oColor.IsInit())
oOutput->m_nFillColor = (fill->m_oColor->Get_B() << 16) + (fill->m_oColor->Get_G() << 8) + fill->m_oColor->Get_R();
if (fill->m_oColor2.IsInit())
oOutput->m_nFillColor2 = (fill->m_oColor2->Get_B() << 16) + (fill->m_oColor2->Get_G() << 8) + fill->m_oColor2->Get_R();
if (fill->m_oOpacity.IsInit())
oOutput->m_nFillOpacity = fill->m_oOpacity->GetValue() * 100;
switch(fill->m_oType.GetValue())
{
case SimpleTypes::filltypeBackground: oOutput->m_nFillType = 9; break;
case SimpleTypes::filltypeFrame : oOutput->m_nFillType = 3; break;
case SimpleTypes::filltypeGradient: oOutput->m_nFillType = 4; break;
case SimpleTypes::filltypeGradientCenter: oOutput->m_nFillType = 4; break;
case SimpleTypes::filltypeGradientRadial: oOutput->m_nFillType = 4; break;
case SimpleTypes::filltypeGradientUnscaled: oOutput->m_nFillType = 4; break;
case SimpleTypes::filltypePattern: oOutput->m_nFillType = 1; break;
case SimpleTypes::filltypeTile: oOutput->m_nFillType = 2; break;
case SimpleTypes::filltypeSolid:
default:
break;
}
if (fill->m_oAngle.IsInit())
{
oOutput->m_nFillAngle = fill->m_oAngle->GetValue();
if (oOutput->m_nFillType == 4)
oOutput->m_nFillType = 7;
}
if (fill->m_oFocus.IsInit())
{
oOutput->m_nFillFocus = fill->m_oFocus->GetValue();
}
}break;
case OOX::et_v_stroke:
{
OOX::Vml::CStroke* stroke = dynamic_cast<OOX::Vml::CStroke*>(m_arrElement->m_arrItems[i]);
if (!stroke) break;
oOutput->m_nLineDashing = stroke->m_oDahsStyle.GetValue(); //совпадают значения
if (stroke->m_oColor.IsInit())
oOutput->m_nLineColor = (stroke->m_oColor->Get_B() << 16) + (stroke->m_oColor->Get_G() << 8) + stroke->m_oColor->Get_R();
}break;
case OOX::et_v_imagedata:
{
OOX::Vml::CImageData* image_data = dynamic_cast<OOX::Vml::CImageData*>(m_arrElement->m_arrItems[i]);
if (!image_data) break;
CString srId = image_data->m_oId.IsInit() ? image_data->m_oId.get2() : _T("") ;
......@@ -208,7 +248,7 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
{
OOX::Vml::CTextbox *text_box= dynamic_cast<OOX::Vml::CTextbox*>(m_arrElement->m_arrItems[i]);
if (text_box->m_oTxtbxContent.IsInit())
if ((text_box) && (text_box->m_oTxtbxContent.IsInit()))
{
OOXTextItemReader oTextItemReader;
......@@ -221,6 +261,23 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
oOutput->m_aTextItems = oTextItemReader.m_oTextItems;
}
}break;
case OOX::et_v_textpath:
{
OOX::Vml::CTextPath *text_path= dynamic_cast<OOX::Vml::CTextPath*>(m_arrElement->m_arrItems[i]);
if (text_path)
{
oOutput->m_bGtext = 1;
if (text_path->m_sString.IsInit())
{
oOutput->m_sGtextUNICODE = text_path->m_sString.get();
}
if (text_path->m_oStyle.IsInit())
{
ParseStyles( *oOutput, text_path->m_oStyle->m_arrProperties );
}
}
}break;
}
}
//проверяем на inline
......@@ -243,18 +300,13 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
if (m_vmlElement == NULL ) return Parse2(oParam , oOutput);
//todooo
//CString sType = m_vmlElement->;Type
//int nType = GetType( sType );
//if( -1 != nType )
// oOutput->m_nShapeType = nType;
if( m_vmlElement->m_sId.IsInit())
{
oOutput->m_nID = oParam.oReader->m_oOOXIdGenerator.GetId( m_vmlElement->m_sId.get());
}
//oOutput->m_nLeft = 0; //стили только с widht height (например в Numbering)
//oOutput->m_nTop = 0;
//oOutput->m_nTop = 0;
oOutput->m_eShapeType = RtfShape::st_none; //inline or anchor
if ( m_vmlElement->m_oStyle.IsInit())
......@@ -280,22 +332,28 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
{
oOutput->m_nShapeType = 1;
}
//CString sConnectionType = oXmlReader.ReadNodeAttribute( _T("o:connecttype"), _T("") );
//if( _T("custom") == sConnectionType )
// oOutput->m_nConnectionType = 0;
//else if( _T("none") == sConnectionType )
// oOutput->m_nConnectionType = 1;
//else if( _T("rect") == sConnectionType )
// oOutput->m_nConnectionType = 2;
//else if( _T("segments") == sConnectionType )
// oOutput->m_nConnectionType = 3;
if (m_vmlElement->m_oFilled.IsInit())
oOutput->m_bFilled = m_vmlElement->m_oFilled->GetValue() == SimpleTypes::booleanFalse ? 0 : 1;
if (m_vmlElement->m_oStroked.IsInit())
oOutput->m_bLine = m_vmlElement->m_oStroked->GetValue() == SimpleTypes::booleanFalse ? 0 : 1;
if (m_vmlElement->m_oFillColor.IsInit())
oOutput->m_nFillColor = (m_vmlElement->m_oFillColor->Get_B() << 16) + (m_vmlElement->m_oFillColor->Get_G() << 8) + m_vmlElement->m_oFillColor->Get_R();
if (m_vmlElement->m_oStrokeColor.IsInit())
oOutput->m_nLineColor = (m_vmlElement->m_oStrokeColor->Get_B() << 16) + (m_vmlElement->m_oStrokeColor->Get_G() << 8) + m_vmlElement->m_oStrokeColor->Get_R();
if( m_vmlElement->m_oStrokeWeight.IsInit())
oOutput->m_nLineWidth = m_vmlElement->m_oStrokeWeight->ToEmu();
switch(m_vmlElement->m_oConnectorType.GetValue())
{
case SimpleTypes::connectortypeCurved : oOutput->m_nConnectionType = 2; break;
case SimpleTypes::connectortypeElbow : oOutput->m_nConnectionType = 1; break;
case SimpleTypes::connectortypeNone : oOutput->m_nConnectionType = 3; break;
case SimpleTypes::connectortypeStraight : oOutput->m_nConnectionType = 0; break;
case SimpleTypes::connectortypeCurved : oOutput->m_nConnectionType = 2; break;
case SimpleTypes::connectortypeElbow : oOutput->m_nConnectionType = 1; break;
case SimpleTypes::connectortypeNone : oOutput->m_nConnectionType = 3; break;
case SimpleTypes::connectortypeStraight : oOutput->m_nConnectionType = 0; break;
}
oOutput->m_bLayoutInCell = m_vmlElement->m_oAllowInCell.GetValue();
......@@ -323,9 +381,6 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
oOutput->m_nGroupBottom = oOutput->m_nGroupTop + m_vmlElement->m_oCoordSize->GetY();
}
if( m_vmlElement->m_oStrokeWeight.IsInit())
oOutput->m_nLineWidth = m_vmlElement->m_oStrokeWeight->ToEmu();
return Parse2(oParam, oOutput);
......@@ -455,6 +510,15 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
else if( nValue < 0 )
oShape.m_nZOrderRelative = 1;
}break;
case SimpleTypes::Vml::cssptFontFamily:
{
oShape.m_sGtextFont = CString(prop->get_Value().wsValue);
}break;
case SimpleTypes::Vml::cssptFontSize:
{
oShape.m_nGtextSize = prop->get_Value().oValue.dValue;
}break;
case SimpleTypes::Vml::cssptDirection : break;
case SimpleTypes::Vml::cssptLayoutFlow : break;
case SimpleTypes::Vml::cssptMsoDirectionAlt : break;
......@@ -466,8 +530,6 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
case SimpleTypes::Vml::cssptMsoTextScale : break;
case SimpleTypes::Vml::cssptVTextAnchor : break;
case SimpleTypes::Vml::cssptFont : break;
case SimpleTypes::Vml::cssptFontFamily : break;
case SimpleTypes::Vml::cssptFontSize : break;
case SimpleTypes::Vml::cssptFontStyle : break;
case SimpleTypes::Vml::cssptFontVariant : break;
case SimpleTypes::Vml::cssptFontWeight : break;
......
......@@ -113,6 +113,17 @@ public:
OOXtblpPrReader otblpPrReader(m_ooxTableProps->m_oTblpPr.GetPointer());
otblpPrReader.Parse( oParam, oOutputProperty );
}
if( (m_ooxTableProps->m_oJc.IsInit()) && (m_ooxTableProps->m_oJc->m_oVal.IsInit()))
{
switch(m_ooxTableProps->m_oJc->m_oVal->GetValue())
{
case SimpleTypes::jctableCenter : oOutputProperty.m_eJust = RtfTableProperty::rj_trqc;break;
case SimpleTypes::jctableEnd :
case SimpleTypes::jctableRight : oOutputProperty.m_eJust = RtfTableProperty::rj_trqr;break;
case SimpleTypes::jctableStart :
case SimpleTypes::jctableLeft : oOutputProperty.m_eJust = RtfTableProperty::rj_trql;break;
}
}
if( m_ooxTableProps->m_oTblBorders.IsInit())
{
if( m_ooxTableProps->m_oTblBorders->m_oTop.IsInit() )
......
......@@ -78,10 +78,10 @@ public:
switch(m_ooxTableRowProps->m_oJc->m_oVal->GetValue())
{
case SimpleTypes::jctableCenter : oOutputProperty.m_eJust = RtfRowProperty::rj_trqc; break;
case SimpleTypes::jctableEnd : oOutputProperty.m_eJust = RtfRowProperty::rj_trql; break;
case SimpleTypes::jctableEnd : oOutputProperty.m_eJust = RtfRowProperty::rj_trqr; break;
case SimpleTypes::jctableStart : oOutputProperty.m_eJust = RtfRowProperty::rj_trql; break;
case SimpleTypes::jctableLeft : oOutputProperty.m_eJust = RtfRowProperty::rj_trql; break;
case SimpleTypes::jctableRight : oOutputProperty.m_eJust = RtfRowProperty::rj_trql; break;
case SimpleTypes::jctableRight : oOutputProperty.m_eJust = RtfRowProperty::rj_trqr; break;
}
}
......
......@@ -1702,68 +1702,73 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
//RENDER_RTF_INT( m_nStyle, sResult, _T("s") );
RENDER_RTF_BOOL( m_bAutoHyphenation, sResult, _T("hyphpar") );
RENDER_RTF_BOOL( m_bInTable, sResult, _T("intbl") );
RENDER_RTF_BOOL( m_bAutoHyphenation , sResult, _T("hyphpar") );
RENDER_RTF_BOOL( m_bInTable , sResult, _T("intbl") );
if( PROP_DEF != m_nItap && 1 != m_nItap )
sResult.AppendFormat( _T("\\itap%d"),m_nItap );
RENDER_RTF_BOOL( m_bKeep, sResult, _T("keep") );
RENDER_RTF_BOOL( m_bKeepNext, sResult, _T("keepn") );
RENDER_RTF_INT( m_nOutlinelevel, sResult, _T("outlinelevel") );
RENDER_RTF_BOOL( m_bPageBB, sResult, _T("pagebb") );
RENDER_RTF_BOOL ( m_bKeep , sResult, _T("keep") );
RENDER_RTF_BOOL ( m_bKeepNext , sResult, _T("keepn") );
RENDER_RTF_INT ( m_nOutlinelevel , sResult, _T("outlinelevel") );
RENDER_RTF_BOOL ( m_bPageBB , sResult, _T("pagebb") );
switch(m_eAlign)
{
case pa_qc:sResult.Append( _T("\\qc") );break;
case pa_qj:sResult.Append( _T("\\qj") );break;
case pa_ql:sResult.Append( _T("\\ql") );break;
case pa_qr:sResult.Append( _T("\\qr") );break;
case pa_qd:sResult.Append( _T("\\qd") );break;
case pa_qk0:sResult.Append( _T("\\qk0") );break;
case pa_qk10:sResult.Append( _T("\\qk10") );break;
case pa_qk20:sResult.Append( _T("\\qk20") );break;
case pa_qc: sResult.Append( _T("\\qc") );break;
case pa_qj: sResult.Append( _T("\\qj") );break;
case pa_ql: sResult.Append( _T("\\ql") );break;
case pa_qr: sResult.Append( _T("\\qr") );break;
case pa_qd: sResult.Append( _T("\\qd") );break;
case pa_qk0: sResult.Append( _T("\\qk0") );break;
case pa_qk10: sResult.Append( _T("\\qk10") );break;
case pa_qk20: sResult.Append( _T("\\qk20") );break;
}
switch( m_eFontAlign )
{
case fa_faauto:sResult.Append( _T("\\faauto") );break;
case fa_fahang:sResult.Append( _T("\\fahang") );break;
case fa_facenter:sResult.Append( _T("\\facenter") );break;
case fa_faroman:sResult.Append( _T("\\faroman") );break;
case fa_favar:sResult.Append( _T("\\favar") );break;
case fa_fafixed:sResult.Append( _T("\\fafixed") );break;
}
RENDER_RTF_INT( m_nIndFirstLine, sResult, _T("fi") );
RENDER_RTF_INT( m_nIndLeft, sResult, _T("li") );
RENDER_RTF_INT( m_nIndStart, sResult, _T("lin") );
RENDER_RTF_INT( m_nIndRight, sResult, _T("ri") );
RENDER_RTF_INT( m_nIndEnd, sResult, _T("rin") );
RENDER_RTF_BOOL( m_bIndRightAuto, sResult, _T("adjustright") );
RENDER_RTF_BOOL( m_bIndMirror, sResult, _T("indmirror") );
RENDER_RTF_INT( m_nSpaceBefore, sResult, _T("sb") );
RENDER_RTF_INT( m_nSpaceAfter, sResult, _T("sa") );
RENDER_RTF_INT( m_nSpaceBeforeAuto, sResult, _T("sbauto") );
RENDER_RTF_INT( m_nSpaceAfterAuto, sResult, _T("saauto") );
RENDER_RTF_INT( m_nSpaceBeforeLine, sResult, _T("lisb") );
RENDER_RTF_INT( m_nSpaceAfterLine, sResult, _T("lisa") );
RENDER_RTF_INT( m_nSpaceBetween, sResult, _T("sl") );
RENDER_RTF_INT( m_nSpaceMultiLine, sResult, _T("slmult") );
case fa_faauto: sResult.Append( _T("\\faauto") );break;
case fa_fahang: sResult.Append( _T("\\fahang") );break;
case fa_facenter: sResult.Append( _T("\\facenter") );break;
case fa_faroman: sResult.Append( _T("\\faroman") );break;
case fa_favar: sResult.Append( _T("\\favar") );break;
case fa_fafixed: sResult.Append( _T("\\fafixed") );break;
}
RENDER_RTF_INT( m_nIndFirstLine , sResult, _T("fi") );
RENDER_RTF_INT( m_nIndLeft , sResult, _T("li") );
RENDER_RTF_INT( m_nIndStart , sResult, _T("lin") );
RENDER_RTF_INT( m_nIndRight , sResult, _T("ri") );
RENDER_RTF_INT( m_nIndEnd , sResult, _T("rin") );
RENDER_RTF_BOOL( m_bIndRightAuto , sResult, _T("adjustright") );
RENDER_RTF_BOOL( m_bIndMirror , sResult, _T("indmirror") );
RENDER_RTF_INT( m_nSpaceBefore , sResult, _T("sb") );
RENDER_RTF_INT( m_nSpaceAfter , sResult, _T("sa") );
RENDER_RTF_INT( m_nSpaceBeforeAuto , sResult, _T("sbauto") );
RENDER_RTF_INT( m_nSpaceAfterAuto , sResult, _T("saauto") );
RENDER_RTF_INT( m_nSpaceBeforeLine , sResult, _T("lisb") );
RENDER_RTF_INT( m_nSpaceAfterLine , sResult, _T("lisa") );
RENDER_RTF_INT( m_nSpaceBetween , sResult, _T("sl") );
RENDER_RTF_INT( m_nSpaceMultiLine , sResult, _T("slmult") );
RENDER_RTF_BOOL( m_bContextualSpacing, sResult, _T("contextualspace") );
if( 0 == m_bRtl )
sResult.Append(_T("\\ltrpar"));
else if( PROP_DEF != m_bRtl )
sResult.Append(_T("\\rtlpar"));
RENDER_RTF_BOOL( m_bNoWordWrap, sResult, _T("nowwrap") );
if( 0 == m_bSnapToGrid )
sResult.Append( _T("\\nosnaplinegrid") );
else if( PROP_DEF != m_bSnapToGrid )
sResult.Append( _T("\\nosnaplinegrid0") );
switch ( m_eTextBoxWrap )
{
case tbw_txbxtwno:sResult.Append(_T("\\txbxtwno"));break;
case tbw_txbxtwalways:sResult.Append(_T("\\txbxtwalways"));break;
case tbw_txbxtwfirstlast:sResult.Append(_T("\\txbxtwfirstlast"));break;
case tbw_txbxtwfirst:sResult.Append(_T("\\txbxtwfirst"));break;
case tbw_txbxtwlast:sResult.Append(_T("\\txbxtwlast"));break;
case tbw_txbxtwno: sResult.Append(_T("\\txbxtwno"));break;
case tbw_txbxtwalways: sResult.Append(_T("\\txbxtwalways"));break;
case tbw_txbxtwfirstlast: sResult.Append(_T("\\txbxtwfirstlast"));break;
case tbw_txbxtwfirst: sResult.Append(_T("\\txbxtwfirst"));break;
case tbw_txbxtwlast: sResult.Append(_T("\\txbxtwlast"));break;
}
if( PROP_DEF != m_nListId && PROP_DEF != m_nListLevel )
{
......@@ -1816,9 +1821,9 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter)
switch ( m_eTextFollow )
{
case tf_frmtxlrtb: sResult.Append(_T("\\frmtxlrtb"));break;
case tf_frmtxtbrl: sResult.Append(_T("\\frmtxtbrl"));break;
case tf_frmtxbtlr: sResult.Append(_T("\\frmtxbtlr"));break;
case tf_frmtxlrtb: sResult.Append(_T("\\frmtxlrtb"));break;
case tf_frmtxtbrl: sResult.Append(_T("\\frmtxtbrl"));break;
case tf_frmtxbtlr: sResult.Append(_T("\\frmtxbtlr"));break;
case tf_frmtxlrtbv: sResult.Append(_T("\\frmtxlrtbv"));break;
case tf_frmtxtbrlv: sResult.Append(_T("\\frmtxtbrlv"));break;
}
......
......@@ -33,6 +33,129 @@
#include "Writer/OOXWriter.h"
#include "RtfOle.h"
void RtfShape::SetDefault()
{
m_eShapeType = 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 )
//m_bBehindDocument = -1;
DEFAULT_PROPERTY( m_bHidden )
//Text box
DEFAULT_PROPERTY_DEF( m_nTexpLeft, 91440 )
DEFAULT_PROPERTY_DEF( m_nTexpTop, 45720 )
DEFAULT_PROPERTY_DEF( m_nTexpRight, 91440 )
DEFAULT_PROPERTY_DEF( m_nTexpBottom, 45720 )
//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 )
//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;
}
CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
......@@ -99,9 +222,7 @@ CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_INT( m_nWrapType , sResult, _T("shpwr") );
RENDER_RTF_INT( m_nWrapSideType , sResult, _T("shpwrk") );
RENDER_RTF_BOOL( m_bLockAnchor , sResult, _T("shplockanchor") );
//RENDER_RTF_BOOL( false , sResult, _T("fUseShapeAnchor") );
//RENDER_RTF_BOOL( true , sResult, _T("fPseudoInline") );
sResult.Append( _T("\\shpbxignore") );
sResult.Append( _T("\\shpbyignore") );
......@@ -109,10 +230,10 @@ CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
sResult.AppendFormat( _T("{\\sp{\\sn fPseudoInline}{\\sv %d}}"), true);
sResult.Append( RenderToRtfShapeProperty( oRenderParameter ) );
//picture
if( 0 != m_oPicture )
{
sResult.Append( _T("{\\sp{\\sn fillType}{\\sv 2}}"));
sResult.Append( _T("{\\sp{\\sn fillBlip}{\\sv "));
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
......@@ -221,9 +342,9 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
//Position absolute
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 )
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 )
sResult.AppendFormat( _T("{\\sp{\\sn posv}{\\sv %d}}"), m_nPositionV);
......@@ -232,40 +353,40 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
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);
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);
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);
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);
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);
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);
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);
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);
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);
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());
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);
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);
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);
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);
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);
sResult.AppendFormat( _T("{\\sp{\\sn shapeType}{\\sv %d}}"), m_nShapeType);
if( PROP_DEF != m_nWrapDistLeft )
sResult.AppendFormat( _T("{\\sp{\\sn dxWrapDistLeft}{\\sv %d}}"), RtfUtility::Twips2Emu( m_nWrapDistLeft ));
if( PROP_DEF != m_nWrapDistTop )
......@@ -275,82 +396,102 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
if( PROP_DEF != m_nWrapDistBottom )
sResult.AppendFormat( _T("{\\sp{\\sn dyWrapDistBottom}{\\sv %d}}"),RtfUtility::Twips2Emu( m_nWrapDistBottom ));
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 )
sResult.AppendFormat( _T("{\\sp{\\sn fHidden}{\\sv %d}}"),m_bHidden);
sResult.AppendFormat( _T("{\\sp{\\sn fHidden}{\\sv %d}}"), m_bHidden);
//Geometry
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
sResult.AppendFormat( _T("{\\sp{\\sn adjust10Value}{\\sv %d}}"),m_nAdjustValue10 );
sResult.AppendFormat( _T("{\\sp{\\sn adjust10Value}{\\sv %d}}"), m_nAdjustValue10 );
//Connectors
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 )
sResult.AppendFormat( _T("{\\sp{\\sn cxstyle}{\\sv %d}}"),m_nConnectorStyle );
//WordArt Effects
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 );
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 );
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 );
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 );
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_nCropFromRight );
sResult.AppendFormat( _T("{\\sp{\\sn groupBottom}{\\sv %d}}"), m_nCropFromRight );
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
sResult.AppendFormat( _T("{\\sp{\\sn dhgt}{\\sv %d}}"),m_nRelZOrder );
//Line
sResult.AppendFormat( _T("{\\sp{\\sn dhgt}{\\sv %d}}"), m_nRelZOrder );
//Fill
if( 0 == m_bFilled )
sResult.Append( _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.Append( _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 );
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 );
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 );
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 );
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 );
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 );
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 );
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.
int nWrapPointCount = (int)m_aWrapPoints.size();
......@@ -362,6 +503,24 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
sResult.Append( _T("}}") );
}
//WordArt
if( PROP_DEF != m_bGtext )
{
sResult.AppendFormat( _T("{\\sp{\\sn fGtext}{\\sv %d}}"), m_bGtext );
if( !m_sGtextUNICODE.IsEmpty() )
{
sResult.Append ( _T("{\\sp{\\sn gtextUNICODE}{\\sv "));
sResult.Append ( m_sGtextUNICODE + _T("}}"));
}
if( !m_sGtextFont.IsEmpty() )
{
sResult.Append ( _T("{\\sp{\\sn gtextFont}{\\sv "));
sResult.Append ( 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)
......@@ -821,7 +980,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
sResult.AppendFormat( _T(" id=\"_x0000_s%d\""), poDocument->GetShapeId( m_nID ) );
if( PROP_DEF != m_nShapeType )
sResult.AppendFormat( _T(" type=\"#_x0000_t%d\""),m_nShapeType );
sResult.AppendFormat( _T(" type=\"#_x0000_t%d\""), m_nShapeType );
//Connectors
switch( m_nConnectionType )
......@@ -934,7 +1093,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
case 5: sStyle.Append(_T("mso-position-vertical:outside;"));break;
}
if( PROP_DEF != m_nPositionVPct )
sStyle.AppendFormat(_T("mso-top-percent:%d;"),m_nPositionVPct);
sStyle.AppendFormat(_T("mso-top-percent:%d;"), m_nPositionVPct);
if( PROP_DEF != m_nPositionV && PROP_DEF == m_nPositionVRelative )
m_nPositionVRelative =2;
......@@ -962,7 +1121,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
}
}
if( PROP_DEF != m_nPctWidth )
sStyle.AppendFormat(_T("mso-width-percent:%d;"),m_nPctWidth);
sStyle.AppendFormat(_T("mso-width-percent:%d;"), m_nPctWidth);
switch( m_nPctWidthRelative )
{
case 0:sStyle.Append(_T("mso-width-relative:margin;"));break;
......@@ -973,7 +1132,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
case 5:sStyle.Append(_T("mso-width-relative:outer-margin-area;"));break;
}
if( PROP_DEF != m_nPctHeight )
sStyle.AppendFormat(_T("mso-height-percent:%d;"),m_nPctHeight);
sStyle.AppendFormat(_T("mso-height-percent:%d;"), m_nPctHeight);
switch( m_nPctHeightRelative )
{
case 0:sStyle.Append(_T("mso-height-relative:margin;"));break;
......@@ -985,9 +1144,9 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
}
if( PROP_DEF != m_nRotation )
sStyle.AppendFormat(_T("rotation:%d;"),m_nRotation / 65536 );
sStyle.AppendFormat(_T("rotation:%d;"), m_nRotation / 65536 );
else if( PROP_DEF != m_nRelRotation )
sStyle.AppendFormat(_T("rotation:%d;"),m_nRelRotation / 65536 );
sStyle.AppendFormat(_T("rotation:%d;"), m_nRelRotation / 65536 );
int nZIndex = PROP_DEF;
if( PROP_DEF != m_nRelZOrder )
......@@ -1042,34 +1201,34 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
CString sAdjust;
if( PROP_DEF != m_nAdjustValue )
{
sAdjust.AppendFormat( _T("%d"),m_nAdjustValue);
sAdjust.AppendFormat( _T("%d"), m_nAdjustValue);
if( PROP_DEF != m_nAdjustValue2 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue2);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue2);
if( PROP_DEF != m_nAdjustValue3 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue3);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue3);
if( PROP_DEF != m_nAdjustValue4 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue4);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue4);
if( PROP_DEF != m_nAdjustValue5 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue5);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue5);
if( PROP_DEF != m_nAdjustValue6 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue6);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue6);
if( PROP_DEF != m_nAdjustValue7 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue7);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue7);
if( PROP_DEF != m_nAdjustValue8 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue8);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue8);
if( PROP_DEF != m_nAdjustValue9 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue9);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue9);
if( PROP_DEF != m_nAdjustValue10 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue10);
sAdjust.AppendFormat( _T(",%d"), m_nAdjustValue10);
}
}
}
......@@ -1094,19 +1253,19 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
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( true == m_bIsOle )
sResult.Append( _T(" o:ole=\"\"") );
if( true == m_bFilled )
sResult.Append( _T(" filled=\"t\"") );
else
sResult.Append( _T(" filled=\"f\"") );
if( true == m_bLine )
sResult.Append( _T(" stroked=\"t\"") );
else
sResult.Append( _T(" stroked=\"f\"") );
if( true == m_bIsOle ) sResult.Append( _T(" o:ole=\"\"") );
if( true == m_bFilled ) sResult.Append( _T(" filled=\"t\"") );
else sResult.Append( _T(" filled=\"f\"") );
if( true == m_bLine ) sResult.Append( _T(" stroked=\"t\"") );
else sResult.Append( _T(" stroked=\"f\"") );
if(PROP_DEF != m_nLineWidth)
sResult.AppendFormat( _T(" strokeweight=\"%fpt\""), RtfUtility::Emu2Pt(m_nLineWidth) );
sResult.Append( _T(">") );
if( PROP_DEF != m_nWrapType && 3 != m_nWrapType)
{
sResult.Append( _T("<w10:wrap"));
......
......@@ -38,17 +38,17 @@ public:
typedef enum{ st_none, st_inline, st_anchor }ShapeType;
typedef enum{
ax_none,
//ax_ignore, //\shpbxignore Ignore \shpbxpage, \shpbxmargin, and \shpbxcolumn, in favor of the posrelh property. The ignored properties will be written for backward compatibility with older readers that do not understand \posrelh.
ax_page, //\shpbxpage The shape is positioned relative to the page in the x (horizontal) direction.
ax_margin, //\shpbxmargin The shape is positioned relative to the margin in the x (horizontal) direction.
ax_column //\shpbxcolumn The shape is positioned relative to the column in the x (horizontal) direction.
//ax_ignore, //shpbxignore Ignore \shpbxpage, \shpbxmargin, and \shpbxcolumn, in favor of the posrelh property. The ignored properties will be written for backward compatibility with older readers that do not understand \posrelh.
ax_page, //shpbxpage The shape is positioned relative to the page in the x (horizontal) direction.
ax_margin, //shpbxmargin The shape is positioned relative to the margin in the x (horizontal) direction.
ax_column //shpbxcolumn The shape is positioned relative to the column in the x (horizontal) direction.
}AnchorX;
typedef enum{
ay_none,
//ay_ignore, //\shpbyignore Ignore \shpbypage, \shpbymargin, and \shpbxpara, in favor of the posrelh property. The ignored properties will be written for backward compatibility with older readers that do not understand the posrelh property.
ay_page, //\shpbypage The shape is positioned relative to the page in the y (vertical) direction.
ay_margin, //\shpbymargin The shape is positioned relative to the margin in the y (vertical) direction.
ay_Para //\shpbypara The shape is positioned relative to the paragraph in the y (vertical) direction.
//ay_ignore, //shpbyignore Ignore \shpbypage, \shpbymargin, and \shpbxpara, in favor of the posrelh property. The ignored properties will be written for backward compatibility with older readers that do not understand the posrelh property.
ay_page, //shpbypage The shape is positioned relative to the page in the y (vertical) direction.
ay_margin, //shpbymargin The shape is positioned relative to the margin in the y (vertical) direction.
ay_Para //shpbypara The shape is positioned relative to the paragraph in the y (vertical) direction.
}AnchorY;
ShapeType m_eShapeType;
......@@ -56,63 +56,65 @@ public:
CString m_sName;
CString m_sDescription;
int m_nLeft; //\shpleftN Specifies position of shape from the left of the anchor. The value N is in twips.
int m_nTop; //\shptopN Specifies position of shape from the top of the anchor. The value N is in twips.
int m_nBottom; //\shpbottomN Specifies position of shape from the bottom of the anchor. The value N is in twips.
int m_nRight; //\shprightN Specifies position of shape from the right of the anchor. The value N is in twips.
int m_nID; //\shplidN A number that is unique to each shape. This keyword is primarily used for linked text boxes. The value N is a long integer.
int m_nZOrder; //\shpzN Describes the z-order of the shape. It starts at 0 for the shape that is furthest from the top, and proceeds to the top most shape (N). The shapes that appear inside the header document will have a separate z-order, compared to the z-order of the shapes in the main document. For instance, both the back-most shape in the header and the back-most main-document shape will have a z-order of 0.
int m_nHeader; //\shpfhdrN Set to 0 if the shape is in the main document. Set to 1 if the shape is in the header document.
int m_nWrapType; //\shpwrN Describes the type of wrap for the shape:
int m_nWrapSideType; //\shpwrkN Wrap on side (for types 2 and 4 for \shpwrN ):
int m_nZOrderRelative; //\shpfblwtxtN Describes relative z-ordering:
int m_bLockAnchor; //\shplockanchor Lock anchor for a shape.
int m_nLeft; //shpleftN Specifies position of shape from the left of the anchor. The value N is in twips.
int m_nTop; //shptopN Specifies position of shape from the top of the anchor. The value N is in twips.
int m_nBottom; //shpbottomN Specifies position of shape from the bottom of the anchor. The value N is in twips.
int m_nRight; //shprightN Specifies position of shape from the right of the anchor. The value N is in twips.
int m_nID; //shplidN A number that is unique to each shape. This keyword is primarily used for linked text boxes. The value N is a long integer.
int m_nZOrder; //shpzN Describes the z-order of the shape. It starts at 0 for the shape that is furthest from the top, and proceeds to the top most shape (N). The shapes that appear inside the header document will have a separate z-order, compared to the z-order of the shapes in the main document. For instance, both the back-most shape in the header and the back-most main-document shape will have a z-order of 0.
int m_nHeader; //shpfhdrN Set to 0 if the shape is in the main document. Set to 1 if the shape is in the header document.
int m_nWrapType; //shpwrN Describes the type of wrap for the shape:
int m_nWrapSideType; //shpwrkN Wrap on side (for types 2 and 4 for \shpwrN ):
int m_nZOrderRelative; //shpfblwtxtN Describes relative z-ordering:
int m_bLockAnchor; //shplockanchor Lock anchor for a shape.
AnchorX m_eXAnchor;
AnchorY m_eYAnchor;
//----------------ShapeProperty--------------------
//Position absolute
int m_nPositionH; //posh Horizontal alignment
int m_nPositionHRelative; //posrelh Position horizontally relative to:
int m_nPositionV; //posv Vertical alignment:
int m_nPositionVRelative; //posrelv Position horizontally relative to:
int m_bLayoutInCell; //fLayoutInCell Allows shape to anchor and position inside table cells.
int m_bAllowOverlap; //fAllowOverlap Allows shape to overlap other shapes unless it is a shape with None wrapping (\shpwr3), in which case it can always overlap an object with other types of wrapping and vice-versa.
int m_nPositionH; //posh Horizontal alignment
int m_nPositionHRelative; //posrelh Position horizontally relative to:
int m_nPositionV; //posv Vertical alignment:
int m_nPositionVRelative; //posrelv Position horizontally relative to:
int m_bLayoutInCell; //fLayoutInCell Allows shape to anchor and position inside table cells.
int m_bAllowOverlap; //fAllowOverlap Allows shape to overlap other shapes unless it is a shape with None wrapping (\shpwr3), in which case it can always overlap an object with other types of wrapping and vice-versa.
//Position relative
int m_nPositionHPct; //pctHorizPos Percentage horizontal position for a shape
int m_nPositionVPct; //pctVert Percentage vertical position for a shape
int m_nPctWidth; //pctHoriz Percentage width for a shape
int m_nPctHeight; //pctVert Percentage height for a shape
int m_nPctWidthRelative; //sizerelh Relative size horizontal relation
int m_nPctHeightRelative; //sizerelv Relative size vertical relation
int m_nColStart; //colStart Starting column
int m_nColSpan; //colSpan Number of columns to span
int m_nPositionHPct; //pctHorizPos Percentage horizontal position for a shape
int m_nPositionVPct; //pctVert Percentage vertical position for a shape
int m_nPctWidth; //pctHoriz Percentage width for a shape
int m_nPctHeight; //pctVert Percentage height for a shape
int m_nPctWidthRelative; //sizerelh Relative size horizontal relation
int m_nPctHeightRelative; //sizerelv Relative size vertical relation
int m_nColStart; //colStart Starting column
int m_nColSpan; //colSpan Number of columns to span
//Rehydration
CString m_sMetroBlob; // metroBlob Specifies application-specific data used to convert a shape to other formats. It is an encoded TBYTE stream.
CString m_sMetroBlob; // metroBlob Specifies application-specific data used to convert a shape to other formats. It is an encoded TBYTE stream.
CString m_sMetroBlobRels;
CString m_sMetroBlobData;
//Object Type
int m_bIsBullet; //fIsBullet Indicates whether a picture was inserted as a picture bullet.
int m_nRotation; //rotation Rotation of the shape. Angle 0
int m_bFlipV; //fFlipV Vertical flip, applied after the rotation. Boolean FALSE
int m_bFlipH; //fFlipH Horizontal flip, applied after the rotation. Boolean FALSE
int m_nShapeType; //shapeType See below for values. 0 indicates user-drawn freeforms and polygons. Not applicable Not applicable
int m_nWrapDistLeft; //dxWrapDistLeft Left wrapping distance from text.
int m_nWrapDistTop; //
int m_nWrapDistRight; //
int m_nWrapDistBottom; //
// int m_bBehindDocument; //fBehindDocument Place the shape behind text. Boolean FALSE
int m_bHidden; //fHidden Do not display or print (only set through Visual Basic for Applications). Boolean FALSE
bool m_bIsOle;
int m_bIsBullet; //fIsBullet Indicates whether a picture was inserted as a picture bullet.
int m_nRotation; //rotation Rotation of the shape. Angle 0
int m_bFlipV; //fFlipV Vertical flip, applied after the rotation. Boolean FALSE
int m_bFlipH; //fFlipH Horizontal flip, applied after the rotation. Boolean FALSE
int m_nShapeType; //shapeType See below for values. 0 indicates user-drawn freeforms and polygons. Not applicable Not applicable
int m_nWrapDistLeft; //dxWrapDistLeft Left wrapping distance from text.
int m_nWrapDistTop; //
int m_nWrapDistRight; //
int m_nWrapDistBottom; //
// int m_bBehindDocument; //Place the shape behind text. Boolean FALSE
int m_bHidden; //Do not display or print (only set through Visual Basic for Applications). Boolean FALSE
//Text box
int m_nTexpLeft; //dxTextLeft Left internal margin of the text box. EMU 91,440
int m_nTexpTop; //
int m_nTexpRight; //
int m_nTexpBottom; //
int m_nTexpLeft; //dxTextLeft Left internal margin of the text box. EMU 91,440
int m_nTexpTop; //
int m_nTexpRight; //
int m_nTexpBottom; //
//Geometry
int m_nAdjustValue; //adjustValue First adjust value from an adjust handle. The interpretation varies with the shape type. Adjust values alter the geometry of the shape in smart ways. Integer 0
int m_nAdjustValue; //adjustValue First adjust value from an adjust handle. The interpretation varies with the shape type. Adjust values alter the geometry of the shape in smart ways. Integer 0
int m_nAdjustValue2;
int m_nAdjustValue3;
int m_nAdjustValue4;
......@@ -123,46 +125,59 @@ public:
int m_nAdjustValue9;
int m_nAdjustValue10;
//Connectors
int m_nConnectionType; //cxk Connection site type
int m_nConnectorStyle; //cxstyle Connector style
//WordArt Effects
int m_nCropFromTop; //cropFromTop Top cropping percentage. Измеряется в fraction 1 /65536
int m_nCropFromBottom; //cropFromBottom Bottom cropping percentage.
int m_nCropFromLeft; //cropFromLeft Left cropping percentage.
int m_nCropFromRight; //cropFromRight Right cropping percentage.
int m_nConnectionType; //cxk Connection site type
int m_nConnectorStyle; //cxstyle Connector style
//Picture Effects
int m_nCropFromTop; //cropFromTop Top cropping percentage. Измеряется в fraction 1 /65536
int m_nCropFromBottom; //cropFromBottom Bottom cropping percentage.
int m_nCropFromLeft; //cropFromLeft Left cropping percentage.
int m_nCropFromRight; //cropFromRight Right cropping percentage.
//Grouped Shapes
int m_nGroupBottom; //groupBottom Defines the height of the group rectangle, but does not necessarily indicate position on the page. The difference between groupBottom and groupTop should match the dimensions specified by \shptopN and \shpbottomN.
int m_nGroupLeft; //groupLeft Defines the width of the group rectangle, but does not necessarily indicate position on the page. The difference between groupLeft and groupRight should match the dimensions specified by \shpleftN and \shprightN.
int m_nGroupRight; //groupRight See meaning for groupLeft.
int m_nGroupTop; //groupTop See meaning for groupBottom.
int m_nRelBottom; //relBottom Defines the bottom of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelLeft; //relLeft Defines the left of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelRight; //relRight Defines the right of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelTop; //relTop Defines the top of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelRotation; //relRotation Represents the information stored in the site of a shape, which defines the size and location of the shape in the parent group or drawing. The coordinates are relative to the position of the parent group or drawing. The units are relative to the m_rcg of the parent.
int m_nRelZOrder;//dhgt Word 2007 Z-order position of shape(s) on a page. Shapes with small dhgts are further back than shapes with large dhgts.
int m_nGroupBottom; //groupBottom Defines the height of the group rectangle, but does not necessarily indicate position on the page. The difference between groupBottom and groupTop should match the dimensions specified by \shptopN and \shpbottomN.
int m_nGroupLeft; //groupLeft Defines the width of the group rectangle, but does not necessarily indicate position on the page. The difference between groupLeft and groupRight should match the dimensions specified by \shpleftN and \shprightN.
int m_nGroupRight; //groupRight See meaning for groupLeft.
int m_nGroupTop; //groupTop See meaning for groupBottom.
int m_nRelBottom; //relBottom Defines the bottom of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelLeft; //relLeft Defines the left of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelRight; //relRight Defines the right of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelTop; //relTop Defines the top of a shape within its parent shape (used for shapes in a group). The measurement is relative to the position of the parent group or drawing.
int m_nRelRotation; //relRotation Represents the information stored in the site of a shape, which defines the size and location of the shape in the parent group or drawing. The coordinates are relative to the position of the parent group or drawing. The units are relative to the m_rcg of the parent.
int m_nRelZOrder; //dhgt Word 2007 Z-order position of shape(s) on a page. Shapes with small dhgts are further back than shapes with large dhgts.
//Fill
int m_bFilled; //fFilled The shape is filled.
int m_bFilled; //fFilled The shape is filled.
int m_nFillColor; //fillColor
int m_nFillColor2; //fillBackColor
int m_nFillType;
int m_nFillOpacity;
int m_nFillFocus;
int m_nFillAngle;
//int m_bFillShape; //есть копия заливки картинкой
//Line
int m_bLine; //fLine Has a line
int m_nLineStartArrow; //lineStartArrowhead Start arrow type:
int m_nLineEndArrow; //lineEndArrowhead End arrow type (for acceptable values see meaning for lineStartArrowhead).
int m_nLineStartArrowWidth; //lineStartArrowWidth Start arrow width:
int m_nLineStartArrowLength; //lineStartArrowLength Start arrow length:
int m_nLineEndArrowWidth; //lineEndArrowWidth End arrow width (for acceptable values see meaning for lineStartArrowWidth).
int m_nLineEndArrowLength; //lineEndArrowLength End arrow length (for acceptable values see meaning for lineStartArrowLength).
int m_nLineWidth; //lineWidth Width of the line.
int m_bLine; //fLine Has a line
int m_nLineColor;
int m_nLineStartArrow; //lineStartArrowhead Start arrow type:
int m_nLineEndArrow; //lineEndArrowhead End arrow type (for acceptable values see meaning for lineStartArrowhead).
int m_nLineStartArrowWidth; //lineStartArrowWidth Start arrow width:
int m_nLineStartArrowLength; //lineStartArrowLength Start arrow length:
int m_nLineEndArrowWidth; //lineEndArrowWidth End arrow width (for acceptable values see meaning for lineStartArrowWidth).
int m_nLineEndArrowLength; //lineEndArrowLength End arrow length (for acceptable values see meaning for lineStartArrowLength).
int m_nLineWidth; //lineWidth Width of the line.
int m_nLineDashing;
//WordArt
CString m_sGtextUNICODE;
CString m_sGtextFont;
int m_nGtextSize;
int m_bGtext;
//pWrapPolygonVertices Points of the text wrap polygon.
std::vector< int > m_aWrapPoints;
//textbox
TextItemContainerPtr m_aTextItems;
RtfPicturePtr m_oPicture;
bool m_bIsOle;
//------------------------------------------------------------------------------------------------------
RtfShape()
{
SetDefault();
......@@ -180,123 +195,13 @@ public:
{
SetDefault();
}
void SetDefault()
{
m_eShapeType = 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 )
//m_bBehindDocument = -1;
DEFAULT_PROPERTY( m_bHidden )
//Text box
DEFAULT_PROPERTY_DEF( m_nTexpLeft, 91440 )
DEFAULT_PROPERTY_DEF( m_nTexpTop, 45720 )
DEFAULT_PROPERTY_DEF( m_nTexpRight, 91440 )
DEFAULT_PROPERTY_DEF( m_nTexpBottom, 45720 )
void SetDefault();
CString RenderToRtf (RenderParameter oRenderParameter);
CString RenderToOOX (RenderParameter oRenderParameter);
//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 )
//WordArt 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 )
//Line
DEFAULT_PROPERTY_DEF( m_bLine, true )
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 )
m_aTextItems = TextItemContainerPtr();
m_oPicture = RtfPicturePtr();
m_bIsOle = false;
}
CString RenderToRtf(RenderParameter oRenderParameter);
private: CString RenderToRtfShapeProperty(RenderParameter oRenderParameter);
public: CString RenderToOOX(RenderParameter oRenderParameter);
CString RenderToOOXBegin(RenderParameter oRenderParameter);
CString RenderToOOXEnd(RenderParameter oRenderParameter);
CString RenderToOOXEnd (RenderParameter oRenderParameter);
void ToRtfRotation( int nAngel , int &nLeft, int &nTop, int& nRight, int& nBottom )
{
//поворачиваем на 45 градусов
......@@ -320,11 +225,17 @@ public: CString RenderToOOX(RenderParameter oRenderParameter);
nBottom = nCenterY + nWidth / 2;
}
}
private:
CString RenderToRtfShapeProperty(RenderParameter oRenderParameter);
};
typedef boost::shared_ptr<RtfShape> RtfShapePtr;
class RtfShapeGroup : public RtfShape, public ItemContainer<RtfShapePtr>
{
public: CString RenderToRtf(RenderParameter oRenderParameter);
public:
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
bool IsValid()
{
......
......@@ -2592,6 +2592,8 @@ namespace SimpleTypes
if ( sValue.GetLength() <= 0 )
return this->m_eValue;
sValue.MakeLower();
wchar_t wChar = sValue.GetAt(0);
switch ( wChar )
{
......
......@@ -430,7 +430,7 @@ namespace OOX
ComplexTypes_WriteAttribute2( _T("id=\""), m_sId );
sResult += _T("type=\"") + m_oType.ToString() + _T("\" ");
if ( SimpleTypes::booleanTrue != m_oOn.GetValue() )
if ( (m_oOn.IsInit()) && ( SimpleTypes::booleanTrue != m_oOn->GetValue() ))
sResult += _T("on=\"false\" ");
if ( m_oOpacity.IsInit() )
......@@ -445,27 +445,27 @@ namespace OOX
ComplexTypes_WriteAttribute ( _T("origin=\""), m_oOrigin );
ComplexTypes_WriteAttribute ( _T("position=\""), m_oPosition );
if ( SimpleTypes::imageaspectIgnore != m_oAspect.GetValue() )
sResult += _T("aspect=\"") + m_oAspect.ToString() + _T("\" ");
if ((m_oAspect.IsInit()) && (SimpleTypes::imageaspectIgnore != m_oAspect->GetValue() ))
sResult += _T("aspect=\"") + m_oAspect->ToString() + _T("\" ");
// TO DO: Сделать запись m_arrColors
ComplexTypes_WriteAttribute ( _T("angle=\""), m_oAngle );
if ( SimpleTypes::booleanTrue != m_oAlignShape.GetValue() )
if ( (m_oAlignShape.IsInit()) && (SimpleTypes::booleanTrue != m_oAlignShape->GetValue() ))
sResult += _T("alignshape=\"false\" ");
if ( 0 != m_oFocus.GetValue() )
sResult += _T("focus=\"") + m_oFocus.ToString() + _T("\" ");
if ( (m_oFocus.IsInit()) && (0 != m_oFocus->GetValue() ))
sResult += _T("focus=\"") + m_oFocus->ToString() + _T("\" ");
if ( 0 != m_oFocusPosition.GetX() || 0 != m_oFocusPosition.GetY() )
sResult += _T("focusposition=\"") + m_oFocusPosition.ToString() + _T("\" ");
if ( (m_oFocusPosition.IsInit()) && (0 != m_oFocusPosition->GetX() || 0 != m_oFocusPosition->GetY() ))
sResult += _T("focusposition=\"") + m_oFocusPosition->ToString() + _T("\" ");
if ( 0 != m_oFocusSize.GetX() || 0 != m_oFocusSize.GetY() )
sResult += _T("focussize=\"") + m_oFocusSize.ToString() + _T("\" ");
if ( ( m_oFocusSize.IsInit() ) && (0 != m_oFocusSize->GetX() || 0 != m_oFocusSize->GetY() ))
sResult += _T("focussize=\"") + m_oFocusSize->ToString() + _T("\" ");
if ( SimpleTypes::fillmethodSigma != m_oMethod.GetValue() )
sResult += _T("method=\"") + m_oMethod.ToString() + _T("\" ");
if ( (m_oMethod.IsInit() ) && (SimpleTypes::fillmethodSigma != m_oMethod->GetValue() ))
sResult += _T("method=\"") + m_oMethod->ToString() + _T("\" ");
ComplexTypes_WriteAttribute ( _T("o:detectmouseclick=\""), m_oDetectMouseClick );
ComplexTypes_WriteAttribute2( _T("o:title=\""), m_sTitle );
......@@ -473,10 +473,10 @@ namespace OOX
if ( m_oOpacity2.IsInit() )
sResult += _T("o:opacity2=\"") + m_oOpacity2->ToString() + _T("\" ");
if ( SimpleTypes::booleanFalse != m_oRecolor.GetValue() )
if ( (m_oRecolor.IsInit()) && (SimpleTypes::booleanFalse != m_oRecolor->GetValue() ))
sResult += _T("recolor=\"true\" ");
if ( SimpleTypes::booleanFalse != m_oRotate.GetValue() )
if (( m_oRotate.IsInit()) && (SimpleTypes::booleanFalse != m_oRotate->GetValue() ))
sResult += _T("rotate=\"true\" ");
ComplexTypes_WriteAttribute ( _T("r:id=\""), m_rId );
......@@ -501,9 +501,9 @@ namespace OOX
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
// Выставляем значения по умолчанию
m_oFocus.SetValue( 0 );
m_oFocusPosition.SetValue( 0.0, 0.0 );
m_oFocusSize.SetValue( 0.0, 0.0 );
//m_oFocus.SetValue( 0 );
//m_oFocusPosition.SetValue( 0.0, 0.0 );
//m_oFocusSize.SetValue( 0.0, 0.0 );
CString sColors;
// Читаем атрибуты
......@@ -596,36 +596,36 @@ namespace OOX
};
// Attributes
SimpleTypes::CTrueFalse<SimpleTypes::booleanTrue> m_oAlignShape;
nullable<CString> m_sAltHref;
nullable<SimpleTypes::CDecimalNumber<>> m_oAngle;
SimpleTypes::CImageAspect<SimpleTypes::imageaspectIgnore> m_oAspect;
nullable<SimpleTypes::CColorType<>> m_oColor;
nullable<SimpleTypes::CColorType<>> m_oColor2;
std::vector<TIntermediateColor*> m_arrColors;
nullable<SimpleTypes::CTrueFalse<>> m_oDetectMouseClick;
SimpleTypes::CFixedPercentage m_oFocus;
SimpleTypes::Vml::CVml_Vector2D_Percentage m_oFocusPosition;
SimpleTypes::Vml::CVml_Vector2D_Percentage m_oFocusSize;
nullable<CString> m_sHref;
nullable<SimpleTypes::CRelationshipId> m_rId;
nullable<CString> m_sId;
SimpleTypes::CFillMethod<SimpleTypes::fillmethodSigma> m_oMethod;
SimpleTypes::CTrueFalse<SimpleTypes::booleanTrue> m_oOn;
nullable<SimpleTypes::Vml::CVml_1_65536> m_oOpacity;
nullable<SimpleTypes::Vml::CVml_1_65536> m_oOpacity2;
nullable<SimpleTypes::Vml::CVml_Vector2D_1_65536> m_oOrigin;
nullable<SimpleTypes::Vml::CVml_Vector2D_1_65536> m_oPosition;
SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse> m_oRecolor;
nullable<SimpleTypes::CRelationshipId> m_oRelId;
SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse> m_oRotate;
nullable<SimpleTypes::Vml::CVml_Vector2D_Units> m_oSize;
nullable<CString> m_sSrc;
nullable<CString> m_sTitle;
SimpleTypes::CFillType<SimpleTypes::filltypeSolid, 0> m_oType;
nullable<SimpleTypes::CTrueFalse<SimpleTypes::booleanTrue>> m_oAlignShape;
nullable<CString> m_sAltHref;
nullable<SimpleTypes::CDecimalNumber<>> m_oAngle;
nullable<SimpleTypes::CImageAspect<SimpleTypes::imageaspectIgnore>> m_oAspect;
nullable<SimpleTypes::CColorType<>> m_oColor;
nullable<SimpleTypes::CColorType<>> m_oColor2;
std::vector<TIntermediateColor*> m_arrColors;
nullable<SimpleTypes::CTrueFalse<>> m_oDetectMouseClick;
nullable<SimpleTypes::CFixedPercentage > m_oFocus;
nullable<SimpleTypes::Vml::CVml_Vector2D_Percentage> m_oFocusPosition;
nullable<SimpleTypes::Vml::CVml_Vector2D_Percentage> m_oFocusSize;
nullable<CString> m_sHref;
nullable<SimpleTypes::CRelationshipId> m_rId;
nullable<CString> m_sId;
nullable<SimpleTypes::CFillMethod<SimpleTypes::fillmethodSigma>> m_oMethod;
nullable<SimpleTypes::CTrueFalse<SimpleTypes::booleanTrue>> m_oOn;
nullable<SimpleTypes::Vml::CVml_1_65536> m_oOpacity;
nullable<SimpleTypes::Vml::CVml_1_65536> m_oOpacity2;
nullable<SimpleTypes::Vml::CVml_Vector2D_1_65536> m_oOrigin;
nullable<SimpleTypes::Vml::CVml_Vector2D_1_65536> m_oPosition;
nullable<SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse>> m_oRecolor;
nullable<SimpleTypes::CRelationshipId> m_oRelId;
nullable<SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse>> m_oRotate;
nullable<SimpleTypes::Vml::CVml_Vector2D_Units> m_oSize;
nullable<CString> m_sSrc;
nullable<CString> m_sTitle;
SimpleTypes::CFillType<SimpleTypes::filltypeSolid, 0> m_oType;
// Childs
nullable<OOX::VmlOffice::CFill> m_oFill;
nullable<OOX::VmlOffice::CFill> m_oFill;
};
//--------------------------------------------------------------------------------
......
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