22 #include <osl/thread.h>
34 #include <uiitems.hxx>
42 #include <drawdoc.hxx>
43 #include <content.hxx>
47 #include <section.hxx>
51 #include <navicfg.hxx>
60 #include <strings.hrc>
61 #include <com/sun/star/text/XTextSectionsSupplier.hpp>
62 #include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp>
63 #include <com/sun/star/text/XTextTablesSupplier.hpp>
64 #include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
65 #include <com/sun/star/text/XDocumentIndex.hpp>
66 #include <com/sun/star/text/XBookmarksSupplier.hpp>
67 #include <com/sun/star/text/XTextEmbeddedObjectsSupplier.hpp>
68 #include <com/sun/star/text/XTextFramesSupplier.hpp>
81 #include <bitmaps.hlst>
95 using namespace ::
std;
112 const sal_uInt32 TOGGLE_OUTLINE_CONTENT_VISIBILITY = 1512;
113 const sal_uInt32 HIDE_OUTLINE_CONTENT_VISIBILITY = 1513;
114 const sal_uInt32 SHOW_OUTLINE_CONTENT_VISIBILITY = 1514;
116 constexpr
char NAVI_BOOKMARK_DELIM =
'\x01';
121 :
public o3tl::sorted_vector<std::unique_ptr<SwContent>, o3tl::less_uniqueptr_to<SwContent>,
122 o3tl::find_partialorder_ptrequals>
154 bool lcl_IsUiVisibleBookmark(const ::sw::mark::IMark* pMark)
159 size_t lcl_InsertURLFieldContent(
166 const SwGetINetAttrs::size_type
nCount {aArr.size()};
167 for( SwGetINetAttrs::size_type n = 0;
n <
nCount; ++
n )
178 pMember->
insert( std::move(pCnt) );
225 STR_CONTENT_TYPE_OUTLINE,
226 STR_CONTENT_TYPE_TABLE,
227 STR_CONTENT_TYPE_FRAME,
228 STR_CONTENT_TYPE_GRAPHIC,
229 STR_CONTENT_TYPE_OLE,
230 STR_CONTENT_TYPE_BOOKMARK,
231 STR_CONTENT_TYPE_REGION,
232 STR_CONTENT_TYPE_URLFIELD,
233 STR_CONTENT_TYPE_REFERENCE,
234 STR_CONTENT_TYPE_INDEX,
235 STR_CONTENT_TYPE_POSTIT,
236 STR_CONTENT_TYPE_DRAWOBJECT
241 STR_CONTENT_TYPE_SINGLE_OUTLINE,
242 STR_CONTENT_TYPE_SINGLE_TABLE,
243 STR_CONTENT_TYPE_SINGLE_FRAME,
244 STR_CONTENT_TYPE_SINGLE_GRAPHIC,
245 STR_CONTENT_TYPE_SINGLE_OLE,
246 STR_CONTENT_TYPE_SINGLE_BOOKMARK,
247 STR_CONTENT_TYPE_SINGLE_REGION,
248 STR_CONTENT_TYPE_SINGLE_URLFIELD,
249 STR_CONTENT_TYPE_SINGLE_REFERENCE,
250 STR_CONTENT_TYPE_SINGLE_INDEX,
251 STR_CONTENT_TYPE_SINGLE_POSTIT,
252 STR_CONTENT_TYPE_SINGLE_DRAWOBJECT
257 bool checkVisibilityChanged(
261 if(rSwContentArrA.
size() != rSwContentArrB.
size())
266 for(
size_t a(0);
a < rSwContentArrA.
size();
a++)
268 if(rSwContentArrA[a]->IsInvisible() != rSwContentArrB[
a]->IsInvisible())
281 m_sContentTypeName(
SwResId(STR_CONTENT_TYPE_ARY[static_cast<
int>(nType)])),
282 m_sSingleContentTypeName(
SwResId(STR_CONTENT_TYPE_SINGLE_ARY[static_cast<
int>(nType)])),
284 m_nContentType(nType),
285 m_nOutlineLevel(nLevel),
307 for(
size_t j = 0; j < nOutlineCount; ++j)
351 &lcl_IsUiVisibleBookmark);
360 std::unique_ptr<SwContentArr> pOldMember;
378 const OUString& rSectionName =
385 pParentFormat = pParentFormat->
GetParent();
388 std::unique_ptr<SwContent> pCnt(
new SwRegionContent(
this, rSectionName,
393 if( !pFormat->
GetInfo( aAskItem ) &&
395 pCnt->SetInvisible();
405 if(
nullptr != pbInvalidateWindow)
411 *pbInvalidateWindow = checkVisibilityChanged(
459 if (
const SwFormatField* pFormatField = dynamic_cast<const SwFormatField *>((*i)->GetBroadcaster()))
461 if (pFormatField->GetTextField() && pFormatField->IsFieldInDoc() &&
464 OUString sEntry = pFormatField->GetField()->GetPar2();
492 for(
size_t i=0;
i<nCount; ++
i )
496 if (!pTemp->
GetName().isEmpty())
521 if(nIndex < m_pMember->
size())
534 std::unique_ptr<SwContentArr> pOldMember;
535 size_t nOldMemberCount = 0;
537 if(
m_pMember && pbLevelOrVisibilityChanged)
540 nOldMemberCount = pOldMember->size();
542 *pbLevelOrVisibilityChanged =
false;
556 for (
size_t i = 0;
i < nOutlineCount; ++
i)
571 std::unique_ptr<SwOutlineContent> pCnt(
new SwOutlineContent(
this, aEntry,
i, nLevel,
576 if (nOldMemberCount > nPos && static_cast<SwOutlineContent*>((*pOldMember)[nPos].
get())->GetOutlineLevel() != nLevel)
577 *pbLevelOrVisibilityChanged =
true;
594 const OUString& sTableName( rTableFormat.
GetName() );
598 if( !rTableFormat.
GetInfo( aAskItem ) &&
602 m_pMember->insert(std::unique_ptr<SwContent>(pCnt));
605 if (
nullptr != pbLevelOrVisibilityChanged)
612 *pbLevelOrVisibilityChanged = checkVisibilityChanged(
652 if( !pFrameFormat->
GetInfo( aAskItem ) &&
655 m_pMember->insert(std::unique_ptr<SwContent>(pCnt));
658 if(
nullptr != pbLevelOrVisibilityChanged)
665 *pbLevelOrVisibilityChanged = checkVisibilityChanged(
678 if(lcl_IsUiVisibleBookmark(*ppBookmark))
680 const OUString& rBkmName = (*ppBookmark)->GetName();
682 std::unique_ptr<SwContent> pCnt(
new SwContent(
this, rBkmName, 0));
707 pParentFormat = pParentFormat->
GetParent();
710 std::unique_ptr<SwContent> pCnt(
new SwRegionContent(
this, sSectionName,
713 if( !pFormat->
GetInfo( aAskItem ) &&
715 pCnt->SetInvisible();
719 if(
nullptr != pbLevelOrVisibilityChanged)
726 *pbLevelOrVisibilityChanged = checkVisibilityChanged(
736 std::vector<OUString> aRefMarks;
739 for (
const auto& rRefMark : aRefMarks)
742 m_pMember->insert(std::make_unique<SwContent>(
this, rRefMark, 0));
754 for ( sal_uInt16 nTox = 0; nTox < nCount; nTox++ )
760 this, sTOXNm, nTox, *pBase);
763 pCnt->SetInvisible();
765 m_pMember->insert( std::unique_ptr<SwContent>(pCnt) );
767 if(nOldMemberCount > nPos &&
768 (*pOldMember)[nPos]->IsInvisible()
769 != pCnt->IsInvisible())
770 *pbLevelOrVisibilityChanged =
true;
783 if (
const SwFormatField* pFormatField = dynamic_cast<const SwFormatField *>((*i)->GetBroadcaster()))
785 if (pFormatField->GetTextField() && pFormatField->IsFieldInDoc() &&
788 OUString sEntry = pFormatField->GetField()->GetPar2();
814 for(
size_t i=0;
i<nCount; ++
i )
818 if (!pTemp->
GetName().isEmpty())
831 m_pMember->insert(std::unique_ptr<SwContent>(pCnt));
836 if (
nullptr != pbLevelOrVisibilityChanged)
843 *pbLevelOrVisibilityChanged = checkVisibilityChanged(
859 IDX_STR_OUTLINE_LEVEL = 0,
860 IDX_STR_DRAGMODE = 1,
861 IDX_STR_HYPERLINK = 2,
862 IDX_STR_LINK_REGION = 3,
863 IDX_STR_COPY_REGION = 4,
865 IDX_STR_ACTIVE_VIEW = 6,
868 IDX_STR_INACTIVE = 9,
869 IDX_STR_EDIT_ENTRY = 10,
870 IDX_STR_DELETE_ENTRY = 11,
871 IDX_STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY = 12,
872 IDX_STR_OUTLINE_TRACKING = 13,
873 IDX_STR_OUTLINE_TRACKING_DEFAULT = 14,
874 IDX_STR_OUTLINE_TRACKING_FOCUS = 15,
875 IDX_STR_OUTLINE_TRACKING_OFF = 16
894 STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY,
895 STR_OUTLINE_TRACKING,
896 STR_OUTLINE_TRACKING_DEFAULT,
897 STR_OUTLINE_TRACKING_FOCUS,
898 STR_OUTLINE_TRACKING_OFF
904 , m_aDropTargetHelper(*this)
906 , m_sSpace(OUString(
" "))
907 , m_sInvisible(
SwResId(STR_INVISIBLE))
908 , m_pHiddenShell(nullptr)
909 , m_pActiveShell(nullptr)
910 , m_pConfig(
SW_MOD()->GetNavigationConfig())
919 , m_bIsIdleClear(false)
920 , m_bIsLastReadOnly(false)
921 , m_bIsOutlineMoveable(true)
922 , m_bViewHasChanged(false)
925 m_xTreeView->set_size_request(aSize.Width(), aSize.Height());
964 rUnsetDragIcon =
true;
966 bool bDisallow =
true;
969 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
970 bool bEntry =
m_xTreeView->get_selected(xEntry.get());
971 if (!bEntry || lcl_IsContentType(*xEntry, *
m_xTreeView))
979 if (FillTransferData(*xContainer, nDragMode))
985 m_aDndOutlinesSelected.clear();
987 std::unique_ptr<weld::TreeIter> xScratch(
m_xTreeView->make_iterator());
993 if (!
m_xTreeView->iter_previous_sibling(*xScratch))
1002 m_aDndOutlinesSelected.push_back(
m_xTreeView->make_iterator(xEntry.get()));
1009 m_xTreeView->enable_drag_source(xContainer, nDragMode);
1015 , m_rTreeView(rTreeView)
1055 void* key =
nullptr;
1073 std::unique_ptr<weld::TreeIter> xDropEntry(
m_xTreeView->make_iterator());
1079 if (xDropEntry && lcl_IsContent(*xDropEntry, *
m_xTreeView))
1081 assert(dynamic_cast<SwContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xDropEntry).toInt64())));
1091 std::unique_ptr<weld::TreeIter> xChildEntry(
m_xTreeView->make_iterator(xDropEntry.get()));
1092 bool bChildEntry =
m_xTreeView->iter_children(*xChildEntry);
1095 m_xTreeView->copy_iterator(*xChildEntry, *xDropEntry);
1096 bChildEntry =
m_xTreeView->iter_next_sibling(*xChildEntry);
1108 else if (!lcl_IsContent(*xDropEntry, *
m_xTreeView))
1115 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xDropEntry).toInt64())));
1122 std::unique_ptr<weld::TreeIter> xNext(
m_xTreeView->make_iterator(xDropEntry.get()));
1126 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xNext).toInt64())));
1152 std::unique_ptr<weld::TreeIter> xChild(rContentTree.
make_iterator(&rEntry));
1159 if (!IsAllExpanded(rContentTree, *xChild))
1169 bool bExpand = !IsAllExpanded(rContentTree, rEntry);
1185 rPop.
set_label(OString::number(800), IsAllExpanded(rContentTree, rEntry) ?
SwResId(STR_COLLAPSEALL) :
SwResId(STR_EXPANDALL));
1193 rPop.
set_sensitive(OString::number(TOGGLE_OUTLINE_CONTENT_VISIBILITY),
false);
1194 rPop.
set_sensitive(OString::number(HIDE_OUTLINE_CONTENT_VISIBILITY),
false);
1195 rPop.
set_sensitive(OString::number(SHOW_OUTLINE_CONTENT_VISIBILITY),
false);
1208 bool bIsRoot = lcl_IsContentType(rEntry, rContentTree);
1213 if (nOutlinePos >= rOutlineNodes.
size())
1219 bool bHasContent(
false);
1220 size_t nPos = nOutlinePos;
1221 SwNode* pSttNd = rOutlineNodes[nPos];
1223 if (rOutlineNodes.
size() > nPos + 1)
1224 pEndNd = rOutlineNodes[nPos + 1];
1228 if (rNodes.
GoNext(&aIdx) != pEndNd)
1234 while (++nPos < rOutlineNodes.
size() &&
1237 pSttNd = rOutlineNodes[nPos];
1239 if (rOutlineNodes.
size() > nPos + 1)
1240 pEndNd = rOutlineNodes[nPos + 1];
1244 if (rNodes.
GoNext(&aIdx) != pEndNd)
1261 size_t nPos = nOutlinePos;
1264 SwNode* pSttNd = rOutlineNodes[nPos];
1266 if (!bIsRoot && rOutlineNodes.
size() > nPos + 1)
1267 pEndNd = rOutlineNodes[nPos + 1];
1270 if (rNodes.
GoNext(&aIdx) != pEndNd)
1276 bool bHasUnfolded(!bHasFolded);
1278 while ((++nPos < pThis->GetWrtShell()->getIDocumentOutlineNodesAccess()->getOutlineNodesCount()) &&
1282 SwNode* pSttNd = rOutlineNodes[nPos];
1284 if (rOutlineNodes.
size() > nPos + 1)
1285 pEndNd = rOutlineNodes[nPos + 1];
1288 if (rNodes.
GoNext(&aIdx) == pEndNd)
1294 bHasUnfolded =
true;
1296 if (bHasFolded && bHasUnfolded)
1300 rPop.
set_sensitive(OString::number(HIDE_OUTLINE_CONTENT_VISIBILITY), bHasUnfolded);
1301 rPop.
set_sensitive(OString::number(SHOW_OUTLINE_CONTENT_VISIBILITY), bHasFolded);
1304 bIsRoot ? rPop.
remove(OString::number(TOGGLE_OUTLINE_CONTENT_VISIBILITY))
1305 : rPop.
set_sensitive(OString::number(TOGGLE_OUTLINE_CONTENT_VISIBILITY),
true);
1310 if (rCEvt.GetCommand() != CommandEventId::ContextMenu)
1314 std::unique_ptr<weld::Menu> xPop = xBuilder->weld_menu(
"navmenu");
1316 bool bOutline(
false);
1317 std::unique_ptr<weld::Menu> xSubPop1 = xBuilder->weld_menu(
"outlinelevel");
1318 std::unique_ptr<weld::Menu> xSubPop2 = xBuilder->weld_menu(
"dragmodemenu");
1319 std::unique_ptr<weld::Menu> xSubPop3 = xBuilder->weld_menu(
"displaymenu");
1320 std::unique_ptr<weld::Menu> xSubPopOutlineTracking = xBuilder->weld_menu(
"outlinetracking");
1322 std::unique_ptr<weld::Menu> xSubPopOutlineContent = xBuilder->weld_menu(
"outlinecontent");
1324 xSubPopOutlineContent->append(OUString::number(TOGGLE_OUTLINE_CONTENT_VISIBILITY),
1325 SwResId(STR_OUTLINE_CONTENT_VISIBILITY_TOGGLE));
1326 xSubPopOutlineContent->append(OUString::number(HIDE_OUTLINE_CONTENT_VISIBILITY),
1327 SwResId(STR_OUTLINE_CONTENT_VISIBILITY_HIDE_ALL));
1328 xSubPopOutlineContent->append(OUString::number(SHOW_OUTLINE_CONTENT_VISIBILITY),
1329 SwResId(STR_OUTLINE_CONTENT_VISIBILITY_SHOW_ALL));
1331 for(
int i = 1;
i <= 3; ++
i)
1332 xSubPopOutlineTracking->append_radio(OUString::number(
i + 10), m_aContextStrings[IDX_STR_OUTLINE_TRACKING +
i]);
1333 xSubPopOutlineTracking->set_active(OString::number(10 + m_nOutlineTracking),
true);
1336 xSubPop1->append_radio(OUString::number(
i + 100), OUString::number(
i));
1337 xSubPop1->set_active(OString::number(100 + m_nOutlineLevel),
true);
1339 for (
int i=0;
i < 3; ++
i)
1340 xSubPop2->append_radio(OUString::number(
i + 201), m_aContextStrings[IDX_STR_HYPERLINK +
i]);
1341 xSubPop2->set_active(OString::number(201 + static_cast<int>(GetParentWindow()->GetRegionDropMode())),
true);
1344 sal_uInt16
nId = 301;
1350 if (pView == pActiveView)
1353 m_aContextStrings[IDX_STR_ACTIVE] +
1356 xSubPop3->append_radio(OUString::number(nId), sInsert);
1357 if (State::CONSTANT == m_eState && m_pActiveShell == &pView->
GetWrtShell())
1358 xSubPop3->set_active(OString::number(nId),
true);
1362 xSubPop3->append_radio(OUString::number(nId++), m_aContextStrings[IDX_STR_ACTIVE_VIEW]);
1365 OUString sHiddenEntry = m_pHiddenShell->GetView().GetDocShell()->GetTitle() +
1367 m_aContextStrings[IDX_STR_HIDDEN] +
1369 xSubPop3->append_radio(OUString::number(nId), sHiddenEntry);
1372 if (State::ACTIVE == m_eState)
1373 xSubPop3->set_active(OString::number(--nId),
true);
1375 xSubPop3->set_active(OString::number(nId),
true);
1377 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
1382 xPop->remove(OString::number(900));
1384 bool bRemovePostItEntries =
true;
1385 bool bRemoveIndexEntries =
true;
1386 bool bRemoveEditEntry =
true;
1387 bool bRemoveUnprotectEntry =
true;
1388 bool bRemoveDeleteEntry =
true;
1389 bool bRemoveRenameEntry =
true;
1390 bool bRemoveSelectEntry =
true;
1391 bool bRemoveToggleExpandEntry =
true;
1392 bool bRemoveChapterEntries =
true;
1393 bool bRemoveSendOutlineEntry =
true;
1397 (State::ACTIVE == m_eState || m_pActiveShell == pActiveView->
GetWrtShellPtr())
1398 && xEntry && lcl_IsContent(*xEntry, *
m_xTreeView))
1400 assert(dynamic_cast<SwContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
1403 const bool bReadonly = m_pActiveShell->GetView().GetDocShell()->IsReadOnly();
1405 const bool bProtected =
reinterpret_cast<SwContent*
>(
m_xTreeView->get_id(*xEntry).toInt64())->IsProtect();
1408 const bool bEditable = pContType->IsEditable() &&
1410 const bool bDeletable = pContType->IsDeletable() &&
1412 const bool bRenamable = bEditable && !bReadonly &&
1429 bRemoveSelectEntry =
false;
1430 bRemoveChapterEntries =
false;
1433 else if (!bReadonly && (bEditable || bDeletable))
1437 bRemoveIndexEntries =
false;
1441 bRemoveEditEntry =
false;
1444 bRemoveDeleteEntry =
false;
1446 else if(ContentTypeId::TABLE == nContentType)
1448 bRemoveSelectEntry =
false;
1449 bRemoveEditEntry =
false;
1450 bRemoveUnprotectEntry =
false;
1452 OUString sTableName =
reinterpret_cast<SwContent*
>(
m_xTreeView->get_id(*xEntry).toInt64())->GetName();
1453 bool bProt = m_pActiveShell->HasTableAnyProtection( &sTableName, &bFull );
1454 xPop->set_sensitive(OString::number(403), !bFull);
1455 xPop->set_sensitive(OString::number(404), bProt);
1456 bRemoveDeleteEntry =
false;
1460 bRemoveDeleteEntry =
false;
1464 bRemoveSelectEntry =
false;
1465 bRemoveEditEntry =
false;
1469 if (bEditable && bDeletable)
1471 bRemoveEditEntry =
false;
1472 bRemoveDeleteEntry =
false;
1475 bRemoveEditEntry =
false;
1476 else if (bDeletable)
1478 bRemoveDeleteEntry =
false;
1483 bRemoveRenameEntry =
false;
1493 m_xTreeView->get_id(*xEntry).toInt64())->GetParent();
1502 *xSubPopOutlineContent);
1503 bRemoveSendOutlineEntry =
false;
1510 !m_pActiveShell->GetView().GetDocShell()->IsReadOnly() &&
1512 bRemovePostItEntries =
false;
1516 if (bRemoveToggleExpandEntry)
1518 xPop->remove(
"separator3");
1519 xPop->remove(OString::number(800));
1522 if (bRemoveSelectEntry)
1523 xPop->remove(OString::number(805));
1525 if (bRemoveChapterEntries)
1527 xPop->remove(
"separator2");
1528 xPop->remove(OString::number(806));
1529 xPop->remove(OString::number(801));
1530 xPop->remove(OString::number(802));
1531 xPop->remove(OString::number(803));
1532 xPop->remove(OString::number(804));
1535 if (bRemoveSendOutlineEntry)
1536 xPop->remove(OString::number(700));
1538 if (bRemovePostItEntries)
1540 xPop->remove(OString::number(600));
1541 xPop->remove(OString::number(601));
1542 xPop->remove(OString::number(602));
1545 if (bRemoveDeleteEntry)
1546 xPop->remove(OString::number(501));
1548 if (bRemoveRenameEntry)
1549 xPop->remove(OString::number(502));
1551 if (bRemoveIndexEntries)
1553 xPop->remove(OString::number(401));
1554 xPop->remove(OString::number(402));
1555 xPop->remove(OString::number(405));
1558 if (bRemoveUnprotectEntry)
1559 xPop->remove(OString::number(404));
1561 if (bRemoveEditEntry)
1562 xPop->remove(OString::number(403));
1564 if (bRemoveToggleExpandEntry &&
1565 bRemoveSelectEntry &&
1566 bRemoveChapterEntries &&
1567 bRemoveSendOutlineEntry &&
1568 bRemovePostItEntries &&
1569 bRemoveDeleteEntry &&
1570 bRemoveRenameEntry &&
1571 bRemoveIndexEntries &&
1572 bRemoveUnprotectEntry &&
1575 xPop->remove(
"separator1");
1581 xPop->remove(OString::number(1));
1585 xSubPopOutlineTracking.reset();
1586 xPop->remove(OString::number(4));
1589 !m_pActiveShell->GetViewOptions()->IsShowOutlineContentVisibilityButton() ||
1590 m_pActiveShell->getIDocumentOutlineNodesAccess()->getOutlineNodesCount() == 0)
1592 xSubPopOutlineContent.reset();
1593 xPop->remove(OString::number(5));
1594 xPop->remove(
"separator1511");
1598 if (!sCommand.isEmpty())
1599 ExecuteContextMenuAction(sCommand);
1607 m_xTreeView->insert(pParent, -1, &rStr, &rId,
nullptr,
nullptr, bChildrenOnDemand, pRet);
1615 std::unique_ptr<weld::TreeIter> xChild =
m_xTreeView->make_iterator(&rIter);
1626 bool bChild =
m_xTreeView->iter_has_child(rParent);
1627 if (bChild || !
m_xTreeView->get_children_on_demand(rParent))
1633 std::unique_ptr<weld::TreeIter> xChild =
m_xTreeView->make_iterator();
1635 assert(dynamic_cast<SwContentType*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(rParent).toInt64())));
1642 for(
size_t i = 0;
i < nCount; ++
i)
1644 const SwContent* pCnt = pCntType->GetMember(
i);
1648 OUString sEntry = pCnt->
GetName();
1649 if(sEntry.isEmpty())
1651 OUString
sId(OUString::number(reinterpret_cast<sal_Int64>(pCnt)));
1652 if (!bChild || (nLevel == 0))
1654 insert(&rParent, sEntry, sId,
false, xChild.get());
1662 if(static_cast<const SwOutlineContent*>(pCntType->GetMember(
i-1))->
GetOutlineLevel() < nLevel)
1664 insert(xChild.get(), sEntry, sId,
false, xChild.get());
1672 assert(!bChild || lcl_IsContentType(*xChild, *
m_xTreeView) || dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xChild).toInt64())));
1682 insert(xChild.get(), sEntry, sId,
false, xChild.get());
1694 for(
size_t i = 0;
i < nCount; ++
i)
1696 const SwContent* pCnt = pCntType->GetMember(
i);
1699 OUString sEntry = pCnt->
GetName();
1700 if (sEntry.isEmpty())
1702 OUString
sId(OUString::number(reinterpret_cast<sal_Int64>(pCnt)));
1703 insert(&rParent, sEntry, sId,
false, xChild.get());
1706 m_xTreeView->set_extra_row_indent(*xChild, static_cast<const SwRegionContent*>(pCnt)->GetRegionLevel());
1730 for(
size_t i=0;
i<nCount; ++
i )
1761 const sal_Int32 nOr = 1 <<
static_cast<int>(pCntType->
GetType());
1771 std::map< void*, bool > aCurrOutLineNodeMap;
1776 pNodesToExpand->emplace_back(
m_xTreeView->make_iterator(&rParent));
1777 if (bParentHasChild)
1779 std::unique_ptr<weld::TreeIter> xChild(
m_xTreeView->make_iterator(&rParent));
1781 while (bChild && lcl_IsContent(*xChild, *
m_xTreeView))
1785 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xChild).toInt64())));
1788 aCurrOutLineNodeMap.emplace( key,
false );
1792 aCurrOutLineNodeMap[key] =
true;
1795 pNodesToExpand->emplace_back(
m_xTreeView->make_iterator(xChild.get()));
1796 m_xTreeView->set_children_on_demand(*xChild,
false);
1812 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(rParent).toInt64())));
1822 pNodesToExpand->emplace_back(
m_xTreeView->make_iterator(&rParent));
1827 Expand(rParent,
nullptr);
1841 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator(&rParent));
1853 const sal_Int32 nAnd = ~(1 <<
static_cast<int>(pCntType->
GetType()));
1856 m_nActiveBlock &= nAnd;
1857 m_pConfig->SetActiveBlock(m_nActiveBlock);
1860 m_nHiddenBlock &= nAnd;
1865 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(rParent).toInt64())));
1868 mOutLineNodeMap[key] =
false;
1877 bool bConsumed =
false;
1879 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
1880 bool bEntry =
m_xTreeView->get_cursor(xEntry.get());
1882 OSL_ENSURE(bEntry,
"no current entry!");
1887 RequestingChildren(*xEntry);
1888 m_xTreeView->set_children_on_demand(*xEntry,
false);
1892 if (State::CONSTANT == m_eState)
1894 m_pActiveShell->GetView().GetViewFrame()->GetWindow().ToTop();
1897 assert(dynamic_cast<SwContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
1899 assert(pCnt &&
"no UserData");
1918 sResId = RID_BMP_NAVI_OUTLINE;
1921 sResId = RID_BMP_NAVI_TABLE;
1924 sResId = RID_BMP_NAVI_FRAME;
1927 sResId = RID_BMP_NAVI_GRAPHIC;
1930 sResId = RID_BMP_NAVI_OLE;
1933 sResId = RID_BMP_NAVI_BOOKMARK;
1936 sResId = RID_BMP_NAVI_REGION;
1939 sResId = RID_BMP_NAVI_URLFIELD;
1942 sResId = RID_BMP_NAVI_REFERENCE;
1945 sResId = RID_BMP_NAVI_INDEX;
1948 sResId = RID_BMP_NAVI_POSTIT;
1951 sResId = RID_BMP_NAVI_DRAWOBJECT;
1954 SAL_WARN(
"sw.ui",
"ContentTypeId::UNKNOWN has no bitmap preview");
1977 std::unique_ptr<weld::TreeIter> xParent(
m_xTreeView->make_iterator(&rParent));
1980 auto nRefDepth =
m_xTreeView->get_iter_depth(*xParent);
1981 auto nActDepth = nRefDepth;
1987 nActDepth =
m_xTreeView->get_iter_depth(*xParent);
1989 }
while(xParent && nRefDepth < nActDepth);
1997 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
2001 while (nAbsPos && xEntry)
2014 std::unique_ptr<weld::TreeIter> xOldSelEntry(
m_xTreeView->make_iterator());
2015 if (!
m_xTreeView->get_selected(xOldSelEntry.get()))
2016 xOldSelEntry.reset();
2017 OUString sEntryName;
2018 size_t nEntryRelPos = 0;
2020 sal_Int32 nOldScrollPos = 0;
2025 nOldScrollPos =
m_xTreeView->vadjustment_get_value();
2026 sEntryName =
m_xTreeView->get_text(*xOldSelEntry);
2027 std::unique_ptr<weld::TreeIter> xParentEntry =
m_xTreeView->make_iterator(xOldSelEntry.get());
2028 while (
m_xTreeView->get_iter_depth(*xParentEntry))
2045 bool bDisable = pShell ==
nullptr || bReadOnly;
2056 std::unique_ptr<weld::TreeIter> xEntry =
m_xTreeView->make_iterator();
2057 std::unique_ptr<weld::TreeIter> xSelEntry;
2058 std::vector<std::unique_ptr<weld::TreeIter>> aNodesToExpand;
2066 std::unique_ptr<SwContentType>& rpContentT = bActive ?
2072 OUString aImage(GetImageIdForContentTypeId(nCntType));
2073 bool bChOnDemand = 0 != rpContentT->GetMemberCount();
2074 OUString
sId(OUString::number(reinterpret_cast<sal_Int64>(rpContentT.get())));
2075 insert(
nullptr, rpContentT->GetName(),
sId, bChOnDemand, xEntry.get());
2081 xSelEntry =
m_xTreeView->make_iterator(xEntry.get());
2085 if (nExpandOptions & (1 << static_cast<int>(nCntType)))
2088 Expand(*xEntry, &aNodesToExpand);
2089 m_xTreeView->set_children_on_demand(*xEntry,
false);
2096 for (
const auto& rNode : aNodesToExpand)
2105 if (nExpandOptions & (1 << static_cast<int>(nCntType)))
2110 std::unique_ptr<weld::TreeIter> xChild(
m_xTreeView->make_iterator(xEntry.get()));
2111 std::unique_ptr<weld::TreeIter> xTemp;
2116 if (sEntryName ==
m_xTreeView->get_text(*xChild) ||
2117 nPos == nEntryRelPos)
2125 if (!xSelEntry || lcl_IsContentType(*xSelEntry, *
m_xTreeView))
2126 xSelEntry = std::move(xTemp);
2152 std::unique_ptr<SwContentType>& rpRootContentT = bActive ?
2157 OUString aImage(GetImageIdForContentTypeId(
m_nRootType));
2159 OUString
sId(OUString::number(reinterpret_cast<sal_Int64>(rpRootContentT.get())));
2160 insert(
nullptr, rpRootContentT->GetName(),
sId, bChOnDemand, xEntry.get());
2167 std::unique_ptr<weld::TreeIter> xChild =
m_xTreeView->make_iterator();
2168 for (
size_t i = 0;
i < rpRootContentT->GetMemberCount(); ++
i)
2170 const SwContent* pCnt = rpRootContentT->GetMember(
i);
2173 OUString sEntry = pCnt->
GetName();
2174 if(sEntry.isEmpty())
2176 OUString sSubId(OUString::number(reinterpret_cast<sal_Int64>(pCnt)));
2177 insert(xEntry.get(), sEntry, sSubId,
false, xChild.get());
2180 m_xTreeView->set_extra_row_indent(*xChild, static_cast<const SwRegionContent*>(pCnt)->GetRegionLevel());
2187 Expand(*xEntry, &aNodesToExpand);
2188 m_xTreeView->set_children_on_demand(*xEntry,
false);
2198 for (
const auto& rNode : aNodesToExpand)
2207 std::unique_ptr<weld::TreeIter> xChild(
m_xTreeView->make_iterator(xEntry.get()));
2212 if (sEntryName ==
m_xTreeView->get_text(*xChild) || nPos == nEntryRelPos)
2214 xSelEntry = std::move(xChild);
2235 m_xTreeView->vadjustment_set_value(nOldScrollPos);
2252 OSL_ENSURE(pWrtShell,
"no Shell!");
2254 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
2255 bool bEntry =
m_xTreeView->get_cursor(xEntry.get());
2256 if (!bEntry || lcl_IsContentType(*xEntry, *
m_xTreeView) || !pWrtShell)
2259 assert(dynamic_cast<SwContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
2264 bool bOutline =
false;
2265 OUString sOutlineText;
2271 OSL_ENSURE(nPos < pWrtShell->getIDocumentOutlineNodesAccess()->getOutlineNodesCount(),
2272 "outlinecnt changed");
2284 for(
int nLevel = 0;
2289 sEntry += OUString::number( nVal - pOutlRule->
Get(nLevel).
GetStart() ) +
".";
2318 if(!sEntry.isEmpty())
2350 const OUString& rToken = pCnt->GetParent()->GetTypeToken();
2351 sUrl +=
"#" + sEntry;
2352 if(!rToken.isEmpty())
2365 sEntry = sOutlineText;
2371 aBmk.
Copy( rTransfer );
2389 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
2390 bool bEntry =
m_xTreeView->get_cursor(xEntry.get());
2396 assert(dynamic_cast<SwContentType*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
2401 assert(dynamic_cast<SwContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
2409 m_xTreeView->set_selection_mode(SelectionMode::Multiple);
2415 m_xTreeView->set_selection_mode(SelectionMode::Single);
2428 bool bContentChanged =
false;
2444 bool bVisibilityChanged =
false;
2457 std::unique_ptr<weld::TreeIter> xRootEntry(
m_xTreeView->make_iterator());
2459 bContentChanged =
true;
2462 assert(dynamic_cast<SwContentType*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xRootEntry).toInt64())));
2466 bContentChanged =
true;
2473 std::unique_ptr<weld::TreeIter> xFirstSel(
m_xTreeView->make_iterator());
2474 bool bFirstSel =
m_xTreeView->get_selected(xFirstSel.get());
2475 if (bFirstSel && lcl_IsContent(*xFirstSel, *
m_xTreeView))
2477 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xFirstSel).toInt64())));
2482 bContentChanged =
true;
2487 pArrType->
Init(&bVisibilityChanged);
2489 OUString
sId(OUString::number(reinterpret_cast<sal_Int64>(pArrType)));
2491 if (!bContentChanged)
2495 bContentChanged =
true;
2498 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator(xRootEntry.get()));
2499 for (
size_t j = 0; j < nChildCount; ++j)
2503 OUString sSubId(OUString::number(reinterpret_cast<sal_Int64>(pCnt)));
2505 OUString sEntryText =
m_xTreeView->get_text(*xEntry);
2506 if( sEntryText != pCnt->
GetName() &&
2508 bContentChanged =
true;
2518 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
2519 bool bEntry =
m_xTreeView->get_iter_first(*xEntry);
2523 assert(dynamic_cast<SwContentType*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
2529 bContentChanged =
true;
2532 pArrType->
Init(&bVisibilityChanged);
2533 OUString
sId(OUString::number(reinterpret_cast<sal_Int64>(pArrType)));
2537 bool bLevelOrVisibilityChanged =
false;
2543 if (bLevelOrVisibilityChanged)
2546 bContentChanged =
true;
2548 bVisibilityChanged =
true;
2552 bContentChanged =
true;
2555 for(
size_t j = 0; j < nChildCount; ++j)
2560 OUString sSubId(OUString::number(reinterpret_cast<sal_Int64>(pCnt)));
2562 OUString sEntryText =
m_xTreeView->get_text(*xEntry);
2563 if( sEntryText != pCnt->
GetName() &&
2565 bContentChanged =
true;
2575 bool bLevelOrVisibilityChanged =
false;
2580 bool bRemoveChildren =
false;
2583 if (nOldChildCount != nNewChildCount)
2585 bRemoveChildren =
true;
2589 std::unique_ptr<weld::TreeIter> xChild(
m_xTreeView->make_iterator(xEntry.get()));
2591 for (
size_t j = 0; j < nOldChildCount; ++j)
2594 OUString sSubId(OUString::number(reinterpret_cast<sal_Int64>(pCnt)));
2596 OUString sEntryText =
m_xTreeView->get_text(*xChild);
2597 if( sEntryText != pCnt->
GetName() &&
2599 bRemoveChildren =
true;
2603 if (bRemoveChildren)
2605 std::unique_ptr<weld::TreeIter> xRemove(
m_xTreeView->make_iterator(xEntry.get()));
2611 m_xTreeView->set_children_on_demand(*xEntry, nNewChildCount != 0);
2614 else if((nCntCount != 0)
2617 bContentChanged =
true;
2621 while (bEntry && (bNext ||
m_xTreeView->get_iter_depth(*xEntry)))
2629 if (!bContentChanged && bVisibilityChanged)
2632 return bContentChanged || bVisibilityChanged;
2637 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
2643 if (nId && lcl_IsContentType(*xEntry, *
m_xTreeView))
2645 assert(dynamic_cast<SwContentType*>(reinterpret_cast<SwTypeNumber*>(nId)));
2728 SfxViewEventHint const*
const pVEHint(dynamic_cast<SfxViewEventHint const*>(&rHint));
2731 pDyingShell = dynamic_cast<SwXTextView*>(pVEHint->
GetController().get());
2740 switch (rHint.
GetId())
2742 case SfxHintId::SwNavigatorUpdateTracking:
2745 case SfxHintId::SwNavigatorSelectOutlinesWithSelections:
2751 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
2752 if (xEntry &&
m_xTreeView->get_selected(xEntry.get()))
2759 case SfxHintId::DocChanged:
2766 case SfxHintId::ModeChanged:
2774 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
2792 const bool bUp = rCmd ==
"chapterup";
2793 const bool bUpDown = bUp || rCmd ==
"chapterdown";
2794 const bool bLeft = rCmd ==
"promote";
2795 const bool bLeftRight = bLeft || rCmd ==
"demote";
2796 if (!bUpDown && !bLeftRight)
2811 std::vector<SwTextNode*> selectedOutlineNodes;
2812 std::vector<std::unique_ptr<weld::TreeIter>> selected;
2814 m_xTreeView->selected_foreach([
this, pShell, &bLeftRight, &bOutlineWithChildren, &selected, &selectedOutlineNodes](
weld::TreeIter& rEntry){
2816 bool bSkip = lcl_IsContentType(rEntry, *
m_xTreeView);
2820 if ((bLeftRight || bOutlineWithChildren) && !selected.empty())
2822 std::unique_ptr<weld::TreeIter> xParent(
m_xTreeView->make_iterator(&rEntry));
2823 for (
bool bParent =
m_xTreeView->iter_parent(*xParent); bParent; bParent =
m_xTreeView->iter_parent(*xParent))
2825 if (
m_xTreeView->iter_compare(*selected.back(), *xParent) == 0)
2834 selected.emplace_back(
m_xTreeView->make_iterator(&rEntry));
2842 selectedOutlineNodes.push_back(pNode->
GetTextNode());
2849 if (bUpDown && !bUp)
2851 std::reverse(selected.begin(), selected.end());
2855 bool bStartedAction =
false;
2856 std::vector<SwNode*> aOutlineNdsArray;
2857 for (
auto const& pCurrentEntry : selected)
2862 assert(dynamic_cast<SwContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*pCurrentEntry).toInt64())));
2864 reinterpret_cast<SwContent*
>(
m_xTreeView->get_id(*pCurrentEntry).toInt64())->GetParent()->GetType()
2875 if (!bStartedAction)
2890 bool bOutlineContentVisibleAttr =
true;
2892 if (!bOutlineContentVisibleAttr)
2894 aOutlineNdsArray.push_back(pNd);
2902 bStartedAction =
true;
2909 const size_t nEntryAbsPos(
GetAbsPos(*pCurrentEntry));
2911 if (!bOutlineWithChildren && ((nDir == -1 && nActPos > 0) ||
2918 else if (bOutlineWithChildren)
2921 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator(pCurrentEntry.get()));
2922 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*pCurrentEntry).toInt64())));
2926 while (bEntry && lcl_IsContent(*xEntry, *
m_xTreeView))
2928 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
2936 std::unique_ptr<weld::TreeIter> xNextSibling(
m_xTreeView->make_iterator(pCurrentEntry.get()));
2942 if (bEntry && lcl_IsContent(*xEntry, *
m_xTreeView))
2953 dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
2963 std::unique_ptr<weld::TreeIter> xTmp(
m_xTreeView->make_iterator(xEntry.get()));
2965 while (bTmp && lcl_IsContent(*xTmp, *
m_xTreeView) &&
2978 std::unique_ptr<weld::TreeIter> xPrevSibling(
m_xTreeView->make_iterator(xEntry.get()));
2988 nDirLast = nDir = nDest - nActEndPos;
2993 nDirLast = nDir = 0;
2998 std::unique_ptr<weld::TreeIter> xPrevSibling(
m_xTreeView->make_iterator(pCurrentEntry.get()));
3005 m_xTreeView->copy_iterator(*pCurrentEntry, *xEntry);
3006 while (bEntry && nDest)
3010 dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
3011 if (bEntry && lcl_IsContent(*xEntry, *
m_xTreeView))
3027 std::unique_ptr<weld::TreeIter> xTmp(
m_xTreeView->make_iterator(xEntry.get()));
3029 while (bTmp && lcl_IsContent(*xTmp, *
m_xTreeView) &&
3037 while (bTmp && lcl_IsContent(*xTmp, *
m_xTreeView) &&
3048 nDirLast = nDir = nDest - nActPos;
3077 for (
SwNode* pNd : aOutlineNdsArray)
3091 std::unique_ptr<weld::TreeIter> xListEntry(
m_xTreeView->make_iterator());
3092 bool bListEntry =
m_xTreeView->get_iter_first(*xListEntry);
3095 assert(dynamic_cast<SwOutlineContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xListEntry).toInt64())));
3096 if (reinterpret_cast<SwOutlineContent*>(
m_xTreeView->get_id(*xListEntry).toInt64())->GetOutlinePos() == nCurrPos)
3098 std::unique_ptr<weld::TreeIter> xParent(
m_xTreeView->make_iterator(xListEntry.get()));
3110 for (
SwTextNode* pNode : selectedOutlineNodes)
3113 if(aFndIt == rOutLineNds.
end())
3115 const size_t nFndPos = aFndIt - rOutLineNds.
begin();
3120 std::unique_ptr<weld::TreeIter> xParent(
m_xTreeView->make_iterator(xEntry.get()));
3144 std::u16string_view rContentTypeName, std::u16string_view rName)
3149 std::unique_ptr<weld::TreeIter> xIter(rContentTree.
make_iterator());
3151 while (bFoundEntry && rContentTypeName != rContentTree.
get_text(*xIter))
3157 while (rContentTree.
iter_next(*xIter) && lcl_IsContent(*xIter, rContentTree))
3159 if (rName == rContentTree.
get_text(*xIter))
3162 std::unique_ptr<weld::TreeIter> xFirstSelected(rContentTree.
make_iterator());
3164 xFirstSelected.reset();
3166 rContentTree.
iter_compare(*xIter, *xFirstSelected) != 0)
3185 SwView* pView = GetParentWindow()->GetCreateView();
3190 m_bViewHasChanged =
false;
3191 m_bIsIdleClear =
false;
3193 if (State::CONSTANT == m_eState && !lcl_FindShell(m_pActiveShell))
3195 SetActiveShell(pActShell);
3196 GetParentWindow()->UpdateListBox();
3199 if (State::ACTIVE == m_eState && pActShell != GetWrtShell())
3201 SetActiveShell(pActShell);
3203 else if ((State::ACTIVE == m_eState || (State::CONSTANT == m_eState && pActShell == GetWrtShell())) &&
3204 HasContentChanged())
3206 FindActiveTypeAndRemoveUserData();
3212 else if (!pView && State::ACTIVE == m_eState && !m_bIsIdleClear)
3216 SetActiveShell(
nullptr);
3219 m_bIsIdleClear =
true;
3252 OUString aContentTypeName;
3255 aContentTypeName =
SwResId(STR_CONTENT_TYPE_GRAPHIC);
3258 aContentTypeName =
SwResId(STR_CONTENT_TYPE_FRAME);
3261 aContentTypeName =
SwResId(STR_CONTENT_TYPE_OLE);
3262 if (!aContentTypeName.isEmpty())
3288 std::unique_ptr<weld::TreeIter> xFirstEntry(
m_xTreeView->make_iterator());
3294 if (lcl_IsContent(rEntry, *
m_xTreeView) && reinterpret_cast<SwContent*>(
3295 m_xTreeView->get_id(rEntry).toInt64())->GetParent()->GetType() ==
3298 if (reinterpret_cast<SwOutlineContent*>(
3299 m_xTreeView->get_id(rEntry).toInt64())->GetOutlinePos() == nActPos)
3301 std::unique_ptr<weld::TreeIter> xFirstSelected(
3303 if (!
m_xTreeView->get_selected(xFirstSelected.get()))
3304 xFirstSelected.reset();
3307 m_xTreeView->iter_compare(rEntry, *xFirstSelected) != 0)
3312 std::unique_ptr<weld::TreeIter> xChildEntry(
3319 if (reinterpret_cast<SwContent*>(
3340 reinterpret_cast<SwContentType*>(
3341 m_xTreeView->get_id(rEntry).toInt64())->GetType() !=
3360 std::vector<SwOutlineNodes::size_type> aOutlinePositions;
3371 }
while (pCursor && pCursor != pFirstCursor);
3373 if (!aOutlinePositions.empty())
3376 aOutlinePositions.erase(std::unique(aOutlinePositions.begin(), aOutlinePositions.end()),
3377 aOutlinePositions.end());
3381 for (
auto nOutlinePosition : aOutlinePositions)
3385 reinterpret_cast<SwContent*>(
3386 m_xTreeView->get_id(rEntry).toInt64())->GetParent()->GetType() ==
3389 if (reinterpret_cast<SwOutlineContent*>(
3390 m_xTreeView->get_id(rEntry).toInt64())->GetOutlinePos() ==
3393 std::unique_ptr<weld::TreeIter> xParent =
3414 std::vector<SwNode*> aOutlineNdsArray;
3426 bool bOutlineContentVisibleAttr =
true;
3428 if (!bOutlineContentVisibleAttr)
3430 aOutlineNdsArray.push_back(pNd);
3441 bool bFirstMove =
true;
3455 nPrevTargetPosOrOffset = nSourcePos - nTargetPos;
3457 nPrevTargetPosOrOffset = nSourcePos + 1;
3459 else if (nSourcePos < nTargetPos)
3463 nPrevSourcePos = nSourcePos;
3464 nPrevTargetPosOrOffset = nTargetPos;
3473 nTargetPos = nSourcePos - nPrevTargetPosOrOffset;
3475 else if (nSourcePos < nTargetPos)
3478 nSourcePos = nPrevSourcePos;
3479 nTargetPos = nPrevTargetPosOrOffset;
3489 for (
SwNode* pNd : aOutlineNdsArray)
3495 m_aDndOutlinesSelected.clear();
3501 SwView* pActView = GetParentWindow()->GetCreateView();
3505 if (State::CONSTANT == m_eState && !lcl_FindShell(m_pActiveShell))
3507 SetActiveShell(pActShell);
3510 if (State::ACTIVE == m_eState && pActShell != GetWrtShell())
3511 SetActiveShell(pActShell);
3512 else if ((State::ACTIVE == m_eState || (State::CONSTANT == m_eState && pActShell == GetWrtShell())) &&
3513 HasContentChanged())
3518 else if (State::ACTIVE == m_eState)
3524 bool bConsumed =
true;
3529 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
3535 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
3542 GetParentWindow()->ToggleTree();
3562 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
3565 assert(dynamic_cast<SwContent*>(reinterpret_cast<SwTypeNumber*>(
m_xTreeView->get_id(*xEntry).toInt64())));
3566 if (reinterpret_cast<SwContent*>(
m_xTreeView->get_id(*xEntry).toInt64())->GetParent()->IsDeletable() &&
3567 !m_pActiveShell->GetView().GetDocShell()->IsReadOnly())
3577 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
3582 if (State::CONSTANT == m_eState)
3584 m_pActiveShell->GetView().GetViewFrame()->GetWindow().ToTop();
3591 SdrView* pDrawView = m_pActiveShell->GetDrawView();
3599 bool hasObjectMarked =
false;
3611 for(
size_t i=0;
i<nCount; ++
i )
3636 hasObjectMarked =
true;
3644 pDrawView->
MarkObj(pTemp, pPV,
true);
3650 if ( !hasObjectMarked )
3660 m_bViewHasChanged =
true;
3666 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
3680 ExecCommand(
"promote", !aCode.
IsShift());
3682 ExecCommand(
"demote", !aCode.
IsShift());
3684 ExecCommand(
"chapterup", !aCode.
IsShift());
3686 ExecCommand(
"chapterdown", !aCode.
IsShift());
3705 bool bContent =
false;
3706 void* pUserData =
reinterpret_cast<void*
>(
m_xTreeView->get_id(rEntry).toInt64());
3709 assert(dynamic_cast<SwContentType*>(static_cast<SwTypeNumber*>(pUserData)));
3714 assert(dynamic_cast<SwContent*>(static_cast<SwTypeNumber*>(pUserData)));
3715 nType =
static_cast<SwContent*
>(pUserData)->GetParent()->GetType();
3724 assert(dynamic_cast<SwURLFieldContent*>(static_cast<SwTypeNumber*>(pUserData)));
3729 assert(dynamic_cast<SwPostItContent*>(static_cast<SwTypeNumber*>(pUserData)));
3733 assert(dynamic_cast<SwOutlineContent*>(static_cast<SwTypeNumber*>(pUserData)));
3737 assert(dynamic_cast<SwGraphicContent*>(static_cast<SwTypeNumber*>(pUserData)));
3742 assert(dynamic_cast<SwRegionContent*>(static_cast<SwTypeNumber*>(pUserData)));
3750 if (
nullptr != (pSect = pFormat->
GetSection()) &&
3758 sEntry =
SwResId(STR_REGION_DEFNAME) +
": " + sEntry +
"\n" +
3759 SwResId(FLD_STAT_WORD) +
": " + OUString::number(aDocStat.
nWord) +
"\n" +
3760 SwResId(FLD_STAT_CHAR) +
": " + OUString::number(aDocStat.
nChar);
3768 if(static_cast<SwContent*>(pUserData)->IsInvisible())
3770 if(!sEntry.isEmpty())
3772 sEntry += m_sInvisible;
3777 const size_t nMemberCount =
static_cast<SwContentType*
>(pUserData)->GetMemberCount();
3778 sEntry = OUString::number(nMemberCount) +
" " +
3789 std::unique_ptr<weld::TreeIter> xFirst(
m_xTreeView->make_iterator());
3793 auto nSelectedPopupEntry = rSelectedPopupEntry.toUInt32();
3794 switch (nSelectedPopupEntry)
3796 case TOGGLE_OUTLINE_CONTENT_VISIBILITY:
3797 case HIDE_OUTLINE_CONTENT_VISIBILITY:
3798 case SHOW_OUTLINE_CONTENT_VISIBILITY:
3803 if (nSelectedPopupEntry == TOGGLE_OUTLINE_CONTENT_VISIBILITY)
3819 bool bShow(nSelectedPopupEntry == SHOW_OUTLINE_CONTENT_VISIBILITY);
3824 }
while (++nPos < nOutlineNodesCount
3839 nSelectedPopupEntry -= 10;
3854 nSelectedPopupEntry -= 100;
3968 if(nSelectedPopupEntry > 300 && nSelectedPopupEntry < 400)
3970 nSelectedPopupEntry -= 300;
3974 nSelectedPopupEntry --;
3975 if(nSelectedPopupEntry == 0)
3982 if(nSelectedPopupEntry)
3986 Display(nSelectedPopupEntry == 1);
4004 nChapters +=
m_xTreeView->iter_n_children(rEntry);
4064 std::unique_ptr<weld::TreeIter> xEntry(
m_xTreeView->make_iterator());
4068 bool bEnable =
false;
4069 std::unique_ptr<weld::TreeIter> xParentEntry(
m_xTreeView->make_iterator(xEntry.get()));
4070 bool bParentEntry =
m_xTreeView->iter_parent(*xParentEntry);
4071 while (bParentEntry && (!lcl_IsContentType(*xParentEntry, *
m_xTreeView)))
4072 bParentEntry =
m_xTreeView->iter_parent(*xParentEntry);
4077 else if (bParentEntry)
4103 if (rEntry.isEmpty())
4106 OUStringBuffer aEntry(rEntry);
4107 for (sal_Int32
i = 0;
i < rEntry.getLength(); ++
i)
4108 if(aEntry[
i] == 10 || aEntry[
i] == 13)
4111 return aEntry.makeStringAndClear();
4119 sal_uInt16 nSlot = 0;
4124 uno::Reference< container::XNameAccess > xNameAccess, xSecond, xThird;
4138 GetDoc()->UnProtectCells( pCnt->
GetName());
4143 OUString sTable =
SwResId(STR_TABLE_NAME);
4148 sTable = aRewriterTableName.
Apply(sTable);
4161 uno::Reference< text::XTextTablesSupplier > xTables(xModel, uno::UNO_QUERY);
4162 xNameAccess = xTables->getTextTables();
4176 uno::Reference< text::XTextGraphicObjectsSupplier > xGraphics(xModel, uno::UNO_QUERY);
4177 xNameAccess = xGraphics->getGraphicObjects();
4178 uno::Reference< text::XTextFramesSupplier > xFrames(xModel, uno::UNO_QUERY);
4179 xSecond = xFrames->getTextFrames();
4180 uno::Reference< text::XTextEmbeddedObjectsSupplier > xObjs(xModel, uno::UNO_QUERY);
4181 xThird = xObjs->getEmbeddedObjects();
4196 uno::Reference< text::XTextFramesSupplier > xFrames(xModel, uno::UNO_QUERY);
4197 uno::Reference< text::XTextEmbeddedObjectsSupplier > xObjs(xModel, uno::UNO_QUERY);
4200 xNameAccess = xFrames->getTextFrames();
4201 xSecond = xObjs->getEmbeddedObjects();
4205 xNameAccess = xObjs->getEmbeddedObjects();
4206 xSecond = xFrames->getTextFrames();
4208 uno::Reference< text::XTextGraphicObjectsSupplier > xGraphics(xModel, uno::UNO_QUERY);
4209 xThird = xGraphics->getGraphicObjects();
4224 uno::Reference< text::XBookmarksSupplier > xBkms(xModel, uno::UNO_QUERY);
4225 xNameAccess = xBkms->getBookmarks();
4235 uno::Reference< text::XTextSectionsSupplier > xSects(xModel, uno::UNO_QUERY);
4236 xNameAccess = xSects->getTextSections();
4244 nSlot = SID_REMOVE_HYPERLINK;
4246 nSlot = SID_EDIT_HYPERLINK;
4275 SfxCallMode::ASYNCHRON, { &aPtrItem });
4290 Reference< XDocumentIndexesSupplier > xIndexes(xModel, UNO_QUERY);
4291 Reference< XIndexAccess> xIdxAcc(xIndexes->getDocumentIndexes());
4294 xNameAccess = xLocalNameAccess;
4295 else if(xLocalNameAccess.is() && xLocalNameAccess->hasByName(pBase->
GetTOXName()))
4297 Any aIdx = xLocalNameAccess->getByName(pBase->
GetTOXName());
4298 Reference< XDocumentIndex> xIdx;
4319 else if(xNameAccess.is())
4322 uno::Reference< uno::XInterface > xTmp;
4324 uno::Reference< container::XNamed > xNamed(xTmp, uno::UNO_QUERY);
4328 pDlg->SetAlternativeAccess( xSecond, xThird);
4330 OUString sForbiddenChars;
4333 sForbiddenChars =
"/\\@:*?\";,.#";
4337 sForbiddenChars =
" .<>";
4339 pDlg->SetForbiddenChars(sForbiddenChars);
4411 *static_cast<const SwURLFieldContent*>(pCnt)->GetINetAttr() ))
4471 const OUString& rDesc,
4476 nDocSh(reinterpret_cast<sal_IntPtr>(pDocSh)),
4477 nDefDrag( nDragType )
4483 rtl_TextEncoding eSysCSet = osl_getThreadTextEncoding();
4487 OString::number(static_cast<int>(
nDefDrag)) + OStringChar(NAVI_BOOKMARK_DELIM) +
4488 OString::number(
nDocSh));
4495 bool bRet = rData.
GetString( SotClipboardFormatId::SONLK, sStr );
4499 aUrl = sStr.getToken(0, NAVI_BOOKMARK_DELIM, nPos );
4500 aDescr = sStr.getToken(0, NAVI_BOOKMARK_DELIM, nPos );
4501 nDefDrag=
static_cast<RegionMode>( sStr.getToken(0, NAVI_BOOKMARK_DELIM, nPos ).toInt32() );
4502 nDocSh = sStr.getToken(0, NAVI_BOOKMARK_DELIM, nPos ).toInt32();
static const char * STR_CONTENT_TYPE_ARY[]
SfxViewFrame * GetViewFrame() const
#define LINK(Instance, Class, Member)
const SwEndNode * EndOfSectionNode() const
static void lcl_AssureStdModeAtShell(SwWrtShell *pWrtShell)
void FillMemberList(bool *pbLevelChanged=nullptr)
Fill the List of contents.
bool RequestingChildren(const weld::TreeIter &rParent)
void Init(bool *pbInvalidateWindow=nullptr)
void DeleteOutlineSelections()
virtual bool IsProtect() const override
const SfxPoolItem * ExecuteList(sal_uInt16 nSlot, SfxCallMode nCall, std::initializer_list< SfxPoolItem const * > args, std::initializer_list< SfxPoolItem const * > internalargs=std::initializer_list< SfxPoolItem const * >())
bool Right(sal_uInt16 nMode, bool bSelect, sal_uInt16 nCount, bool bBasicCall, bool bVisual=false)
SAL_DLLPRIVATE void UpdateCursor(sal_uInt16 eFlags=SwCursorShell::SCROLLWIN|SwCursorShell::CHKRANGE, bool bIdleEnd=false)
const Value & back() const
void CopyINetBookmark(const INetBookmark &rBkmk)
size_t GetTableFrameFormatCount(bool bUsed=false) const
TABLE.
virtual SdrEndTextEditKind SdrEndTextEdit(bool bDontDeleteReally=false)
const SwNodes & GetNodes() const
virtual int count_selected_rows() const =0
virtual void DrawSelChanged() override
constexpr sal_uInt16 KEY_MOD1
size_t GetChildCount(const weld::TreeIter &rParent) const
ContentTypeId m_nRootType
OUString GetTitle(sal_uInt16 nMaxLen=0) const
SwContentTreeDropTarget(SwContentTree &rTreeView)
void SetRegionDropMode(RegionMode nNewMode)
size_t GetAbsPos(const weld::TreeView &rTreeView, const weld::TreeIter &rIter)
void SetHiddenShell(SwWrtShell *pSh)
After a file is dropped on the Navigator, the new shell will be set.
virtual OUString getOutlineText(const tSortedOutlineNodeList::size_type nIdx, SwRootFrame const *pLayout, const bool bWithNumber=true, const bool bWithSpacesForLevel=false, const bool bWithFootnote=true) const =0
OUString m_aContextStrings[CONTEXT_COUNT+1]
SwContent(const SwContentType *pCnt, const OUString &rName, tools::Long nYPos)
std::vector< SwNode * >::difference_type difference_type
SwWrtShell * m_pHiddenShell
const SwView & GetView() const
const IDocumentOutlineNodes * getIDocumentOutlineNodesAccess() const
SfxDispatcher * GetDispatcher()
wrapper iterator: wraps iterator of implementation while hiding MarkBase class; only IMark instances ...
const_iterator begin() const
IMPL_LINK(SwContentTree, DragBeginHdl, bool &, rUnsetDragIcon, bool)
bool HasContentChanged()
Check if the displayed content is valid.
void SetOutlineLevel(sal_Int32 nSet)
static SW_DLLPUBLIC MarkType GetType(const ::sw::mark::IMark &rMark)
Returns the MarkType used to create the mark.
bool Pop(SwCursorShell::PopMode=SwCursorShell::PopMode::DeleteStack)
const wchar_t *typedef int(__stdcall *DllNativeUnregProc)(int
SwContentTree(std::unique_ptr< weld::TreeView > xTreeView, SwNavigationPI *pDialog)
Provides access to the marks of a document.
SdrObject * GetObj(size_t nNum) const
SwCursor * GetSwCursor() const
void ExecCommand(std::string_view rCmd, bool bModifier)
Execute commands of the Navigator.
#define FN_FORMAT_TABLE_DLG
size_t GetObjCount() const
void GotoFormatField(const SwFormatField &rField)
static weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false)
std::unique_ptr< weld::Toolbar > m_xContent6ToolBox
static void lcl_SelectByContentTypeAndName(SwContentTree *pThis, weld::TreeView &rContentTree, std::u16string_view rContentTypeName, std::u16string_view rName)
bool GotoINetAttr(const SwTextINetFormat &rAttr)
SwUndoId EndUndo(SwUndoId eUndoId=SwUndoId::EMPTY, const SwRewriter *pRewriter=nullptr)
Closes parenthesis of nUndoId, not used by UI.
const_iterator find(const Value &x) const
const IDocumentSettingAccess & getIDocumentSettingAccess() const
Provides access to the document setting interface.
#define DND_ACTION_COPYMOVE
sal_uInt16 GetCode() const
void SetActiveSidebarWin(sw::annotation::SwAnnotationWin *p)
void CopyByteString(SotClipboardFormatId nFormatId, const OString &rStr)
sal_Int8 ExecuteDrop(const ExecuteDropEvent &rEvt)
VclPtr< SwNavigationPI > m_xDialog
bool IsTOXBaseInReadonly() const
const SwDoc & GetDoc() const
constexpr sal_uInt16 KEY_SPACE
virtual SdrObjKind GetObjIdentifier() const
#define FN_FORMAT_GRAFIC_DLG
EmbeddedObjectRef * pObject
sal_uInt8 GetOutlineLevel() const
virtual bool GetInfo(SfxPoolItem &) const override
bool GotoTable(const OUString &rName)
int GetActualListLevel() const
Returns the actual list level of this text node, when it is a list item.
weld::TreeView & get_widget()
constexpr sal_uInt16 KEY_UP
static bool IsTOXBaseReadonly(const SwTOXBase &rTOXBase)
void EditEntry(const weld::TreeIter &rEntry, EditEntryMode nMode)
void SetVisArea(const tools::Rectangle &, bool bUpdateScrollbar=true)
void ExecuteContextMenuAction(const OString &rSelectedPopupEntry)
virtual std::unique_ptr< TreeIter > make_iterator(const TreeIter *pOrig=nullptr) const =0
SwWrtShell & GetWrtShell() const
bool MakeOutlineSel(SwOutlineNodes::size_type nSttPos, SwOutlineNodes::size_type nEndPos, bool bWithChildren, bool bKillPams=true)
void GetINetAttrs(SwGetINetAttrs &rArr)
IDocumentDrawModelAccess const & getIDocumentDrawModelAccess() const
constexpr TypedWhichId< SwPtrMsgPoolItem > RES_CONTENT_VISIBLE(183)
sal_uInt16 GetRefMarks(std::vector< OUString > *=nullptr) const
get the names of all references in a Doc
Used by the UI to modify the document model.
ContentTypeId GetType() const
sal_uInt8 m_nOutlineLevel
static const char * STR_CONTEXT_ARY[]
std::vector< SwFrameFormat const * > GetFlyFrameFormats(FlyCntType eType, bool bIgnoreTextBoxes)
void FindActiveTypeAndRemoveUserData()
Before any data will be deleted, the last active entry has to be found.
virtual bool IsVisibleLayerId(SdrLayerID _nLayerId) const =0
method to determine, if a layer ID belongs to the visible ones.
bool GotoFly(const OUString &rName, FlyCntType eType=FLYCNTTYPE_ALL, bool bSelFrame=true)
const SwView & GetView() const
bool GotoNextTOXBase(const OUString *pName=nullptr)
virtual const_iterator_t findMark(const OUString &rMark) const =0
Finds a mark by name.
#define FN_TABLE_SELECT_ALL
SwContentType(SwWrtShell *pParent, ContentTypeId nType, sal_uInt8 nLevel)
std::unique_ptr< weld::TreeIter > GetEntryAtAbsPos(size_t nAbsPos) const
#define FN_INSERT_BOOKMARK
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
constexpr OUStringLiteral IsReadOnly(u"IsReadOnly")
bool IsProtectedOutlinePara() const
bool IsOutlineMovable(SwOutlineNodes::size_type nIdx) const
May an outline be moved or copied? Check whether it's in text body, not in table, and not read-only (...
ContentTypeId m_nContentType
std::vector< SwGetINetAttr > SwGetINetAttrs
bool Paste(TransferableDataHelper &rData)
sal_Int32 GetActiveBlock() const
bool GotoPrevTOXBase(const OUString *=nullptr)
jump to previous index
const SwTOXBase * GetTOX(sal_uInt16 nPos) const
TreeListBox for content indicator.
SwMoveFnCollection const & fnRegionEnd
virtual OUString get_id(int pos) const =0
size_t GetMemberCount() const
sal_uInt16 GetModifier() const
SwOutlineNodes::size_type GetOutlinePos() const
void GetGrfNms(OUString *pGrfName, OUString *pFltName, const SwFlyFrameFormat *=nullptr) const
Returns the name and the filter name of a graphic if the pointer is on a graphic. ...
const IDocumentMarkAccess * getIDocumentMarkAccess() const
Provides access to the document bookmark interface.
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
void SetOutlineLevel(sal_uInt8 nSet)
void MoveOutline(SwOutlineNodes::size_type nTargetPos)
const IDocumentDrawModelAccess & getIDocumentDrawModelAccess() const
Provides access to the document draw model interface.