Commit d0b4fc4b authored by ElenaSubbotina's avatar ElenaSubbotina

RtfFormatReader/Writer - fix bugs, add new convertation elements

parent 987839a6
......@@ -386,10 +386,14 @@ namespace DocFileFormat
GroupShapeBooleanProperties groupShapeBooleans(iter->op);
if (groupShapeBooleans.fUsefBehindDocument && groupShapeBooleans.fBehindDocument)
{//m_isInlineShape ???
{
//The shape is behind the text, so the z-index must be negative.
appendStyleProperty(&strStyle, _T( "z-index" ), _T( "-1" ) );
}
//else if (!m_isInlinePicture)
//{
// appendStyleProperty( &strStyle, _T( "z-index" ), FormatUtils::IntToWideString(zIndex + 0x7ffff));
//}
if (groupShapeBooleans.fHidden && groupShapeBooleans.fUsefHidden)
{
......
......@@ -1438,6 +1438,8 @@ namespace DocFileFormat
bool bPosH = false;
bool bPosV = false;
bool bZIndex = false;
std::list<OptionEntry>::const_iterator end = options.end();
for (std::list<OptionEntry>::const_iterator iter = options.begin(); iter != end; ++iter)
{
......@@ -1469,14 +1471,16 @@ namespace DocFileFormat
{
GroupShapeBooleanProperties groupShapeBooleans(iter->op);
if (groupShapeBooleans.fUsefBehindDocument && groupShapeBooleans.fBehindDocument)
if (groupShapeBooleans.fUsefBehindDocument && groupShapeBooleans.fBehindDocument && !bZIndex)
{
//The shape is behind the text, so the z-index must be negative.
appendStyleProperty(oStyle, _T( "z-index" ), _T( "-1" ) );
bZIndex = true;
}
else if (!m_isInlineShape)
else if (!m_isInlineShape && !bZIndex)
{
appendStyleProperty( oStyle, _T( "z-index" ), FormatUtils::IntToWideString(zIndex + 0x7ffff));
bZIndex = true;
}
if (groupShapeBooleans.fHidden && groupShapeBooleans.fUsefHidden)
......
......@@ -63,6 +63,7 @@ bool ShapeReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CStr
{
if( PROP_DEF == m_oShape.m_nShapeType )
m_oShape.m_nShapeType = 202;//Text box
ParagraphReader oParagraphReader(_T("shptxt"), oReader);
StartSubReader( oParagraphReader, oDocument, oReader );
m_oShape.m_aTextItems = oParagraphReader.m_oParPropDest.m_oTextItems;
......@@ -170,12 +171,16 @@ bool PictureReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CS
else if( _T("picw") == sCommand )
{
if( true == hasParameter )
{
m_oShape.m_oPicture->m_nWidth = parameter;
}
}
else if( _T("pich") == sCommand )
{
if( true == hasParameter )
{
m_oShape.m_oPicture->m_nHeight = parameter;
}
}
else if( _T("picwgoal") == sCommand )
{
......
......@@ -1245,8 +1245,10 @@ public:
RtfUtility::WriteDataToFileBinary( sTempFile, m_pbBin, m_nBinLength );
else
RtfUtility::WriteDataToFile( sTempFile, m_sData );
if( RtfPicture::dt_none == m_oShape.m_oPicture->eDataType )
RtfPicture::DataType eDataType = RtfPicture::GetPictureType( sTempFile );
m_oShape.m_oPicture->eDataType = RtfPicture::GetPictureType( sTempFile );
m_oShape.m_oPicture->m_bIsCopy = true;
m_oShape.m_oPicture->m_sPicFilename = sTempFile;
}
......@@ -1280,7 +1282,7 @@ class ShapeReader : public RtfAbstractReader
{
if( _T("sv") == sCommand )
return true;
else if( _T("pict") == sCommand && _T("pib") == m_sPropName )
else if( _T("pict") == sCommand && ( _T("pib") == m_sPropName || _T("fillBlip") == m_sPropName))
{
m_oShape.m_oPicture = RtfPicturePtr( new RtfPicture() );
PictureReader oPictureReader( oReader, m_oShape );
......@@ -1309,7 +1311,7 @@ class ShapeReader : public RtfAbstractReader
m_oShape.m_sDescription = sValue;
return;
}
//числовые
//числовые
int nValue = 0;
try
......@@ -1321,7 +1323,7 @@ class ShapeReader : public RtfAbstractReader
if( _T("shapeType") == m_sPropName )
m_oShape.m_nShapeType = nValue;
//Position absolute
//Position absolute
else if( _T("posh") == m_sPropName )
m_oShape.m_nPositionH = nValue;
else if( _T("posrelh") == m_sPropName )
......@@ -1334,7 +1336,7 @@ class ShapeReader : public RtfAbstractReader
m_oShape.m_bLayoutInCell = nValue;
else if( _T("fAllowOverlap") == m_sPropName )
m_oShape.m_bAllowOverlap = nValue;
//Position relative
//Position relative
else if( _T("pctHorizPos") == m_sPropName )
m_oShape.m_nPositionHPct = nValue;
else if( _T("pctVertPos") == m_sPropName )
......@@ -1401,7 +1403,7 @@ class ShapeReader : public RtfAbstractReader
m_oShape.m_nZOrderRelative = nValue;
else if( _T("fHidden") == m_sPropName )
m_oShape.m_bHidden = nValue;
//Text box
//Text box
else if( _T("dxTextLeft") == m_sPropName )
m_oShape.m_nTexpLeft = nValue;
else if( _T("dyTextTop") == m_sPropName )
......@@ -1411,7 +1413,7 @@ class ShapeReader : public RtfAbstractReader
else if( _T("dyTextBottom") == m_sPropName )
m_oShape.m_nTexpBottom = nValue;
//Geometry
//Geometry
else if( _T("adjustValue") == m_sPropName )
m_oShape.m_nAdjustValue = nValue;
else if( _T("adjust2Value") == m_sPropName )
......@@ -1432,7 +1434,7 @@ class ShapeReader : public RtfAbstractReader
m_oShape.m_nAdjustValue9 = nValue;
else if( _T("adjust10Value") == m_sPropName )
m_oShape.m_nAdjustValue10 = nValue;
//WordArt Effects
//WordArt Effects
else if( _T("cropFromTop") == m_sPropName )
m_oShape.m_nCropFromTop = nValue;
else if( _T("cropFromBottom") == m_sPropName )
......@@ -1441,7 +1443,7 @@ class ShapeReader : public RtfAbstractReader
m_oShape.m_nCropFromRight = nValue;
else if( _T("cropFromRight") == m_sPropName )
m_oShape.m_nCropFromTop = nValue;
//Grouped Shapes
//Grouped Shapes
else if( _T("groupBottom") == m_sPropName )
m_oShape.m_nGroupBottom = nValue;
else if( _T("groupLeft") == m_sPropName )
......@@ -1462,22 +1464,14 @@ class ShapeReader : public RtfAbstractReader
m_oShape.m_nRelRotation = nValue;
else if( _T("dhgt") == m_sPropName )
m_oShape.m_nRelZOrder = nValue;
//Fill
//Fill
else if( _T("fFilled") == m_sPropName )
{
if( 0 == nValue )
m_oShape.m_bFilled = false;
else
m_oShape.m_bFilled = false;
}
//Line
m_oShape.m_bFilled = (0 == nValue ? false : true );
else if( _T("fillType") == m_sPropName )
m_oShape.m_nFillType = nValue;
//Line
else if( _T("fLine") == m_sPropName )
{
if( 0 == nValue )
m_oShape.m_bLine = false;
else
m_oShape.m_bLine = false;
}
m_oShape.m_bLine = ( 0 == nValue ? false : true );
else if( _T("lineStartArrowhead") == m_sPropName )
m_oShape.m_nLineStartArrow = nValue;
else if( _T("lineStartArrowWidth") == m_sPropName )
......@@ -1492,6 +1486,11 @@ class ShapeReader : public RtfAbstractReader
m_oShape.m_nLineEndArrowLength = nValue;
else if( _T("lineWidth") == m_sPropName )
m_oShape.m_nLineWidth = nValue;
else
{
int val = nValue;
std::wstring name = m_sPropName.GetBuffer();
}
}
void ExecuteText( RtfDocument& oDocument, RtfReader& oReader, CString oText )
{
......@@ -3395,21 +3394,25 @@ public:
}
else if( _T("sect") == sCommand )
{
RtfSectionPtr oCurSection;
if(true == oDocument.GetItem( oCurSection ) )
oCurSection->m_oProperty = oReader.m_oCurSectionProp;
//вручную обнуляем footer, т.к. sectd может встретиться и после field
oReader.m_oCurSectionProp.m_oHeaderLeft = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oHeaderFirst = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oHeaderRight = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oFooterLeft = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oFooterFirst = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oFooterRight = TextItemContainerPtr();
RtfSectionPtr oNewSection = RtfSectionPtr( new RtfSection() );
oParagraphReaderDestination.Finalize( oReader );
oParagraphReaderDestination.m_oTextItems = oNewSection;
oDocument.AddItem( oNewSection );
//if (oParagraphReaderDestination.m_oTextItems->GetCount() > 0)
{
RtfSectionPtr oCurSection;
if(true == oDocument.GetItem( oCurSection ) )
oCurSection->m_oProperty = oReader.m_oCurSectionProp;
//вручную обнуляем footer, т.к. sectd может встретиться и после field
oReader.m_oCurSectionProp.m_oHeaderLeft = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oHeaderFirst = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oHeaderRight = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oFooterLeft = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oFooterFirst = TextItemContainerPtr();
oReader.m_oCurSectionProp.m_oFooterRight = TextItemContainerPtr();
oParagraphReaderDestination.Finalize( oReader );
RtfSectionPtr oNewSection = RtfSectionPtr( new RtfSection() );
oParagraphReaderDestination.m_oTextItems = oNewSection;
oDocument.AddItem( oNewSection );
}
}
else if( _T("sectd") == sCommand )
{
......
......@@ -347,430 +347,452 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
return true;
}
bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagraph, RtfStylePtr poStyle )
bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagraph, RtfStylePtr poStyle, RtfCharProperty& oNewProperty, OOX::WritingElement* ooxItem )
{
if (m_ooxRun == NULL) return false;
RtfCharProperty oNewProperty;
oNewProperty.SetDefaultOOX();
//применяем default
oNewProperty = oParam.oRtf->m_oDefaultCharProp;
//применяем внешний стиль
oNewProperty.Merge( oOutputParagraph.m_oProperty.m_oCharProperty );
if( NULL != poStyle && TYPE_RTF_PROPERTY_STYLE_CHAR == poStyle->GetType() )
{
RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( poStyle );
oNewProperty.Merge( oCharStyle->m_oCharProp );
}
if (m_ooxRun->m_oRunProperty)
{
OOXrPrReader orPrReader(m_ooxRun->m_oRunProperty);
orPrReader.Parse( oParam, oNewProperty );
}
if (!ooxItem) return false;
for (long i =0 ; i < m_ooxRun->m_arrItems.size(); i++)
switch(ooxItem->getType())
{
switch(m_ooxRun->m_arrItems[i]->getType())
case OOX::et_w_t:
{
case OOX::et_w_t:
OOX::Logic::CText * ooxText = dynamic_cast<OOX::Logic::CText*>(ooxItem);
if (ooxText)
{
OOX::Logic::CText * ooxText = dynamic_cast<OOX::Logic::CText*>(m_ooxRun->m_arrItems[i]);
if (ooxText)
CString sValue;
if ((ooxText->m_oSpace.IsInit()) && (ooxText->m_oSpace->GetValue() == SimpleTypes::xmlspacePreserve))
{
CString sValue;
if ((ooxText->m_oSpace.IsInit()) && (ooxText->m_oSpace->GetValue() == SimpleTypes::xmlspacePreserve))
{
sValue = RtfUtility::Preserve(ooxText->m_sText);
}
else
sValue = ooxText->m_sText;
RtfCharPtr oNewChar = RtfCharPtr( new RtfChar() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->setText( sValue );
oOutputParagraph.AddItem( oNewChar );
sValue = RtfUtility::Preserve(ooxText->m_sText);
}
}break;
case OOX::et_w_fldChar:
else
sValue = ooxText->m_sText;
RtfCharPtr oNewChar = RtfCharPtr( new RtfChar() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->setText( sValue );
oOutputParagraph.AddItem( oNewChar );
}
}break;
case OOX::et_w_fldChar:
{
OOX::Logic::CFldChar * ooxFldChar = dynamic_cast<OOX::Logic::CFldChar*>(ooxItem);
if ((ooxFldChar) && (ooxFldChar->m_oFldCharType.IsInit()))
{
OOX::Logic::CFldChar * ooxFldChar = dynamic_cast<OOX::Logic::CFldChar*>(m_ooxRun->m_arrItems[i]);
if ((ooxFldChar) && (ooxFldChar->m_oFldCharType.IsInit()))
switch(ooxFldChar->m_oFldCharType->GetValue())
{
switch(ooxFldChar->m_oFldCharType->GetValue())
case SimpleTypes::fldchartypeBegin:
{
case SimpleTypes::fldchartypeBegin:
{
OOXFieldBeginPtr oNewField( new OOXFieldBegin() );
if (ooxFldChar->m_oFldLock.IsInit())
oNewField->m_bLock = ooxFldChar->m_oFldLock->ToBool();
if (ooxFldChar->m_oDirty.IsInit())
oNewField->m_bDirty = ooxFldChar->m_oDirty->ToBool();
oNewField->m_oCharProp = oNewProperty;
oOutputParagraph.AddItem( oNewField );
}break;
case SimpleTypes::fldchartypeEnd:
{
OOXFieldEndPtr oNewField( new OOXFieldEnd() );
oOutputParagraph.AddItem( oNewField );
}break;
case SimpleTypes::fldchartypeSeparate:
{
OOXFieldSeparatePtr oNewField( new OOXFieldSeparate() );
oOutputParagraph.AddItem( oNewField );
}break;
}
OOXFieldBeginPtr oNewField( new OOXFieldBegin() );
if (ooxFldChar->m_oFldLock.IsInit())
oNewField->m_bLock = ooxFldChar->m_oFldLock->ToBool();
if (ooxFldChar->m_oDirty.IsInit())
oNewField->m_bDirty = ooxFldChar->m_oDirty->ToBool();
oNewField->m_oCharProp = oNewProperty;
oOutputParagraph.AddItem( oNewField );
}break;
case SimpleTypes::fldchartypeEnd:
{
OOXFieldEndPtr oNewField( new OOXFieldEnd() );
oOutputParagraph.AddItem( oNewField );
}break;
case SimpleTypes::fldchartypeSeparate:
{
OOXFieldSeparatePtr oNewField( new OOXFieldSeparate() );
oOutputParagraph.AddItem( oNewField );
}break;
}
}break;
case OOX::et_w_instrText:
{
OOX::Logic::CInstrText * ooxInstrText = dynamic_cast<OOX::Logic::CInstrText*>(m_ooxRun->m_arrItems[i]);
OOXFieldInsertTextPtr oNewField( new OOXFieldInsertText() );
RtfCharPtr oNewChar( new RtfChar() );
if (ooxInstrText)
oNewChar->setText( ooxInstrText->m_sText );//add preserve .. todooo
oNewField->m_oText = oNewChar;
oOutputParagraph.AddItem( oNewField );
}break;
case OOX::et_w_footnoteReference:
}
}break;
case OOX::et_w_instrText:
{
OOX::Logic::CInstrText * ooxInstrText = dynamic_cast<OOX::Logic::CInstrText*>(ooxItem);
OOXFieldInsertTextPtr oNewField( new OOXFieldInsertText() );
RtfCharPtr oNewChar( new RtfChar() );
if (ooxInstrText)
oNewChar->setText( ooxInstrText->m_sText );//add preserve .. todooo
oNewField->m_oText = oNewChar;
oOutputParagraph.AddItem( oNewField );
}break;
case OOX::et_w_footnoteReference:
{
OOX::Logic::CFootnoteReference * ooxFootnoteReference = dynamic_cast<OOX::Logic::CFootnoteReference*>(ooxItem);
if ((ooxFootnoteReference) && (ooxFootnoteReference->m_oId.IsInit()))
{
OOX::Logic::CFootnoteReference * ooxFootnoteReference = dynamic_cast<OOX::Logic::CFootnoteReference*>(m_ooxRun->m_arrItems[i]);
if ((ooxFootnoteReference) && (ooxFootnoteReference->m_oId.IsInit()))
int nID = ooxFootnoteReference->m_oId->GetValue();
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapFootnotes.find( nID );
if( oParam.oReader->m_mapFootnotes.end() != oPair )
{
int nID = ooxFootnoteReference->m_oId->GetValue();
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapFootnotes.find( nID );
if( oParam.oReader->m_mapFootnotes.end() != oPair )
{
RtfFootnotePtr oNewFootnote( new RtfFootnote() );
oNewFootnote->m_oCharProp = oNewProperty;
oNewFootnote->m_oContent = oPair->second;
oOutputParagraph.AddItem( oNewFootnote );
}
RtfFootnotePtr oNewFootnote( new RtfFootnote() );
oNewFootnote->m_oCharProp = oNewProperty;
oNewFootnote->m_oContent = oPair->second;
oOutputParagraph.AddItem( oNewFootnote );
}
}break;
case OOX::et_w_endnoteReference:
}
}break;
case OOX::et_w_endnoteReference:
{
OOX::Logic::CEndnoteReference * ooxEndnoteReference = dynamic_cast<OOX::Logic::CEndnoteReference*>(ooxItem);
if ((ooxEndnoteReference) && (ooxEndnoteReference->m_oId.IsInit()))
{
OOX::Logic::CEndnoteReference * ooxEndnoteReference = dynamic_cast<OOX::Logic::CEndnoteReference*>(m_ooxRun->m_arrItems[i]);
if ((ooxEndnoteReference) && (ooxEndnoteReference->m_oId.IsInit()))
int nID = ooxEndnoteReference->m_oId->GetValue();
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapEndnotes.find ( nID );
if( oParam.oReader->m_mapEndnotes.end() != oPair )
{
int nID = ooxEndnoteReference->m_oId->GetValue();
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapEndnotes.find ( nID );
if( oParam.oReader->m_mapEndnotes.end() != oPair )
{
RtfFootnotePtr oNewEndnote( new RtfFootnote() );
oNewEndnote->m_oCharProp = oNewProperty;
oNewEndnote->m_oContent = oPair->second;
oNewEndnote->m_bEndNote = true;
oOutputParagraph.AddItem( oNewEndnote );
}
RtfFootnotePtr oNewEndnote( new RtfFootnote() );
oNewEndnote->m_oCharProp = oNewProperty;
oNewEndnote->m_oContent = oPair->second;
oNewEndnote->m_bEndNote = true;
oOutputParagraph.AddItem( oNewEndnote );
}
}break;
case OOX::et_w_object:
}
}break;
case OOX::et_w_object:
{
OOX::Logic::CObject * ooxObject = dynamic_cast<OOX::Logic::CObject*>(ooxItem);
if (ooxObject)
{
OOX::Logic::CObject * ooxObject = dynamic_cast<OOX::Logic::CObject*>(m_ooxRun->m_arrItems[i]);
if (ooxObject)
{
long nOleWidth = PROP_DEF;
long nOleHeight = PROP_DEF;
long nOleWidth = PROP_DEF;
long nOleHeight = PROP_DEF;
RtfShapePtr aPictShape;
RtfOlePtr oCurOle;
RtfShapePtr aPictShape;
RtfOlePtr oCurOle;
if (ooxObject->m_oShape.IsInit())
if (ooxObject->m_oShape.IsInit())
{
RtfShapePtr oNewShape( new RtfShape() );
oNewShape->m_eShapeType = RtfShape::st_inline;
OOXShapeReader oShapeReader(ooxObject->m_oShape.GetPointer());
if( true == oShapeReader.Parse( oParam, oNewShape ) )
aPictShape = oNewShape;
}
//if (ooxObject->m_oGroupShape.IsInit())
//{
// RtfShapeGroupPtr oNewShape( new RtfShapeGroup() );
// oNewShape->m_eShapeType = RtfShape::st_inline;
// OOXShapeGroupReader oShapeReader;
// if( true == oShapeReader.Parse( oParam, oNewShape ) )
// aPictShape = oNewShape;
//}
if (ooxObject->m_oOleObject.IsInit())
{
RtfOlePtr oNewOle( new RtfOle() );
oNewOle->m_nWidth = nOleWidth; //?? todooo
oNewOle->m_nHeight = nOleHeight;
int nShapeId = PROP_DEF;
if (ooxObject->m_oOleObject->m_sShapeId.IsInit())
nShapeId = oParam.oReader->m_oOOXIdGenerator.GetId(ooxObject->m_oOleObject->m_sShapeId.get2());
if( PROP_DEF != nShapeId )
{
RtfShapePtr oNewShape( new RtfShape() );
oNewShape->m_eShapeType = RtfShape::st_inline;
OOXShapeReader oShapeReader(ooxObject->m_oShape.GetPointer());
if( true == oShapeReader.Parse( oParam, oNewShape ) )
aPictShape = oNewShape;
oNewOle->m_nShapeId = nShapeId;
//ставим соответствующий shape
if( NULL != aPictShape && aPictShape->m_nID == nShapeId )
aPictShape->m_bIsOle = true;
}
//if (ooxObject->m_oGroupShape.IsInit())
//{
// RtfShapeGroupPtr oNewShape( new RtfShapeGroup() );
// oNewShape->m_eShapeType = RtfShape::st_inline;
// OOXShapeGroupReader oShapeReader;
// if( true == oShapeReader.Parse( oParam, oNewShape ) )
// aPictShape = oNewShape;
//}
if (ooxObject->m_oOleObject.IsInit())
if( ooxObject->m_oOleObject->m_sProgId.IsInit() )
oNewOle->m_sOleClass = ooxObject->m_oOleObject->m_sProgId.get2();
if(ooxObject->m_oOleObject->m_oType.IsInit())
{
RtfOlePtr oNewOle( new RtfOle() );
oNewOle->m_nWidth = nOleWidth; //?? todooo
oNewOle->m_nHeight = nOleHeight;
int nShapeId = PROP_DEF;
if (ooxObject->m_oOleObject->m_sShapeId.IsInit())
nShapeId = oParam.oReader->m_oOOXIdGenerator.GetId(ooxObject->m_oOleObject->m_sShapeId.get2());
if( PROP_DEF != nShapeId )
switch( ooxObject->m_oOleObject->m_oType->GetValue())
{
oNewOle->m_nShapeId = nShapeId;
//ставим соответствующий shape
if( NULL != aPictShape && aPictShape->m_nID == nShapeId )
aPictShape->m_bIsOle = true;
case SimpleTypes::oletypeLink: oNewOle->m_eOleType = RtfOle::ot_link; break;
case SimpleTypes::oletypeEmbed: oNewOle->m_eOleType = RtfOle::ot_emb; break;
}
if( ooxObject->m_oOleObject->m_sProgId.IsInit() )
oNewOle->m_sOleClass = ooxObject->m_oOleObject->m_sProgId.get2();
}
if(ooxObject->m_oOleObject->m_oId.IsInit())
{
CString sRelativePath;
if(ooxObject->m_oOleObject->m_oType.IsInit())
{
switch( ooxObject->m_oOleObject->m_oType->GetValue())
if (oParam.oReader->m_currentContainer)
{
smart_ptr<OOX::File> oFile = oParam.oReader->m_currentContainer->Find(ooxObject->m_oOleObject->m_oId->GetValue());
if ((oFile.IsInit() && (OOX::FileTypes::OleObject == oFile->type())))
{
case SimpleTypes::oletypeLink: oNewOle->m_eOleType = RtfOle::ot_link; break;
case SimpleTypes::oletypeEmbed: oNewOle->m_eOleType = RtfOle::ot_emb; break;
OOX::OleObject* pO = (OOX::OleObject*)oFile.operator->();
sRelativePath = pO->filename().m_strFilename;
}
}
if(ooxObject->m_oOleObject->m_oId.IsInit())
{
CString sRelativePath;
if (oParam.oReader->m_currentContainer)
{
smart_ptr<OOX::File> oFile = oParam.oReader->m_currentContainer->Find(ooxObject->m_oOleObject->m_oId->GetValue());
if ((oFile.IsInit() && (OOX::FileTypes::OleObject == oFile->type())))
{
OOX::OleObject* pO = (OOX::OleObject*)oFile.operator->();
sRelativePath = pO->filename().m_strFilename;
}
}
//todooo проверить что тут за путь ..
CString sOlePath = oParam.oReader->m_sPath + FILE_SEPARATOR_STR + sRelativePath;
//todooo проверить что тут за путь ..
CString sOlePath = oParam.oReader->m_sPath + FILE_SEPARATOR_STR + sRelativePath;
POLE::Storage *storage = new POLE::Storage(sOlePath.GetBuffer());
if (storage)
{
//RtfOle2ToOle1Stream oStream;
//oStream.lpstbl = new OLESTREAMVTBL();
//oStream.lpstbl->Get = &OleGet2;
//oStream.lpstbl->Put = &OlePut2;
//todooo convert ole2 to ole1
//if( SUCCEEDED( OleConvertIStorageToOLESTREAM( piStorage, &oStream ) ) )
//{
// //сохраняем в файл
// CString sOleStorageName = Utils::CreateTempFile( oParam.oReader->m_sTempFolder );
// HANDLE hFile = CreateFile ( sOleStorageName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
// if( INVALID_HANDLE_VALUE != hFile )
// {
// DWORD dwByteWrite = 0;
// WriteFile( hFile, oStream.aBuffer.GetData(), (DWORD)oStream.aBuffer.size(), &dwByteWrite, NULL );
// CloseHandle( hFile );
// oNewOle->SetFilename( sOleStorageName );
// //только сейчас запоминаем
// oCurOle = oNewOle;
// }
// else
// Utils::RemoveDirOrFile( sOleStorageName );
//}
delete( storage );
}
POLE::Storage *storage = new POLE::Storage(sOlePath.GetBuffer());
if (storage)
{
//RtfOle2ToOle1Stream oStream;
//oStream.lpstbl = new OLESTREAMVTBL();
//oStream.lpstbl->Get = &OleGet2;
//oStream.lpstbl->Put = &OlePut2;
//todooo convert ole2 to ole1
//if( SUCCEEDED( OleConvertIStorageToOLESTREAM( piStorage, &oStream ) ) )
//{
// //сохраняем в файл
// CString sOleStorageName = Utils::CreateTempFile( oParam.oReader->m_sTempFolder );
// HANDLE hFile = CreateFile ( sOleStorageName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
// if( INVALID_HANDLE_VALUE != hFile )
// {
// DWORD dwByteWrite = 0;
// WriteFile( hFile, oStream.aBuffer.GetData(), (DWORD)oStream.aBuffer.size(), &dwByteWrite, NULL );
// CloseHandle( hFile );
// oNewOle->SetFilename( sOleStorageName );
// //только сейчас запоминаем
// oCurOle = oNewOle;
// }
// else
// Utils::RemoveDirOrFile( sOleStorageName );
//}
delete( storage );
}
}
if( NULL != aPictShape && NULL != oCurOle )
}
if( NULL != aPictShape && NULL != oCurOle )
{
//надо пересчитать размеры картинки так чтобы scalex == 100 и scaley = 100
//если scalex != 100, то после редактирование ole киртинка сжимается(растягивается)
if( NULL != aPictShape->m_oPicture )
{
//надо пересчитать размеры картинки так чтобы scalex == 100 и scaley = 100
//если scalex != 100, то после редактирование ole киртинка сжимается(растягивается)
if( NULL != aPictShape->m_oPicture )
if( PROP_DEF != (int)aPictShape->m_oPicture->m_dScaleX && PROP_DEF != (int)aPictShape->m_oPicture->m_dScaleY &&
PROP_DEF != aPictShape->m_oPicture->m_nWidthGoal && PROP_DEF != aPictShape->m_oPicture->m_nHeightGoal )
{
if( PROP_DEF != (int)aPictShape->m_oPicture->m_dScaleX && PROP_DEF != (int)aPictShape->m_oPicture->m_dScaleY &&
PROP_DEF != aPictShape->m_oPicture->m_nWidthGoal && PROP_DEF != aPictShape->m_oPicture->m_nHeightGoal )
if( 100 != (int)aPictShape->m_oPicture->m_dScaleX )
{
if( 100 != (int)aPictShape->m_oPicture->m_dScaleX )
{
aPictShape->m_oPicture->m_nWidthGoal = long (( aPictShape->m_oPicture->m_dScaleX / 100.0 ) * aPictShape->m_oPicture->m_nWidthGoal );
aPictShape->m_oPicture->m_dScaleX = 100;
}
if( 100 != (int)aPictShape->m_oPicture->m_dScaleY )
{
aPictShape->m_oPicture->m_nHeightGoal = long (( aPictShape->m_oPicture->m_dScaleY / 100.0 ) * aPictShape->m_oPicture->m_nHeightGoal );
aPictShape->m_oPicture->m_dScaleY = 100;
}
aPictShape->m_oPicture->m_nWidthGoal = long (( aPictShape->m_oPicture->m_dScaleX / 100.0 ) * aPictShape->m_oPicture->m_nWidthGoal );
aPictShape->m_oPicture->m_dScaleX = 100;
}
if( 100 != (int)aPictShape->m_oPicture->m_dScaleY )
{
aPictShape->m_oPicture->m_nHeightGoal = long (( aPictShape->m_oPicture->m_dScaleY / 100.0 ) * aPictShape->m_oPicture->m_nHeightGoal );
aPictShape->m_oPicture->m_dScaleY = 100;
}
}
}
TextItemContainerPtr oNewTextItemContainer = TextItemContainerPtr( new TextItemContainer() );
RtfParagraphPtr oNewPar = RtfParagraphPtr( new RtfParagraph() );
TextItemContainerPtr oNewTextItemContainer = TextItemContainerPtr( new TextItemContainer() );
RtfParagraphPtr oNewPar = RtfParagraphPtr( new RtfParagraph() );
oNewPar->AddItem( oCurOle );
oNewTextItemContainer->AddItem( oNewPar );
aPictShape->m_aTextItems = oNewTextItemContainer;
oNewPar->AddItem( oCurOle );
oNewTextItemContainer->AddItem( oNewPar );
aPictShape->m_aTextItems = oNewTextItemContainer;
oCurOle->m_oResultPic = aPictShape;
oOutputParagraph.AddItem( oCurOle );
}
oCurOle->m_oResultPic = aPictShape;
oOutputParagraph.AddItem( oCurOle );
}
}break;
case OOX::et_w_drawing:
}
}break;
case OOX::et_w_drawing:
{
OOX::Logic::CDrawing* ooxDrawing = dynamic_cast<OOX::Logic::CDrawing*>(ooxItem);
RtfShapePtr oNewPicture( new RtfShape() );
OOXPictureReader oPictureReader(ooxDrawing);
if( true == oPictureReader.Parse( oParam, (*oNewPicture) ) )
{
OOX::Logic::CDrawing* ooxDrawing = dynamic_cast<OOX::Logic::CDrawing*>(m_ooxRun->m_arrItems[i]);
RtfShapePtr oNewPicture( new RtfShape() );
OOXPictureReader oPictureReader(ooxDrawing);
if( true == oPictureReader.Parse( oParam, (*oNewPicture) ) )
oOutputParagraph.AddItem( oNewPicture );
}
}break;
case OOX::et_w_pict:
{
OOX::Logic::CPicture *ooxPicture = dynamic_cast<OOX::Logic::CPicture*>(ooxItem);
if( ooxPicture)
{//todooo - groups & custom
RtfShapePtr oNewShape( new RtfShape() );
OOXShapeReader *pShapeReader = NULL;
if (ooxPicture->m_oShape.IsInit()) pShapeReader = new OOXShapeReader(ooxPicture->m_oShape.GetPointer());
else if (ooxPicture->m_oShapeRect.IsInit()) pShapeReader = new OOXShapeReader(ooxPicture->m_oShapeRect.GetPointer());
else if (ooxPicture->m_oShapeRoundRect.IsInit())pShapeReader = new OOXShapeReader(ooxPicture->m_oShapeRoundRect.GetPointer());
else if (ooxPicture->m_oShapeOval.IsInit()) pShapeReader = new OOXShapeReader(ooxPicture->m_oShapeOval.GetPointer());
else if (ooxPicture->m_oShapeLine.IsInit()) pShapeReader = new OOXShapeReader(ooxPicture->m_oShapeLine.GetPointer());
else if (ooxPicture->m_oShapePolyLine.IsInit()) pShapeReader = new OOXShapeReader(ooxPicture->m_oShapePolyLine.GetPointer());
else if (ooxPicture->m_oShapeCurve.IsInit()) pShapeReader = new OOXShapeReader(ooxPicture->m_oShapeCurve.GetPointer());
if (pShapeReader)
{
oOutputParagraph.AddItem( oNewPicture );
if( true == pShapeReader->Parse( oParam, oNewShape ) )
oOutputParagraph.AddItem( oNewShape );
delete pShapeReader;
}
}break;
case OOX::et_w_pict:
}
}break;
case OOX::et_w_nonBreakHyphen:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_NonBrHyphen;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_softHyphen:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_OptHyphen;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_pgNum:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chpgn;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_footnoteRef:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftn;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_endnoteRef:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftnEnd;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_separator:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftnsep;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_continuationSeparator:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftnsepc;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_tab:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_tab;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_br:
{
OOX::Logic::CBr *ooxBr = dynamic_cast<OOX::Logic::CBr*>(ooxItem);
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
if (ooxBr)
{
OOX::Logic::CPicture *ooxPicture = dynamic_cast<OOX::Logic::CPicture*>(m_ooxRun->m_arrItems[i]);
if( (ooxPicture) && (ooxPicture->m_oShape.IsInit())) //??? todooo ваще то могут быть и др элементы/инициализции
switch(ooxBr->m_oType.GetValue())
{
RtfShapePtr oNewPicture( new RtfShape() );
OOXShapeReader oShapeReader(ooxPicture->m_oShape.GetPointer());
if( true == oShapeReader.Parse( oParam, oNewPicture ) )
oOutputParagraph.AddItem( oNewPicture );
case SimpleTypes::brtypeColumn :
oNewChar->m_eType = RtfCharSpecial::rsc_column; break;
case SimpleTypes::brtypePage :
oNewChar->m_eType = RtfCharSpecial::rsc_page; break;
case SimpleTypes::brtypeTextWrapping :
switch(ooxBr->m_oClear.GetValue())
{
case SimpleTypes::brclearAll : oNewChar->m_nTextWrapBreak = 3; break;
case SimpleTypes::brclearLeft : oNewChar->m_nTextWrapBreak = 1; break;
case SimpleTypes::brclearRight : oNewChar->m_nTextWrapBreak = 2; break;
default: oNewChar->m_eType = RtfCharSpecial::rsc_line;
}
break;
}
}break;
case OOX::et_w_nonBreakHyphen:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_NonBrHyphen;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_softHyphen:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_OptHyphen;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_pgNum:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chpgn;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_footnoteRef:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftn;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_endnoteRef:
}else oNewChar->m_eType = RtfCharSpecial::rsc_line;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_mc_alternateContent:
{//выбираем всегда более старую версию
OOX::Logic::CAlternateContent *ooxAlt = dynamic_cast<OOX::Logic::CAlternateContent* >(ooxItem);
if (ooxAlt->m_arrChoiceItems.size() > 0)
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftnEnd;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_separator:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftnsep;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_continuationSeparator:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_chftnsepc;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_tab:
{
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
oNewChar->m_eType = RtfCharSpecial::rsc_tab;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_w_br:
for (int i = 0; i < ooxAlt->m_arrFallbackItems.size(); i++)
{
Parse(oParam , oOutputParagraph, poStyle, oNewProperty, ooxAlt->m_arrFallbackItems[i]);
}
}
else
{
OOX::Logic::CBr *ooxBr = dynamic_cast<OOX::Logic::CBr*>(m_ooxRun->m_arrItems[i]);
RtfCharSpecialPtr oNewChar = RtfCharSpecialPtr( new RtfCharSpecial() );
oNewChar->m_oProperty = oNewProperty;
for (int i = 0; i < ooxAlt->m_arrChoiceItems.size(); i++)
{
Parse(oParam , oOutputParagraph, poStyle, oNewProperty, ooxAlt->m_arrChoiceItems[i]);
}
}
}break;
case OOX::et_w_sym:
{
OOX::Logic::CSym *ooxSym = dynamic_cast<OOX::Logic::CSym* >(ooxItem);
if(ooxSym->m_oFont.IsInit() && ooxSym->m_oChar.IsInit() )
{
CString sFont = *ooxSym->m_oFont;
//CString sChar = ooxSym->m_oChar->GetValue();
//sChar.MakeLower();
////оставляем только 2 байта (4 символа)
//if( sChar.GetLength() > 4 )
// sChar = sChar.Right( 4 );
////убираем маску F000
//if( sChar.GetLength() == 4 && 'f' == sChar[0] )
// sChar = sChar.Right( 3 );
if (ooxBr)
int nChar = ooxSym->m_oChar->GetValue();
CString sCharUnicode; sCharUnicode.AppendChar( nChar );
RtfFont oCurFont;
if( false == oParam.oRtf->m_oFontTable.GetFont( sFont, oCurFont ) )
{
switch(ooxBr->m_oType.GetValue())
{
case SimpleTypes::brtypeColumn :
oNewChar->m_eType = RtfCharSpecial::rsc_column; break;
case SimpleTypes::brtypePage :
oNewChar->m_eType = RtfCharSpecial::rsc_page; break;
case SimpleTypes::brtypeTextWrapping :
switch(ooxBr->m_oClear.GetValue())
{
case SimpleTypes::brclearAll : oNewChar->m_nTextWrapBreak = 3; break;
case SimpleTypes::brclearLeft : oNewChar->m_nTextWrapBreak = 1; break;
case SimpleTypes::brclearRight : oNewChar->m_nTextWrapBreak = 2; break;
default: oNewChar->m_eType = RtfCharSpecial::rsc_line;
}
break;
}
}else oNewChar->m_eType = RtfCharSpecial::rsc_line;
oOutputParagraph.AddItem( oNewChar );
}break;
case OOX::et_mc_alternateContent:
{//???? todooo
//XmlUtils::IXMLDOMNodePtr oNode;
//oXmlReader.GetNode( i , oNode );
//XmlUtils::CXmlLiteReader oSubReader;
//if( TRUE == oSubReader.OpenFromXmlNode( oNode ) )
// if( TRUE == oSubReader.ReadNode( _T("mc:Fallback") ) )
// {
// XmlUtils::IXMLDOMNodePtr oSubNode;
// oSubReader.GetNode( oSubNode );
// ReaderParameter oParam = oParam;
// oParam.oNode = oSubNode;
// OOXRunReader oSubReader;
// oSubReader.Parse( oParam, oOutputParagraph, poStyle );
// }
}break;
case OOX::et_w_sym:
{
OOX::Logic::CSym *ooxSym = dynamic_cast<OOX::Logic::CSym* >(m_ooxRun->m_arrItems[i]);
if(ooxSym->m_oFont.IsInit() && ooxSym->m_oChar.IsInit() )
{
CString sFont = *ooxSym->m_oFont;
//CString sChar = ooxSym->m_oChar->GetValue();
//sChar.MakeLower();
////оставляем только 2 байта (4 символа)
//if( sChar.GetLength() > 4 )
// sChar = sChar.Right( 4 );
////убираем маску F000
//if( sChar.GetLength() == 4 && 'f' == sChar[0] )
// sChar = sChar.Right( 3 );
int nChar = ooxSym->m_oChar->GetValue();
CString sCharUnicode; sCharUnicode.AppendChar( nChar );
RtfFont oCurFont;
if( false == oParam.oRtf->m_oFontTable.GetFont( sFont, oCurFont ) )
{
oCurFont.m_nID = oParam.oRtf->m_oFontTable.GetCount() + 1;
oCurFont.m_sName = sFont;
oParam.oRtf->m_oFontTable.DirectAddItem( oCurFont );
}
RtfFieldPtr oNewField = RtfFieldPtr( new RtfField() );
oNewField->m_oInsert = TextItemContainerPtr( new TextItemContainer() );
oNewField->m_oResult = TextItemContainerPtr( new TextItemContainer() );
RtfCharPtr oNewChar( new RtfChar() );
oNewChar->m_bRtfEncode = false;
CString sFieldText;
int nFontSize = 10;
if( PROP_DEF != oNewProperty.m_nFontSize )
nFontSize = oNewProperty.m_nFontSize / 2;
sFieldText.AppendFormat(_T("SYMBOL %d \\\\f \"%ls\" \\\\s %d"), nChar, sFont.GetBuffer(), nFontSize );
oNewChar->setText( sFieldText );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewChar );
oNewField->m_oInsert->AddItem( oNewInsertParagraph );
oOutputParagraph.AddItem( oNewField );
oCurFont.m_nID = oParam.oRtf->m_oFontTable.GetCount() + 1;
oCurFont.m_sName = sFont;
oParam.oRtf->m_oFontTable.DirectAddItem( oCurFont );
}
}break;
}
RtfFieldPtr oNewField = RtfFieldPtr( new RtfField() );
oNewField->m_oInsert = TextItemContainerPtr( new TextItemContainer() );
oNewField->m_oResult = TextItemContainerPtr( new TextItemContainer() );
RtfCharPtr oNewChar( new RtfChar() );
oNewChar->m_bRtfEncode = false;
CString sFieldText;
int nFontSize = 10;
if( PROP_DEF != oNewProperty.m_nFontSize )
nFontSize = oNewProperty.m_nFontSize / 2;
sFieldText.AppendFormat(_T("SYMBOL %d \\\\f \"%ls\" \\\\s %d"), nChar, sFont.GetBuffer(), nFontSize );
oNewChar->setText( sFieldText );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewChar );
oNewField->m_oInsert->AddItem( oNewInsertParagraph );
oOutputParagraph.AddItem( oNewField );
}
}break;
}
return true;
}
bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagraph, RtfStylePtr poStyle )
{
if (m_ooxRun == NULL) return false;
RtfCharProperty oNewProperty;
oNewProperty.SetDefaultOOX();
//применяем default
oNewProperty = oParam.oRtf->m_oDefaultCharProp;
//применяем внешний стиль
oNewProperty.Merge( oOutputParagraph.m_oProperty.m_oCharProperty );
if( NULL != poStyle && TYPE_RTF_PROPERTY_STYLE_CHAR == poStyle->GetType() )
{
RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( poStyle );
oNewProperty.Merge( oCharStyle->m_oCharProp );
}
if (m_ooxRun->m_oRunProperty)
{
OOXrPrReader orPrReader(m_ooxRun->m_oRunProperty);
orPrReader.Parse( oParam, oNewProperty );
}
for (long i =0 ; i < m_ooxRun->m_arrItems.size(); i++)
{
Parse(oParam, oOutputParagraph, poStyle, oNewProperty, m_ooxRun->m_arrItems[i]);
}
return true;
}
......
......@@ -65,7 +65,7 @@ public:
bool bSimplePos = m_ooxAnchor->m_oSimplePos.IsInit() ? true : false;
int nWidth = PROP_DEF;
int nWidth = PROP_DEF;
int nHeight = PROP_DEF;
if( m_ooxAnchor->m_oSimplePos.IsInit())
......
......@@ -52,4 +52,5 @@ public:
}
bool Parse( ReaderParameter oParam , RtfParagraph& oOutputParagraph, RtfStylePtr poStyle );
bool Parse( ReaderParameter oParam , RtfParagraph& oOutputParagraph, RtfStylePtr poStyle, RtfCharProperty& oNewProperty, OOX::WritingElement* ooxItem );
};
\ No newline at end of file
......@@ -68,17 +68,41 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
switch(m_arrElement->m_arrItems[i]->getType())
{
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;
CString srId = fill_->m_sId.IsInit() ? fill_->m_sId.get2() : _T("") ;
if (srId.IsEmpty())
srId = fill_->m_rId.IsInit() ? fill_->m_rId->GetValue() : _T("") ;
if (!srId.IsEmpty() && oParam.oReader->m_currentContainer)
{
smart_ptr<OOX::File> oFile = oParam.oReader->m_currentContainer->Find(srId);
if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type()))
{
OOX::Image* pImage = (OOX::Image*)oFile.operator->();
CString sImagePath = pImage->filename().GetPath();
oOutput->m_oPicture = RtfPicturePtr( new RtfPicture() );
//todooo проверить что за путь тут выставляется
OOXPictureGraphicReader::WriteDataToPicture( sImagePath, *oOutput->m_oPicture, oParam.oReader->m_sPath );
}
}
else
{
}
}break;
case OOX::et_v_imagedata:
{
OOX::Vml::CImageData* image_data = dynamic_cast<OOX::Vml::CImageData*>(m_arrElement->m_arrItems[i]);
oOutput->m_oPicture = RtfPicturePtr( new RtfPicture() );
oOutput->m_eShapeType = RtfShape::st_none;
oOutput->m_nShapeType = 75;
CString srId = image_data->m_oId.IsInit() ? image_data->m_oId.get2() : _T("") ;
if (srId.GetLength() < 1)
if (srId.IsEmpty())
srId = image_data->m_rId.IsInit() ? image_data->m_rId->GetValue() : _T("") ;
if (oParam.oReader->m_currentContainer)
......@@ -87,6 +111,10 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type()))
{
oOutput->m_oPicture = RtfPicturePtr( new RtfPicture() );
oOutput->m_eShapeType = RtfShape::st_none;
oOutput->m_nShapeType = 75;
OOX::Image* pImage = (OOX::Image*)oFile.operator->();
CString sImagePath = pImage->filename().GetPath();
......@@ -149,11 +177,6 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
double dNewScale = 100 * ( 1.0 * nHeight / nCropedHeightGoal );
oOutput->m_oPicture->m_dScaleY = dNewScale;
}
//проверяем на inline
if( (PROP_DEF == oOutput->m_nLeft || 0 == oOutput->m_nLeft ) && ( PROP_DEF == oOutput->m_nTop || 0 == oOutput->m_nTop ) && PROP_DEF == oOutput->m_nPositionH && PROP_DEF == oOutput->m_nPositionV )
oOutput->m_eShapeType = RtfShape::st_inline;
}break;
case OOX::et_wd_wrap:
{
......@@ -200,6 +223,10 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
}break;
}
}
//проверяем на inline
if((PROP_DEF == oOutput->m_nLeft/* || 0 == oOutput->m_nLeft */) && ( PROP_DEF == oOutput->m_nTop/* || 0 == oOutput->m_nTop */) &&
PROP_DEF == oOutput->m_nPositionH && PROP_DEF == oOutput->m_nPositionV )
oOutput->m_eShapeType = RtfShape::st_inline;
//если ничего не задали делаем inline
if( (PROP_DEF == oOutput->m_nLeft || 0 == oOutput->m_nLeft ) && ( PROP_DEF == oOutput->m_nTop || 0 == oOutput->m_nTop ) && PROP_DEF == oOutput->m_nPositionH && PROP_DEF == oOutput->m_nPositionV )
{
......@@ -208,6 +235,7 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
oOutput->m_nPositionHRelative = 3;
oOutput->m_nPositionVRelative = 3;
}
return true;
}
bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
{
......@@ -221,10 +249,13 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
//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_nLeft = 0; //стили только с widht height (например в Numbering)
//oOutput->m_nTop = 0;
oOutput->m_eShapeType = RtfShape::st_none; //inline or anchor
if ( m_vmlElement->m_oStyle.IsInit())
{
......@@ -235,6 +266,19 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
{
if (shape->m_oAdj.IsInit())
ParseAdjustment( *oOutput, shape->m_oAdj.get() );
if (shape->m_sType.IsInit())
{
int pos = shape->m_sType->Find(_T("#_x0000_t"));
if (pos >= 0)
{
oOutput->m_nShapeType = _wtoi(shape->m_sType->Mid(pos + 9, shape->m_sType->GetLength() - pos - 9).GetString());
}
}
}
if (OOX::Vml::CRect* rect = dynamic_cast<OOX::Vml::CRect*>(m_vmlElement))
{
oOutput->m_nShapeType = 1;
}
//CString sConnectionType = oXmlReader.ReadNodeAttribute( _T("o:connecttype"), _T("") );
//if( _T("custom") == sConnectionType )
......@@ -299,72 +343,111 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
case SimpleTypes::Vml::cssptFlip :
switch(oShape.m_bFlipH = prop->get_Value().eFlip)
{
case SimpleTypes::Vml::cssflipX: oShape.m_bFlipH = true; break;
case SimpleTypes::Vml::cssflipY: oShape.m_bFlipV = true; break;
case SimpleTypes::Vml::cssflipXY: oShape.m_bFlipH = true; oShape.m_bFlipV = true; break;
case SimpleTypes::Vml::cssflipYX : oShape.m_bFlipH = true; oShape.m_bFlipV = true; break;
case SimpleTypes::Vml::cssflipX: oShape.m_bFlipH = true; break;
case SimpleTypes::Vml::cssflipY: oShape.m_bFlipV = true; break;
case SimpleTypes::Vml::cssflipXY: oShape.m_bFlipH = true; oShape.m_bFlipV = true; break;
case SimpleTypes::Vml::cssflipYX : oShape.m_bFlipH = true; oShape.m_bFlipV = true; break;
}
break;
case SimpleTypes::Vml::cssptWidth :
{
//OOX::SimpleTypes::CPoint oPoint;
//oPoint.FromPoints(prop->get_Value().dValue);
oShape.m_nRight = oShape.m_nRelRight = (int)(20 * prop->get_Value().oValue.dValue);
if( PROP_DEF != oShape.m_nLeft )
oShape.m_nRight += oShape.m_nLeft;
if( PROP_DEF != oShape.m_nRelLeft)
oShape.m_nRelRight += oShape.m_nRelLeft;
}break;
case SimpleTypes::Vml::cssptHeight :
{
int nHeight = (int)(20 * prop->get_Value().dValue);
if( PROP_DEF != oShape.m_nTop )//todooo переделать !!!
oShape.m_nBottom = oShape.m_nTop + nHeight;
if( PROP_DEF != oShape.m_nRelTop)//todooo переделать !!!
oShape.m_nRelBottom = oShape.m_nRelTop + nHeight;
oShape.m_nBottom = oShape.m_nRelBottom = (int)(20 * prop->get_Value().oValue.dValue);
if( PROP_DEF != oShape.m_nTop )
oShape.m_nBottom += oShape.m_nTop;
if( PROP_DEF != oShape.m_nRelTop)
oShape.m_nRelBottom += oShape.m_nRelTop;
}break;
case SimpleTypes::Vml::cssptLeft :
{
oShape.m_nRelLeft = prop->get_Value().oValue.dValue;
if( PROP_DEF != oShape.m_nRelRight)
oShape.m_nRelRight += oShape.m_nRelLeft;
}break;
case SimpleTypes::Vml::cssptTop :
{
oShape.m_nRelTop = prop->get_Value().oValue.dValue;
if( PROP_DEF != oShape.m_nRelBottom)
oShape.m_nRelBottom += oShape.m_nRelTop;
}break;
case SimpleTypes::Vml::cssptLeft :
oShape.m_nRelLeft = prop->get_Value().dValue; break;
case SimpleTypes::Vml::cssptMarginBottom:
oShape.m_nBottom = (int)(20 * prop->get_Value().dValue ); break;
case SimpleTypes::Vml::cssptMarginLeft :
oShape.m_nLeft = (int)(20 * prop->get_Value().dValue ); break;//pt tp twips
{
oShape.m_nBottom = (int)(20 * prop->get_Value().oValue.dValue );
}break;
case SimpleTypes::Vml::cssptMarginLeft :
{
oShape.m_nLeft = (int)(20 * prop->get_Value().oValue.dValue );
}break;//pt tp twips
case SimpleTypes::Vml::cssptMarginRight :
oShape.m_nRight = (int)(20 * prop->get_Value().dValue ); break;
case SimpleTypes::Vml::cssptMarginTop :
oShape.m_nTop = (int)(20 * prop->get_Value().dValue ); break;
case SimpleTypes::Vml::cssptMsoPositionHorizontal :
oShape.m_nPositionH = prop->get_Value().eMsoPosHor; break;
{
oShape.m_nRight = (int)(20 * prop->get_Value().oValue.dValue );
}break;
case SimpleTypes::Vml::cssptMarginTop:
{
oShape.m_nTop = (int)(20 * prop->get_Value().oValue.dValue );
}break;
case SimpleTypes::Vml::cssptMsoPositionHorizontal:
{
oShape.m_nPositionH = prop->get_Value().eMsoPosHor;
}break;
case SimpleTypes::Vml::cssptMsoPositionHorizontalRelative :
oShape.m_nPositionHRelative = prop->get_Value().eMsoPosHorRel; break;
case SimpleTypes::Vml::cssptMsoPositionVertical :
oShape.m_nPositionV = prop->get_Value().eMsoPosVer; break;
case SimpleTypes::Vml::cssptMsoPositionVerticalRelative :
oShape.m_nPositionVRelative = prop->get_Value().eMsoPosVerRel; break;
case SimpleTypes::Vml::cssptMsoWrapDistanceBottom :
oShape.m_nWrapDistBottom = (int)(20 * prop->get_Value().dValue ); break;
case SimpleTypes::Vml::cssptMsoWrapDistanceLeft :
oShape.m_nWrapDistLeft = (int)(20 * prop->get_Value().dValue ); break;
case SimpleTypes::Vml::cssptMsoWrapDistanceRight :
oShape.m_nWrapDistRight = (int)(20 * prop->get_Value().dValue ); break;
case SimpleTypes::Vml::cssptMsoWrapDistanceTop :
oShape.m_nWrapDistTop = (int)(20 * prop->get_Value().dValue ); break;
break;
case SimpleTypes::Vml::cssptMsoWrapEdited :
break;
case SimpleTypes::Vml::cssptMsoWrapStyle :
break;
case SimpleTypes::Vml::cssptPosition :
{
oShape.m_nPositionHRelative = prop->get_Value().eMsoPosHorRel;
}break;
case SimpleTypes::Vml::cssptMsoPositionVertical:
{
oShape.m_nPositionV = prop->get_Value().eMsoPosVer;
}break;
case SimpleTypes::Vml::cssptMsoPositionVerticalRelative :
{
oShape.m_nPositionVRelative = prop->get_Value().eMsoPosVerRel;
}break;
case SimpleTypes::Vml::cssptMsoWrapDistanceBottom:
{
oShape.m_nWrapDistBottom = (int)(20 * prop->get_Value().dValue );
}break;
case SimpleTypes::Vml::cssptMsoWrapDistanceLeft :
{
oShape.m_nWrapDistLeft = (int)(20 * prop->get_Value().dValue );
}break;
case SimpleTypes::Vml::cssptMsoWrapDistanceRight:
{
oShape.m_nWrapDistRight = (int)(20 * prop->get_Value().dValue );
}break;
case SimpleTypes::Vml::cssptMsoWrapDistanceTop :
{
oShape.m_nWrapDistTop = (int)(20 * prop->get_Value().dValue );
}break;
case SimpleTypes::Vml::cssptMsoWrapEdited:
break;
case SimpleTypes::Vml::cssptRotation :
oShape.m_nRotation = 65536 * prop->get_Value().dValue;
if( PROP_DEF != oShape.m_nRelRight || PROP_DEF != oShape.m_nRelLeft || PROP_DEF != oShape.m_nRelTop || PROP_DEF != oShape.m_nRelBottom )
oShape.m_nRelRotation = oShape.m_nRotation;
case SimpleTypes::Vml::cssptMsoWrapStyle:
break;
case SimpleTypes::Vml::cssptTop :
oShape.m_nRelTop = prop->get_Value().dValue; break;
case SimpleTypes::Vml::cssptVisibility :
case SimpleTypes::Vml::cssptPosition:
break;
case SimpleTypes::Vml::cssptWidth :
case SimpleTypes::Vml::cssptRotation:
{
int nWidth = (int)(20 * prop->get_Value().dValue);
if( PROP_DEF != oShape.m_nLeft )
oShape.m_nRight = oShape.m_nLeft + nWidth;
if( PROP_DEF != oShape.m_nRelLeft)
oShape.m_nRelRight = oShape.m_nRelLeft + nWidth;
oShape.m_nRotation = 65536 * prop->get_Value().dValue;
if( PROP_DEF != oShape.m_nRelRight || PROP_DEF != oShape.m_nRelLeft || PROP_DEF != oShape.m_nRelTop || PROP_DEF != oShape.m_nRelBottom )
oShape.m_nRelRotation = oShape.m_nRotation;
}break;
case SimpleTypes::Vml::cssptVisibility :
break;
case SimpleTypes::Vml::cssptZIndex :
{
oShape.m_eShapeType = RtfShape::st_anchor;
int nValue = prop->get_Value().oZIndex.nOrder;
oShape.m_nZOrder = nValue;
if( nValue > 0 )
......
......@@ -103,6 +103,15 @@ public:
Parse( pSdt->m_oSdtContent.GetPointer(), oParam );
}
}break;
case OOX::et_w_sdtContent:
{
OOX::Logic::CSdtContent * pSdt = dynamic_cast<OOX::Logic::CSdtContent*>(ooxElement);
for (int i = 0; i < pSdt->m_arrItems.size(); i++)
{
Parse( pSdt->m_arrItems[i], oParam );
}
}break;
}
return true;
}
......
......@@ -153,7 +153,7 @@ public:
oBorderReader.Parse( oParam,oOutputProperty.m_oBorderBottom );
}
}
else if (m_ooxTableProps)
else if ((m_ooxTableProps) && (m_ooxTableProps->m_oTblBorders.IsInit()))
{
//from table props
//todoo last, first !!!!
......
......@@ -61,17 +61,23 @@ CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
if( st_inline == m_eShapeType )
{
if( NULL != m_oPicture )
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.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
else
{
sResult.Append( _T("{\\*\\shppict") );
//CString sPictProp = RenderToRtfShapeProperty( oRenderParameter );
//if( false == sPictProp.IsEmpty() )
// sResult.AppendFormat( _T("{\\*\\picprop %ls}"), sPictProp );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
sResult.Append( _T("{\\nonshppict") );
......@@ -80,44 +86,103 @@ CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
sResult.Append( _T("}") );
}
}
else
{
sResult.Append(_T("{\\shp"));
sResult.Append(_T("{\\*\\shpinst"));
RENDER_RTF_INT( m_nLeft , sResult, _T("shpleft") );
RENDER_RTF_INT( m_nTop , sResult, _T("shptop") );
RENDER_RTF_INT( m_nBottom , sResult, _T("shpbottom") );
RENDER_RTF_INT( m_nRight , sResult, _T("shpright") );
RENDER_RTF_INT( m_nID , sResult, _T("shplid") );
RENDER_RTF_INT( m_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") );
//RENDER_RTF_BOOL( false , sResult, _T("fUseShapeAnchor") );
//RENDER_RTF_BOOL( true , sResult, _T("fPseudoInline") );
sResult.Append( _T("\\shpbxignore") );
sResult.Append( _T("\\shpbyignore") );
sResult.AppendFormat( _T("{\\sp{\\sn fUseShapeAnchor}{\\sv %d}}"), false);
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("}}") );
}
//textbox
if( 0 != m_aTextItems )
{
sResult.Append( _T("{\\shptxt ") );
sResult.Append( m_aTextItems->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}") );
}
sResult.Append(_T("}"));
if( 0 != m_oPicture )
{
sResult.Append(_T("{\\shprslt\\par\\plain"));
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
sResult.Append(_T("\\par}"));
}
sResult.Append(_T("}"));
}
}
else
{
sResult.Append(_T("{\\shp{\\*\\shpinst"));
RENDER_RTF_INT( m_nLeft, sResult, _T("shpleft") );
RENDER_RTF_INT( m_nTop, sResult, _T("shptop") );
RENDER_RTF_INT( m_nBottom, sResult, _T("shpbottom") );
RENDER_RTF_INT( m_nRight, sResult, _T("shpright") );
RENDER_RTF_INT( m_nID, sResult, _T("shplid") );
RENDER_RTF_INT( m_nZOrder, sResult, _T("shpz") );
RENDER_RTF_INT( m_nHeader, sResult, _T("shpfhdr") );
RENDER_RTF_INT( m_nWrapType, sResult, _T("shpwr") );
RENDER_RTF_INT( m_nWrapSideType, sResult, _T("shpwrk") );
RENDER_RTF_BOOL( m_bLockAnchor, sResult, _T("shplockanchor") );
sResult.Append(_T("{\\shp"));
sResult.Append(_T("{\\*\\shpinst"));
RENDER_RTF_INT( m_nLeft , sResult, _T("shpleft") );
RENDER_RTF_INT( m_nTop , sResult, _T("shptop") );
RENDER_RTF_INT( m_nBottom , sResult, _T("shpbottom") );
RENDER_RTF_INT( m_nRight , sResult, _T("shpright") );
RENDER_RTF_INT( m_nID , sResult, _T("shplid") );
RENDER_RTF_INT( m_nZOrder , sResult, _T("shpz") );
RENDER_RTF_INT( m_nHeader , sResult, _T("shpfhdr") );
RENDER_RTF_INT( m_nWrapType , sResult, _T("shpwr") );
RENDER_RTF_INT( m_nWrapSideType , sResult, _T("shpwrk") );
RENDER_RTF_BOOL( m_bLockAnchor , sResult, _T("shplockanchor") );
switch(m_eXAnchor)
{
case ax_page: sResult.Append( _T("\\shpbxpage") );break;
case ax_margin: sResult.Append( _T("\\shpbxmargin") );break;
case ax_column: sResult.Append( _T("\\shpbxcolumn") );break;
case ax_page: sResult.Append( _T("\\shpbxpage") ); break;
case ax_margin: sResult.Append( _T("\\shpbxmargin") ); break;
case ax_column: sResult.Append( _T("\\shpbxcolumn") ); break;
}
sResult.Append( _T("\\shpbxignore") );
switch(m_eYAnchor)
{
case ay_page: sResult.Append( _T("\\shpbypage") );break;
case ay_margin: sResult.Append( _T("\\shpbymargin") );break;
case ay_Para: sResult.Append( _T("\\shpbypara") );break;
case ay_page: sResult.Append( _T("\\shpbypage") ); break;
case ay_margin: sResult.Append( _T("\\shpbymargin") ); break;
case ay_Para: sResult.Append( _T("\\shpbypara") ); break;
}
sResult.Append( _T("\\shpbyignore") );
RENDER_RTF_INT( m_nZOrderRelative, sResult, _T("shpfblwtxt") );
sResult.Append( RenderToRtfShapeProperty( oRenderParameter ) );
//picture
if( 0 != m_oPicture )
if( 0 != m_oPicture)
{
sResult.Append( _T("{\\sp{\\sn pib}{\\sv ") );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
if (m_nShapeType == 75)
{
sResult.Append( _T("{\\sp{\\sn pib}{\\sv ") );
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
}
else
{
sResult.Append( _T("{\\sp{\\sn fillType}{\\sv 2}}"));
sResult.Append( _T("{\\sp{\\sn fillBlip}{\\sv "));
sResult.Append( m_oPicture->RenderToRtf( oRenderParameter ) );
sResult.Append( _T("}}") );
}
}
//textbox
if( 0 != m_aTextItems )
......@@ -127,7 +192,7 @@ CString RtfShape::RenderToRtf(RenderParameter oRenderParameter)
sResult.Append( _T("}") );
}
sResult.Append(_T("}"));
if( 0 != m_oPicture )
if( 0 != m_oPicture && m_nShapeType == 75 )
{
sResult.Append(_T("{\\shprslt\\par\\plain"));
sResult.Append( m_oPicture->GenerateWMF( oRenderParameter ) );
......@@ -160,11 +225,12 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
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);
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);
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);
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);
......@@ -740,272 +806,270 @@ 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.Append(_T("<w:pict>"));
else
sResult.Append(_T("<w:r><w:pict>"));//работает по умолчанию
if( _T("") == oRenderParameter.sValue )
sResult.Append( _T("<v:shape") );
else
sResult.AppendFormat( _T("<%ls"),oRenderParameter.sValue.GetBuffer() );
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.Append(_T("<w:pict>"));
else
sResult.Append(_T("<w:r><w:pict>"));//работает по умолчанию
if( _T("") == oRenderParameter.sValue )
sResult.Append( _T("<v:shape") );
else
sResult.AppendFormat( _T("<%ls"),oRenderParameter.sValue.GetBuffer() );
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(" id=\"_x0000_s%d\""), poDocument->GetShapeId( m_nID ) );
if( PROP_DEF != m_nShapeType )
sResult.AppendFormat( _T(" type=\"#_x0000_t%d\""),m_nShapeType );
//Connectors
switch( m_nConnectionType )
{
case 0: sResult.Append(_T(" o:connecttype=\"custom\""));break;
case 1: sResult.Append(_T(" o:connecttype=\"none\""));break;
case 2: sResult.Append(_T(" o:connecttype=\"rect\""));break;
case 3: sResult.Append(_T(" o:connecttype=\"segments\""));break;
}
switch( m_nConnectorStyle )
{
case 0: sResult.Append(_T(" o:connectortype=\"straight\""));break;
case 1: sResult.Append(_T(" o:connectortype=\"elbow\""));break;
case 2: sResult.Append(_T(" o:connectortype=\"curved\""));break;
case 3: sResult.Append(_T(" o:connectortype=\"none\""));break;
}
//Connectors
//Connectors
switch( m_nConnectionType )
{
case 0: sResult.Append(_T(" o:connecttype=\"custom\""));break;
case 1: sResult.Append(_T(" o:connecttype=\"none\""));break;
case 2: sResult.Append(_T(" o:connecttype=\"rect\""));break;
case 3: sResult.Append(_T(" o:connecttype=\"segments\""));break;
}
switch( m_nConnectorStyle )
{
case 0: sResult.Append(_T(" o:connectortype=\"straight\""));break;
case 1: sResult.Append(_T(" o:connectortype=\"elbow\""));break;
case 2: sResult.Append(_T(" o:connectortype=\"curved\""));break;
case 3: sResult.Append(_T(" o:connectortype=\"none\""));break;
}
//Connectors
//Position
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;") );
sStyle.AppendFormat(_T("margin-left:%fpt;"), RtfUtility::Twip2pt(m_nLeft) );
sStyle.AppendFormat(_T("margin-top:%fpt;"), RtfUtility::Twip2pt(m_nTop));
sStyle.AppendFormat(_T("margin-bottom:%fpt;"), RtfUtility::Twip2pt(m_nBottom) );
sStyle.AppendFormat(_T("margin-right:%fpt;"), RtfUtility::Twip2pt(m_nRight));
}
int nWidth = m_nRight - m_nLeft;
int nHeight = m_nBottom - m_nTop;
sStyle.AppendFormat(_T("width:%fpt;height:%fpt;"), 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 )
{
int 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;
int 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;
sStyle.AppendFormat(_T("width:%.2fpt;height:%.2fpt;"), RtfUtility::Twip2pt(nWidth), RtfUtility::Twip2pt(nHeight));
}
//Position
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;") );
sStyle.AppendFormat(_T("margin-left:%fpt;"), RtfUtility::Twip2pt(m_nLeft) );
sStyle.AppendFormat(_T("margin-top:%fpt;"), RtfUtility::Twip2pt(m_nTop));
sStyle.AppendFormat(_T("margin-bottom:%fpt;"), RtfUtility::Twip2pt(m_nBottom) );
sStyle.AppendFormat(_T("margin-right:%fpt;"), RtfUtility::Twip2pt(m_nRight));
}
int nWidth = m_nRight - m_nLeft;
int nHeight = m_nBottom - m_nTop;
sStyle.AppendFormat(_T("width:%fpt;height:%fpt;"), 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 )
{
int 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;
switch( m_nPositionH )
{
case 0: sStyle.Append(_T("mso-position-horizontal:absolute;"));break;
case 1: sStyle.Append(_T("mso-position-horizontal:left;"));break;
case 2: sStyle.Append(_T("mso-position-horizontal:center;"));break;
case 3: sStyle.Append(_T("mso-position-horizontal:right;"));break;
case 4: sStyle.Append(_T("mso-position-horizontal:inside;"));break;
case 5: sStyle.Append(_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.Append(_T("mso-position-horizontal-relative:margin;"));break;
case 1: sStyle.Append(_T("mso-position-horizontal-relative:page;"));break;
case 2: sStyle.Append(_T("mso-position-horizontal-relative:text;"));break;
case 3: sStyle.Append(_T("mso-position-horizontal-relative:char;"));break;
case 4: sStyle.Append(_T("mso-position-horizontal-relative:left-margin-area;"));break;
case 5: sStyle.Append(_T("mso-position-horizontal-relative:right-margin-area;"));break;
case 6: sStyle.Append(_T("mso-position-horizontal-relative:inner-margin-area;"));break;
case 7: sStyle.Append(_T("mso-position-horizontal-relative:outer-margin-area;"));break;
}
}
else
{
switch( m_eXAnchor )
{
case ax_page: sStyle.Append(_T("mso-position-horizontal-relative:page;"));break;
case ax_margin: sStyle.Append(_T("mso-position-horizontal-relative:margin;"));break;
//case ax_column: sStyle.Append(_T("mso-position-horizontal-relative:text;"));break;
}
}
int 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;
switch( m_nPositionV )
{
case 0: sStyle.Append(_T("mso-position-vertical:absolute;"));break;
case 1: sStyle.Append(_T("mso-position-vertical:top;"));break;
case 2: sStyle.Append(_T("mso-position-vertical:center;"));break;
case 3: sStyle.Append(_T("mso-position-vertical:bottom;"));break;
case 4: sStyle.Append(_T("mso-position-vertical:inside;"));break;
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("width:%.2fpt;height:%.2fpt;"), RtfUtility::Twip2pt(nWidth), RtfUtility::Twip2pt(nHeight));
}
if( PROP_DEF != m_nPositionV && PROP_DEF == m_nPositionVRelative )
m_nPositionVRelative =2;
if( PROP_DEF != m_nPositionVRelative )
{
switch( m_nPositionVRelative )
{
case 0: sStyle.Append(_T("mso-position-vertical-relative:margin;"));break;
case 1: sStyle.Append(_T("mso-position-vertical-relative:page;"));break;
case 2: sStyle.Append(_T("mso-position-vertical-relative:text;"));break;
case 3: sStyle.Append(_T("mso-position-vertical-relative:line;"));break;
case 4: sStyle.Append(_T("mso-position-vertical-relative:top-margin-area;"));break;
case 5: sStyle.Append(_T("mso-position-vertical-relative:bottom-margin-area;"));break;
case 6: sStyle.Append(_T("mso-position-vertical-relative:inner-margin-area;"));break;
case 7: sStyle.Append(_T("mso-position-vertical-relative:outer-margin-area;"));break;
}
}
else
{
switch( m_eYAnchor )
{
case ay_page: sStyle.Append(_T("mso-position-vertical-relative:page;"));break;
case ay_margin: sStyle.Append(_T("mso-position-vertical-relative:margin;"));break;
//case ay_Para: sStyle.Append(_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.Append(_T("mso-width-relative:margin;"));break;
case 1:sStyle.Append(_T("mso-width-relative:page;"));break;
case 2:sStyle.Append(_T("mso-width-relative:left-margin-area;"));break;
case 3:sStyle.Append(_T("mso-width-relative:right-margin-area;"));break;
case 4:sStyle.Append(_T("mso-width-relative:inner-margin-area;"));break;
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);
switch( m_nPctHeightRelative )
{
case 0:sStyle.Append(_T("mso-height-relative:margin;"));break;
case 1:sStyle.Append(_T("mso-height-relative:page;"));break;
case 2:sStyle.Append(_T("mso-height-relative:top-margin-area;"));break;
case 3:sStyle.Append(_T("mso-height-relative:bottom-margin-area;"));break;
case 4:sStyle.Append(_T("mso-height-relative:inner-margin-area;"));break;
case 5:sStyle.Append(_T("mso-height-relative:outer-margin-area;"));break;
}
switch( m_nPositionH )
{
case 0: sStyle.Append(_T("mso-position-horizontal:absolute;"));break;
case 1: sStyle.Append(_T("mso-position-horizontal:left;"));break;
case 2: sStyle.Append(_T("mso-position-horizontal:center;"));break;
case 3: sStyle.Append(_T("mso-position-horizontal:right;"));break;
case 4: sStyle.Append(_T("mso-position-horizontal:inside;"));break;
case 5: sStyle.Append(_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.Append(_T("mso-position-horizontal-relative:margin;"));break;
case 1: sStyle.Append(_T("mso-position-horizontal-relative:page;"));break;
case 2: sStyle.Append(_T("mso-position-horizontal-relative:text;"));break;
case 3: sStyle.Append(_T("mso-position-horizontal-relative:char;"));break;
case 4: sStyle.Append(_T("mso-position-horizontal-relative:left-margin-area;"));break;
case 5: sStyle.Append(_T("mso-position-horizontal-relative:right-margin-area;"));break;
case 6: sStyle.Append(_T("mso-position-horizontal-relative:inner-margin-area;"));break;
case 7: sStyle.Append(_T("mso-position-horizontal-relative:outer-margin-area;"));break;
}
}
else
{
switch( m_eXAnchor )
{
case ax_page: sStyle.Append(_T("mso-position-horizontal-relative:page;"));break;
case ax_margin: sStyle.Append(_T("mso-position-horizontal-relative:margin;"));break;
//case ax_column: sStyle.Append(_T("mso-position-horizontal-relative:text;"));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 );
switch( m_nPositionV )
{
case 0: sStyle.Append(_T("mso-position-vertical:absolute;"));break;
case 1: sStyle.Append(_T("mso-position-vertical:top;"));break;
case 2: sStyle.Append(_T("mso-position-vertical:center;"));break;
case 3: sStyle.Append(_T("mso-position-vertical:bottom;"));break;
case 4: sStyle.Append(_T("mso-position-vertical:inside;"));break;
case 5: sStyle.Append(_T("mso-position-vertical:outside;"));break;
}
if( PROP_DEF != m_nPositionVPct )
sStyle.AppendFormat(_T("mso-top-percent:%d;"),m_nPositionVPct);
int nZIndex = PROP_DEF;
if( PROP_DEF != m_nRelZOrder )
nZIndex = m_nRelZOrder;
else if( PROP_DEF != m_nZOrder )
nZIndex = m_nZOrder;
else
nZIndex = 100; //на свое усмотрение ставлю 100
if( PROP_DEF != m_nZOrderRelative )
{
//берем большое значение чтобы сделать строго выше или ниже текста
if( 0 == m_nZOrderRelative )
sStyle.AppendFormat( _T("z-index:%d;"), 10000 + nZIndex );//Text is below shape
else
sStyle.AppendFormat( _T("z-index:%d;"), -10000 + nZIndex );//Shape is below text
}
else
sStyle.AppendFormat( _T("z-index:%d;"), nZIndex );
if( PROP_DEF != m_nWrapDistLeft )
sStyle.AppendFormat( _T("mso-wrap-distance-left:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistLeft ));
if( PROP_DEF != m_nWrapDistTop )
sStyle.AppendFormat( _T("mso-wrap-distance-top:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistTop ));
if( PROP_DEF != m_nWrapDistRight )
sStyle.AppendFormat( _T("mso-wrap-distance-right:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistRight ));
if( PROP_DEF != m_nWrapDistBottom )
sStyle.AppendFormat( _T("mso-wrap-distance-bottom:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistBottom ));
if( false == sStyle.IsEmpty() )
{
sStyle.Delete( sStyle.GetLength() - 1 );
sResult.AppendFormat( _T(" style=\"%ls\""),sStyle.GetBuffer() );
}
if( PROP_DEF != m_nPositionV && PROP_DEF == m_nPositionVRelative )
m_nPositionVRelative =2;
if( PROP_DEF != m_nPositionVRelative )
{
switch( m_nPositionVRelative )
{
case 0: sStyle.Append(_T("mso-position-vertical-relative:margin;"));break;
case 1: sStyle.Append(_T("mso-position-vertical-relative:page;"));break;
case 2: sStyle.Append(_T("mso-position-vertical-relative:text;"));break;
case 3: sStyle.Append(_T("mso-position-vertical-relative:line;"));break;
case 4: sStyle.Append(_T("mso-position-vertical-relative:top-margin-area;"));break;
case 5: sStyle.Append(_T("mso-position-vertical-relative:bottom-margin-area;"));break;
case 6: sStyle.Append(_T("mso-position-vertical-relative:inner-margin-area;"));break;
case 7: sStyle.Append(_T("mso-position-vertical-relative:outer-margin-area;"));break;
}
}
else
{
switch( m_eYAnchor )
{
case ay_page: sStyle.Append(_T("mso-position-vertical-relative:page;"));break;
case ay_margin: sStyle.Append(_T("mso-position-vertical-relative:margin;"));break;
//case ay_Para: sStyle.Append(_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.Append(_T("mso-width-relative:margin;"));break;
case 1:sStyle.Append(_T("mso-width-relative:page;"));break;
case 2:sStyle.Append(_T("mso-width-relative:left-margin-area;"));break;
case 3:sStyle.Append(_T("mso-width-relative:right-margin-area;"));break;
case 4:sStyle.Append(_T("mso-width-relative:inner-margin-area;"));break;
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);
switch( m_nPctHeightRelative )
{
case 0:sStyle.Append(_T("mso-height-relative:margin;"));break;
case 1:sStyle.Append(_T("mso-height-relative:page;"));break;
case 2:sStyle.Append(_T("mso-height-relative:top-margin-area;"));break;
case 3:sStyle.Append(_T("mso-height-relative:bottom-margin-area;"));break;
case 4:sStyle.Append(_T("mso-height-relative:inner-margin-area;"));break;
case 5:sStyle.Append(_T("mso-height-relative:outer-margin-area;"));break;
}
if( PROP_DEF != m_bLayoutInCell )
{
if( 0 == m_bLayoutInCell )
sResult.Append( _T(" o:allowincell=\"false\""));
else
sResult.Append( _T(" o:allowincell=\"true\""));
}
if( PROP_DEF != m_bAllowOverlap )
{
if( 0 == m_bAllowOverlap )
sResult.Append( _T(" o:allowoverlap=\"false\""));
else
sResult.Append( _T(" o:allowoverlap=\"true\""));
}
//Position
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
nZIndex = 100; //на свое усмотрение ставлю 100
if( PROP_DEF != m_nZOrderRelative )
{
//берем большое значение чтобы сделать строго выше или ниже текста
if( 0 == m_nZOrderRelative )
sStyle.AppendFormat( _T("z-index:%d;"), 10000 + nZIndex );//Text is below shape
else
sStyle.AppendFormat( _T("z-index:%d;"), -10000 + nZIndex );//Shape is below text
}
else
sStyle.AppendFormat( _T("z-index:%d;"), nZIndex );
if( PROP_DEF != m_nWrapDistLeft )
sStyle.AppendFormat( _T("mso-wrap-distance-left:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistLeft ));
if( PROP_DEF != m_nWrapDistTop )
sStyle.AppendFormat( _T("mso-wrap-distance-top:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistTop ));
if( PROP_DEF != m_nWrapDistRight )
sStyle.AppendFormat( _T("mso-wrap-distance-right:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistRight ));
if( PROP_DEF != m_nWrapDistBottom )
sStyle.AppendFormat( _T("mso-wrap-distance-bottom:%fpt;"), RtfUtility::Twip2pt( m_nWrapDistBottom ));
//Geometry
CString sAdjust;
if( PROP_DEF != m_nAdjustValue )
if( false == sStyle.IsEmpty() )
{
sStyle.Delete( sStyle.GetLength() - 1 );
sResult.AppendFormat( _T(" style=\"%ls\""),sStyle.GetBuffer() );
}
if( PROP_DEF != m_bLayoutInCell )
{
if( 0 == m_bLayoutInCell )
sResult.Append( _T(" o:allowincell=\"false\""));
else
sResult.Append( _T(" o:allowincell=\"true\""));
}
if( PROP_DEF != m_bAllowOverlap )
{
if( 0 == m_bAllowOverlap )
sResult.Append( _T(" o:allowoverlap=\"false\""));
else
sResult.Append( _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_nAdjustValue);
if( PROP_DEF != m_nAdjustValue2 )
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue3);
if( PROP_DEF != m_nAdjustValue4 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue2);
if( PROP_DEF != m_nAdjustValue3 )
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue4);
if( PROP_DEF != m_nAdjustValue5 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue3);
if( PROP_DEF != m_nAdjustValue4 )
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue5);
if( PROP_DEF != m_nAdjustValue6 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue4);
if( PROP_DEF != m_nAdjustValue5 )
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue6);
if( PROP_DEF != m_nAdjustValue7 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue5);
if( PROP_DEF != m_nAdjustValue6 )
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue7);
if( PROP_DEF != m_nAdjustValue8 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue6);
if( PROP_DEF != m_nAdjustValue7 )
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue8);
if( PROP_DEF != m_nAdjustValue9 )
{
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue7);
if( PROP_DEF != m_nAdjustValue8 )
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue9);
if( PROP_DEF != m_nAdjustValue10 )
{
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);
}
}
sAdjust.AppendFormat( _T(",%d"),m_nAdjustValue10);
}
}
}
......@@ -1013,173 +1077,190 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
}
}
}
sResult.AppendFormat( _T(" adj=\"%ls\""),sAdjust.GetBuffer() );
}
//Geometry
if( m_aWrapPoints.size() > 0 )
{
sResult.Append( _T(" wrapcoords=\""));
sResult.AppendFormat( _T("%d"), m_aWrapPoints[0]);
for( int i = 1; i < (int)m_aWrapPoints.size(); i++ )
sResult.AppendFormat( _T(" %d"), m_aWrapPoints[i]);
sResult.Append( _T("\""));
}
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( 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"));
switch( m_nWrapType )
{
case 1:sResult.Append( _T(" type=\"topAndBottom\""));break;
case 2:sResult.Append( _T(" type=\"square\""));break;
case 3:sResult.Append( _T(" type=\"none\""));break;
case 4:sResult.Append( _T(" type=\"tight\""));break;
case 5:sResult.Append( _T(" type=\"through\""));break;
}
switch( m_nWrapSideType )
{
case 0:sResult.Append( _T(" side=\"both\""));break;
case 1:sResult.Append( _T(" side=\"left\""));break;
case 2:sResult.Append( _T(" side=\"right\""));break;
case 3:sResult.Append( _T(" side=\"largest\""));break;
}
sResult.Append( _T("/>"));
}
//Line
CString sStroke;
if( PROP_DEF != m_nLineStartArrow )
{
switch( m_nLineStartArrow )
{
case 0: sStroke.Append( _T(" startarrow=\"none\"") ); break;
case 1: sStroke.Append( _T(" startarrow=\"block\"") ); break;
case 2: sStroke.Append( _T(" startarrow=\"classic\"") ); break;
case 3: sStroke.Append( _T(" startarrow=\"diamond\"") ); break;
case 4: sStroke.Append( _T(" startarrow=\"oval\"") ); break;
case 5: sStroke.Append( _T(" startarrow=\"open\"") ); break;
case 6: sStroke.Append( _T(" startarrow=\"block\"") ); break;
case 7: sStroke.Append( _T(" startarrow=\"block\"") ); break;
}
}
if( PROP_DEF != m_nLineStartArrowLength )
{
switch( m_nLineStartArrowLength )
{
case 0: sStroke.Append( _T(" startarrowlength=\"short\"") ); break;
case 1: sStroke.Append( _T(" startarrowlength=\"medium\"") ); break;
case 2: sStroke.Append( _T(" startarrowlength=\"long\"") ); break;
}
}
if( PROP_DEF != m_nLineStartArrowWidth )
{
switch( m_nLineStartArrowWidth )
{
case 0: sStroke.Append( _T(" startarrowwidth=\"narrow\"") ); break;
case 1: sStroke.Append( _T(" startarrowwidth=\"medium\"") ); break;
case 2: sStroke.Append( _T(" startarrowwidth=\"wide\"") ); break;
}
}
if( PROP_DEF != m_nLineEndArrow )
{
switch( m_nLineEndArrow )
{
case 0: sStroke.Append( _T(" endarrow=\"none\"") ); break;
case 1: sStroke.Append( _T(" endarrow=\"block\"") ); break;
case 2: sStroke.Append( _T(" endarrow=\"classic\"") ); break;
case 3: sStroke.Append( _T(" endarrow=\"diamond\"") ); break;
case 4: sStroke.Append( _T(" endarrow=\"oval\"") ); break;
case 5: sStroke.Append( _T(" endarrow=\"open\"") ); break;
case 6: sStroke.Append( _T(" endarrow=\"block\"") ); break;
case 7: sStroke.Append( _T(" endarrow=\"block\"") ); break;
}
}
if( PROP_DEF != m_nLineEndArrowLength )
{
switch( m_nLineEndArrowLength )
{
case 0: sStroke.Append( _T(" endarrowlength=\"short\"") ); break;
case 1: sStroke.Append( _T(" endarrowlength=\"medium\"") ); break;
case 2: sStroke.Append( _T(" endarrowlength=\"long\"") ); break;
}
}
if( PROP_DEF != m_nLineEndArrowWidth )
{
switch( m_nLineEndArrowWidth )
{
case 0: sStroke.Append( _T(" endarrowwidth=\"narrow\"") ); break;
case 1: sStroke.Append( _T(" endarrowwidth=\"medium\"") ); break;
case 2: sStroke.Append( _T(" endarrowwidth=\"wide\"") ); break;
}
}
if( false == sStroke.IsEmpty() )
sResult.AppendFormat( _T("<v:stroke %ls/>"), sStroke.GetBuffer() );
}
sResult.AppendFormat( _T(" adj=\"%ls\""),sAdjust.GetBuffer() );
}
//Geometry
if( m_aWrapPoints.size() > 0 )
{
sResult.Append( _T(" wrapcoords=\""));
sResult.AppendFormat( _T("%d"), m_aWrapPoints[0]);
for( int i = 1; i < (int)m_aWrapPoints.size(); i++ )
sResult.AppendFormat( _T(" %d"), m_aWrapPoints[i]);
sResult.Append( _T("\""));
}
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( 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"));
switch( m_nWrapType )
{
case 1:sResult.Append( _T(" type=\"topAndBottom\""));break;
case 2:sResult.Append( _T(" type=\"square\""));break;
case 3:sResult.Append( _T(" type=\"none\""));break;
case 4:sResult.Append( _T(" type=\"tight\""));break;
case 5:sResult.Append( _T(" type=\"through\""));break;
}
switch( m_nWrapSideType )
{
case 0:sResult.Append( _T(" side=\"both\""));break;
case 1:sResult.Append( _T(" side=\"left\""));break;
case 2:sResult.Append( _T(" side=\"right\""));break;
case 3:sResult.Append( _T(" side=\"largest\""));break;
}
sResult.Append( _T("/>"));
}
//Line
CString sStroke;
if( PROP_DEF != m_nLineStartArrow )
{
switch( m_nLineStartArrow )
{
case 0: sStroke.Append( _T(" startarrow=\"none\"") ); break;
case 1: sStroke.Append( _T(" startarrow=\"block\"") ); break;
case 2: sStroke.Append( _T(" startarrow=\"classic\"") ); break;
case 3: sStroke.Append( _T(" startarrow=\"diamond\"") ); break;
case 4: sStroke.Append( _T(" startarrow=\"oval\"") ); break;
case 5: sStroke.Append( _T(" startarrow=\"open\"") ); break;
case 6: sStroke.Append( _T(" startarrow=\"block\"") ); break;
case 7: sStroke.Append( _T(" startarrow=\"block\"") ); break;
}
}
if( PROP_DEF != m_nLineStartArrowLength )
{
switch( m_nLineStartArrowLength )
{
case 0: sStroke.Append( _T(" startarrowlength=\"short\"") ); break;
case 1: sStroke.Append( _T(" startarrowlength=\"medium\"") ); break;
case 2: sStroke.Append( _T(" startarrowlength=\"long\"") ); break;
}
}
if( PROP_DEF != m_nLineStartArrowWidth )
{
switch( m_nLineStartArrowWidth )
{
case 0: sStroke.Append( _T(" startarrowwidth=\"narrow\"") ); break;
case 1: sStroke.Append( _T(" startarrowwidth=\"medium\"") ); break;
case 2: sStroke.Append( _T(" startarrowwidth=\"wide\"") ); break;
}
}
if( PROP_DEF != m_nLineEndArrow )
{
switch( m_nLineEndArrow )
{
case 0: sStroke.Append( _T(" endarrow=\"none\"") ); break;
case 1: sStroke.Append( _T(" endarrow=\"block\"") ); break;
case 2: sStroke.Append( _T(" endarrow=\"classic\"") ); break;
case 3: sStroke.Append( _T(" endarrow=\"diamond\"") ); break;
case 4: sStroke.Append( _T(" endarrow=\"oval\"") ); break;
case 5: sStroke.Append( _T(" endarrow=\"open\"") ); break;
case 6: sStroke.Append( _T(" endarrow=\"block\"") ); break;
case 7: sStroke.Append( _T(" endarrow=\"block\"") ); break;
}
}
if( PROP_DEF != m_nLineEndArrowLength )
{
switch( m_nLineEndArrowLength )
{
case 0: sStroke.Append( _T(" endarrowlength=\"short\"") ); break;
case 1: sStroke.Append( _T(" endarrowlength=\"medium\"") ); break;
case 2: sStroke.Append( _T(" endarrowlength=\"long\"") ); break;
}
}
if( PROP_DEF != m_nLineEndArrowWidth )
{
switch( m_nLineEndArrowWidth )
{
case 0: sStroke.Append( _T(" endarrowwidth=\"narrow\"") ); break;
case 1: sStroke.Append( _T(" endarrowwidth=\"medium\"") ); break;
case 2: sStroke.Append( _T(" endarrowwidth=\"wide\"") ); break;
}
}
if( false == sStroke.IsEmpty() )
sResult.AppendFormat( _T("<v:stroke %ls/>"), sStroke.GetBuffer() );
if( 0 != m_aTextItems )
{
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
sResult.AppendFormat( _T("<v:textbox inset=\"%.2fpt,%.2fpt,%.2fpt,%.2fpt\">"), RtfUtility::Emu2Pt(m_nTexpLeft), RtfUtility::Emu2Pt(m_nTexpTop), RtfUtility::Emu2Pt(m_nTexpRight), RtfUtility::Emu2Pt(m_nTexpBottom) );
sResult.Append( _T("<w:txbxContent>") );
sResult.Append( m_aTextItems->RenderToOOX(oNewParam) );
sResult.Append( _T("</w:txbxContent>") );
sResult.Append( _T("</v:textbox>") );
}
if( m_oPicture != 0 )
{
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) );
CString sPicture = m_oPicture->RenderToOOX(oRenderParameter);
if( _T("") == sPicture )//если не сохранилась картинка, то весь shape будет бесполезным
return _T("");
sResult.AppendFormat( _T("<v:imagedata r:id=\"%ls\""), sPicture.GetBuffer() );
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.Append( _T(" o:title=\"\"/>") );
}
if( 0 != m_aTextItems )
{
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
sResult.AppendFormat( _T("<v:textbox inset=\"%.2fpt,%.2fpt,%.2fpt,%.2fpt\">"), RtfUtility::Emu2Pt(m_nTexpLeft), RtfUtility::Emu2Pt(m_nTexpTop), RtfUtility::Emu2Pt(m_nTexpRight), RtfUtility::Emu2Pt(m_nTexpBottom) );
sResult.Append( _T("<w:txbxContent>") );
sResult.Append( m_aTextItems->RenderToOOX(oNewParam) );
sResult.Append( _T("</w:txbxContent>") );
sResult.Append( _T("</v:textbox>") );
}
if( m_oPicture != 0)
{
CString 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.AppendFormat( _T("<v:imagedata r:id=\"%ls\""), sPicture.GetBuffer() );
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.Append( _T(" o:title=\"\"/>") );
}
else if (!sPicture.IsEmpty())
{
sResult.AppendFormat( _T("<v:fill r:id=\"%ls\""), sPicture.GetBuffer() );
if (m_nFillType == 2 )
sResult.Append( _T(" type=\"tile\""));
else
sResult.Append( _T(" type=\"frame\""));
sResult.Append( _T("/>") );
}
}
return sResult;
}
CString RtfShape::RenderToOOXEnd(RenderParameter oRenderParameter)
......
......@@ -145,6 +145,7 @@ public:
//Fill
int m_bFilled; //fFilled The shape is filled.
int m_nFillType;
//Line
int m_bLine; //fLine Has a line
int m_nLineStartArrow; //lineStartArrowhead Start arrow type:
......@@ -198,7 +199,7 @@ public:
DEFAULT_PROPERTY_DEF( m_eXAnchor, ax_column ) //по умолчанию - привязка к тексту
DEFAULT_PROPERTY_DEF( m_eYAnchor, ay_Para )//по умолчанию - привязка к тексту
//Position absolute
//Position absolute
DEFAULT_PROPERTY( m_nPositionH )
DEFAULT_PROPERTY( m_nPositionHRelative )
DEFAULT_PROPERTY( m_nPositionV )
......@@ -206,7 +207,7 @@ public:
DEFAULT_PROPERTY( m_bLayoutInCell )
DEFAULT_PROPERTY( m_bAllowOverlap )
//Position relative
//Position relative
DEFAULT_PROPERTY( m_nPositionHPct )
DEFAULT_PROPERTY( m_nPositionVPct )
DEFAULT_PROPERTY( m_nPctWidth )
......@@ -216,7 +217,7 @@ public:
DEFAULT_PROPERTY( m_nColStart )
DEFAULT_PROPERTY( m_nColSpan )
//Object Type
//Object Type
DEFAULT_PROPERTY( m_bIsBullet )
DEFAULT_PROPERTY( m_nRotation )
DEFAULT_PROPERTY( m_bFlipV )
......@@ -230,7 +231,7 @@ public:
//m_bBehindDocument = -1;
DEFAULT_PROPERTY( m_bHidden )
//Text box
//Text box
DEFAULT_PROPERTY_DEF( m_nTexpLeft, 91440 )
DEFAULT_PROPERTY_DEF( m_nTexpTop, 45720 )
DEFAULT_PROPERTY_DEF( m_nTexpRight, 91440 )
......@@ -248,13 +249,13 @@ public:
DEFAULT_PROPERTY( m_nAdjustValue9 )
DEFAULT_PROPERTY( m_nAdjustValue10 )
//WordArt Effects
//WordArt Effects
DEFAULT_PROPERTY( m_nCropFromTop )
DEFAULT_PROPERTY( m_nCropFromBottom )
DEFAULT_PROPERTY( m_nCropFromLeft )
DEFAULT_PROPERTY( m_nCropFromRight )
//Grouped Shapes
//Grouped Shapes
DEFAULT_PROPERTY( m_nGroupBottom )
DEFAULT_PROPERTY( m_nGroupLeft )
DEFAULT_PROPERTY( m_nGroupRight )
......@@ -266,17 +267,18 @@ public:
DEFAULT_PROPERTY( m_nRelRotation )
DEFAULT_PROPERTY( m_nRelZOrder )
//Rehydration
//Rehydration
m_sMetroBlob = _T("");
m_sMetroBlobRels = _T("");
m_sMetroBlobData = _T("");
//Connectors
//Connectors
DEFAULT_PROPERTY( m_nConnectionType )
DEFAULT_PROPERTY( m_nConnectorStyle )
//Fill
//Fill
DEFAULT_PROPERTY_DEF( m_bFilled, true )
//Line
DEFAULT_PROPERTY( m_nFillType )
//Line
DEFAULT_PROPERTY_DEF( m_bLine, true )
DEFAULT_PROPERTY( m_nLineStartArrow )
DEFAULT_PROPERTY( m_nLineStartArrowWidth )
......
......@@ -98,8 +98,8 @@ namespace OOX
SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse> m_oHrNoShade;
SimpleTypes::CDouble m_oHrPct;
SimpleTypes::CHrAlign<SimpleTypes::hralignLeft> m_oHrAlign;
SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse> m_oAllowInCell;
SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse> m_oAllowOverlap;
SimpleTypes::CTrueFalse<SimpleTypes::booleanTrue> m_oAllowInCell;
SimpleTypes::CTrueFalse<SimpleTypes::booleanTrue> m_oAllowOverlap;
SimpleTypes::CTrueFalse<SimpleTypes::booleanFalse> m_oUserDrawn;
nullable<SimpleTypes::CColorType<>> m_oBorderTopColor;
nullable<SimpleTypes::CColorType<>> m_oBorderLeftColor;
......
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