[Libreoffice-commits] core.git: sd/qa sd/sdi sd/source

Pranav Kant pranavk at collabora.co.uk
Tue Feb 21 13:29:30 UTC 2017


 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 <pranavk at 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 <ci at libreoffice.org>
    Reviewed-by: pranavk <pranavk at 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);


More information about the Libreoffice-commits mailing list