20 #include <config_wasm_strip.h>
22 #include <boost/property_tree/json_parser.hpp>
59 #include <strings.hrc>
77 #include <LibreOfficeKit/LibreOfficeKitEnums.h>
84 #define POSTIT_INITIAL_ANCHOR_DISTANCE 20
86 #define POSTIT_SPACE_BETWEEN 8
87 #define POSTIT_MINIMUMSIZE_WITH_META 60
88 #define POSTIT_SCROLL_SIDEBAR_HEIGHT 20
91 #define MAX_LOOP_COUNT 50
100 bool comp_pos(
const std::unique_ptr<SwSidebarItem>& a,
const std::unique_ptr<SwSidebarItem>& b)
103 SwPosition aPosAnchorA = a->GetAnchorPosition();
104 SwPosition aPosAnchorB = b->GetAnchorPosition();
106 bool aAnchorAInFooter =
false;
107 bool aAnchorBInFooter =
false;
111 aAnchorAInFooter =
true;
113 aAnchorBInFooter =
true;
118 if( aAnchorAInFooter && !aAnchorBInFooter )
122 else if( !aAnchorAInFooter && aAnchorBInFooter )
129 return aPosAnchorA < aPosAnchorB;
138 boost::property_tree::ptree aAnnotation;
139 aAnnotation.put(
"action", (nType == CommentNotificationType::Add ?
"Add" :
140 (nType == CommentNotificationType::Remove ?
"Remove" :
141 (nType == CommentNotificationType::Modify ?
"Modify" :
142 (nType == CommentNotificationType::Resolve ?
"Resolve" :
"???")))));
143 aAnnotation.put(
"id", nPostItId);
144 if (nType != CommentNotificationType::Remove && pItem !=
nullptr)
152 aRect.
Pos().getX() + aRect.
SSize().Width(),
153 aRect.
Pos().getY() + aRect.
SSize().Height());
161 std::vector<OString> aRects;
164 const SwRect rect(aRange.getMinX(), aRange.getMinY(), aRange.getWidth(), aRange.getHeight());
165 aRects.push_back(rect.SVRect().toString());
170 aAnnotation.put(
"parent", pWin->
CalcParent());
171 aAnnotation.put(
"author", pField->
GetPar1().toUtf8().getStr());
172 aAnnotation.put(
"text", pField->
GetPar2().toUtf8().getStr());
173 aAnnotation.put(
"resolved", pField->
GetResolved() ?
"true" :
"false");
175 aAnnotation.put(
"anchorPos", aSVRect.toString());
176 aAnnotation.put(
"textRange", sRects.getStr());
179 boost::property_tree::ptree aTree;
180 aTree.add_child(
"comment", aAnnotation);
181 std::stringstream aStream;
182 boost::property_tree::write_json(aStream, aTree);
183 std::string aPayload = aStream.str();
195 , mpWrtShell(
mpView->GetDocShell()->GetWrtShell())
196 , mpEditWin(&
mpView->GetEditWin())
198 , mbWaitingForCalcRects(
false)
199 , mpActivePostIt(nullptr)
205 , mbIsShowAnchor(
false )
214 SW_MOD()->GetRedlineAuthor();
245 bool bRemoved =
false;
251 EndListening(const_cast<SfxBroadcaster&>(*(*it)->GetBroadcaster()));
252 std::unique_ptr<SwSidebarItem>
p = std::move(*it);
256 p->mpPostIt.disposeAndClear();
289 if ( postItField->GetBroadcaster() == pItem )
296 if (
auto pSwFormatField = dynamic_cast< SwFormatField *>( pItem ))
298 mvPostItFields.push_back(std::make_unique<SwAnnotationItem>(*pSwFormatField, bFocus));
301 assert(dynamic_cast< const SwFormatField *>( pItem ) &&
"Mgr::InsertItem: seems like new stuff was added");
303 return pAnnotationItem;
310 [&pBroadcast](
const std::unique_ptr<SwSidebarItem>& pField) {
return pField->GetBroadcaster() == pBroadcast; });
313 std::unique_ptr<SwSidebarItem>
p = std::move(*
i);
322 p->mpPostIt.disposeAndClear();
330 if (
const SfxEventHint* pSfxEventHint = dynamic_cast<const SfxEventHint*>(&rHint) )
332 if ( pSfxEventHint->GetEventId() == SfxEventHintId::SwEventLayoutFinished )
341 else if (
const SwFormatFieldHint * pFormatHint = dynamic_cast<const SwFormatFieldHint*>(&rHint) )
344 switch ( pFormatHint->Which() )
368 OSL_FAIL(
"Inserted field not in document!" );
390 lcl_CommentNotification(
mpView, CommentNotificationType::Remove,
nullptr, pPostItField->
GetPostItId());
397 if (pFormatHint->GetView()==
mpView)
407 if ( pFormatField == postItField->GetBroadcaster() )
409 if (postItField->mpPostIt)
411 postItField->mpPostIt->SetPostItText();
419 lcl_CommentNotification(
mpView, CommentNotificationType::Modify, postItField.get(), 0);
421 lcl_CommentNotification(
mpView, CommentNotificationType::Resolve, postItField.get(), 0);
434 if ( pFormatField == postItField->GetBroadcaster() )
436 if (postItField->mpPostIt)
439 sal_uInt16 nLangWhichId = 0;
447 postItField->mpPostIt->SetLanguage(
449 postItField->GetFormatField().GetField()->GetLanguage(),
464 case SfxHintId::ModeChanged:
474 case SfxHintId::DocChanged:
486 case SfxHintId::SwSplitNodeOperation:
492 case SfxHintId::Dying:
497 OSL_FAIL(
"Notification for removed SwFormatField was not sent!");
518 if ( &rBC == postItField->GetBroadcaster() )
520 if (postItField->mpPostIt)
522 if (postItField->mpPostIt->IsResolved() &&
528 postItField->mpPostIt->GrabFocus();
534 postItField->mbFocus =
true;
550 bool bChange =
false;
551 bool bRepair =
false;
560 OSL_FAIL(
"PostIt is not in doc or other wrong use");
572 const ::sw::mark::IMark* pAnnotationMark =
573 pTextAnnotationField !=
nullptr ? pTextAnnotationField->
GetAnnotationMark() :
nullptr;
574 if ( pAnnotationMark !=
nullptr )
597 if (mvPostItFields.size()>1 )
598 std::stable_sort(mvPostItFields.begin(), mvPostItFields.end(), comp_pos);
601 for (
auto const& pItem : mvPostItFields)
621 if (aPageNum >
mPages.size())
625 for (
tools::ULong j=0; j<aPageNum - nNumberOfPages; ++j)
628 mPages[aPageNum-1]->mvSidebarItems.push_back(pItem.get());
661 if (postItField->mbShow && postItField->mpPostIt && postItField->mpPostIt->HasScrollbar())
673 if (lContainerSize < lPageSize)
675 mPages.reserve(lPageSize);
679 else if (lContainerSize > lPageSize)
681 for (
int i=
mPages.size()-1;
i >= lPageSize;--
i)
687 for (
auto const& page :
mPages)
689 page->mvSidebarItems.clear();
691 page->bScrollbar =
false;
709 bool bUpdate =
false;
710 for (std::unique_ptr<SwPostItPageItem>& pPage :
mPages)
713 if (!pPage->mvSidebarItems.empty())
715 std::vector<SwAnnotationWin*> aVisiblePostItList;
720 for (
auto const& pItem : pPage->mvSidebarItems)
732 : pPage->mPageRect.Left() + 350;
742 pPage->mPageRect.Right() - 350;
788 aVisiblePostItList.push_back(pPostIt);
798 if ((!aVisiblePostItList.empty()) &&
ShowNotes())
800 bool bOldScrollbar = pPage->bScrollbar;
802 pPage->bScrollbar =
LayoutByPage(aVisiblePostItList, pPage->mPageRect.SVRect(), lNeededHeight);
804 pPage->bScrollbar =
false;
805 if (!pPage->bScrollbar)
813 tools::Long lOffset = -1 * nScrollSize * (aVisiblePostItList.size() - aAvailableHeight / nScrollSize);
814 if (pPage->lOffset < lOffset)
815 pPage->lOffset = lOffset;
817 bUpdate = (bOldScrollbar != pPage->bScrollbar) || bUpdate;
824 for (
auto const& visiblePostIt : aVisiblePostItList)
826 if (pPage->lOffset != 0)
827 visiblePostIt->TranslateTopPosition(pPage->lOffset);
829 bool bBottom =
mpEditWin->
PixelToLogic(
Point(0,visiblePostIt->VirtualPos().Y()+visiblePostIt->VirtualSize().Height())).Y() <= (pPage->mPageRect.Bottom()-aSidebarheight);
831 if ( bBottom && bTop )
841 visiblePostIt->ShowNote();
850 visiblePostIt->ShowAnchorOnly(
Point( pPage->mPageRect.Left(),
851 pPage->mPageRect.Top()));
853 visiblePostIt->ShowAnchorOnly(
Point( pPage->mPageRect.Right(),
854 pPage->mPageRect.Top()));
859 visiblePostIt->ShowAnchorOnly(
Point(pPage->mPageRect.Left(),
860 pPage->mPageRect.Bottom()));
862 visiblePostIt->ShowAnchorOnly(
Point(pPage->mPageRect.Right(),
863 pPage->mPageRect.Bottom()));
865 OSL_ENSURE(pPage->bScrollbar,
"SwPostItMgr::LayoutByPage(): note overlaps, but bScrollbar is not true");
871 for (
auto const& visiblePostIt : aVisiblePostItList)
873 visiblePostIt->SetPosAndSize();
876 bool bOldScrollbar = pPage->bScrollbar;
877 pPage->bScrollbar =
false;
878 bUpdate = (bOldScrollbar != pPage->bScrollbar) || bUpdate;
881 for (
auto const& visiblePostIt : aVisiblePostItList)
885 if (visiblePostIt->GetSidebarItem().mbPendingLayout)
886 lcl_CommentNotification(
mpView, CommentNotificationType::Add, &visiblePostIt->GetSidebarItem(), 0);
887 else if (visiblePostIt->IsAnchorRectChanged())
889 lcl_CommentNotification(
mpView, CommentNotificationType::Modify, &visiblePostIt->GetSidebarItem(), 0);
890 visiblePostIt->ResetAnchorRectChanged();
895 visiblePostIt->GetSidebarItem().mbPendingLayout =
false;
900 if (pPage->bScrollbar)
902 pPage->bScrollbar =
false;
909 bool bRepair =
false;
914 OSL_FAIL(
"PostIt is not in doc!");
919 if (postItField->mpPostIt)
921 postItField->mpPostIt->HideNote();
922 if (postItField->mpPostIt->HasChildPathFocus())
925 postItField->mpPostIt->GrabFocusToDocument();
948 if (
mPages[aPage-1]->mvSidebarItems.empty() )
950 OSL_FAIL(
"Notes SidePane painted but no rects and page lists calculated!");
954 auto aItem =
mPages[aPage-1]->mvSidebarItems.end();
956 OSL_ENSURE ((*aItem)->mpPostIt,
"BorderOverPageBorder: NULL postIt, should never happen");
957 if ((*aItem)->mpPostIt)
961 return aEndValue <=
mPages[aPage-1]->mPageRect.Bottom()-aSidebarheight;
969 assert(nPage <
mPages.size());
970 if (nPage >=
mPages.size())
972 for (
auto const& pItem :
mPages[nPage]->mvSidebarItems)
984 for (
const std::unique_ptr<SwSidebarItem>& pItem :
mvPostItFields)
995 aMapMode.SetOrigin(aMapMode.GetOrigin() + aOffset);
1000 pPostIt->
PaintTile(rRenderContext, aRectangle);
1002 rRenderContext.
Pop();
1010 OSL_ENSURE((lScroll %
GetScrollSize() )==0,
"SwPostItMgr::Scroll: scrolling by wrong value");
1018 for (
auto const& item :
mPages[aPage-1]->mvSidebarItems)
1029 if ( bBottom && bTop)
1052 mPages[aPage-1]->lOffset += lScroll;
1063 if (!
mPages[aPage-1]->bScrollbar)
1069 if ( !(bBottom && bTop))
1076 assert(nScrollSize);
1077 const tools::Long lScroll = bBottom ? (aDiff + ( nScrollSize - (aDiff % nScrollSize))) : (aDiff - (nScrollSize + (aDiff % nScrollSize)));
1086 std::vector<SwPostItPageItem*>::size_type
n=0;
1087 for (
auto const& page :
mPages)
1089 for (
auto const& item : page->mvSidebarItems)
1091 if (item->mpPostIt==pPostIt)
1102 if (!aNoteRect.IsEmpty())
1112 return (
mPages[aPage-1]->lOffset != 0);
1118 default:
return false;
1149 const tools::Long lVisibleHeight = lBottomBorder - lTopBorder;
1150 const size_t nPostItListSize = aVisiblePostItList.size();
1152 bool bScrollbars =
false;
1155 if (nPostItListSize > 0 && lVisibleHeight < lNeededHeight)
1164 for (
auto const& visiblePostIt : aVisiblePostItList)
1165 visiblePostIt->SetSize(
Size(visiblePostIt->VirtualSize().getWidth(),visiblePostIt->GetMinimumSizeWithMeta()));
1169 for (
auto const& visiblePostIt : aVisiblePostItList)
1171 if ( visiblePostIt->VirtualSize().getHeight() > lAverageHeight)
1172 visiblePostIt->SetSize(
Size(visiblePostIt->VirtualSize().getWidth(),lAverageHeight));
1178 if (aVisiblePostItList.size()>1)
1188 for(
auto i = aVisiblePostItList.begin();
i != aVisiblePostItList.end() ; ++
i)
1190 auto aNextPostIt =
i;
1193 if (aNextPostIt != aVisiblePostItList.end())
1195 lTranslatePos = ( (*i)->VirtualPos().Y() + (*i)->VirtualSize().Height()) - (*aNextPostIt)->VirtualPos().Y();
1196 if (lTranslatePos > 0)
1203 if ( (lSpaceUsed <= (*i)->VirtualPos().Y()) || (
i==aVisiblePostItList.begin()))
1206 if ( ((*i)->VirtualPos().Y()- lTranslatePos -
GetSpaceBetween()) > lTopBorder)
1208 if ((*aNextPostIt)->IsFollow())
1211 (*i)->TranslateTopPosition(-1*(lTranslatePos+GetSpaceBetween()));
1215 tools::Long lMoveUp = (*i)->VirtualPos().Y() - lTopBorder;
1216 (*i)->TranslateTopPosition(-1* lMoveUp);
1217 if ((*aNextPostIt)->IsFollow())
1218 (*aNextPostIt)->TranslateTopPosition( (lTranslatePos+
ANCHORLINE_WIDTH) - lMoveUp);
1220 (*aNextPostIt)->TranslateTopPosition( (lTranslatePos+GetSpaceBetween()) - lMoveUp);
1226 if ((*aNextPostIt)->IsFollow())
1229 (*aNextPostIt)->TranslateTopPosition(lTranslatePos+GetSpaceBetween());
1235 if (
i==aVisiblePostItList.begin())
1237 tools::Long lMoveDown = lTopBorder - (*i)->VirtualPos().Y();
1241 (*i)->TranslateTopPosition( lMoveDown);
1245 if ( (*aNextPostIt)->IsFollow() )
1253 auto aPrevPostIt =
i;
1255 lTranslatePos = ( (*aPrevPostIt)->VirtualPos().Y() + (*aPrevPostIt)->VirtualSize().Height() ) - (*i)->VirtualPos().Y();
1256 if (lTranslatePos > 0)
1259 if ( ((*i)->VirtualPos().Y()+ (*i)->VirtualSize().Height()+lTranslatePos) < lBottomBorder)
1261 if ( (*i)->IsFollow() )
1264 (*i)->TranslateTopPosition(lTranslatePos+GetSpaceBetween());
1268 (*i)->TranslateTopPosition(lBottomBorder - ((*i)->VirtualPos().Y()+ (*i)->VirtualSize().Height()) );
1275 if (!bScrollbars && ((*i)->VirtualPos().Y()+ (*i)->VirtualSize().Height() > lBottomBorder) )
1278 (*i)->TranslateTopPosition(lBottomBorder - ((*i)->VirtualPos().Y()+ (*i)->VirtualSize().Height()));
1286 OSL_FAIL(
"PostItMgr::Layout(): We are looping forever");
1294 auto i = aVisiblePostItList.begin();
1295 lTranslatePos = lTopBorder - (*i)->VirtualPos().Y();
1296 if (lTranslatePos>0)
1300 lTranslatePos = lBottomBorder - ((*i)->VirtualPos().Y()+ (*i)->VirtualSize().Height());
1301 if (lTranslatePos<0)
1303 (*i)->TranslateTopPosition(lTranslatePos);
1314 std::vector<SwFormatField*> vFormatFields;
1316 for(
auto pFormatField : vFormatFields)
1317 InsertItem(pFormatField, bCheckExistence, bFocus);
1327 EndListening( *const_cast<SfxBroadcaster*>(postItField->GetBroadcaster()) );
1328 postItField->mpPostIt.disposeAndClear();
1329 postItField.reset();
1331 mvPostItFields.clear();
1342 virtual bool operator()(
const SwFormatField* pField)
const = 0;
1343 virtual ~FilterFunctor() {}
1346 class IsPostitField :
public FilterFunctor
1355 class IsPostitFieldWithAuthorOf :
public FilterFunctor
1359 explicit IsPostitFieldWithAuthorOf(
const OUString &rAuthor)
1360 : m_sAuthor(rAuthor)
1371 class IsPostitFieldWithPostitId :
public FilterFunctor
1373 sal_uInt32 m_nPostItId;
1375 explicit IsPostitFieldWithPostitId(sal_uInt32 nPostItId)
1376 : m_nPostItId(nPostItId)
1387 class IsFieldNotDeleted :
public FilterFunctor
1391 FilterFunctor
const& m_rNext;
1395 const FilterFunctor & rNext)
1402 if (!m_rNext(pField))
1419 std::vector<std::unique_ptr<SwSidebarItem>>& m_aSidebarItems;
1420 std::vector<const SwFormatField*> m_aFormatFields;
1422 FilterFunctor& m_rFilter;
1430 bool bAllInvalidated =
false;
1434 bAllInvalidated = pField ==
nullptr;
1435 if (!bAllInvalidated && m_rFilter(pField))
1438 m_aFormatFields.erase(std::remove(m_aFormatFields.begin(), m_aFormatFields.end(), pField), m_aFormatFields.end());
1444 bAllInvalidated = pField ==
nullptr;
1445 if (!bAllInvalidated && m_rFilter(pField))
1448 m_aFormatFields.push_back(pField);
1452 if (bAllInvalidated)
1459 FieldDocWatchingStack(std::vector<std::unique_ptr<SwSidebarItem>>& in,
SwDocShell &rDocShell, FilterFunctor& rFilter)
1460 : m_aSidebarItems(
in)
1461 , m_rDocShell(rDocShell)
1462 , m_rFilter(rFilter)
1469 EndListeningToAllFields();
1470 m_aFormatFields.clear();
1471 m_aFormatFields.reserve(m_aSidebarItems.size());
1472 for (
auto const& p : m_aSidebarItems)
1475 if (!m_rFilter(&rField))
1478 m_aFormatFields.push_back(&rField);
1481 void EndListeningToAllFields()
1483 for (
auto const& pField : m_aFormatFields)
1488 virtual ~FieldDocWatchingStack()
override
1490 EndListeningToAllFields();
1495 if (m_aFormatFields.empty())
1499 m_aFormatFields.pop_back();
1520 IsPostitFieldWithAuthorOf aFilter(rAuthor);
1522 IsFieldNotDeleted aFilter2(rIDRA, aFilter);
1549 IsPostitFieldWithPostitId aFilter(nPostItId);
1551 IsFieldNotDeleted aFilter2(rIDRA, aFilter);
1573 IsPostitFieldWithPostitId aFilter(nPostItId);
1597 IsPostitFieldWithPostitId aFilter(nPostItId);
1622 IsPostitFieldWithPostitId aFilter(nPostItId);
1647 IsPostitField aFilter;
1649 IsFieldNotDeleted aFilter2(rIDRA, aFilter);
1676 pWin = postItField->mpPostIt;
1688 aDlgAttr.
Put(aEditAttr);
1691 sal_uInt16 nRet = pDlg->Execute();
1710 if (!postItField->mpPostIt)
1712 OutlinerView* pOLV = postItField->mpPostIt->GetOutlinerView();
1728 postItField->mpPostIt->UpdateData();
1743 if ( postItField->mpPostIt && (postItField->mpPostIt->GetAuthor() == rAuthor) )
1745 postItField->mbShow =
false;
1746 postItField->mpPostIt->HideNote();
1757 postItField->mbShow =
false;
1758 if (postItField->mpPostIt)
1759 postItField->mpPostIt->HideNote();
1767 postItField->mbShow =
true;
1776 if ( postItField->GetBroadcaster() == pBroadcaster)
1777 return postItField->mpPostIt;
1786 if ( postItField->GetFormatField().GetField() == pField )
1787 return postItField->mpPostIt.get();
1796 if ( static_cast<const SwPostItField*>(postItField->GetFormatField().GetField())->GetPostItId() == nPostItId )
1797 return postItField->mpPostIt.get();
1808 [&aPostIt](
const std::unique_ptr<SwSidebarItem>& pField) {
return pField->mpPostIt == aPostIt; });
1812 auto iNextPostIt =
i;
1830 if ( (*iNextPostIt)->mpPostIt == aPostIt)
1832 return (*iNextPostIt)->mpPostIt;
1840 for (
auto const& pPage :
mPages)
1842 for(
auto b = pPage->mvSidebarItems.begin(); b!= pPage->mvSidebarItems.end(); ++b)
1848 bool bFollow = (aNext != pPage->mvSidebarItems.end()) && (*aNext)->mpPostIt->IsFollow();
1849 if ( pPage->bScrollbar || bFollow )
1856 if (aNext == pPage->mvSidebarItems.end())
1865 OSL_FAIL(
"SwPostItMgr::GetNextBorder(): We have to find a next border here");
1937 if (
mPages.size() > aPage-1)
1954 OSL_ENSURE(
mPages.size()>nPageNum-1,
"SwPostitMgr:: page container size wrong");
1958 if (aRect.Contains(aPoint))
1962 if (
mPages[nPageNum-1]->bScrollbar)
1982 for (
const std::unique_ptr<SwSidebarItem>& pItem :
mvPostItFields)
2037 if (aRectBottom.Contains(aPoint))
2045 else if (aRectTop.
Contains(aPoint))
2065 pFirstPostIt = postItField->mpPostIt;
2087 for (
const std::unique_ptr<SwPostItPageItem>& pPage :
mPages)
2089 for (
auto const& item : pPage->mvSidebarItems)
2092 if ( item->mbShow && item->mpPostIt && item->mpPostIt->Anchor() )
2097 aAnchorPosY =
mpEditWin->
LogicToPixel(
Point(0,static_cast<tools::Long>(item->mpPostIt->Anchor()->GetSixthPosition().getY()))).
Y() + 1;
2098 item->mpPostIt->SetPosPixel(
Point(aAnchorPosX,aAnchorPosY));
2123 nZoom = fScaleX * 100;
2153 static const Color aArrayNormal[] = {
2158 return aArrayNormal[ aAuthorIndex %
SAL_N_ELEMENTS( aArrayNormal )];
2168 static const Color aArrayLight[] = {
2173 return aArrayLight[ aAuthorIndex %
SAL_N_ELEMENTS( aArrayLight )];
2183 static const Color aArrayAnchor[] = {
2188 return aArrayAnchor[ aAuthorIndex %
SAL_N_ELEMENTS( aArrayAnchor )];
2212 mpView->AttrChangedNotify(
nullptr);
2222 OSL_FAIL(
"Reentrance problem in Layout Manager!");
2223 mbWaitingForCalcRects =
false;
2228 if (CalcRects() || mbLayout)
2238 if ( postItField->mpPostIt )
2239 postItField->mpPostIt->Rescale();
2275 if ( postItField->mpPostIt )
2276 postItField->mpPostIt->SetSpellChecking();
2282 if ( postItField->mpPostIt )
2283 postItField->mpPostIt->SetReadonly(
mbReadOnly );
2289 if ( postItField->mpPostIt )
2290 postItField->mpPostIt->CheckMetaText();
2317 sal_uInt16 aResult = 0;
2417 #if !ENABLE_WASM_STRIP_ACCESSIBILITY
2448 #endif // ENABLE_WASM_STRIP_ACCESSIBILITY
2463 const sal_Int32 nIndex )
2476 std::vector< vcl::Window* >* pChildren )
2485 for (
auto const& pPage :
mPages)
2487 for(
auto b = pPage->mvSidebarItems.begin(); b!= pPage->mvSidebarItems.end(); ++b)
2489 if ((*b)->mpPostIt->IsResolved())
2491 (*b)->mpPostIt->SetResolved(
true);
2492 (*b)->mpPostIt->GetSidebarItem().mbShow = visible;
2504 for (
auto const& pPage :
mPages)
2506 for(
auto b = pPage->mvSidebarItems.begin(); b!= pPage->mvSidebarItems.end(); ++b)
2508 if((*b)->mpPostIt->GetTopReplyNote() == topNote) {
2509 (*b)->mpPostIt->SetResolved(resolved);
virtual Point GetPosPixel() const
vcl::RenderContext * GetOut() const
SfxViewFrame * GetViewFrame() const
#define LINK(Instance, Class, Member)
const Fraction & GetScaleX() const
Instances of SwFields and those derived from it occur 0 to n times.
sal_Int32 GetMetaHeight() const
bool IsHit(const Point &aPointPixel)
constexpr::Color COL_AUTHOR1_DARK(0xC6, 0x92, 0x00)
Base class of the Writer layout elements.
bool mbWaitingForCalcRects
constexpr::Color COL_AUTHOR4_NORMAL(0xE4, 0xD2, 0xF5)
void Right(const tools::Long nRight)
constexpr::Color COL_AUTHOR9_DARK(0xD1, 0x76, 0x00)
Marks a position in the document model.
vcl::Window * GetSidebarWinForFrameByIndex(const SwFrame &rFrame, const sal_Int32 nIndex)
void SetViewState(::sw::sidebarwindows::ViewState bViewState)
void HideActiveSidebarWin()
virtual void DrawSelChanged() override
void FormatAll(const SfxItemSet &rNewAttr)
constexpr::Color COL_AUTHOR7_LIGHT(0xF2, 0xFE, 0xB5)
constexpr::Color COL_AUTHOR2_LIGHT(0xE9, 0xF2, 0xFF)
const SwStartNode * FindFooterStartNode() const
virtual ~SwPostItMgr() override
OUString toISO8601(const css::util::DateTime &rDateTime)
const SwRect & GetAnchorRect() const
virtual const SfxItemSet * GetOutputItemSet() const =0
sal_Int32 GetInitialAnchorDistance() const
#define POSTIT_INITIAL_ANCHOR_DISTANCE
void CollectPostIts(std::vector< SwFormatField * > &rvFormatFields, IDocumentRedlineAccess const &rIDRA, bool HideRedlines)
virtual SwFieldType * GetFieldType(SwFieldIds nResId, const OUString &rName, bool bDbFieldMatching) const =0
bool isTiledAnnotations()
void Left(const tools::Long nLeft)
IMPL_LINK_NOARG(SwPostItMgr, CalcHdl, void *, void)
constexpr::Color COL_AUTHOR8_LIGHT(0xE2, 0xEA, 0xF1)
bool HasScrollbars() const
sal_Int32 StartSearchAndReplace(const SvxSearchItem &rSearchItem)
void SetSearchOptions(const i18nutil::SearchOptions2 &rOpt)
constexpr::Color COL_AUTHOR2_NORMAL(0xD8, 0xE8, 0xFF)
static const AllSettings & GetSettings()
void Push(vcl::PushFlags nFlags=vcl::PushFlags::ALL)
std::size_t mRedlineAuthor
bool IsMapModeEnabled() const
virtual Size GetSizePixel() const
tools::ULong getPageInfo(SwRect &rPageFrame, const SwRootFrame *, const Point &)
sal_Int32 GetMinimumSizeWithoutMeta() const
#define POSTIT_MINIMUMSIZE_WITH_META
sw::annotation::SwAnnotationWin * GetSidebarWin(const SfxBroadcaster *pBroadcaster) const
VclPtr< sw::annotation::SwAnnotationWin > mpActivePostIt
virtual OUString GetPar1() const override
Author.
SwUndoId EndUndo(SwUndoId eUndoId=SwUndoId::EMPTY, const SwRewriter *pRewriter=nullptr)
Closes parenthesis of nUndoId, not used by UI.
constexpr::Color COL_AUTHOR1_NORMAL(0xFF, 0xFF, 0x9E)
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
const MapMode & GetMapMode() const
const IDocumentSettingAccess & getIDocumentSettingAccess() const
Provides access to the document setting interface.
constexpr::Color COL_AUTHOR2_DARK(0x06, 0x46, 0xA2)
void SetActiveSidebarWin(sw::annotation::SwAnnotationWin *p)
vcl::Window * IsHitSidebarWindow(const Point &rPointLogic)
Get the matching window that is responsible for handling mouse events of rPointLogic, if any.
sal_Int32 GetParagraphCount() const
tools::Long getLayoutHeight(const SwRootFrame *pRoot)
void Pos(const Point &rNew)
bool mPositionFromCommentAnchor
If true, the overlay arrow points to the comment anchor, otherwise it points to the commented frame...
static Color GetColorAnchor(std::size_t aAuthorIndex)
bool HasActiveAnnotationWin() const
constexpr::Color COL_AUTHOR8_NORMAL(0xD3, 0xDE, 0xE8)
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE_CJK(EE_CHAR_START+15)
SwSidebarItem * InsertItem(SfxBroadcaster *pItem, bool bCheckExistence, bool bFocus)
constexpr::Color COL_AUTHOR3_LIGHT(0xE2, 0xFA, 0xCF)
void EnableMapMode(bool bEnable=true)
Of course Writer needs its own rectangles.
bool IsHitWindow(const Point &rPointLogic)
Is there a matching sub-widget inside this sidebar widget for rPointLogic?
void setTiledPainting(bool bTiledPainting)
void ToggleResolvedForThread()
The root element of a Writer document layout.
bool LayoutByPage(std::vector< sw::annotation::SwAnnotationWin * > &aVisiblePostItList, const tools::Rectangle &rBorder, tools::Long lNeededHeight)
SwWrtShell & GetWrtShell() const
const SwPostItField * GetPostItField() const
tools::Long GetPostItTextHeight()
void ShowHideResolvedNotes(bool visible)
OUString SwResId(TranslateId aId)
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
constexpr::Color COL_AUTHOR3_NORMAL(0xDA, 0xF8, 0xC1)
void PaintTile(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect)
void InvalidatePosOrSize(const SwFrame *pFrame, const SdrObject *pObj, vcl::Window *pWindow, const SwRect &rOldFrame)
std::unique_ptr< sw::sidebarwindows::SwFrameSidebarWinContainer > mpFrameSidebarWinContainer
constexpr::Color COL_AUTHOR9_NORMAL(0xFF, 0xE2, 0xB9)
#define COL_NOTES_SIDEPANE_ARROW_DISABLED
void SetSidebarPosition(sw::sidebarwindows::SidebarPosition eSidebarPosition)
const SwView & GetView() const
void DisconnectSidebarWinFromFrame(const SwFrame &rFrame, sw::annotation::SwAnnotationWin &rSidebarWin)
SwAccessibleMap * GetAccessibleMap()
constexpr::Color COL_AUTHOR4_LIGHT(0xEF, 0xE4, 0xF8)
OString join(std::string_view rSeparator, const std::vector< OString > &rSequence)
const Fraction & GetScaleY() const
constexpr OUStringLiteral IsReadOnly(u"IsReadOnly")
void DrawNotesForPage(OutputDevice *pOutDev, sal_uInt32 nPage)
SW_DLLPUBLIC void UpdateDataOnActiveSidebarWin()
void EnableMapMode(bool bEnable=true)
void SelectRange(sal_Int32 nFirst, sal_Int32 nCount)
constexpr sal_uInt16 KEY_PAGEUP
static Color GetColorDark(std::size_t aAuthorIndex)
virtual void libreOfficeKitViewCallback(int nType, const char *pPayload) const override
void ExecViewOptions(SfxRequest &)
constexpr::Color COL_AUTHOR6_LIGHT(0xE6, 0xFA, 0xFA)
const IDocumentRedlineAccess & getIDocumentRedlineAccess() const
Provides access to the document redline interface.
void PrepareView(bool bIgnoreCount=false)
#define POSTIT_SPACE_BETWEEN
void MakeVisible(const SwRect &)
void PaintTile(OutputDevice &rRenderContext)
void SetBackward(bool bNewBackward)
void GetAllSidebarWinForFrame(const SwFrame &rFrame, std::vector< vcl::Window * > *pChildren)
#define SAL_N_ELEMENTS(arr)
sal_Int32 GetSpaceBetween() const
constexpr::Color COL_AUTHOR6_DARK(0x00, 0x80, 0x80)
css::util::DateTime GetUNODateTime() const
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
SwDoc * GetDoc()
returns Doc. But be careful!
void ConnectSidebarWinToFrame(const SwFrame &rFrame, const SwFormatField &rFormatField, sw::annotation::SwAnnotationWin &rSidebarWin)
sal_uInt32 GetPostItId() const
#define POSTIT_SCROLL_SIDEBAR_HEIGHT
const DateTime & GetDateTime() const
void DeleteCommentThread(sal_uInt32 nPostItId)
void ToggleResolved(sal_uInt32 nPostItId)
Point LogicToPixel(const Point &rLogicPt) const
void SetAttribs(const SfxItemSet &)
::sw::mark::IMark * GetAnnotationMark() const
void DeleteActiveSidebarWin()
void Scroll(const tools::Long lScroll, const tools::ULong aPage)
sal_uInt16 SearchReplace(const SwFormatField &pField, const i18nutil::SearchOptions2 &rSearchOptions, bool bSrchForward)
FieldShadowState mShadowState
bool BorderOverPageBorder(tools::ULong aPage) const
constexpr::Color COL_AUTHOR3_DARK(0x57, 0x9D, 0x1C)
const MapMode & GetMapMode() const
bool IsResolvedPostIts() const
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
void AddPostIts(bool bCheckExistence=true, bool bFocus=true)
SwUndoId StartUndo(SwUndoId eUndoId=SwUndoId::EMPTY, const SwRewriter *pRewriter=nullptr)
Undo: set up Undo parenthesis, return nUndoId of this parenthesis.
void MakeVisible(const sw::annotation::SwAnnotationWin *pPostIt)
constexpr::Color COL_AUTHOR7_DARK(0x8C, 0x84, 0x00)
void AddRule(SwUndoArg eWhat, const OUString &rWith)
void AutoScroll(const sw::annotation::SwAnnotationWin *pPostIt, const tools::ULong aPage)
constexpr sal_uInt16 KEY_PAGEDOWN
void SetVirtualPosSize(const Point &aPoint, const Size &aSize)
SvtScriptType GetScriptTypeOfLanguage(LanguageType nLang)
Outliner * GetOutliner() const
static SwAbstractDialogFactory * Create()
tools::ULong GetSidebarBorderWidth(bool bPx=false) const
const sal_Int16 mnEventId
void Focus(const SfxBroadcaster &rBC)
constexpr::Color COL_AUTHOR8_DARK(0x35, 0x55, 0x6B)
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
Point PixelToLogic(const Point &rDevicePt) const
void SSize(const Size &rNew)
tools::ULong GetSidebarWidth(bool bPx=false) const
VclPtr< SwEditWin > mpEditWin
tools::ULong mnPageNumber
sal_uInt32 CalcParent()
Calculate parent postit id of current annotation window.
SwDocShell * GetDocShell()
const SwPostItField * mpShadowField
constexpr::Color COL_AUTHOR1_LIGHT(0xFF, 0xFF, 0xC3)
bool HasFrameConnectedSidebarWins(const SwFrame &rFrame)
SwFieldType * GetTyp() const
constexpr::Color COL_AUTHOR7_NORMAL(0xED, 0xFC, 0xA3)
constexpr::Color COL_AUTHOR4_DARK(0x69, 0x2B, 0x9D)
::sw::sidebarwindows::AnchorOverlayObject * Anchor()
SW_DLLPUBLIC bool HasActiveSidebarWin() const
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
bool ScrollbarHit(const tools::ULong aPage, const Point &aPoint)
std::optional< OutlinerParaObject > mpAnswer
void PreparePageContainer()
ESelection GetSelection() const
void ExecuteFormatAllDialog(SwView &rView)
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE_CTL(EE_CHAR_START+16)
void A11yDispose(const SwFrame *pFrame, const SdrObject *pObj, vcl::Window *pWindow, bool bRecursive=false, bool bCanSkipInvisible=true)
void DrawForPage(OutputDevice *pDev, const Point &rPos)
void SetFollow(bool bIsFollow)
constexpr::Color COL_AUTHOR5_NORMAL(0xFE, 0xCD, 0xD0)
void ChangeSidebarItem(SwSidebarItem const &rSidebarItem)
bool IsMapModeEnabled() const
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint)
void TranslateTopPosition(const tools::Long aAmount)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
sal_uInt16 GetNumPages() const
void Bottom(const tools::Long nBottom)
SwNodeOffset mnStartNodeIdx
void AssureStdModeAtShell()
void ShowAnchorOnly(const Point &aPoint)
void GrabFocusOnActiveSidebarWin()
void SetSelection(const ESelection &)
void InitAnswer(OutlinerParaObject const &rText)
sal_uInt16 Replace(SvxSearchItem const *pItem)
void ToggleInsModeOnActiveSidebarWin()
bool GotoField(const SwFormatField &rField)
virtual bool IsTextEdit() const final override
weld::Window * GetFrameWeld() const
sal_Int32 GetSidebarScrollerHeight() const
static Color GetColorLight(std::size_t aAuthorIndex)
const std::vector< basegfx::B2DRange > & GetAnnotationTextRanges() const
virtual void ImplCommit() override
bool IsFieldDeletedInModel(IDocumentRedlineAccess const &rIDRA, SwTextField const &rTextField)
sal_Int32 GetScrollSize() const
constexpr tools::Long Height() const
sw::sidebarwindows::SidebarPosition meSidebarPosition
const SwViewOption * GetViewOptions() const
#define COL_NOTES_SIDEPANE_ARROW_ENABLED
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
bool ArrowEnabled(sal_uInt16 aDirection, tools::ULong aPage) const
bool ShowScrollbar(const tools::ULong aPage) const
void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
void SetChangeTracking(const SwPostItHelper::SwLayoutStatus aStatus, const Color &aColor)
void UpdateResolvedStatus(const sw::annotation::SwAnnotationWin *topNote)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
sal_Int32 GetMinimumSizeWithMeta() const
void Top(const tools::Long nTop)
sal_uInt16 GetZoom() const
void EndTextEdit()
Deletes object if required.
size_t IsObjSelected() const
#define EE_TEXTPOS_MAX_COUNT
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE(EE_CHAR_START+14)
bool IsHideRedlines() const
Replacement for sw::DocumentRedlineManager::GetRedlineFlags() (this is layout-level redline hiding)...
void setSidebarChanged(SwRootFrame *pRoot, bool bBrowseMode)
virtual bool get(DocumentSettingId id) const =0
Return the specified document setting.
constexpr::Color COL_AUTHOR5_LIGHT(0xFF, 0xE3, 0xE5)
sw::annotation::SwAnnotationWin * GetActiveSidebarWin()
OutlinerView * GetOutlinerView()
std::vector< std::unique_ptr< SwPostItPageItem > > mPages
tools::Rectangle GetTopScrollRect(const tools::ULong aPage) const
sw::annotation::SwAnnotationWin * GetNextPostIt(sal_uInt16 aDirection, sw::annotation::SwAnnotationWin *aPostIt)
tools::Long mbLayoutHeight
SwPostItMgr(SwView *aDoc)
reference_type * get() const
virtual OUString GetPar2() const override
Text.
void SetReadonly(bool bSet)
void SetPosSizePixelRect(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const SwRect &aAnchorRect, const tools::Long PageBorder)
Color GetArrowColor(sal_uInt16 aDirection, tools::ULong aPage) const
void(* f)(TrueTypeTable *)
tools::Long GetNextBorder()
bool IsShowAnchor() const
bool IsShowHiddenChar(bool bHard=false) const
::sw::sidebarwindows::ShadowOverlayObject * Shadow()
virtual SdrView * GetDrawView() const override
virtual VclPtr< SfxAbstractTabDialog > CreateSwCharDlg(weld::Window *pParent, SwView &pVw, const SfxItemSet &rCoreSet, SwCharDlgMode nDialogMode, const OUString *pFormatStr=nullptr)=0
#define EE_PARA_MAX_COUNT
constexpr::Color COL_AUTHOR9_LIGHT(0xFF, 0xE7, 0xC7)
void SetShadowState(const SwPostItField *pField, bool bCursor=true)
void StartAllAction()
For all views of this document.
constexpr::Color COL_AUTHOR6_NORMAL(0xD2, 0xF6, 0xF6)
SwRootFrame * GetLayout() const
static SfxItemPool * GetAnnotationPool(SwView const &rV)
SwLayoutStatus getLayoutInfos(SwLayoutInfo &o_rInfo, const SwPosition &rAnchorPos, const sw::mark::IMark *pAnnotationMark=nullptr)
virtual void Notify(const css::uno::Sequence< OUString > &aPropertyNames) override
void Height(tools::Long nNew)
void ToggleResolvedForThread(sal_uInt32 nPostItId)
std::vector< std::unique_ptr< SwSidebarItem > > mvPostItFields
sw::annotation::SwAnnotationWin * GetAnnotationWin(const SwPostItField *pField) const
const SwStartNode * FindFootnoteStartNode() const
bool IsViewLocked() const
void RemoveItem(SfxBroadcaster *pBroadcast)
sal_uInt16 FinishSearchReplace(const i18nutil::SearchOptions2 &rSearchOptions, bool bSrchForward)
bool IsSelFrameMode() const
bool m_bDetectedRangeSegmentation false
constexpr::Color COL_AUTHOR5_DARK(0xC5, 0x00, 0x0B)
bool CheckForRemovedPostIts()
tools::Rectangle GetBottomScrollRect(const tools::ULong aPage) const