summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMuthu Subramanian K <sumuthu@novell.com>2010-10-15 15:25:52 +0530
committerMuthu Subramanian K <sumuthu@novell.com>2010-10-16 21:46:20 +0530
commit154e93a822745f89babab2dcb464bc8823c1c357 (patch)
tree02fbd68bcf58c85744fc20f60aef81feea903d6d /oox
parent765050416fd47c128b66b02e1474929328e9943c (diff)
commentPr import feature.
Diffstat (limited to 'oox')
-rw-r--r--oox/inc/oox/xls/commentsbuffer.hxx13
-rw-r--r--oox/source/token/properties.txt2
-rw-r--r--oox/source/xls/commentsbuffer.cxx106
-rw-r--r--oox/source/xls/commentsfragment.cxx23
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;