diff options
author | Muthu Subramanian K <sumuthu@novell.com> | 2010-10-15 15:25:52 +0530 |
---|---|---|
committer | Muthu Subramanian K <sumuthu@novell.com> | 2010-10-16 21:46:20 +0530 |
commit | 154e93a822745f89babab2dcb464bc8823c1c357 (patch) | |
tree | 02fbd68bcf58c85744fc20f60aef81feea903d6d /oox | |
parent | 765050416fd47c128b66b02e1474929328e9943c (diff) |
commentPr import feature.
Diffstat (limited to 'oox')
-rw-r--r-- | oox/inc/oox/xls/commentsbuffer.hxx | 13 | ||||
-rw-r--r-- | oox/source/token/properties.txt | 2 | ||||
-rw-r--r-- | oox/source/xls/commentsbuffer.cxx | 106 | ||||
-rw-r--r-- | oox/source/xls/commentsfragment.cxx | 23 |
4 files changed, 142 insertions, 2 deletions
diff --git a/oox/inc/oox/xls/commentsbuffer.hxx b/oox/inc/oox/xls/commentsbuffer.hxx index 8a43eb7fe9fe..2abbf6dc591c 100644 --- a/oox/inc/oox/xls/commentsbuffer.hxx +++ b/oox/inc/oox/xls/commentsbuffer.hxx @@ -42,6 +42,15 @@ struct CommentModel maRange; /// Position of the comment in the worksheet. RichStringRef mxText; /// Formatted text of the comment. sal_Int32 mnAuthorId; /// Identifier of the comment's author. + sal_Bool mbAutoFill; /// Auto Selection of comment object's fill style + sal_Bool mbAutoScale; /// Auto Scale comment text + sal_Bool mbColHidden; /// Comment cell's Column is Hidden + sal_Bool mbLocked; /// Comment changes Locked + sal_Bool mbRowHidden; /// Comment cell's Row is Hidden + sal_Int32 mnTHA; /// Horizontal Alignment + sal_Int32 mnTVA; /// Vertical Alignment + ::com::sun::star::awt::Rectangle + maAnchor; /// Anchor parameters explicit CommentModel(); }; @@ -55,6 +64,10 @@ public: /** Imports a cell comment from the passed attributes of the comment element. */ void importComment( const AttributeList& rAttribs ); + /** Imports a cell comment Properties from the passed attributes of the comment element. */ + void importCommentPr( const AttributeList& rAttribs ); + /** Imports the anchor points in CommentPr */ + void importAnchor( bool bFrom, sal_Int32 nWhich, const ::rtl::OUString &rChars ); /** Imports a cell comment from the passed stream of a COMMENT record. */ void importComment( RecordInputStream& rStrm ); diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt index 2a7960ab406f..98f712fbedc6 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -267,6 +267,7 @@ MirroredY MissingValueTreatment Model ModifyPasswordHash +MoveProtect MultiLine MultiPageValue MultiSelection @@ -384,6 +385,7 @@ ShowPositiveError ShowZeroValues ShrinkToFit Size +SizeProtect SortInfo Sound SoundOn diff --git a/oox/source/xls/commentsbuffer.cxx b/oox/source/xls/commentsbuffer.cxx index 87a822fa8132..159bde83b22c 100644 --- a/oox/source/xls/commentsbuffer.cxx +++ b/oox/source/xls/commentsbuffer.cxx @@ -36,7 +36,9 @@ #include "oox/vml/vmlshape.hxx" #include "oox/xls/addressconverter.hxx" #include "oox/xls/drawingfragment.hxx" - +#include "properties.hxx" +#include "svx/sdtaitm.hxx" +#include "oox/xls/unitconverter.hxx" #include <com/sun/star/text/XText.hpp> #include <com/sun/star/text/XTextRange.hpp> @@ -56,7 +58,41 @@ using ::com::sun::star::sheet::XSheetAnnotationsSupplier; using ::com::sun::star::text::XText; using ::com::sun::star::text::XTextRange; +using ::com::sun::star::awt::Size; +using ::com::sun::star::awt::Point; + + +static sal_Int32 lcl_ToHorizAlign( sal_Int32 nAlign ) +{ + switch( nAlign ) + { + case XML_left: + return SDRTEXTHORZADJUST_LEFT; + case XML_right: + return SDRTEXTHORZADJUST_RIGHT; + case XML_center: + return SDRTEXTHORZADJUST_CENTER; + default: + return SDRTEXTHORZADJUST_BLOCK; + } + return SDRTEXTHORZADJUST_LEFT; +} +static sal_Int32 lcl_ToVertAlign( sal_Int32 nAlign ) +{ + switch( nAlign ) + { + case XML_top: + return SDRTEXTVERTADJUST_TOP; + case XML_center: + return SDRTEXTVERTADJUST_CENTER; + case XML_bottom: + return SDRTEXTVERTADJUST_BOTTOM; + default: + return SDRTEXTVERTADJUST_BLOCK; + } + return SDRTEXTVERTADJUST_TOP; +} namespace oox { namespace xls { @@ -82,6 +118,61 @@ void Comment::importComment( const AttributeList& rAttribs ) getAddressConverter().convertToCellRangeUnchecked( maModel.maRange, rAttribs.getString( XML_ref, OUString() ), getSheetIndex() ); } +void Comment::importCommentPr( const AttributeList& rAttribs ) +{ + maModel.mbAutoFill = rAttribs.getBool( XML_autoFill, true ); + maModel.mbAutoScale = rAttribs.getBool( XML_autoScale, false ); + maModel.mbColHidden = rAttribs.getBool( XML_colHidden, false ); + maModel.mbLocked = rAttribs.getBool( XML_locked, false ); + maModel.mbRowHidden = rAttribs.getBool( XML_rowHidden, false ); + maModel.mnTHA = rAttribs.getToken( XML_textHAlign, XML_left ); + maModel.mnTVA = rAttribs.getToken( XML_textVAlign, XML_top ); +} + +void Comment::importAnchor( bool bFrom, sal_Int32 nWhich, const OUString &rChars ) +{ + sal_Int32 nRow, nCol; + Point aPoint; + UnitConverter& rUnitConv = getUnitConverter(); + if( bFrom ) + { + nCol = maModel.maAnchor.X; + nRow = maModel.maAnchor.Y; + } + else + { + nCol = maModel.maAnchor.Width + maModel.maAnchor.X ; + nRow = maModel.maAnchor.Height + maModel.maAnchor.Y; + } + switch( nWhich ) + { + case XDR_TOKEN( col ): + aPoint = getCellPosition( rChars.toInt32(), 1 ); + nCol = aPoint.X; + break; + case XDR_TOKEN( colOff ): + nCol += rUnitConv.scaleToMm100( static_cast< double >( rChars.toInt32() ), UNIT_SCREENX ); + break; + case XDR_TOKEN( row ): + aPoint = getCellPosition( 1, rChars.toInt32() ); + nRow = aPoint.Y; + break; + case XDR_TOKEN( rowOff ): + nRow += rUnitConv.scaleToMm100( static_cast< double >( rChars.toInt32() ), UNIT_SCREENY ); + break; + } + if( bFrom ) + { + maModel.maAnchor.X = nCol; + maModel.maAnchor.Y = nRow; + } + else + { + maModel.maAnchor.Width = nCol - maModel.maAnchor.X; + maModel.maAnchor.Height = nRow - maModel.maAnchor.Y; + } +} + void Comment::importComment( RecordInputStream& rStrm ) { BinRange aBinRange; @@ -123,6 +214,19 @@ void Comment::finalizeImport() xTextRange->setString( OUString::createFromAscii("") ); // Clear contents maModel.mxText->convert( xText, -1 ); + // Add shape formatting properties (autoFill, colHidden and rowHidden are dropped) + PropertySet aCommentPr( xAnnoShape ); + aCommentPr.setProperty( PROP_TextFitToSize, maModel.mbAutoScale ); + aCommentPr.setProperty( PROP_MoveProtect, maModel.mbLocked ); + aCommentPr.setProperty( PROP_TextHorizontalAdjust, lcl_ToHorizAlign( maModel.mnTHA ) ); + aCommentPr.setProperty( PROP_TextVerticalAdjust, lcl_ToVertAlign( maModel.mnTVA ) ); + if( maModel.maAnchor.Width > 0 && maModel.maAnchor.Height > 0 ) + { + xAnnoShape->setPosition( Point( maModel.maAnchor.X, maModel.maAnchor.Y ) ); + xAnnoShape->setSize( Size( maModel.maAnchor.Width, maModel.maAnchor.Height ) ); + } + + // convert shape formatting if( const ::oox::vml::ShapeBase* pNoteShape = getVmlDrawing().getNoteShape( aNotePos ) ) { diff --git a/oox/source/xls/commentsfragment.cxx b/oox/source/xls/commentsfragment.cxx index b7b44f0ff610..6ab15d29eda4 100644 --- a/oox/source/xls/commentsfragment.cxx +++ b/oox/source/xls/commentsfragment.cxx @@ -62,9 +62,21 @@ ContextHandlerRef OoxCommentsFragment::onCreateContext( sal_Int32 nElement, cons case XLS_TOKEN( commentList ): if( nElement == XLS_TOKEN( comment ) ) { importComment( rAttribs ); return this; } break; + case XLS_TOKEN( commentPr ): + if( nElement == XLS_TOKEN( anchor ) ) + return this; + break; + case XLS_TOKEN( anchor ): + if( nElement == XDR_TOKEN( from ) || nElement == XDR_TOKEN( to ) ) + return this; + break; + case XDR_TOKEN( from ): + case XDR_TOKEN( to ): + return this; case XLS_TOKEN( comment ): if( (nElement == XLS_TOKEN( text )) && mxComment.get() ) return new OoxRichStringContext( *this, mxComment->createText() ); + if( nElement == XLS_TOKEN( commentPr ) ) { mxComment->importCommentPr( rAttribs ); return this; } break; } return 0; @@ -72,11 +84,20 @@ ContextHandlerRef OoxCommentsFragment::onCreateContext( sal_Int32 nElement, cons void OoxCommentsFragment::onEndElement( const OUString& rChars ) { + bool bFrom = false; + if( getPreviousElement() == XDR_TOKEN( from ) ) + bFrom = true; switch( getCurrentElement() ) { case XLS_TOKEN( author ): getComments().appendAuthor( rChars ); - break; + break; + case XDR_TOKEN( col ): + case XDR_TOKEN( colOff ): + case XDR_TOKEN( row ): + case XDR_TOKEN( rowOff ): + mxComment->importAnchor( bFrom, getCurrentElement(), rChars ); + break; case XLS_TOKEN( comment ): mxComment.reset(); break; |