[Libreoffice-commits] core.git: desktop/source include/svx svx/sdi svx/source sw/inc sw/sdi sw/source

Pranav Kant pranavk at collabora.co.uk
Fri Jan 27 12:55:05 UTC 2017


 desktop/source/lib/init.cxx              |    1 
 include/svx/postattr.hxx                 |   26 +++++++++++++++++++
 include/svx/svxids.hrc                   |    1 
 svx/sdi/svxitems.sdi                     |    1 
 svx/source/items/postattr.cxx            |   17 ++++++++++++
 sw/inc/PostItMgr.hxx                     |    4 ++
 sw/sdi/_textsh.sdi                       |    5 +++
 sw/sdi/swriter.sdi                       |    2 -
 sw/source/uibase/docvw/AnnotationWin.cxx |    5 +++
 sw/source/uibase/docvw/PostItMgr.cxx     |   10 +++++++
 sw/source/uibase/shells/annotsh.cxx      |    1 
 sw/source/uibase/shells/textfld.cxx      |   42 ++++++++++++++++++++++++++++++-
 12 files changed, 113 insertions(+), 2 deletions(-)

New commits:
commit 6e463381b43d888a632e652a873f2b5abe7e5458
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Sun Jan 22 19:39:47 2017 +0530

    lok: Allow to reply to comments using postit id
    
    Change-Id: Ic6aaa3066923d62f197bc2b0e02e8049c9d7cd2c
    Reviewed-on: https://gerrit.libreoffice.org/33612
    Reviewed-by: pranavk <pranavk at collabora.co.uk>
    Tested-by: pranavk <pranavk at collabora.co.uk>

diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 2403ff6..b0de4b9 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -1383,6 +1383,7 @@ static void doc_iniUnoCommands ()
         OUString(".uno:Paste"),
         OUString(".uno:SelectAll"),
         OUString(".uno:InsertAnnotation"),
+        OUString(".uno:ReplyComment"),
         OUString(".uno:InsertRowsBefore"),
         OUString(".uno:InsertRowsAfter"),
         OUString(".uno:InsertColumnsBefore"),
diff --git a/include/svx/postattr.hxx b/include/svx/postattr.hxx
index 2c1c246..dbe378f 100644
--- a/include/svx/postattr.hxx
+++ b/include/svx/postattr.hxx
@@ -19,6 +19,7 @@
 #ifndef INCLUDED_SVX_POSTATTR_HXX
 #define INCLUDED_SVX_POSTATTR_HXX
 
+#include <svl/intitem.hxx>
 #include <svl/stritem.hxx>
 #include <svx/svxdllapi.h>
 
@@ -112,6 +113,31 @@ public:
     }
 };
 
+// class SvxPostItIdItem -----------------------------------------------
+
+
+/*
+The internal id of a note
+*/
+
+class SVX_DLLPUBLIC SvxPostItIdItem: public SfxUInt32Item
+{
+public:
+    static SfxPoolItem* CreateDefault();
+
+    SvxPostItIdItem( sal_uInt16 nWhich  );
+
+    SvxPostItIdItem( sal_uInt32 rId, sal_uInt16 nWhich  );
+
+    virtual SfxPoolItem*    Clone( SfxItemPool *pPool = nullptr ) const override;
+
+    inline SvxPostItIdItem& operator=( const SvxPostItIdItem& rId )
+    {
+        SetValue( rId.GetValue() );
+        return *this;
+    }
+};
+
 
 #endif
 
diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc
index ead4ae0..9a7fc71 100644
--- a/include/svx/svxids.hrc
+++ b/include/svx/svxids.hrc
@@ -235,6 +235,7 @@
 #define SID_ATTR_POSTIT_AUTHOR                          ( SID_SVX_START + 44 )
 #define SID_ATTR_POSTIT_DATE                            ( SID_SVX_START + 45 )
 #define SID_ATTR_POSTIT_TEXT                            ( SID_SVX_START + 46 )
