sd/qa/unit/tiledrendering/tiledrendering.cxx | 19 +++++++++ sd/sdi/drviewsh.sdi | 5 ++ sd/source/ui/annotations/annotationmanager.cxx | 44 ++++++++++++++++++++- sd/source/ui/annotations/annotationmanagerimpl.hxx | 1 4 files changed, 68 insertions(+), 1 deletion(-)
New commits: commit 1b4ce7cd8e4c1e1732ee6434cadd29cb23583a54 Author: Pranav Kant <pran...@collabora.co.uk> Date: Tue Feb 21 16:05:02 2017 +0530 sd lok: Support editing annotations by id + unit test Change-Id: Id4faf59eab8c72a2d78157bca15a5e07f9622dde Reviewed-on: https://gerrit.libreoffice.org/34512 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: pranavk <pran...@collabora.co.uk> diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index d142921..379f2fe 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -1647,6 +1647,25 @@ void SdTiledRenderingTest::testCommentCallbacks() CPPUNIT_ASSERT(!aView1.m_aCommentCallbackResult.get<std::string>("parthash").empty()); CPPUNIT_ASSERT(!aView2.m_aCommentCallbackResult.get<std::string>("parthash").empty()); + // Edit this annotation now + aArgs = comphelper::InitPropertySequence( + { + {"Id", uno::makeAny(OUString::number(nComment1))}, + {"Text", uno::makeAny(OUString("Edited comment"))}, + }); + comphelper::dispatchCommand(".uno:EditAnnotation", aArgs); + Scheduler::ProcessEventsToIdle(); + + // We received a LOK_CALLBACK_COMMENT callback with comment 'Modify' action + CPPUNIT_ASSERT_EQUAL(std::string("Modify"), aView1.m_aCommentCallbackResult.get<std::string>("action")); + CPPUNIT_ASSERT_EQUAL(std::string("Modify"), aView2.m_aCommentCallbackResult.get<std::string>("action")); + CPPUNIT_ASSERT_EQUAL(nComment1, aView1.m_aCommentCallbackResult.get<int>("id")); + CPPUNIT_ASSERT_EQUAL(nComment1, aView2.m_aCommentCallbackResult.get<int>("id")); + CPPUNIT_ASSERT(!aView1.m_aCommentCallbackResult.get<std::string>("parthash").empty()); + CPPUNIT_ASSERT(!aView2.m_aCommentCallbackResult.get<std::string>("parthash").empty()); + CPPUNIT_ASSERT_EQUAL(std::string("Edited comment"), aView1.m_aCommentCallbackResult.get<std::string>("text")); + CPPUNIT_ASSERT_EQUAL(std::string("Edited comment"), aView2.m_aCommentCallbackResult.get<std::string>("text")); + // Delete the comment aArgs = comphelper::InitPropertySequence( { diff --git a/sd/sdi/drviewsh.sdi b/sd/sdi/drviewsh.sdi index 0ae6eea..553843a 100644 --- a/sd/sdi/drviewsh.sdi +++ b/sd/sdi/drviewsh.sdi @@ -154,6 +154,11 @@ interface ImpressEditView : DrawView ExecMethod = ExecuteAnnotation; StateMethod = GetAnnotationState; ] + SID_EDIT_POSTIT + [ + ExecMethod = ExecuteAnnotation; + StateMethod = GetAnnotationState; + ] SID_REPLYTO_POSTIT [ ExecMethod = ExecuteAnnotation; diff --git a/sd/source/ui/annotations/annotationmanager.cxx b/sd/source/ui/annotations/annotationmanager.cxx index e4d593f..9edbb70 100644 --- a/sd/source/ui/annotations/annotationmanager.cxx +++ b/sd/source/ui/annotations/annotationmanager.cxx @@ -354,6 +354,9 @@ void AnnotationManagerImpl::ExecuteAnnotation(SfxRequest& rReq ) case SID_DELETEALLBYAUTHOR_POSTIT: ExecuteDeleteAnnotation( rReq ); break; + case SID_EDIT_POSTIT: + ExecuteEditAnnotation( rReq ); + break; case SID_PREVIOUS_POSTIT: case SID_NEXT_POSTIT: SelectNextAnnotation( rReq.GetSlot() == SID_NEXT_POSTIT ); @@ -434,6 +437,41 @@ void AnnotationManagerImpl::ExecuteDeleteAnnotation(SfxRequest& rReq) UpdateTags(); } +void AnnotationManagerImpl::ExecuteEditAnnotation(SfxRequest& rReq) +{ + const SfxItemSet* pArgs = rReq.GetArgs(); + Reference< XAnnotation > xAnnotation; + sal_uInt32 nId = 0; + OUString sText; + if (pArgs) + { + const SfxPoolItem* pPoolItem = nullptr; + if (SfxItemState::SET == pArgs->GetItemState(SID_ATTR_POSTIT_ID, true, &pPoolItem)) + { + nId = static_cast<const SvxPostItIdItem*>(pPoolItem)->GetValue().toUInt32(); + xAnnotation = GetAnnotationById(nId); + } + if (SfxItemState::SET == pArgs->GetItemState(SID_ATTR_POSTIT_TEXT, true, &pPoolItem)) + sText = static_cast<const SfxStringItem*>(pPoolItem)->GetValue(); + + if (xAnnotation.is() && !sText.isEmpty()) + { + // TODO: Not allow other authors to change others' comments ? + Reference<XText> xText(xAnnotation->getTextRange()); + xText->setString(sText); + + const SfxViewShell* pViewShell = SfxViewShell::GetFirst(); + while (pViewShell) + { + lcl_CommentNotification(CommentNotificationType::Modify, pViewShell, xAnnotation); + pViewShell = SfxViewShell::GetNext(*pViewShell); + } + } + } + + UpdateTags(true); +} + void AnnotationManagerImpl::InsertAnnotation(const OUString& rText) { SdPage* pPage = GetCurrentPage(); @@ -719,9 +757,13 @@ void AnnotationManagerImpl::GetAnnotationState(SfxItemSet& rSet) Reference< XAnnotation > xAnnotation; GetSelectedAnnotation( xAnnotation ); - // Don't disable SID_DELETE_POSTIT slot in case of LOK + // Don't disable these slot in case of LOK, as postit doesn't need to + // selected before doing an operation on it in LOK if( (!xAnnotation.is() && !comphelper::LibreOfficeKit::isActive()) || bReadOnly ) + { rSet.DisableItem( SID_DELETE_POSTIT ); + rSet.DisableItem( SID_EDIT_POSTIT ); + } SdPage* pPage = nullptr; diff --git a/sd/source/ui/annotations/annotationmanagerimpl.hxx b/sd/source/ui/annotations/annotationmanagerimpl.hxx index 03e05cf..242a7fb 100644 --- a/sd/source/ui/annotations/annotationmanagerimpl.hxx +++ b/sd/source/ui/annotations/annotationmanagerimpl.hxx @@ -66,6 +66,7 @@ public: void ExecuteInsertAnnotation(SfxRequest& rReq); void ExecuteDeleteAnnotation(SfxRequest& rReq); + void ExecuteEditAnnotation(SfxRequest& rReq); void ExecuteReplyToAnnotation(SfxRequest& rReq); void SelectNextAnnotation(bool bForeward); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits