summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorAdam Co <rattles2013@gmail.com>2014-02-05 13:46:08 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-02-12 09:57:40 +0000
commita8db386ad206029ab8c769856f8c452db8712c2b (patch)
treed11347ef36fca270313f0f146e4d623066929112 /sw
parent9010336d0eab3cd0d4f1ac17126900e12ffa846c (diff)
DOCX import sends 'table cell redline' to SW core, and core stores it
This patch adds support in the DOCX importer for the 'table cell redline' to be sent from the DOCX importer, using UNO (as a property of the table cell) to the SW core. Once it reaches the 'table cell' - the 'set property' detects this property - and creates an 'SwTableCellRedline' object for it, and adds it to the 'SwExtraRedlineTbl' object. Change-Id: Iba038f4109d5505b94cea548e73c614b5cc1b637 Reviewed-on: https://gerrit.libreoffice.org/7875 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/unocrsrhelper.hxx4
-rw-r--r--sw/source/core/unocore/unocrsrhelper.cxx57
-rw-r--r--sw/source/core/unocore/unotbl.cxx19
3 files changed, 80 insertions, 0 deletions
diff --git a/sw/inc/unocrsrhelper.hxx b/sw/inc/unocrsrhelper.hxx
index 4515e7d127ec..deb31f16621d 100644
--- a/sw/inc/unocrsrhelper.hxx
+++ b/sw/inc/unocrsrhelper.hxx
@@ -125,6 +125,10 @@ namespace SwUnoCursorHelper
const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& RedlineProperties )
throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+ void makeTableCellRedline( SwTableBox& rTableBox, const OUString& RedlineType,
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& RedlineProperties )
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
/// @param bTableMode: attributes should be applied to a table selection
void SetCrsrAttr(SwPaM & rPam, const SfxItemSet & rSet,
diff --git a/sw/source/core/unocore/unocrsrhelper.cxx b/sw/source/core/unocore/unocrsrhelper.cxx
index bbbb640f880f..ad11ac168e0c 100644
--- a/sw/source/core/unocore/unocrsrhelper.cxx
+++ b/sw/source/core/unocore/unocrsrhelper.cxx
@@ -1349,6 +1349,63 @@ void makeTableRowRedline( SwTableLine& rTableLine,
throw lang::IllegalArgumentException();
}
+void makeTableCellRedline( SwTableBox& rTableBox,
+ const OUString& rRedlineType,
+ const uno::Sequence< beans::PropertyValue >& rRedlineProperties )
+ throw (lang::IllegalArgumentException, uno::RuntimeException)
+{
+ IDocumentRedlineAccess* pRedlineAccess = rTableBox.GetFrmFmt()->GetDoc();
+
+ RedlineType_t eType;
+ if ( rRedlineType == "TableCellInsert" )
+ {
+ eType = nsRedlineType_t::REDLINE_TABLE_CELL_INSERT;
+ }
+ else if ( rRedlineType == "TableCellDelete" )
+ {
+ eType = nsRedlineType_t::REDLINE_TABLE_CELL_DELETE;
+ }
+ else
+ {
+ throw lang::IllegalArgumentException();
+ }
+
+ comphelper::SequenceAsHashMap aPropMap( rRedlineProperties );
+ uno::Any aAuthorValue;
+ aAuthorValue = aPropMap.getUnpackedValueOrDefault("RedlineAuthor", aAuthorValue);
+ sal_uInt16 nAuthor = 0;
+ OUString sAuthor;
+ if( aAuthorValue >>= sAuthor )
+ nAuthor = pRedlineAccess->InsertRedlineAuthor(sAuthor);
+
+ OUString sComment;
+ uno::Any aCommentValue;
+ aCommentValue = aPropMap.getUnpackedValueOrDefault("RedlineComment", aCommentValue);
+
+ SwRedlineData aRedlineData( eType, nAuthor );
+ if( aCommentValue >>= sComment )
+ aRedlineData.SetComment( sComment );
+
+ ::util::DateTime aStamp;
+ uno::Any aDateTimeValue;
+ aDateTimeValue = aPropMap.getUnpackedValueOrDefault("RedlineDateTime", aDateTimeValue);
+ if( aDateTimeValue >>= aStamp )
+ {
+ aRedlineData.SetTimeStamp(
+ DateTime( Date( aStamp.Day, aStamp.Month, aStamp.Year ), Time( aStamp.Hours, aStamp.Minutes, aStamp.Seconds ) ) );
+ }
+
+ SwTableCellRedline* pRedline = new SwTableCellRedline( aRedlineData, rTableBox );
+ RedlineMode_t nPrevMode = pRedlineAccess->GetRedlineMode( );
+ pRedline->SetExtraData( NULL );
+
+ pRedlineAccess->SetRedlineMode_intern(nsRedlineMode_t::REDLINE_ON);
+ bool bRet = pRedlineAccess->AppendTableCellRedline( pRedline, false );
+ pRedlineAccess->SetRedlineMode_intern( nPrevMode );
+ if( !bRet )
+ throw lang::IllegalArgumentException();
+}
+
SwAnyMapHelper::~SwAnyMapHelper()
{
AnyMapHelper_t::iterator aIt = begin();
diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx
index b265dd6a3ab1..da659fd238b6 100644
--- a/sw/source/core/unocore/unotbl.cxx
+++ b/sw/source/core/unocore/unotbl.cxx
@@ -1087,6 +1087,25 @@ void SwXCell::setPropertyValue(const OUString& rPropertyName, const uno::Any& aV
SvxFrameDirectionItem aItem( eDir, RES_FRAMEDIR);
pBox->GetFrmFmt()->SetFmtAttr(aItem);
}
+ else if ( rPropertyName == "TableRedlineParams" )
+ {
+ // Get the table row properties
+ uno::Sequence< beans::PropertyValue > tableCellProperties;
+ tableCellProperties = aValue.get< uno::Sequence< beans::PropertyValue > >();
+ comphelper::SequenceAsHashMap aPropMap( tableCellProperties );
+ OUString sRedlineType;
+ uno::Any sRedlineTypeValue;
+ sRedlineTypeValue = aPropMap.getUnpackedValueOrDefault("RedlineType", sRedlineTypeValue);
+ if( sRedlineTypeValue >>= sRedlineType )
+ {
+ // Create a 'Table Cell Redline' object
+ SwUnoCursorHelper::makeTableCellRedline( *pBox, sRedlineType, tableCellProperties);
+ }
+ else
+ {
+ throw beans::UnknownPropertyException(OUString( "No redline type property: " ), static_cast < cppu::OWeakObject * > ( this ) );
+ }
+ }
else
{
const SfxItemPropertySimpleEntry* pEntry =