[Libreoffice-commits] core.git: 2 commits - officecfg/registry sw/inc sw/sdi sw/source
Jim Raykowski (via logerrit)
logerrit at kemper.freedesktop.org
Thu Jul 30 10:05:22 UTC 2020
officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu | 14 +
sw/inc/cmdid.h | 1
sw/inc/strings.hrc | 2
sw/sdi/_viewsh.sdi | 5
sw/sdi/swriter.sdi | 17 +
sw/source/uibase/docvw/edtwin.cxx | 113 +++++++---
sw/source/uibase/uiview/view2.cxx | 8
sw/source/uibase/uiview/viewstat.cxx | 13 +
8 files changed, 150 insertions(+), 23 deletions(-)
New commits:
commit 12ff89af74cd12375436b67b85674a4a2064ef8d
Author: Jim Raykowski <raykowj at gmail.com>
AuthorDate: Mon Jul 27 20:24:52 2020 -0800
Commit: Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Thu Jul 30 12:04:39 2020 +0200
tdf#38093 Writer outline folding - .uno:ToggleOutlineContentVisibility
Patch 4/6 that breaks down https://gerrit.libreoffice.org/c/core/+/96672
Add UNO command to toggle outline content visibility
Change-Id: I5365b29ab88d67a449b551b303f050b52063b977
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99655
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
index 7d3292add406..4aa43ea00bae 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
@@ -3679,6 +3679,20 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:ToggleOutlineContentVisibility" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Toggle Outline Content Visibility</value>
+ </prop>
+ <prop oor:name="TooltipLabel" oor:type="xs:string">
+ <value xml:lang="en-US">Fold or unfold outline content in document</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ <prop oor:name="IsExperimental" oor:type="xs:boolean">
+ <value>true</value>
+ </prop>
+ </node>
</node>
</node>
</oor:component-data>
diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index d5332f02ca73..fda0486edbe2 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -187,6 +187,7 @@
#define FN_VIEW_SHOW_WHITESPACE (FN_VIEW + 62) /* Show header, footer, and pagebreak */
#define FN_SHOW_OUTLINECONTENTVISIBILITYBUTTON (FN_VIEW + 63) /* Show outline content visibility toggle button */
+#define FN_TOGGLE_OUTLINE_CONTENT_VISIBILITY (FN_VIEW + 64)
// Region: Insert
#define FN_INSERT_BOOKMARK (FN_INSERT + 2 ) /* Bookmark */
diff --git a/sw/sdi/_viewsh.sdi b/sw/sdi/_viewsh.sdi
index f26e4f0f615e..3959e54b3cc2 100644
--- a/sw/sdi/_viewsh.sdi
+++ b/sw/sdi/_viewsh.sdi
@@ -18,6 +18,11 @@
interface BaseTextEditView
{
+ FN_TOGGLE_OUTLINE_CONTENT_VISIBILITY
+ [
+ ExecMethod = Execute ;
+ StateMethod = GetState ;
+ ]
FN_REFRESH_VIEW // status(final|play)
[
ExecMethod = Execute ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index b17737f06c36..ae5c0765ccd4 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -4818,6 +4818,23 @@ SfxVoidItem PrintPagePreview FN_PRINT_PAGEPREVIEW
GroupId = SfxGroupId::View;
]
+SfxVoidItem ToggleOutlineContentVisibility FN_TOGGLE_OUTLINE_CONTENT_VISIBILITY
+()
+[
+ AutoUpdate = FALSE,
+ FastCall = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = SfxGroupId::View;
+]
+
SfxVoidItem Protect FN_TABLE_SET_READ_ONLY_CELLS
()
[
diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx
index 2768719cc696..87d0a64f33bc 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -1123,6 +1123,14 @@ void SwView::Execute(SfxRequest &rReq)
lcl_SetAllTextToDefaultLanguage( *m_pWrtShell, RES_CHRATR_CJK_LANGUAGE );
}
break;
+ case FN_TOGGLE_OUTLINE_CONTENT_VISIBILITY:
+ {
+ m_pWrtShell->EnterStdMode();
+ size_t nPos(m_pWrtShell->GetOutlinePos());
+ m_pWrtShell->ToggleOutlineContentVisibility(nPos);
+ m_pWrtShell->GotoOutline(nPos);
+ }
+ break;
case FN_NAV_ELEMENT:
{
// nothing here on purpose - if removed only the listbox that changed is changed
diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx
index 969eea90971d..c9ace0d854a0 100644
--- a/sw/source/uibase/uiview/viewstat.cxx
+++ b/sw/source/uibase/uiview/viewstat.cxx
@@ -69,6 +69,19 @@ void SwView::GetState(SfxItemSet &rSet)
{
switch(nWhich)
{
+ case FN_TOGGLE_OUTLINE_CONTENT_VISIBILITY:
+ {
+ bool bDisable(true);
+ if (m_pWrtShell->GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ SwOutlineNodes::size_type nPos = m_pWrtShell->GetOutlinePos();
+ if (nPos != SwOutlineNodes::npos)
+ bDisable = false;
+ }
+ if (bDisable)
+ rSet.DisableItem(nWhich);
+ }
+ break;
case FN_NAV_ELEMENT:
// used to update all instances of this control
rSet.InvalidateItem( nWhich );
commit 5ab17ad2696aeb8acfc21cd2442908b785a53e86
Author: Jim Raykowski <raykowj at gmail.com>
AuthorDate: Mon Jul 27 19:42:17 2020 -0800
Commit: Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Thu Jul 30 12:04:25 2020 +0200
tdf#38093 Writer outline folding - ctrl + click toggle visibility
Patch 3/6 that breaks down https://gerrit.libreoffice.org/c/core/+/96672
Adds ctrl + mouse-click to toggle outline content visibility. Right
click includes sub levels. Outline content visibility of sub levels is
set to that of the clicked outline content toggled visibility.
Change-Id: I428b3c683bec48bec147385dcdb1708e1f28d791
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99654
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index 86733bf6bb3a..20d45f5cc19b 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -645,6 +645,8 @@
#define STR_OUTLINE_TRACKING_OFF NC_("STR_OUTLINE_TRACKING_OFF", "Off")
#define STR_OUTLINE_CONTENT_TOGGLE_VISIBILITY NC_("STR_OUTLINE_CONTENT_TOGGLE_VISIBILITY", "Toggle Outline Content Visibility")
#define STR_OUTLINE_CONTENT_TOGGLE_VISIBILITY_EXT NC_("STR_OUTLINE_CONTENT_TOGGLE_VISIBILITY_EXT", "hold Ctrl or right-click to include sub levels")
+#define STR_ClICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY NC_("STR_CLICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY", "Click to Toggle Outline Content Visibility")
+#define STR_CLICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY_EXT NC_("STR_CLICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY_EXT", "right-click to include sub levels")
#define STR_EXPANDALL NC_("STR_EXPANDALL", "Expand All")
#define STR_COLLAPSEALL NC_("STR_COLLAPSEALL", "Collapse All")
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 8f0751024e2d..b2d43874a13d 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -143,6 +143,7 @@
#include <ndtxt.hxx>
#include <cntfrm.hxx>
#include <txtfrm.hxx>
+#include <strings.hrc>
using namespace sw::mark;
using namespace ::com::sun::star;
@@ -332,6 +333,7 @@ static bool IsDrawObjSelectable( const SwWrtShell& rSh, const Point& rPt )
*/
void SwEditWin::UpdatePointer(const Point &rLPt, sal_uInt16 nModifier )
{
+ SetQuickHelpText(OUString());
SwWrtShell &rSh = m_rView.GetWrtShell();
if( m_pApplyTempl )
{
@@ -556,13 +558,37 @@ void SwEditWin::UpdatePointer(const Point &rLPt, sal_uInt16 nModifier )
IsAttrAtPos::ClickField |
IsAttrAtPos::InetAttr |
IsAttrAtPos::Ftn |
- IsAttrAtPos::SmartTag );
+ IsAttrAtPos::SmartTag |
+ IsAttrAtPos::Outline);
if( rSh.GetContentAtPos( rLPt, aSwContentAtPos) )
{
+ if (IsAttrAtPos::Outline == aSwContentAtPos.eContentAtPos)
+ {
+ if (nModifier == KEY_MOD1
+ && GetView().GetWrtShell().GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ eStyle = PointerStyle::RefHand;
+ // set quick help
+ if(aSwContentAtPos.aFnd.pNode && aSwContentAtPos.aFnd.pNode->IsTextNode())
+ {
+ const SwNodes& rNds = GetView().GetWrtShell().GetDoc()->GetNodes();
+ SwOutlineNodes::size_type nPos;
+ rNds.GetOutLineNds().Seek_Entry(aSwContentAtPos.aFnd.pNode->GetTextNode(), &nPos);
+ SwOutlineNodes::size_type nOutlineNodesCount
+ = rSh.getIDocumentOutlineNodesAccess()->getOutlineNodesCount();
+ int nLevel = rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos);
+ OUString sQuickHelp(SwResId(STR_ClICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY));
+ if (nPos + 1 < nOutlineNodesCount
+ && rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos + 1) > nLevel)
+ sQuickHelp += " (" + SwResId(STR_CLICK_OUTLINE_CONTENT_TOGGLE_VISIBILITY_EXT) + ")";
+ SetQuickHelpText(sQuickHelp);
+ }
+ }
+ }
// Is edit inline input field
- if (IsAttrAtPos::Field == aSwContentAtPos.eContentAtPos
- && aSwContentAtPos.pFndTextAttr != nullptr
- && aSwContentAtPos.pFndTextAttr->Which() == RES_TXTATR_INPUTFIELD)
+ else if (IsAttrAtPos::Field == aSwContentAtPos.eContentAtPos
+ && aSwContentAtPos.pFndTextAttr != nullptr
+ && aSwContentAtPos.pFndTextAttr->Which() == RES_TXTATR_INPUTFIELD)
{
const SwField *pCursorField = rSh.CursorInsideInputField() ? rSh.GetCurField( true ) : nullptr;
if (!(pCursorField && pCursorField == aSwContentAtPos.pFndTextAttr->GetFormatField().GetField()))
@@ -3490,6 +3516,20 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
case KEY_MOD1:
if ( !bExecDrawTextLink )
{
+ if (rSh.GetViewOptions()->IsShowOutlineContentVisibilityButton())
+ {
+ SwContentAtPos aContentAtPos(IsAttrAtPos::Outline);
+ if(rSh.GetContentAtPos(aDocPos, aContentAtPos))
+ {
+ // move cursor to outline para start and toggle outline content visibility
+ 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))
+ rSh.ToggleOutlineContentVisibility(nPos);
+ return;
+ }
+ }
if ( !m_bInsDraw && IsDrawObjSelectable( rSh, aDocPos ) && !lcl_urlOverBackground( rSh, aDocPos ) )
{
m_rView.NoRotate();
@@ -3721,28 +3761,55 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
}
}
}
- else if ( MOUSE_RIGHT == rMEvt.GetButtons() && !rMEvt.GetModifier()
- && static_cast< sal_uInt8 >(rMEvt.GetClicks() % 4) == 1
- && !rSh.TestCurrPam( aDocPos ) )
+ else if (MOUSE_RIGHT == rMEvt.GetButtons())
{
- SwContentAtPos aFieldAtPos(IsAttrAtPos::Field);
-
- // Are we clicking on a field?
- if (g_bValidCursorPos
- && rSh.GetContentAtPos(aDocPos, aFieldAtPos)
- && aFieldAtPos.pFndTextAttr != nullptr
- && aFieldAtPos.pFndTextAttr->Which() == RES_TXTATR_INPUTFIELD
- && (!pCursorField || pCursorField != aFieldAtPos.pFndTextAttr->GetFormatField().GetField()))
+ if (rSh.GetViewOptions()->IsShowOutlineContentVisibilityButton() && rMEvt.GetModifier() == KEY_MOD1)
{
- // Move the cursor
- MoveCursor( rSh, aDocPos, rSh.IsObjSelectable( aDocPos ), m_bWasShdwCursor );
- bCallBase = false;
+ SwContentAtPos aContentAtPos(IsAttrAtPos::Outline);
+ if(rSh.GetContentAtPos(aDocPos, aContentAtPos))
+ {
+ // move cursor to para start toggle outline content visibility and set the same visibility for subs
+ MoveCursor(rSh, aDocPos, false, true);
+ SwPaM aPam(*rSh.GetCurrentShellCursor().GetPoint());
+ 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.IsOutlineContentFolded(nPos) == bFold)
+ rSh.ToggleOutlineContentVisibility(nPos);
+ } while (++nPos < nOutlineNodesCount
+ && rSh.getIDocumentOutlineNodesAccess()->getOutlineLevel(nPos) > nLevel);
+ return;
+ }
+ }
+ }
+ else if ( !rMEvt.GetModifier()
+ && static_cast< sal_uInt8 >(rMEvt.GetClicks() % 4) == 1
+ && !rSh.TestCurrPam( aDocPos ) )
+ {
+ SwContentAtPos aFieldAtPos(IsAttrAtPos::Field);
+
+ // Are we clicking on a field?
+ if (g_bValidCursorPos
+ && rSh.GetContentAtPos(aDocPos, aFieldAtPos)
+ && aFieldAtPos.pFndTextAttr != nullptr
+ && aFieldAtPos.pFndTextAttr->Which() == RES_TXTATR_INPUTFIELD
+ && (!pCursorField || pCursorField != aFieldAtPos.pFndTextAttr->GetFormatField().GetField()))
+ {
+ // Move the cursor
+ MoveCursor( rSh, aDocPos, rSh.IsObjSelectable( aDocPos ), m_bWasShdwCursor );
+ bCallBase = false;
- // select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
- // and CH_TXT_ATR_INPUTFIELDEND
- rSh.SttSelect();
- rSh.SelectText( aFieldAtPos.pFndTextAttr->GetStart() + 1,
- *(aFieldAtPos.pFndTextAttr->End()) - 1 );
+ // select content of Input Field, but exclude CH_TXT_ATR_INPUTFIELDSTART
+ // and CH_TXT_ATR_INPUTFIELDEND
+ rSh.SttSelect();
+ rSh.SelectText( aFieldAtPos.pFndTextAttr->GetStart() + 1,
+ *(aFieldAtPos.pFndTextAttr->End()) - 1 );
+ }
}
}
More information about the Libreoffice-commits
mailing list