+#define SID_ATTR_POSTIT_ID                              ( SID_SVX_START + 47 )
 // free
 
 // CAUTION! Range <48 .. 49> used by EditEngine (!)
diff --git a/svx/sdi/svxitems.sdi b/svx/sdi/svxitems.sdi
index 1e73fc1..5a047e7 100644
--- a/svx/sdi/svxitems.sdi
+++ b/svx/sdi/svxitems.sdi
@@ -223,6 +223,7 @@ item BYTE                   SvxPaperBinItem;
 item String                 SvxPostItAuthorItem;
 item String                 SvxPostItDateItem;
 item String                 SvxPostItTextItem;
+item INT32                  SvxPostItIdItem;
 item FontItalic             SvxPostureItem;  // enum
 item BOOL                   SvxPrintItem;
 item UINT16                 SvxPropSizeItem;        // derived from UInt16Item
diff --git a/svx/source/items/postattr.cxx b/svx/source/items/postattr.cxx
index e0d6848..1426a1b 100644
--- a/svx/source/items/postattr.cxx
+++ b/svx/source/items/postattr.cxx
@@ -26,6 +26,7 @@
 SfxPoolItem* SvxPostItAuthorItem::CreateDefault() { return new SvxPostItAuthorItem(0); }
 SfxPoolItem* SvxPostItDateItem::CreateDefault() { return new SvxPostItDateItem(0); }
 SfxPoolItem* SvxPostItTextItem::CreateDefault() { return new SvxPostItTextItem(0); }
+SfxPoolItem* SvxPostItIdItem::CreateDefault() { return new SvxPostItIdItem(0); }
 
 SvxPostItAuthorItem::SvxPostItAuthorItem( sal_uInt16 _nWhich )
 {
@@ -144,4 +145,20 @@ SfxPoolItem* SvxPostItTextItem::Clone( SfxItemPool * ) const
     return new SvxPostItTextItem( *this );
 }
 
+
+SvxPostItIdItem::SvxPostItIdItem( sal_uInt16 _nWhich )
+{
+    SetWhich( _nWhich );
+}
+
+SvxPostItIdItem::SvxPostItIdItem( sal_uInt32 rId, sal_uInt16 _nWhich ) :
+    SfxUInt32Item( _nWhich, rId )
+{
+}
+
+SfxPoolItem* SvxPostItIdItem::Clone( SfxItemPool * ) const
+{
+    return new SvxPostItIdItem( *this );
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index 97448fd..f27c1e4 100644
--- a/sw/inc/PostItMgr.hxx
+++ b/sw/inc/PostItMgr.hxx
@@ -156,6 +156,7 @@ class SwPostItMgr: public SfxListener
         bool                            mbDeleteNote;
         FieldShadowState                mShadowState;
         OutlinerParaObject*             mpAnswer;
+        OUString                        maAnswerText;
         bool                            mbIsShowAnchor;
 
         // data structure to collect the <SwSidebarWin> instances for certain <SwFrame> instances.
@@ -237,6 +238,7 @@ class SwPostItMgr: public SfxListener
         Color GetArrowColor(sal_uInt16 aDirection,unsigned long aPage) const;
 
         sw::annotation::SwAnnotationWin* GetAnnotationWin(const SwPostItField* pField) const;
+        sw::annotation::SwAnnotationWin* GetAnnotationWin(const sal_uInt32 nPostItId) const;
 
         sw::sidebarwindows::SwSidebarWin* GetNextPostIt( sal_uInt16 aDirection,
                                                          sw::sidebarwindows::SwSidebarWin* aPostIt);
@@ -265,6 +267,8 @@ class SwPostItMgr: public SfxListener
 
         void                RegisterAnswer(OutlinerParaObject* pAnswer) { mpAnswer = pAnswer;}
         OutlinerParaObject* IsAnswer() {return mpAnswer;}
+        void                RegisterAnswerText(const OUString& aAnswerText) { maAnswerText = aAnswerText; }
+        const OUString&     GetAnswerText() { return maAnswerText; }
         void CheckMetaText();
 
         sal_uInt16 Replace(SvxSearchItem* pItem);
diff --git a/sw/sdi/_textsh.sdi b/sw/sdi/_textsh.sdi
index 88a1f9c..388690d 100644
--- a/sw/sdi/_textsh.sdi
+++ b/sw/sdi/_textsh.sdi
@@ -919,6 +919,11 @@ interface BaseText
         ExecMethod = ExecField ;
         StateMethod = StateField;
     ]
