summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--desktop/source/lib/init.cxx1
-rw-r--r--include/svx/postattr.hxx26
-rw-r--r--include/svx/svxids.hrc1
-rw-r--r--svx/sdi/svxitems.sdi1
-rw-r--r--svx/source/items/postattr.cxx17
-rw-r--r--sw/inc/PostItMgr.hxx4
-rw-r--r--sw/sdi/_textsh.sdi5
-rw-r--r--sw/sdi/swriter.sdi2
-rw-r--r--sw/source/uibase/docvw/AnnotationWin.cxx5
-rw-r--r--sw/source/uibase/docvw/PostItMgr.cxx10
-rw-r--r--sw/source/uibase/shells/annotsh.cxx1
-rw-r--r--sw/source/uibase/shells/textfld.cxx42
12 files changed, 113 insertions, 2 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 2403ff6c8f27..b0de4b9ae2c2 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 2c1c2466d7c2..dbe378fcdf27 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 ead4ae0ac6ff..9a7fc71d885c 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 1e73fc11bc8c..5a047e703b84 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 e0d68484c600..1426a1be1b05 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 97448fdd513d..f27c1e4b1d7b 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 88a1f9cf2eba..388690dfa3cc 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 4de6cbba33d0..9f10c6d6a6e6 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 d8cca6fad7bd..5ecc03a0d930 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 0e9a01e31e5f..209a9d940614 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 4e3fe77f6dae..5ddc121db500 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 30f668b0e646..b5e2c465c281 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;