[Libreoffice-commits] core.git: offapi/com officecfg/registry sw/inc sw/source sw/uiconfig
Jim Raykowski (via logerrit)
logerrit at kemper.freedesktop.org
Thu Dec 24 06:13:41 UTC 2020
offapi/com/sun/star/text/ViewSettings.idl | 6
officecfg/registry/schema/org/openoffice/Office/Writer.xcs | 8
sw/inc/viewopt.hxx | 8
sw/source/core/doc/DocumentContentOperationsManager.cxx | 32 ---
sw/source/core/edit/ednumber.cxx | 48 ++++
sw/source/core/txtnode/ndtxt.cxx | 2
sw/source/ui/config/optpage.cxx | 24 +-
sw/source/uibase/app/appopt.cxx | 63 ++++++
sw/source/uibase/config/cfgitems.cxx | 4
sw/source/uibase/config/usrpref.cxx | 17 +
sw/source/uibase/config/viewopt.cxx | 5
sw/source/uibase/docvw/FrameControlsManager.cxx | 35 ++-
sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx | 53 +----
sw/source/uibase/docvw/edtwin.cxx | 80 ++------
sw/source/uibase/inc/cfgitems.hxx | 1
sw/source/uibase/inc/edtwin.hxx | 2
sw/source/uibase/inc/optpage.hxx | 3
sw/source/uibase/inc/wrtsh.hxx | 6
sw/source/uibase/uiview/view0.cxx | 37 +++
sw/source/uibase/uno/unomod.cxx | 3
sw/source/uibase/utlui/content.cxx | 77 +++++++-
sw/source/uibase/wrtsh/wrtsh1.cxx | 67 ++++--
sw/uiconfig/swriter/ui/viewoptionspage.ui | 125 +++++++------
23 files changed, 470 insertions(+), 236 deletions(-)
New commits:
commit c405bae468d887ec77dd3830b7678fcedc2debfd
Author: Jim Raykowski <raykowj at gmail.com>
AuthorDate: Sat Dec 5 20:57:15 2020 -0900
Commit: Jim Raykowski <raykowj at gmail.com>
CommitDate: Thu Dec 24 07:12:59 2020 +0100
tdf#138136 tdf#38093 add option to treat sub outline levels as content
Also included in this patch:
- Modifications to make all outline content visible during move
operations.
- Removal of code intended to redraw buttons when layout is changed that
seems not to work as intended.
- Function IsOutlineContentFolded changed to IsOutlineContentVisible
- Change of delay before button is shown to half of what it was.
Change-Id: I0dde555ccd0693ca382c1f15326edfdc2fc44a93
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107815
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj at gmail.com>
diff --git a/offapi/com/sun/star/text/ViewSettings.idl b/offapi/com/sun/star/text/ViewSettings.idl
index 8261ca1dc50f..4439b7fc9709 100644
--- a/offapi/com/sun/star/text/ViewSettings.idl
+++ b/offapi/com/sun/star/text/ViewSettings.idl
@@ -296,6 +296,12 @@ published service ViewSettings
*/
[optional, property] boolean ShowChangesInMargin;
+ /** If this property is `TRUE`, sub outline levels are treated as content in
+ outline content visibility actions.
+
+ @since LibreOffice 7.2
+ */
+ [optional, property] boolean TreatSubOutlineLevelsAsContent;
};
}; }; }; };
diff --git a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
index c99841d3cbde..1d54ace2d950 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Writer.xcs
@@ -1079,6 +1079,14 @@
</info>
<value>false</value>
</prop>
+ <prop oor:name="TreatSubOutlineLevelsAsContent" oor:type="xs:boolean" oor:nillable="false">
+ <!-- UIHints: Tools - Options - Writer - View - [Section] Outline mode -->
+ <info>
+ <desc>Enables the writer outline content visibility feature to treat sub outline levels as content.</desc>
+ <label>Treat sub outline levels as content</label>
+ </info>
+ <value>false</value>
+ </prop>
<prop oor:name="ShowChangesInMargin" oor:type="xs:boolean" oor:nillable="false">
<!-- UIHints: Tools - Options - Writer - View - [Section] Display tracked changes -->
<info>
diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx
index ebfab960d226..996aec4848c2 100644
--- a/sw/inc/viewopt.hxx
+++ b/sw/inc/viewopt.hxx
@@ -61,6 +61,7 @@ enum class ViewOptFlags1 : sal_uInt64 {
Synchronize = 0x01000000,
GridVisible = 0x02000000,
OnlineSpell = 0x04000000,
+ TreatSubOutlineLevelsAsContent = 0x08000000,
ShowInlineTooltips = 0x10000000, //tooltips on tracked changes
ViewMetachars = 0x20000000,
Pageback = 0x40000000,
@@ -68,7 +69,7 @@ enum class ViewOptFlags1 : sal_uInt64 {
ShowChangesInMargin = 0x100000000 //tracked deletions in margin
};
namespace o3tl {
- template<> struct typed_flags<ViewOptFlags1> : is_typed_flags<ViewOptFlags1, 0x1F7dfcfff> {};
+ template<> struct typed_flags<ViewOptFlags1> : is_typed_flags<ViewOptFlags1, 0x1ffdfcfff> {};
}
enum class ViewOptCoreFlags2 {
@@ -306,6 +307,11 @@ public:
void SetShowOutlineContentVisibilityButton(bool b)
{ SetCoreOption(b, ViewOptFlags1::ShowOutlineContentVisibilityButton); }
+ bool IsTreatSubOutlineLevelsAsContent() const;
+ void SetTreatSubOutlineLevelsAsContent(bool b)
+ { SetCoreOption(b, ViewOptFlags1::TreatSubOutlineLevelsAsContent); }
+
+
bool IsShowHiddenChar(bool bHard = false) const
{ return !m_bReadonly && (m_nCoreOptions & ViewOptFlags1::CharHidden) &&
((m_nCoreOptions & ViewOptFlags1::ViewMetachars)||bHard); }
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 19701083ba38..1b160fe2deec 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -90,10 +90,6 @@
#include <tuple>
#include <memory>
-#include <editsh.hxx>
-#include <viewopt.hxx>
-#include <wrtsh.hxx>
-
using namespace ::com::sun::star::i18n;
namespace
@@ -2425,27 +2421,6 @@ bool DocumentContentOperationsManager::MoveRange( SwPaM& rPaM, SwPosition& rPos,
bool DocumentContentOperationsManager::MoveNodeRange( SwNodeRange& rRange, SwNodeIndex& rPos,
SwMoveFlags eMvFlags )
{
- std::vector<SwNode*> aFoldedOutlineNdsArray;
- SwWrtShell* pWrtShell = dynamic_cast<SwWrtShell*>(m_rDoc.GetEditShell());
- if (pWrtShell && pWrtShell->GetViewOptions() && pWrtShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
- {
- // unfold all folded outline content
- SwOutlineNodes rOutlineNds = m_rDoc.GetNodes().GetOutLineNds();
- for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNds.size(); ++nPos)
- {
- SwNode* pNd = rOutlineNds[nPos];
- if (pNd->IsTextNode()) // should always be true
- {
- bool bOutlineContentVisibleAttr = true;
- pNd->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
- if (!bOutlineContentVisibleAttr)
- {
- aFoldedOutlineNdsArray.push_back(pNd);
- pWrtShell->ToggleOutlineContentVisibility(nPos);
- }
- }
- }
- }
// Moves all Nodes to the new position.
// Bookmarks are moved too (currently without Undo support).
@@ -2571,13 +2546,6 @@ bool DocumentContentOperationsManager::MoveNodeRange( SwNodeRange& rRange, SwNod
m_rDoc.GetFootnoteIdxs().UpdateAllFootnote();
}
- if (pWrtShell && pWrtShell->GetViewOptions() && pWrtShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
- {
- // fold all outlines that were folded before move
- for (SwNode* pNd : aFoldedOutlineNdsArray)
- pWrtShell->ToggleOutlineContentVisibility(pNd, true);
- }
-
m_rDoc.getIDocumentState().SetModified();
return true;
}
diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx
index 58b587e11dcb..b806edc599e9 100644
--- a/sw/source/core/edit/ednumber.cxx
+++ b/sw/source/core/edit/ednumber.cxx
@@ -28,6 +28,9 @@
#include <numrule.hxx>
#include <osl/diagnose.h>
+#include <viewopt.hxx>
+#include <wrtsh.hxx>
+
SwPamRanges::SwPamRanges( const SwPaM& rRing )
{
for(SwPaM& rTmp : const_cast<SwPaM*>(&rRing)->GetRingContainer())
@@ -391,8 +394,53 @@ void SwEditShell::SetIndent(short nIndent, const SwPosition & rPos)
EndAllAction();
}
+namespace
+{
+class MakeAllOutlineContentTemporarilyVisibile
+{
+private:
+ SwWrtShell* pWrtShell;
+ std::vector<SwNode*> aOutlineNdsArray;
+public:
+ MakeAllOutlineContentTemporarilyVisibile(SwWrtShell* pShell)
+ {
+ pWrtShell = pShell;
+ if (pWrtShell && pWrtShell->GetViewOptions() && pWrtShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ // make all outlines content visible and store outline nodes having
+ // content visible attribute value false
+ SwOutlineNodes rOutlineNds = pWrtShell->GetNodes().GetOutLineNds();
+ for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNds.size(); ++nPos)
+ {
+ SwNode* pNd = rOutlineNds[nPos];
+ if (pNd->IsTextNode()) // should always be true
+ {
+ bool bOutlineContentVisibleAttr = true;
+ pNd->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
+ if (!bOutlineContentVisibleAttr)
+ {
+ aOutlineNdsArray.push_back(pNd);
+ pWrtShell->ToggleOutlineContentVisibility(nPos);
+ }
+ }
+ }
+ }
+ }
+
+ ~MakeAllOutlineContentTemporarilyVisibile()
+ {
+ // restore outlines content visibility
+ for (SwNode* pNd : aOutlineNdsArray)
+ pWrtShell->ToggleOutlineContentVisibility(pNd, true);
+ }
+};
+}
+
bool SwEditShell::MoveParagraph( tools::Long nOffset )
{
+ // make all outline nodes content temporarily visibile for paragraph move
+ MakeAllOutlineContentTemporarilyVisibile a(dynamic_cast<SwWrtShell*>(this));
+
StartAllAction();
SwPaM *pCursor = GetCursor();
diff --git a/sw/source/core/txtnode/ndtxt.cxx b/sw/source/core/txtnode/ndtxt.cxx
index a41c9bc19b7e..e71ea4b76119 100644
--- a/sw/source/core/txtnode/ndtxt.cxx
+++ b/sw/source/core/txtnode/ndtxt.cxx
@@ -4020,7 +4020,7 @@ void SwTextNode::SetAttrOutlineContentVisible(bool bVisible)
{
SfxGrabBagItem aGrabBagItem(RES_PARATR_GRABBAG);
aGrabBagItem.GetGrabBag()["OutlineContentVisibleAttr"] <<= bVisible;
- GetTextNode()->SetAttr(aGrabBagItem);
+ SetAttr(aGrabBagItem);
}
// #i70748#
diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx
index 5820f260886e..b6f0b696a91b 100644
--- a/sw/source/ui/config/optpage.cxx
+++ b/sw/source/ui/config/optpage.cxx
@@ -53,7 +53,6 @@
#include <officecfg/Office/Common.hxx>
#include <sal/macros.h>
#include <sfx2/dialoghelper.hxx>
-#include <sfx2/dispatch.hxx>
#include <sfx2/printer.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/viewfrm.hxx>
@@ -101,13 +100,23 @@ SwContentOptPage::SwContentOptPage(weld::Container* pPage, weld::DialogControlle
, m_xMetricLabel(m_xBuilder->weld_label("measureunitlabel"))
, m_xMetricLB(m_xBuilder->weld_combo_box("measureunit"))
, m_xShowInlineTooltips(m_xBuilder->weld_check_button("changestooltip"))
+ , m_xOutlineLabel(m_xBuilder->weld_label("outlinelabel"))
, m_xShowOutlineContentVisibilityButton(m_xBuilder->weld_check_button("outlinecontentvisibilitybutton"))
+ , m_xTreatSubOutlineLevelsAsContent(m_xBuilder->weld_check_button("suboutlinelevelsascontent"))
, m_xShowChangesInMargin(m_xBuilder->weld_check_button("changesinmargin"))
, m_xFieldHiddenCB(m_xBuilder->weld_check_button("hiddentextfield"))
, m_xFieldHiddenParaCB(m_xBuilder->weld_check_button("hiddenparafield"))
{
if (!officecfg::Office::Common::Misc::ExperimentalMode::get())
+ {
+ m_xOutlineLabel->hide();
m_xShowOutlineContentVisibilityButton->hide();
+ m_xTreatSubOutlineLevelsAsContent->hide();
+ }
+ else
+ {
+ m_xShowOutlineContentVisibilityButton->connect_toggled(LINK(this, SwContentOptPage, ShowOutlineContentVisibilityButtonHdl));
+ }
/* This part is visible only with Writer/Web->View dialogue. */
const SfxPoolItem* pItem;
@@ -206,11 +215,11 @@ void SwContentOptPage::Reset(const SfxItemSet* rSet)
m_xSmoothCBox->set_active(pElemAttr->m_bSmoothScroll);
m_xShowInlineTooltips->set_active(pElemAttr->m_bShowInlineTooltips);
m_xShowOutlineContentVisibilityButton->set_active(pElemAttr->m_bShowOutlineContentVisibilityButton);
+ m_xTreatSubOutlineLevelsAsContent->set_active(pElemAttr->m_bTreatSubOutlineLevelsAsContent);
+ m_xTreatSubOutlineLevelsAsContent->set_sensitive(pElemAttr->m_bShowOutlineContentVisibilityButton);
m_xShowChangesInMargin->set_active(pElemAttr->m_bShowChangesInMargin);
m_xFieldHiddenCB->set_active( pElemAttr->m_bFieldHiddenText );
m_xFieldHiddenParaCB->set_active( pElemAttr->m_bShowHiddenPara );
- if (GetActiveWrtShell()->GetViewOptions()->IsShowOutlineContentVisibilityButton() != pElemAttr->m_bShowOutlineContentVisibilityButton)
- GetActiveWrtShell()->GetView().GetDocShell()->GetDispatcher()->Execute(FN_SHOW_OUTLINECONTENTVISIBILITYBUTTON);
}
m_xMetricLB->set_active(-1);
lcl_SelectMetricLB(*m_xMetricLB, SID_ATTR_METRIC, *rSet);
@@ -234,13 +243,11 @@ bool SwContentOptPage::FillItemSet(SfxItemSet* rSet)
aElem.m_bSmoothScroll = m_xSmoothCBox->get_active();
aElem.m_bShowInlineTooltips = m_xShowInlineTooltips->get_active();
aElem.m_bShowOutlineContentVisibilityButton = m_xShowOutlineContentVisibilityButton->get_active();
+ aElem.m_bTreatSubOutlineLevelsAsContent = m_xTreatSubOutlineLevelsAsContent->get_active();
aElem.m_bShowChangesInMargin = m_xShowChangesInMargin->get_active();
aElem.m_bFieldHiddenText = m_xFieldHiddenCB->get_active();
aElem.m_bShowHiddenPara = m_xFieldHiddenParaCB->get_active();
- if (GetActiveWrtShell()->GetViewOptions()->IsShowOutlineContentVisibilityButton() != aElem.m_bShowOutlineContentVisibilityButton)
- GetActiveWrtShell()->GetView().GetDocShell()->GetDispatcher()->Execute(FN_SHOW_OUTLINECONTENTVISIBILITYBUTTON);
-
bool bRet = !pOldAttr || aElem != *pOldAttr;
if(bRet)
bRet = nullptr != rSet->Put(aElem);
@@ -277,6 +284,11 @@ IMPL_LINK(SwContentOptPage, VertRulerHdl, weld::ToggleButton&, rBox, void)
m_xVRulerRightCBox->set_sensitive(rBox.get_sensitive() && rBox.get_active());
}
+IMPL_LINK(SwContentOptPage, ShowOutlineContentVisibilityButtonHdl, weld::ToggleButton&, rBox, void)
+{
+ m_xTreatSubOutlineLevelsAsContent->set_sensitive(rBox.get_active());
+}
+
// TabPage Printer additional settings
SwAddPrinterTabPage::SwAddPrinterTabPage(weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet& rCoreSet)
diff --git a/sw/source/uibase/app/appopt.cxx b/sw/source/uibase/app/appopt.cxx
index 263017fb4604..1d813793cff6 100644
--- a/sw/source/uibase/app/appopt.cxx
+++ b/sw/source/uibase/app/appopt.cxx
@@ -56,6 +56,8 @@
#include <swabstdlg.hxx>
#include <swwrtshitem.hxx>
+#include <ndtxt.hxx>
+
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
@@ -259,11 +261,52 @@ void SwModule::ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet )
}
// Elements - interpret Item
+ std::vector<SwNode*> aFoldedOutlineNdsArray;
+ bool bShow = false;
if( SfxItemState::SET == rSet.GetItemState( FN_PARAM_ELEM, false, &pItem ) )
{
const SwElemItem* pElemItem = static_cast<const SwElemItem*>(pItem);
pElemItem->FillViewOptions( aViewOpt );
+ SwWrtShell* pWrtShell = GetActiveWrtShell();
+ bShow = pWrtShell->GetViewOptions()->IsShowOutlineContentVisibilityButton();
+ bool bTreatSubsChanged = aViewOpt.IsTreatSubOutlineLevelsAsContent()
+ != pWrtShell->GetViewOptions()->IsTreatSubOutlineLevelsAsContent();
+
+ // move cursor to top if something with the outline mode changed
+ if ((bShow != aViewOpt.IsShowOutlineContentVisibilityButton()) ||
+ (pWrtShell->GetViewOptions()->IsTreatSubOutlineLevelsAsContent() !=
+ aViewOpt.IsTreatSubOutlineLevelsAsContent()))
+ {
+ // move cursor to top of document
+ if (pWrtShell->IsSelFrameMode())
+ {
+ pWrtShell->UnSelectFrame();
+ pWrtShell->LeaveSelFrameMode();
+ }
+ pWrtShell->EnterStdMode();
+ pWrtShell->SttEndDoc(true);
+ }
+
+ if (bShow && (!aViewOpt.IsShowOutlineContentVisibilityButton() || bTreatSubsChanged))
+ {
+ // outline mode options have change which require to show all content
+ const SwOutlineNodes& rOutlineNds = pWrtShell->GetNodes().GetOutLineNds();
+ for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNds.size(); ++nPos)
+ {
+ SwNode* pNd = rOutlineNds[nPos];
+ if (pNd->IsTextNode()) // should always be true
+ {
+ bool bOutlineContentVisibleAttr = true;
+ pNd->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
+ if (!bOutlineContentVisibleAttr)
+ {
+ aFoldedOutlineNdsArray.push_back(pNd);
+ pWrtShell->ToggleOutlineContentVisibility(nPos);
+ }
+ }
+ }
+ }
}
if( SfxItemState::SET == rSet.GetItemState(SID_ATTR_METRIC, false, &pItem ) )
@@ -381,6 +424,26 @@ void SwModule::ApplyItemSet( sal_uInt16 nId, const SfxItemSet& rSet )
// set elements for the current view and shell
ApplyUsrPref( aViewOpt, pAppView, bTextDialog? SvViewOpt::DestText : SvViewOpt::DestWeb);
+
+ // must be done after ApplyUsrPref
+ if (SfxItemState::SET == rSet.GetItemState(FN_PARAM_ELEM, false))
+ {
+ if (!GetActiveWrtShell()->GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ // outline mode is no longer active
+ // set outline content visible attribute to false for nodes in the array
+ for (SwNode* pNd : aFoldedOutlineNdsArray)
+ pNd->GetTextNode()->SetAttrOutlineContentVisible(false);
+ }
+ else if (bShow)
+ {
+ // outline mode remained active
+ // sub level treatment might have changed
+ // ToggleOutlineContentVisiblity only knows sub level treatment after ApplyUserPref
+ for (SwNode* pNd : aFoldedOutlineNdsArray)
+ GetActiveWrtShell()->ToggleOutlineContentVisibility(pNd, true);
+ }
+ }
}
std::unique_ptr<SfxTabPage> SwModule::CreateTabPage( sal_uInt16 nId, weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet )
diff --git a/sw/source/uibase/config/cfgitems.cxx b/sw/source/uibase/config/cfgitems.cxx
index e7d1fc2a9a11..e32c86e14c52 100644
--- a/sw/source/uibase/config/cfgitems.cxx
+++ b/sw/source/uibase/config/cfgitems.cxx
@@ -100,6 +100,7 @@ SwElemItem::SwElemItem() :
m_bNotes = false;
m_bShowInlineTooltips = true;
m_bShowOutlineContentVisibilityButton =
+ m_bTreatSubOutlineLevelsAsContent =
m_bShowChangesInMargin =
m_bFieldHiddenText =
m_bShowHiddenPara = false;
@@ -118,6 +119,7 @@ SwElemItem::SwElemItem(const SwViewOption& rVOpt) :
m_bNotes = rVOpt.IsPostIts();
m_bShowInlineTooltips = rVOpt.IsShowInlineTooltips();
m_bShowOutlineContentVisibilityButton = rVOpt.IsShowOutlineContentVisibilityButton();
+ m_bTreatSubOutlineLevelsAsContent = rVOpt.IsTreatSubOutlineLevelsAsContent();
m_bShowChangesInMargin = rVOpt.IsShowChangesInMargin();
m_bFieldHiddenText = rVOpt.IsShowHiddenField();
m_bShowHiddenPara = rVOpt.IsShowHiddenPara();
@@ -144,6 +146,7 @@ bool SwElemItem::operator==( const SfxPoolItem& rAttr ) const
m_bNotes == rItem.m_bNotes &&
m_bShowInlineTooltips == rItem.m_bShowInlineTooltips &&
m_bShowOutlineContentVisibilityButton == rItem.m_bShowOutlineContentVisibilityButton &&
+ m_bTreatSubOutlineLevelsAsContent == rItem.m_bTreatSubOutlineLevelsAsContent &&
m_bShowChangesInMargin == rItem.m_bShowChangesInMargin &&
m_bFieldHiddenText == rItem.m_bFieldHiddenText &&
m_bShowHiddenPara == rItem.m_bShowHiddenPara);
@@ -162,6 +165,7 @@ void SwElemItem::FillViewOptions( SwViewOption& rVOpt) const
rVOpt.SetPostIts (m_bNotes );
rVOpt.SetShowInlineTooltips( m_bShowInlineTooltips );
rVOpt.SetShowOutlineContentVisibilityButton(m_bShowOutlineContentVisibilityButton);
+ rVOpt.SetTreatSubOutlineLevelsAsContent(m_bTreatSubOutlineLevelsAsContent);
rVOpt.SetShowChangesInMargin( m_bShowChangesInMargin );
rVOpt.SetShowHiddenField(m_bFieldHiddenText );
rVOpt.SetShowHiddenPara(m_bShowHiddenPara );
diff --git a/sw/source/uibase/config/usrpref.cxx b/sw/source/uibase/config/usrpref.cxx
index e2d2336d76ac..e08b4dfd3699 100644
--- a/sw/source/uibase/config/usrpref.cxx
+++ b/sw/source/uibase/config/usrpref.cxx
@@ -76,7 +76,7 @@ SwMasterUsrPref::~SwMasterUsrPref()
}
const auto g_UpdateLinkIndex = 17;
-const auto g_DefaultAnchor = 24;
+const auto g_DefaultAnchor = 25;
Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
{
@@ -105,8 +105,9 @@ Sequence<OUString> SwContentViewConfig::GetPropertyNames() const
"Display/ShowInlineTooltips", // 20
"Display/UseHeaderFooterMenu", // 21
"Display/ShowOutlineContentVisibilityButton", // 22
- "Display/ShowChangesInMargin", // 23
- "Display/DefaultAnchor" // 24
+ "Display/TreatSubOutlineLevelsAsContent", // 23
+ "Display/ShowChangesInMargin", // 24
+ "Display/DefaultAnchor" // 25
};
#if defined(__GNUC__) && !defined(__clang__)
// clang 8.0.0 says strcmp isn't constexpr
@@ -175,8 +176,9 @@ void SwContentViewConfig::ImplCommit()
case 20: bVal = m_rParent.IsShowInlineTooltips(); break;// "Display/ShowInlineTooltips"
case 21: bVal = m_rParent.IsUseHeaderFooterMenu(); break;// "Display/UseHeaderFooterMenu"
case 22: bVal = m_rParent.IsShowOutlineContentVisibilityButton(); break;// "Display/ShowOutlineContentVisibilityButton"
- case 23: bVal = m_rParent.IsShowChangesInMargin(); break;// "Display/ShowChangesInMargin"
- case 24: pValues[nProp] <<= m_rParent.GetDefaultAnchor(); break;// "Display/DefaultAnchor"
+ case 23: bVal = m_rParent.IsTreatSubOutlineLevelsAsContent(); break;// "Display/TreatSubOutlineLevelsAsContent"
+ case 24: bVal = m_rParent.IsShowChangesInMargin(); break;// "Display/ShowChangesInMargin"
+ case 25: pValues[nProp] <<= m_rParent.GetDefaultAnchor(); break;// "Display/DefaultAnchor"
}
if ((nProp != g_UpdateLinkIndex) && (nProp != g_DefaultAnchor))
pValues[nProp] <<= bVal;
@@ -229,8 +231,9 @@ void SwContentViewConfig::Load()
case 20: m_rParent.SetShowInlineTooltips(bSet); break;// "Display/ShowInlineTooltips"
case 21: m_rParent.SetUseHeaderFooterMenu(bSet); break;// "Display/UseHeaderFooterMenu"
case 22: m_rParent.SetShowOutlineContentVisibilityButton(bSet); break;// "Display/ShowOutlineContententVisibilityButton"
- case 23: m_rParent.SetShowChangesInMargin(bSet); break;// "Display/ShowChangesInMargin"
- case 24:
+ case 23: m_rParent.SetTreatSubOutlineLevelsAsContent(bSet); break;// "Display/TreatSubOutlineLevelsAsContent"
+ case 24: m_rParent.SetShowChangesInMargin(bSet); break;// "Display/ShowChangesInMargin"
+ case 25:
{
sal_Int32 nSet;
pValues[nProp] >>= nSet;
diff --git a/sw/source/uibase/config/viewopt.cxx b/sw/source/uibase/config/viewopt.cxx
index 3e534f1126d9..458621846514 100644
--- a/sw/source/uibase/config/viewopt.cxx
+++ b/sw/source/uibase/config/viewopt.cxx
@@ -103,6 +103,11 @@ bool SwViewOption::IsShowOutlineContentVisibilityButton() const
(m_nCoreOptions & ViewOptFlags1::ShowOutlineContentVisibilityButton);
}
+bool SwViewOption::IsTreatSubOutlineLevelsAsContent() const
+{
+ return officecfg::Office::Common::Misc::ExperimentalMode::get() &&
+ (m_nCoreOptions & ViewOptFlags1::TreatSubOutlineLevelsAsContent);
+}
void SwViewOption::DrawRect( OutputDevice *pOut,
const SwRect &rRect, ::Color nCol )
diff --git a/sw/source/uibase/docvw/FrameControlsManager.cxx b/sw/source/uibase/docvw/FrameControlsManager.cxx
index 2232ca7ed869..886021ee89f8 100644
--- a/sw/source/uibase/docvw/FrameControlsManager.cxx
+++ b/sw/source/uibase/docvw/FrameControlsManager.cxx
@@ -218,7 +218,7 @@ void SwFrameControlsManager::SetOutlineContentVisibilityButton(const SwTextNode*
{
const SwContentFrame* pContentFrame = pTextNd->getLayoutFrame(nullptr);
- // has node frame changed or been deleted
+ // has node frame changed or been deleted?
std::map<const SwTextNode*, const SwContentFrame*>::iterator iter = m_aTextNodeContentFrameMap.find(pTextNd);
if (iter != m_aTextNodeContentFrameMap.end())
{
@@ -272,17 +272,38 @@ void SwFrameControlsManager::SetOutlineContentVisibilityButton(const SwTextNode*
{
// show expand button immediately
pWin->Show();
- // outline content might not be folded, this happens on undo, outline moves, and folded outline content reveals
+ /*
+ The outline content might be visible here. This happens on document load,
+ undo outline moves, and show of outline content that itself has outline nodes
+ having outline content visibility attribute false, for example tables and text
+ frames containing outline nodes.
+ */
SwOutlineNodes::size_type nPos;
SwOutlineNodes rOutlineNds = m_pEditWin->GetView().GetWrtShell().GetNodes().GetOutLineNds();
if (rOutlineNds.Seek_Entry(const_cast<SwTextNode*>(pTextNd), &nPos))
{
- // don't toggle if next node is an outline node or end node
- SwNodeIndex aIdx(*pTextNd, 1);
- if (!(aIdx.GetNode().IsEndNode() || ((nPos + 1 < rOutlineNds.size()) && &aIdx.GetNode() == rOutlineNds[nPos +1]))
- && aIdx.GetNode().IsContentNode() && aIdx.GetNode().GetContentNode()->getLayoutFrame(nullptr))
+ SwNodeIndex aIdx(*pTextNd, +1);
+ // there shouldn't be a layout frame
+ // if there is then force visiblity false
+ if (!m_pEditWin->GetView().GetWrtShell().GetViewOptions()->IsTreatSubOutlineLevelsAsContent())
{
- m_pEditWin->GetView().GetWrtShell().ToggleOutlineContentVisibility(nPos, true); // force fold
+ if (!(aIdx.GetNode().IsEndNode() ||
+ (nPos + 1 < rOutlineNds.size() && &aIdx.GetNode() == rOutlineNds[nPos +1]))
+ && aIdx.GetNode().IsContentNode()
+ // this determines if the content is really visible
+ && aIdx.GetNode().GetContentNode()->getLayoutFrame(nullptr))
+ {
+ // force outline content visibility false
+ m_pEditWin->GetView().GetWrtShell().ToggleOutlineContentVisibility(nPos, true);
+ }
+ }
+ else if (!aIdx.GetNode().IsEndNode()
+ && aIdx.GetNode().IsContentNode()
+ // this determines if the content is really visible
+ && aIdx.GetNode().GetContentNode()->getLayoutFrame(nullptr))
+ {
+ // force outline content visibility false
+ m_pEditWin->GetView().GetWrtShell().ToggleOutlineContentVisibility(nPos, true);
}
}
}
diff --git a/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx b/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
index b696709d6042..864c2b604bd0 100644
--- a/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
+++ b/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
@@ -21,6 +21,8 @@
#include <strings.hrc>
#include <svx/svdview.hxx>
+#include <viewopt.hxx>
+
SwOutlineContentVisibilityWin::SwOutlineContentVisibilityWin(SwEditWin* pEditWin,
const SwFrame* pFrame)
: InterimItemWindow(pEditWin, "modules/swriter/ui/outlinebutton.ui", "OutlineButton")
@@ -50,7 +52,7 @@ SwOutlineContentVisibilityWin::SwOutlineContentVisibilityWin(SwEditWin* pEditWin
m_xRightBtn->connect_key_press(LINK(this, SwOutlineContentVisibilityWin, KeyInputHdl));
m_xDownBtn->connect_key_press(LINK(this, SwOutlineContentVisibilityWin, KeyInputHdl));
- m_aDelayTimer.SetTimeout(50);
+ m_aDelayTimer.SetTimeout(25);
m_aDelayTimer.SetInvokeHandler(LINK(this, SwOutlineContentVisibilityWin, DelayAppearHandler));
}
@@ -132,44 +134,17 @@ void SwOutlineContentVisibilityWin::Set()
return;
}
- // don't set if no content and no subs with content
- auto nPos = m_nOutlinePos;
- SwNode* pSttNd = rOutlineNodes[nPos];
- SwNode* pEndNd;
- SwNodeIndex aIdx(*pSttNd);
- while (true)
- {
- if (rOutlineNodes.size() > ++nPos)
- pEndNd = rOutlineNodes[nPos];
- else
- pEndNd = &rSh.GetNodes().GetEndOfContent();
- if (!pSttNd->IsEndNode())
- aIdx.Assign(*pSttNd, +1);
- if (pSttNd->IsEndNode()
- || ((&aIdx.GetNode() == pEndNd && pEndNd->IsEndNode())
- || (&aIdx.GetNode() == pEndNd && pSttNd->IsTextNode() && pEndNd->IsTextNode()
- && pSttNd->GetTextNode()->GetAttrOutlineLevel()
- >= pEndNd->GetTextNode()->GetAttrOutlineLevel())))
- {
- SetSymbol(SymbolType::DONTKNOW);
- Hide();
- return;
- }
- if (&aIdx.GetNode() != pEndNd)
- break;
- pSttNd = pEndNd;
- }
-
// set symbol displayed on button
- SetSymbol(rSh.IsOutlineContentFolded(m_nOutlinePos) ? SymbolType::ARROW_RIGHT
- : SymbolType::ARROW_DOWN);
+ SetSymbol(rSh.IsOutlineContentVisible(m_nOutlinePos) ? SymbolType::ARROW_DOWN
+ : SymbolType::ARROW_RIGHT);
// set quick help
SwOutlineNodes::size_type nOutlineNodesCount
= rSh.getIDocumentOutlineNodesAccess()->getOutlineNodesCount();
int nLevel = rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(m_nOutlinePos);
OUString sQuickHelp(SwResId(STR_OUTLINE_CONTENT_TOGGLE_VISIBILITY));
- if (m_nOutlinePos + 1 < nOutlineNodesCount
+ if (!rSh.GetViewOptions()->IsTreatSubOutlineLevelsAsContent()
+ && m_nOutlinePos + 1 < nOutlineNodesCount
&& rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(m_nOutlinePos + 1) > nLevel)
sQuickHelp += " (" + SwResId(STR_OUTLINE_CONTENT_TOGGLE_VISIBILITY_EXT) + ")";
SetQuickHelpText(sQuickHelp);
@@ -219,30 +194,30 @@ void SwOutlineContentVisibilityWin::ToggleOutlineContentVisibility(const bool bS
// set cursor position here so Navigator tracks outline
// when doc changed broadcast message is sent in toggle function
rSh.GotoOutline(m_nOutlinePos);
- if (bSubs)
+ if (rSh.GetViewOptions()->IsTreatSubOutlineLevelsAsContent())
+ rSh.ToggleOutlineContentVisibility(m_nOutlinePos);
+ else if (bSubs)
{
// toggle including sub levels
SwOutlineNodes::size_type nPos = m_nOutlinePos;
SwOutlineNodes::size_type nOutlineNodesCount
= rSh.getIDocumentOutlineNodesAccess()->getOutlineNodesCount();
int nLevel = rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(m_nOutlinePos);
- bool bFold = rSh.IsOutlineContentFolded(m_nOutlinePos);
+ bool bVisible = rSh.IsOutlineContentVisible(m_nOutlinePos);
do
{
- if (rSh.IsOutlineContentFolded(nPos) == bFold)
+ if (rSh.IsOutlineContentVisible(nPos) == bVisible)
rSh.ToggleOutlineContentVisibility(nPos);
} while (++nPos < nOutlineNodesCount
&& rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos) > nLevel);
}
else
rSh.ToggleOutlineContentVisibility(m_nOutlinePos);
-
if (!m_bDestroyed)
{
- SetSymbol(rSh.IsOutlineContentFolded(m_nOutlinePos) ? SymbolType::ARROW_RIGHT
- : SymbolType::ARROW_DOWN);
+ SetSymbol(rSh.IsOutlineContentVisible(m_nOutlinePos) ? SymbolType::ARROW_DOWN
+ : SymbolType::ARROW_RIGHT);
}
-
rSh.LockView(false);
}
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 32ca8139fdc5..303bb7b7aa8f 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -577,7 +577,8 @@ void SwEditWin::UpdatePointer(const Point &rLPt, sal_uInt16 nModifier )
= rSh.getIDocumentOutlineNodesAccess()->getOutlineNodesCount();
int nLevel = rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos);
OUString sQuickHelp(SwResId(STR_CLICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY));
- if (nPos + 1 < nOutlineNodesCount
+ if (!rSh.GetViewOptions()->IsTreatSubOutlineLevelsAsContent()
+ && nPos + 1 < nOutlineNodesCount
&& rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos + 1) > nLevel)
sQuickHelp += " (" + SwResId(STR_CLICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY_EXT) + ")";
SetQuickHelpText(sQuickHelp);
@@ -1362,7 +1363,7 @@ void SwEditWin::KeyInput(const KeyEvent &rKEvt)
if (rSh.GetViewOptions()->IsShowOutlineContentVisibilityButton())
{
- // not allowed if outline content is folded
+ // not allowed if outline content visibility is false
sal_uInt16 nKey = rKEvt.GetKeyCode().GetCode();
if ((rSh.IsSttPara() && (nKey == KEY_BACKSPACE || nKey == KEY_LEFT))
|| (rSh.IsEndOfPara() && (nKey == KEY_DELETE || nKey == KEY_RETURN || nKey == KEY_RIGHT)))
@@ -1374,13 +1375,13 @@ void SwEditWin::KeyInput(const KeyEvent &rKEvt)
bool bOutlineContentVisibleAttr = true;
pContentNode->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
if (!bOutlineContentVisibleAttr)
- return; // outline node is folded
+ return; // outline content visibility is false
if (rSh.IsSttPara() && (nKey == KEY_BACKSPACE || nKey == KEY_LEFT) && (nPos-1 != SwOutlineNodes::npos))
{
bOutlineContentVisibleAttr = true;
rSh.GetDoc()->GetNodes().GetOutLineNds()[nPos-1]->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
if (!bOutlineContentVisibleAttr)
- return; // previous outline node is folded
+ return; // previous outline node has content visibility false
}
}
}
@@ -3538,7 +3539,7 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
MoveCursor(rSh, aDocPos, bOnlyText, bLockView);
SwPaM aPam(*rSh.GetCurrentShellCursor().GetPoint());
SwOutlineNodes::size_type nPos;
- if (rSh.GetNodes().GetOutLineNds().Seek_Entry( &aPam.GetPoint()->nNode.GetNode(), &nPos))
+ if (rSh.GetNodes().GetOutLineNds().Seek_Entry(&aPam.GetPoint()->nNode.GetNode(), &nPos))
rSh.ToggleOutlineContentVisibility(nPos);
return;
}
@@ -3787,15 +3788,20 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
SwOutlineNodes::size_type nPos;
if (rSh.GetNodes().GetOutLineNds().Seek_Entry(&aPam.GetPoint()->nNode.GetNode(), &nPos))
{
- SwOutlineNodes::size_type nOutlineNodesCount = rSh.getIDocumentOutlineNodesAccess()->getOutlineNodesCount();
- int nLevel = rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos);
- bool bFold = rSh.IsOutlineContentFolded(nPos);
- do
+ if (rSh.GetViewOptions()->IsTreatSubOutlineLevelsAsContent())
+ rSh.ToggleOutlineContentVisibility(nPos);
+ else
{
- if (rSh.IsOutlineContentFolded(nPos) == bFold)
- rSh.ToggleOutlineContentVisibility(nPos);
- } while (++nPos < nOutlineNodesCount
- && rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos) > nLevel);
+ SwOutlineNodes::size_type nOutlineNodesCount = rSh.getIDocumentOutlineNodesAccess()->getOutlineNodesCount();
+ int nLevel = rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos);
+ bool bVisible = rSh.IsOutlineContentVisible(nPos);
+ do
+ {
+ if (rSh.IsOutlineContentVisible(nPos) == bVisible)
+ rSh.ToggleOutlineContentVisibility(nPos);
+ } while (++nPos < nOutlineNodesCount
+ && rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos) > nLevel);
+ }
return;
}
}
@@ -3944,15 +3950,15 @@ void SwEditWin::MouseMove(const MouseEvent& _rMEvt)
// remove collapse button when saved frame is not frame at mouse position
if (m_pSavedOutlineFrame && /* is it possible that m_pSavedOutlineFrame is removed? */ !m_pSavedOutlineFrame->IsInDtor() &&
rNds.GetOutLineNds().Seek_Entry(static_cast<SwTextFrame*>(m_pSavedOutlineFrame)->GetTextNodeFirst(), &nPos) &&
- !rSh.IsOutlineContentFolded(nPos))
+ rSh.IsOutlineContentVisible(nPos))
{
GetFrameControlsManager().RemoveControlsByType(FrameControlType::Outline, m_pSavedOutlineFrame);
}
m_pSavedOutlineFrame = pContentFrame;
}
// show collapse button
- if (rNds.GetOutLineNds().Seek_Entry(aSwContentAtPos.aFnd.pNode->GetTextNode(), &nPos) &&
- !rSh.IsOutlineContentFolded(nPos))
+ if (rNds.GetOutLineNds().Seek_Entry(aSwContentAtPos.aFnd.pNode->GetTextNode(),
+ &nPos) && rSh.IsOutlineContentVisible(nPos))
{
GetFrameControlsManager().SetOutlineContentVisibilityButton(aSwContentAtPos.aFnd.pNode->GetTextNode());
}
@@ -3965,10 +3971,12 @@ void SwEditWin::MouseMove(const MouseEvent& _rMEvt)
// remove collapse button if showing
const SwNodes& rNds = rSh.GetDoc()->GetNodes();
SwOutlineNodes::size_type nPos;
- if (rNds.GetOutLineNds().Seek_Entry(static_cast<SwTextFrame*>(m_pSavedOutlineFrame)->GetTextNodeFirst(), &nPos) &&
- !rSh.IsOutlineContentFolded(nPos))
+ if (rNds.GetOutLineNds().Seek_Entry(static_cast<SwTextFrame*>(m_pSavedOutlineFrame)->
+ GetTextNodeFirst(), &nPos) &&
+ rSh.IsOutlineContentVisible(nPos))
{
- GetFrameControlsManager().RemoveControlsByType(FrameControlType::Outline, m_pSavedOutlineFrame);
+ GetFrameControlsManager().RemoveControlsByType(FrameControlType::Outline,
+ m_pSavedOutlineFrame);
}
m_pSavedOutlineFrame = nullptr;
}
@@ -4017,7 +4025,7 @@ void SwEditWin::MouseMove(const MouseEvent& _rMEvt)
const SwNodes& rNds = rSh.GetDoc()->GetNodes();
SwOutlineNodes::size_type nPos;
rNds.GetOutLineNds().Seek_Entry(static_cast<SwTextFrame*>(m_pSavedOutlineFrame)->GetTextNodeFirst(), &nPos);
- if (!rSh.IsOutlineContentFolded(nPos))
+ if (rSh.IsOutlineContentVisible(nPos))
GetFrameControlsManager().RemoveControlsByType(FrameControlType::Outline, m_pSavedOutlineFrame);
m_pSavedOutlineFrame = nullptr;
}
@@ -6631,38 +6639,6 @@ void SwEditWin::SetGraphicTwipPosition(bool bStart, const Point& rPosition)
}
}
-void SwEditWin::SetOutlineContentVisibilityButtons()
-{
- SwWrtShell& rSh = m_rView.GetWrtShell();
- const SwOutlineNodes& rOutlineNodes = rSh.GetDoc()->GetNodes().GetOutLineNds();
- if (!rSh.GetViewOptions()->IsShowOutlineContentVisibilityButton())
- {
- for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNodes.size(); ++nPos)
- {
- bool bOutlineContentVisibleAttr = true;
- rOutlineNodes[nPos]->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
- if (!bOutlineContentVisibleAttr)
- {
- // unfold and then set outline content visible attr to false for persistence
- rSh.ToggleOutlineContentVisibility(nPos);
- rOutlineNodes[nPos]->GetTextNode()->SetAttrOutlineContentVisible(false);
- }
- }
- GetFrameControlsManager().HideControls(FrameControlType::Outline);
- }
- else
- {
- for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNodes.size(); ++nPos)
- {
- bool bOutlineContentVisibleAttr = true;
- rOutlineNodes[nPos]->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
- if (!bOutlineContentVisibleAttr)
- rSh.ToggleOutlineContentVisibility(nPos, true);
- }
- }
- GetView().Invalidate(); // set state of dependent slots (FN_TOGGLE_OUTLINE_CONTENT_VISIBILITY)
-}
-
SwFrameControlsManager& SwEditWin::GetFrameControlsManager()
{
return *m_pFrameControlsManager;
diff --git a/sw/source/uibase/inc/cfgitems.hxx b/sw/source/uibase/inc/cfgitems.hxx
index a647c01f0925..0aa6c2c8d135 100644
--- a/sw/source/uibase/inc/cfgitems.hxx
+++ b/sw/source/uibase/inc/cfgitems.hxx
@@ -79,6 +79,7 @@ class SW_DLLPUBLIC SwElemItem : public SfxPoolItem
bool m_bNotes :1;
bool m_bShowInlineTooltips :1;
bool m_bShowOutlineContentVisibilityButton :1;
+ bool m_bTreatSubOutlineLevelsAsContent :1;
bool m_bShowChangesInMargin :1;
bool m_bFieldHiddenText :1;
bool m_bShowHiddenPara :1;
diff --git a/sw/source/uibase/inc/edtwin.hxx b/sw/source/uibase/inc/edtwin.hxx
index a74afc85d085..cb736bdf562f 100644
--- a/sw/source/uibase/inc/edtwin.hxx
+++ b/sw/source/uibase/inc/edtwin.hxx
@@ -294,8 +294,6 @@ public:
const SwFrame* GetSavedOutlineFrame() const { return m_pSavedOutlineFrame; }
void SetSavedOutlineFrame(SwFrame* pFrame) { m_pSavedOutlineFrame = pFrame; }
- void SetOutlineContentVisibilityButtons();
-
virtual FactoryFunction GetUITestFactory() const override;
};
diff --git a/sw/source/uibase/inc/optpage.hxx b/sw/source/uibase/inc/optpage.hxx
index 2a35c1d843a8..18f2d1ee4c04 100644
--- a/sw/source/uibase/inc/optpage.hxx
+++ b/sw/source/uibase/inc/optpage.hxx
@@ -54,12 +54,15 @@ class SwContentOptPage : public SfxTabPage
std::unique_ptr<weld::ComboBox> m_xMetricLB;
std::unique_ptr<weld::CheckButton> m_xShowInlineTooltips;
+ std::unique_ptr<weld::Label> m_xOutlineLabel;
std::unique_ptr<weld::CheckButton> m_xShowOutlineContentVisibilityButton;
+ std::unique_ptr<weld::CheckButton> m_xTreatSubOutlineLevelsAsContent;
std::unique_ptr<weld::CheckButton> m_xShowChangesInMargin;
std::unique_ptr<weld::CheckButton> m_xFieldHiddenCB;
std::unique_ptr<weld::CheckButton> m_xFieldHiddenParaCB;
DECL_LINK(VertRulerHdl, weld::ToggleButton&, void);
+ DECL_LINK(ShowOutlineContentVisibilityButtonHdl, weld::ToggleButton&, void);
public:
SwContentOptPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet);
virtual ~SwContentOptPage() override;
diff --git a/sw/source/uibase/inc/wrtsh.hxx b/sw/source/uibase/inc/wrtsh.hxx
index d4c9a6be9d64..1bf0ce26db8a 100644
--- a/sw/source/uibase/inc/wrtsh.hxx
+++ b/sw/source/uibase/inc/wrtsh.hxx
@@ -490,9 +490,9 @@ typedef bool (SwWrtShell::*FNSimpleMove)();
/// Inserts a new annotation/comment at the current cursor position / selection.
void InsertPostIt(SwFieldMgr& rFieldMgr, const SfxRequest& rReq);
- bool IsOutlineContentFolded(const size_t nPos);
- void ToggleOutlineContentVisibility(SwNode* pNd, bool bForceFold = false);
- void ToggleOutlineContentVisibility(const size_t nPos, bool bForceFold = false);
+ bool IsOutlineContentVisible(const size_t nPos);
+ void ToggleOutlineContentVisibility(SwNode* pNd, const bool bForceNotVisible = false);
+ void ToggleOutlineContentVisibility(const size_t nPos, const bool bForceNotVisible = false);
private:
diff --git a/sw/source/uibase/uiview/view0.cxx b/sw/source/uibase/uiview/view0.cxx
index 5dc5bc316110..ad2756b8fdd8 100644
--- a/sw/source/uibase/uiview/view0.cxx
+++ b/sw/source/uibase/uiview/view0.cxx
@@ -57,6 +57,8 @@
#include <swslots.hxx>
#include <PostItMgr.hxx>
+#include <ndtxt.hxx>
+
using namespace ::com::sun::star;
#include <unotools/moduleoptions.hxx>
@@ -594,11 +596,41 @@ void SwView::ExecViewOptions(SfxRequest &rReq)
break;
case FN_SHOW_OUTLINECONTENTVISIBILITYBUTTON:
+ {
if( STATE_TOGGLE == eState )
bFlag = !pOpt->IsShowOutlineContentVisibilityButton();
- pOpt->SetShowOutlineContentVisibilityButton( bFlag );
+ SwWrtShell &rSh = GetWrtShell();
+
+ // move cursor to top of document
+ if (rSh.IsSelFrameMode())
+ {
+ rSh.UnSelectFrame();
+ rSh.LeaveSelFrameMode();
+ }
+ rSh.EnterStdMode();
+ rSh.SttEndDoc(true);
+
+ if (!bFlag)
+ {
+ // make all content visible
+ const SwOutlineNodes& rOutlineNds = rSh.GetNodes().GetOutLineNds();
+ for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNds.size(); ++nPos)
+ {
+ SwNode* pNd = rOutlineNds[nPos];
+ bool bOutlineContentVisibleAttr = true;
+ pNd->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
+ if (!bOutlineContentVisibleAttr)
+ {
+ rSh.ToggleOutlineContentVisibility(nPos);
+ pNd->GetTextNode()->SetAttrOutlineContentVisible(false);
+ }
+ }
+ }
+
+ pOpt->SetShowOutlineContentVisibilityButton(bFlag);
break;
+ }
case FN_SHOW_CHANGES_IN_MARGIN:
if( STATE_TOGGLE == eState )
@@ -640,9 +672,6 @@ void SwView::ExecViewOptions(SfxRequest &rReq)
if ( nSlot == SID_AUTOSPELL_CHECK )
GetPostItMgr()->SetSpellChecking();
- if (nSlot == FN_SHOW_OUTLINECONTENTVISIBILITYBUTTON)
- GetEditWin().SetOutlineContentVisibilityButtons();
-
const bool bLockedView = rSh.IsViewLocked();
rSh.LockView( true ); //lock visible section
GetWrtShell().EndAction();
diff --git a/sw/source/uibase/uno/unomod.cxx b/sw/source/uibase/uno/unomod.cxx
index c17356610646..7138f5b6af01 100644
--- a/sw/source/uibase/uno/unomod.cxx
+++ b/sw/source/uibase/uno/unomod.cxx
@@ -96,6 +96,7 @@ enum SwViewSettingsPropertyHandles
HANDLE_VIEWSET_USE_HEADERFOOTERMENU,
HANDLE_VIEWSET_BOOKMARKS,
HANDLE_VIEWSET_SHOW_OUTLINECONTENTVISIBILITYBUTTON,
+ HANDLE_VIEWSET_TREAT_SUB_OUTLINE_LEVELS_AS_CONTENT,
HANDLE_VIEWSET_CHANGES_IN_MARGIN
};
@@ -136,6 +137,7 @@ static ChainablePropertySetInfo * lcl_createViewSettingsInfo()
{ OUString( "ShowInlineTooltips" ), HANDLE_VIEWSET_INLINECHANGES_TIPS , cppu::UnoType<bool>::get(), PROPERTY_NONE},
{ OUString( "UseHeaderFooterMenu" ), HANDLE_VIEWSET_USE_HEADERFOOTERMENU , cppu::UnoType<bool>::get(), PROPERTY_NONE},
{ OUString( "ShowOutlineContentVisibilityButton" ), HANDLE_VIEWSET_SHOW_OUTLINECONTENTVISIBILITYBUTTON , cppu::UnoType<bool>::get(), PROPERTY_NONE},
+ { OUString( "TreatSubOutlineLevelsAsContent" ), HANDLE_VIEWSET_TREAT_SUB_OUTLINE_LEVELS_AS_CONTENT , cppu::UnoType<bool>::get(), PROPERTY_NONE},
{ OUString( "ShowChangesInMargin" ), HANDLE_VIEWSET_CHANGES_IN_MARGIN, cppu::UnoType<bool>::get(), PROPERTY_NONE},
{ OUString( "RasterResolutionX"), HANDLE_VIEWSET_RASTER_RESOLUTION_X, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE},
{ OUString( "RasterResolutionY"), HANDLE_VIEWSET_RASTER_RESOLUTION_Y, cppu::UnoType<sal_Int32>::get(), PROPERTY_NONE},
@@ -600,6 +602,7 @@ void SwXViewSettings::_setSingleValue( const comphelper::PropertyInfo & rInfo, c
case HANDLE_VIEWSET_INLINECHANGES_TIPS : mpViewOption->SetShowInlineTooltips(*o3tl::doAccess<bool>(rValue)); break;
case HANDLE_VIEWSET_USE_HEADERFOOTERMENU : mpViewOption->SetUseHeaderFooterMenu(*o3tl::doAccess<bool>(rValue)); break;
case HANDLE_VIEWSET_SHOW_OUTLINECONTENTVISIBILITYBUTTON : mpViewOption->SetShowOutlineContentVisibilityButton(*o3tl::doAccess<bool>(rValue)); break;
+ case HANDLE_VIEWSET_TREAT_SUB_OUTLINE_LEVELS_AS_CONTENT : mpViewOption->SetTreatSubOutlineLevelsAsContent(*o3tl::doAccess<bool>(rValue)); break;
case HANDLE_VIEWSET_CHANGES_IN_MARGIN : mpViewOption->SetShowChangesInMargin(*o3tl::doAccess<bool>(rValue)); break;
case HANDLE_VIEWSET_RASTER_RESOLUTION_X :
{
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx
index 54b84ee935d9..378a6675e861 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -1262,7 +1262,7 @@ static void lcl_SetOutlineContentEntriesSensitivities(SwContentTree* pThis, cons
nPos++;
}
- bool bHasFolded(pThis->GetWrtShell()->IsOutlineContentFolded(nPos));
+ bool bHasFolded(!pThis->GetWrtShell()->IsOutlineContentVisible(nPos));
bool bHasUnfolded(!bHasFolded);
while ((++nPos < pThis->GetWrtShell()->getIDocumentOutlineNodesAccess()->getOutlineNodesCount()) &&
@@ -1278,7 +1278,7 @@ static void lcl_SetOutlineContentEntriesSensitivities(SwContentTree* pThis, cons
if (rNodes.GoNext(&aIdx) == pEndNd)
continue; // skip if no content
- if (pThis->GetWrtShell()->IsOutlineContentFolded(nPos))
+ if (!pThis->GetWrtShell()->IsOutlineContentVisible(nPos))
bHasFolded = true;
else
bHasUnfolded = true;
@@ -2840,6 +2840,7 @@ void SwContentTree::ExecCommand(std::string_view rCmd, bool bOutlineWithChildren
SwOutlineNodes::difference_type nDirLast = bUp ? -1 : 1;
bool bStartedAction = false;
+ std::vector<SwNode*> aOutlineNdsArray;
for (auto const& pCurrentEntry : selected)
{
assert(pCurrentEntry && lcl_IsContent(*pCurrentEntry, *m_xTreeView));
@@ -2861,6 +2862,29 @@ void SwContentTree::ExecCommand(std::string_view rCmd, bool bOutlineWithChildren
if (!bStartedAction)
{
pShell->StartAllAction();
+ if (bUpDown)
+ {
+ if (pShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ // make all outline nodes content visible before move
+ // restore outline nodes content visibile state after move
+ SwOutlineNodes rOutlineNds = pShell->GetDoc()->GetNodes().GetOutLineNds();
+ for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNds.size(); ++nPos)
+ {
+ SwNode* pNd = rOutlineNds[nPos];
+ if (pNd->IsTextNode()) // should always be true
+ {
+ bool bOutlineContentVisibleAttr = true;
+ pNd->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
+ if (!bOutlineContentVisibleAttr)
+ {
+ aOutlineNdsArray.push_back(pNd);
+ pShell->ToggleOutlineContentVisibility(nPos);
+ }
+ }
+ }
+ }
+ }
pShell->StartUndo(bLeftRight ? SwUndoId::OUTLINE_LR : SwUndoId::OUTLINE_UD);
bStartedAction = true;
}
@@ -3032,6 +3056,15 @@ void SwContentTree::ExecCommand(std::string_view rCmd, bool bOutlineWithChildren
if (bStartedAction)
{
pShell->EndUndo();
+ if (bUpDown)
+ {
+ if (pShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ // restore state of outline content visibility to before move
+ for (SwNode* pNd : aOutlineNdsArray)
+ pShell->ToggleOutlineContentVisibility(pNd, true);
+ }
+ }
pShell->EndAllAction();
if (m_aActiveContentArr[ContentTypeId::OUTLINE])
m_aActiveContentArr[ContentTypeId::OUTLINE]->Invalidate();
@@ -3365,6 +3398,28 @@ void SwContentTree::MoveOutline(SwOutlineNodes::size_type nTargetPos)
{
SwWrtShell *const pShell = GetWrtShell();
pShell->StartAllAction();
+ std::vector<SwNode*> aOutlineNdsArray;
+
+ if (pShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ // make all outline nodes content visible before move
+ // restore outline nodes content visibile state after move
+ SwOutlineNodes rOutlineNds = pShell->GetDoc()->GetNodes().GetOutLineNds();
+ for (SwOutlineNodes::size_type nPos = 0; nPos < rOutlineNds.size(); ++nPos)
+ {
+ SwNode* pNd = rOutlineNds[nPos];
+ if (pNd->IsTextNode()) // should always be true
+ {
+ bool bOutlineContentVisibleAttr = true;
+ pNd->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr);
+ if (!bOutlineContentVisibleAttr)
+ {
+ aOutlineNdsArray.push_back(pNd);
+ pShell->ToggleOutlineContentVisibility(nPos);
+ }
+ }
+ }
+ }
pShell->StartUndo(SwUndoId::OUTLINE_UD);
SwOutlineNodes::size_type nPrevSourcePos = SwOutlineNodes::npos;
@@ -3415,6 +3470,12 @@ void SwContentTree::MoveOutline(SwOutlineNodes::size_type nTargetPos)
}
pShell->EndUndo();
+ if (pShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ // restore state of outline content visibility to before move
+ for (SwNode* pNd : aOutlineNdsArray)
+ pShell->ToggleOutlineContentVisibility(pNd, true);
+ }
pShell->EndAllAction();
m_aActiveContentArr[ContentTypeId::OUTLINE]->Invalidate();
Display(true);
@@ -3726,6 +3787,11 @@ void SwContentTree::ExecuteContextMenuAction(const OString& rSelectedPopupEntry)
m_pActiveShell->EnterStdMode();
m_bIgnoreViewChange = true;
SwOutlineContent* pCntFirst = reinterpret_cast<SwOutlineContent*>(m_xTreeView->get_id(*xFirst).toInt64());
+ if (lcl_IsContentType(*xFirst, *m_xTreeView)) // Headings root entry
+ m_pActiveShell->GotoPage(1, true);
+ else
+ GotoContent(pCntFirst);
+ grab_focus();
if (nSelectedPopupEntry == 1512)
{
m_pActiveShell->ToggleOutlineContentVisibility(pCntFirst->GetOutlinePos());
@@ -3745,16 +3811,11 @@ void SwContentTree::ExecuteContextMenuAction(const OString& rSelectedPopupEntry)
bool bFold(nSelectedPopupEntry == 1514);
do
{
- if (m_pActiveShell->IsOutlineContentFolded(nPos) == bFold)
+ if (!m_pActiveShell->IsOutlineContentVisible(nPos) == bFold)
m_pActiveShell->ToggleOutlineContentVisibility(nPos);
} while (++nPos < nOutlineNodesCount
&& (nLevel == -1 || m_pActiveShell->getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos) > nLevel));
}
- if (lcl_IsContentType(*xFirst, *m_xTreeView)) // Headings root entry
- m_pActiveShell->GotoPage(1, true);
- else
- GotoContent(pCntFirst);
- grab_focus();
m_bIgnoreViewChange = false;
}
break;
diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx
index 0019de241a1f..496a302a1d1e 100644
--- a/sw/source/uibase/wrtsh/wrtsh1.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh1.cxx
@@ -1989,32 +1989,30 @@ void SwWrtShell::InsertPostIt(SwFieldMgr& rFieldMgr, const SfxRequest& rReq)
pFormat->Broadcast( SwFormatFieldHint( nullptr, SwFormatFieldHintWhich::FOCUS, &GetView() ) );
}
}
-bool SwWrtShell::IsOutlineContentFolded(const size_t nPos)
+bool SwWrtShell::IsOutlineContentVisible(const size_t nPos)
{
const SwNodes& rNodes = GetDoc()->GetNodes();
const SwOutlineNodes& rOutlineNodes = rNodes.GetOutLineNds();
- assert(nPos < rOutlineNodes.size());
-
SwNode* pOutlineNode = rOutlineNodes[nPos];
if (pOutlineNode->IsEndNode())
- return false;
+ return true;
bool bOutlineContentVisibleAttr = false;
if (pOutlineNode->GetTextNode()->GetAttrOutlineContentVisible(bOutlineContentVisibleAttr))
- return !bOutlineContentVisibleAttr;
+ return bOutlineContentVisibleAttr;
- return false;
+ return true;
}
-void SwWrtShell::ToggleOutlineContentVisibility(SwNode* pNd, bool bForceFold)
+void SwWrtShell::ToggleOutlineContentVisibility(SwNode* pNd, const bool bForceNotVisible)
{
SwOutlineNodes::size_type nPos;
if (GetNodes().GetOutLineNds().Seek_Entry(pNd, &nPos))
- ToggleOutlineContentVisibility(nPos, bForceFold);
+ ToggleOutlineContentVisibility(nPos, bForceNotVisible);
}
-void SwWrtShell::ToggleOutlineContentVisibility(size_t nPos, bool bForceFold)
+void SwWrtShell::ToggleOutlineContentVisibility(const size_t nPos, const bool bForceNotVisible)
{
const SwNodes& rNodes = GetNodes();
const SwOutlineNodes& rOutlineNodes = rNodes.GetOutLineNds();
@@ -2031,7 +2029,7 @@ void SwWrtShell::ToggleOutlineContentVisibility(size_t nPos, bool bForceFold)
if (pSttNd->GetTableBox() || pSttNd->GetIndex() < rNodes.GetEndOfExtras().GetIndex())
{
- // limit folding to within table box
+ // limit toggle to within table box
if (pSttNd->EndOfSectionIndex() < pEndNd->GetIndex() )
pEndNd = pSttNd->EndOfSectionNode();
}
@@ -2049,17 +2047,47 @@ void SwWrtShell::ToggleOutlineContentVisibility(size_t nPos, bool bForceFold)
}
}
- if (IsOutlineContentFolded(nPos) && !bForceFold)
+ if (GetViewOptions()->IsTreatSubOutlineLevelsAsContent())
{
- // unfold
- SwNodeIndex aIdx(*pSttNd, +1);
+ int nLevel = pSttNd->GetTextNode()->GetAttrOutlineLevel();
+ SwOutlineNodes::size_type iPos = nPos;
+ while (++iPos < rOutlineNodes.size() &&
+ rOutlineNodes[iPos]->GetTextNode()->GetAttrOutlineLevel() > nLevel);
+
+ // get the correct end node
+ // the outline node may be in frames, headers, footers special section of doc model
+ SwNode* pStartOfSectionNodeSttNd = pSttNd->StartOfSectionNode();
+ while (pStartOfSectionNodeSttNd->StartOfSectionNode()
+ != pStartOfSectionNodeSttNd->StartOfSectionNode()->StartOfSectionNode())
+ {
+ pStartOfSectionNodeSttNd = pStartOfSectionNodeSttNd->StartOfSectionNode();
+ }
+ pEndNd = pStartOfSectionNodeSttNd->EndOfSectionNode();
+
+ if (iPos < rOutlineNodes.size())
+ {
+ SwNode* pStartOfSectionNode = rOutlineNodes[iPos]->StartOfSectionNode();
+ while (pStartOfSectionNode->StartOfSectionNode()
+ != pStartOfSectionNode->StartOfSectionNode()->StartOfSectionNode())
+ {
+ pStartOfSectionNode = pStartOfSectionNode->StartOfSectionNode();
+ }
+ if (pStartOfSectionNodeSttNd == pStartOfSectionNode)
+ pEndNd = rOutlineNodes[iPos];
+ }
+ }
+
+ SwNodeIndex aIdx(*pSttNd, +1); // the next node after pSttdNd in the doc model SwNodes
+ if (!IsOutlineContentVisible(nPos) && !bForceNotVisible)
+ {
+ // make visible
MakeFrames(GetDoc(), aIdx, *pEndNd);
pSttNd->GetTextNode()->SetAttrOutlineContentVisible(true);
if (GetViewOptions()->IsShowOutlineContentVisibilityButton())
{
- // remove fold button if focus is not on outline frame control window
+ // remove button if focus is not on outline frame control window
SwContentFrame* pFrame = pSttNd->GetTextNode()->getLayoutFrame(nullptr);
if (pFrame && !pFrame->IsInDtor())
{
@@ -2068,7 +2096,7 @@ void SwWrtShell::ToggleOutlineContentVisibility(size_t nPos, bool bForceFold)
GetView().GetEditWin().GetFrameControlsManager().RemoveControlsByType(FrameControlType::Outline, pFrame);
}
- // fold revealed outline nodes that have collapsed content
+ // toggle outline content made visible that have outline visible attribute false
while (aIdx != *pEndNd)
{
SwNode* pTmpNd = &aIdx.GetNode();
@@ -2083,7 +2111,7 @@ void SwWrtShell::ToggleOutlineContentVisibility(size_t nPos, bool bForceFold)
if (rOutlineNodes.Seek_Entry(pTmpTextNd, &iPos))
{
if (pTmpTextNd->getLayoutFrame(nullptr))
- ToggleOutlineContentVisibility(iPos, true);
+ ToggleOutlineContentVisibility(iPos, true); // force not visible
}
}
}
@@ -2093,18 +2121,19 @@ void SwWrtShell::ToggleOutlineContentVisibility(size_t nPos, bool bForceFold)
}
else
{
- // fold
- for (SwNodeIndex aIdx(*pSttNd, +1); &aIdx.GetNode() != pEndNd; aIdx++)
+ // remove content frames
+ while (aIdx != *pEndNd)
{
SwNode* pNd = &aIdx.GetNode();
if (pNd->IsContentNode())
pNd->GetContentNode()->DelFrames(nullptr);
else if (pNd->IsTableNode())
pNd->GetTableNode()->DelFrames(nullptr);
+ aIdx++;
}
pSttNd->GetTextNode()->SetAttrOutlineContentVisible(false);
}
- GetView().GetEditWin().Invalidate(InvalidateFlags::Update);
+
GetDoc()->GetDocShell()->Broadcast(SfxHint(SfxHintId::DocChanged));
}
diff --git a/sw/uiconfig/swriter/ui/viewoptionspage.ui b/sw/uiconfig/swriter/ui/viewoptionspage.ui
index 82204b0f3d83..b1ef4247bc3c 100644
--- a/sw/uiconfig/swriter/ui/viewoptionspage.ui
+++ b/sw/uiconfig/swriter/ui/viewoptionspage.ui
@@ -371,61 +371,6 @@
<property name="position">3</property>
</packing>
</child>
- <child>
- <object class="GtkFrame" id="changesframe1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="fieldsalignment2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="top_padding">6</property>
- <property name="left_padding">12</property>
- <child>
- <!-- n-columns=1 n-rows=1 -->
- <object class="GtkGrid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="outlinecontentvisibilitybutton">
- <property name="label" translatable="yes" context="viewoptionspage|outlinecontentvisibilitybutton">_Show outline content visibility button</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="outlinelabel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="viewoptionspage|outlinelabel">Outline mode</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
</object>
<packing>
<property name="left_attach">0</property>
@@ -671,6 +616,76 @@
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkFrame" id="outlineframe">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="outlinealignment">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkGrid">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="row_spacing">6</property>
+ <property name="column_spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="outlinecontentvisibilitybutton">
+ <property name="label" translatable="yes" context="viewoptionspage|outlinecontentvisibilitybutton">_Show outline content visibility button</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="suboutlinelevelsascontent">
+ <property name="label" translatable="yes" context="viewoptionspage|suboutlinelevelscontent">Include sub _levels</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="margin_left">12</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="outlinelabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="viewoptionspage|outlinelabel">Outline mode</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="left_attach">1</property>
More information about the Libreoffice-commits
mailing list