+    FN_REPLY
+    [
+        ExecMethod = ExecField;
+        StateMethod = StateField;
+    ]
     FN_DELETE_COMMENT
     [
         ExecMethod = ExecField ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index 4de6cbb..9f10c6d 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -7063,7 +7063,7 @@ SfxBoolItem SelectionModeDefault FN_SELECTION_MODE_DEFAULT
 ]
 
 SfxVoidItem ReplyComment FN_REPLY
-()
+(SvxPostItIdItem Id SID_ATTR_POSTIT_ID,SvxPostItTextItem Text SID_ATTR_POSTIT_TEXT)
 [
     AutoUpdate = FALSE,
     FastCall = FALSE,
diff --git a/sw/source/uibase/docvw/AnnotationWin.cxx b/sw/source/uibase/docvw/AnnotationWin.cxx
index d8cca6f..5ecc03a 100644
--- a/sw/source/uibase/docvw/AnnotationWin.cxx
+++ b/sw/source/uibase/docvw/AnnotationWin.cxx
@@ -41,6 +41,7 @@
 #include <editeng/editeng.hxx>
 #include <editeng/editobj.hxx>
 
+#include <comphelper/lok.hxx>
 #include <docufld.hxx>
 #include <txtfld.hxx>
 #include <ndtxt.hxx>
@@ -240,6 +241,10 @@ VclPtr<MenuButton> SwAnnotationWin::CreateMenuButton()
 
 void SwAnnotationWin::InitAnswer(OutlinerParaObject* pText)
 {
+    // If tiled annotations is off in lok case, skip adding additional reply text.
+    if (comphelper::LibreOfficeKit::isActive() && !comphelper::LibreOfficeKit::isTiledAnnotations())
+        return;
+
     //collect our old meta data
     SwSidebarWin* pWin = Mgr().GetNextPostIt(KEY_PAGEUP, this);
     const SvtSysLocale aSysLocale;
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
index 0e9a01e..209a9d9 100644
--- a/sw/source/uibase/docvw/PostItMgr.cxx
+++ b/sw/source/uibase/docvw/PostItMgr.cxx
@@ -1624,6 +1624,16 @@ sw::annotation::SwAnnotationWin* SwPostItMgr::GetAnnotationWin(const SwPostItFie
     return nullptr;
 }
 
+sw::annotation::SwAnnotationWin* SwPostItMgr::GetAnnotationWin(const sal_uInt32 nPostItId) const
+{
+    for(const_iterator i = mvPostItFields.begin(); i != mvPostItFields.end() ; ++i)
+    {
+        if ( static_cast<const SwPostItField*>((*i)->GetFormatField().GetField())->GetPostItId() == nPostItId )
+            return dynamic_cast<sw::annotation::SwAnnotationWin*>((*i)->pPostIt.get());
+    }
+    return nullptr;
+}
+
 SwSidebarWin* SwPostItMgr::GetNextPostIt( sal_uInt16 aDirection,
                                           SwSidebarWin* aPostIt )
 {
diff --git a/sw/source/uibase/shells/annotsh.cxx b/sw/source/uibase/shells/annotsh.cxx
index 4e3fe77..5ddc121 100644
--- a/sw/source/uibase/shells/annotsh.cxx
+++ b/sw/source/uibase/shells/annotsh.cxx
@@ -56,6 +56,7 @@
 #include <editeng/contouritem.hxx>
 #include <editeng/postitem.hxx>
 #include <editeng/frmdiritem.hxx>
+#include <svx/postattr.hxx>
 #include <svx/svdoutl.hxx>
 #include <svl/whiter.hxx>
 #include <svl/cjkoptions.hxx>
diff --git a/sw/source/uibase/shells/textfld.cxx b/sw/source/uibase/shells/textfld.cxx
index 30f668b..b5e2c46 100644
--- a/sw/source/uibase/shells/textfld.cxx
+++ b/sw/source/uibase/shells/textfld.cxx
@@ -17,6 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <AnnotationWin.hxx>
 #include <comphelper/lok.hxx>
 #include <chrdlgmodes.hxx>
 #include <hintids.hxx>
@@ -369,6 +370,37 @@ void SwTextShell::ExecField(SfxRequest &rReq)
                     GetView().GetPostItMgr()->Hide( pNoteItem->GetValue() );
             }
             break;
+            case FN_REPLY:
+            {
+                const SvxPostItIdItem* pIdItem = rReq.GetArg<SvxPostItIdItem>(SID_ATTR_POSTIT_ID);
+                if (pIdItem && pIdItem->GetValue())
+                {
+                    SwFieldType* pType = rSh.GetDoc()->getIDocumentFieldsAccess().GetFieldType(RES_POSTITFLD, OUString(), false);
+                    SwIterator<SwFormatField,SwFieldType> aIter( *pType );
+                    SwFormatField* pSwFormatField = aIter.First();
+                    while( pSwFormatField )
+                    {
+                        if ( static_cast<SwPostItField*>(pSwFormatField->GetField())->GetPostItId() == pIdItem->GetValue())
+                        {
+                            sw::annotation::SwAnnotationWin* pWin = GetView().GetPostItMgr()->GetAnnotationWin(pIdItem->GetValue());
+                            if (pWin)
+                            {
+                                const SvxPostItTextItem* pTextItem = rReq.GetArg<SvxPostItTextItem>(SID_ATTR_POSTIT_TEXT);
+                                OUString sText;
+                                if ( pTextItem )
+                                    sText = pTextItem->GetValue();
+
+                                GetView().GetPostItMgr()->RegisterAnswerText(sText);
+                                pWin->ExecuteCommand(nSlot);
+                            }
+
+                            break;
+                        }
+                        pSwFormatField = aIter.Next();
+                    }
+                }
+            }
+            break;
             case FN_POSTIT:
             {
                 SwPostItField* pPostIt = dynamic_cast<SwPostItField*>(aFieldMgr.GetCurField());
@@ -390,6 +422,13 @@ void SwTextShell::ExecField(SfxRequest &rReq)
                     if ( pTextItem )
                         sText = pTextItem->GetValue();
 
+                    // If we have a text already registered for answer, use that
+                    if (GetView().GetPostItMgr()->IsAnswer() && !GetView().GetPostItMgr()->GetAnswerText().isEmpty())
+                    {
+                        sText = GetView().GetPostItMgr()->GetAnswerText();
+                        GetView().GetPostItMgr()->RegisterAnswerText(OUString());
+                    }
+
                     if ( rSh.HasSelection() && !rSh.IsTableMode() )
                     {
                         rSh.KillPams();
@@ -753,12 +792,13 @@ void SwTextShell::StateField( SfxItemSet &rSet )
                 rSet.DisableItem(nWhich);
             break;
 
+        case FN_REPLY:
         case FN_POSTIT :
         case FN_JAVAEDIT :
             {
                 bool bCurField = false;
                 pField = rSh.GetCurField();
-                if(nWhich == FN_POSTIT)
+                if(nWhich == FN_POSTIT || nWhich == FN_REPLY)
                     bCurField = pField && pField->GetTyp()->Which() == RES_POSTITFLD;
                 else
                     bCurField = pField && pField->GetTyp()->Which() == RES_SCRIPTFLD;


More information about the Libreoffice-commits mailing list