sw/inc/strings.hrc | 9 ++ sw/source/uibase/uiview/view2.cxx | 131 +++++++++++++++++++++++++++++++++----- 2 files changed, 125 insertions(+), 15 deletions(-)
New commits: commit 189b65b02fe1f3ce6be5b7637cc59443561855e4 Author: Jim Raykowski <rayk...@gmail.com> AuthorDate: Mon Mar 28 20:48:37 2022 -0800 Commit: Jim Raykowski <rayk...@gmail.com> CommitDate: Tue Aug 2 18:43:39 2022 +0200 tdf#90150 Improve Writer page number display in the status bar Enhancement patch to show page numbers as 'First visible page and Last visible page' when two pages are visible in the view, 'First visible page - Last visible page' when more than two pages are visible in the view. Numbers shown in () are custom page numbering numbers. Numbers shown in [] are virtual page numbers. Change-Id: Ie07dee0f372e2cd94fb848b092d3df04f242ab51 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132252 Tested-by: Jenkins Reviewed-by: Jim Raykowski <rayk...@gmail.com> diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc index ed06d5b39d42..26d199336afa 100644 --- a/sw/inc/strings.hrc +++ b/sw/inc/strings.hrc @@ -1287,8 +1287,15 @@ #define STR_REDLINE_COMMENT_ADDED NC_("STR_REDLINE_COMMENT_ADDED", "Comment added") #define STR_REDLINE_COMMENT_DELETED NC_("STR_REDLINE_COMMENT_DELETED", "Comment deleted") #define STR_PAGE NC_("STR_PAGE", "Page ") +#define STR_PAGES_TWO_CONJUNCTION NC_("STR_PAGES_TWO_CONJUNCTION", "and") #define STR_PAGE_COUNT NC_("STR_PAGE_COUNT", "Page %1 of %2") -#define STR_PAGE_COUNT_CUSTOM NC_("STR_PAGE_COUNT_CUSTOM", "Page %1 of %2 (Page %3)") +#define STR_PAGE_COUNT_EXTENDED NC_("STR_PAGE_COUNT_EXTENDED", "Page %1 of %2 [Page %3]") +#define STR_PAGES_COUNT NC_("STR_PAGES_COUNT", "Pages %1 - %2 of %3") +#define STR_PAGES_COUNT_EXTENDED NC_("STR_PAGES_COUNT_EXTENDED", "Pages %1 - %2 of %3 [Pages %4 - %5]") +#define STR_PAGE_COUNT_CUSTOM NC_("STR_PAGE_COUNT_CUSTOM", "Page %1 (%2) of %3") +#define STR_PAGE_COUNT_CUSTOM_EXTENDED NC_("STR_PAGE_COUNT_CUSTOM_EXTENDED", "Page %1 (%2) of %3 [Page %4 (%5)]") +#define STR_PAGES_COUNT_CUSTOM NC_("STR_PAGES_COUNT_CUSTOM", "Pages %1 - %2 (%3 - %4) of %5") +#define STR_PAGES_COUNT_CUSTOM_EXTENDED NC_("STR_PAGES_COUNT_CUSTOM_EXTENDED", "Pages %1 - %2 (%3 - %4) of %5 [Pages %6 - %7 (%8 - %9)]") #define STR_PAGE_COUNT_PRINTED NC_("STR_PAGE_COUNT_PRINTED", "Page %1 of %2 (Page %3 of %4 to print)") //Strings for gallery/background #define STR_SWBG_PARAGRAPH NC_("STR_SWBG_PARAGRAPH", "Paragraph") diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx index e534be0fa2ee..4d674434af57 100644 --- a/sw/source/uibase/uiview/view2.cxx +++ b/sw/source/uibase/uiview/view2.cxx @@ -1580,28 +1580,131 @@ void SwView::StateStatusLine(SfxItemSet &rSet) { switch( nWhich ) { - case FN_STAT_PAGE: { - // number of pages, log. page number - sal_uInt16 nPage, nLogPage; - OUString sDisplay; - rShell.GetPageNumber( -1, rShell.IsCursorVisible(), nPage, nLogPage, sDisplay ); - bool bExtendedTooltip(!sDisplay.isEmpty() && - std::u16string_view(OUString::number(nPage)) != sDisplay && - nPage != nLogPage); - OUString aTooltip = bExtendedTooltip ? SwResId(STR_BOOKCTRL_HINT_EXTENDED) - : SwResId(STR_BOOKCTRL_HINT); + case FN_STAT_PAGE: + { + OUString aTooltip; + OUString aPageStr; + + SwVisiblePageNumbers aVisiblePageNumbers; + m_pWrtShell->GetFirstLastVisPageNumbers(aVisiblePageNumbers); + + // convert to strings and define references + OUString sFirstPhy = OUString::number(aVisiblePageNumbers.nFirstPhy); + OUString sLastPhy = OUString::number(aVisiblePageNumbers.nLastPhy); + OUString sFirstVirt = OUString::number(aVisiblePageNumbers.nFirstVirt); + OUString sLastVirt = OUString::number(aVisiblePageNumbers.nLastVirt); + OUString& sFirstCustomPhy = aVisiblePageNumbers.sFirstCustomPhy; + OUString& sLastCustomPhy = aVisiblePageNumbers.sLastCustomPhy; + OUString& sFirstCustomVirt = aVisiblePageNumbers.sFirstCustomVirt; + OUString& sLastCustomVirt = aVisiblePageNumbers.sLastCustomVirt; + OUString sPageCount = OUString::number(m_pWrtShell->GetPageCount()); + + if (aVisiblePageNumbers.nFirstPhy == aVisiblePageNumbers.nFirstVirt) + { + aTooltip = SwResId(STR_BOOKCTRL_HINT); + if (aVisiblePageNumbers.nFirstPhy != aVisiblePageNumbers.nLastPhy) + { + if (sFirstPhy == sFirstCustomPhy && sLastPhy == sLastCustomPhy) + { + aPageStr = SwResId(STR_PAGES_COUNT); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sLastPhy); + aPageStr = aPageStr.replaceFirst("%3", sPageCount); + } + else + { + aPageStr = SwResId(STR_PAGES_COUNT_CUSTOM); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sLastPhy); + aPageStr = aPageStr.replaceFirst("%3", sFirstCustomPhy); + aPageStr = aPageStr.replaceFirst("%4", sLastCustomPhy); + aPageStr = aPageStr.replaceFirst("%5", sPageCount); + } + } + else + { + if (sFirstPhy == sFirstCustomPhy && sLastPhy == sLastCustomPhy) + { + aPageStr = SwResId(STR_PAGE_COUNT); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sPageCount); + } + else + { + aPageStr = SwResId(STR_PAGE_COUNT_CUSTOM); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sFirstCustomPhy); + aPageStr = aPageStr.replaceFirst("%3", sPageCount); + } + } + } + else + { + aTooltip = SwResId(STR_BOOKCTRL_HINT_EXTENDED); + if (aVisiblePageNumbers.nFirstPhy != aVisiblePageNumbers.nLastPhy) + { + if (sFirstPhy == sFirstCustomPhy && sLastPhy == sLastCustomPhy) + { + aPageStr = SwResId(STR_PAGES_COUNT_EXTENDED); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sLastPhy); + aPageStr = aPageStr.replaceFirst("%3", sPageCount); + aPageStr = aPageStr.replaceFirst("%4", sFirstVirt); + aPageStr = aPageStr.replaceFirst("%5", sLastVirt); + } + else + { + aPageStr = SwResId(STR_PAGES_COUNT_CUSTOM_EXTENDED); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sLastPhy); + aPageStr = aPageStr.replaceFirst("%3", sFirstCustomPhy); + aPageStr = aPageStr.replaceFirst("%4", sLastCustomPhy); + aPageStr = aPageStr.replaceFirst("%5", sPageCount); + aPageStr = aPageStr.replaceFirst("%6", sFirstVirt); + aPageStr = aPageStr.replaceFirst("%7", sLastVirt); + aPageStr = aPageStr.replaceFirst("%8", sFirstCustomVirt); + aPageStr = aPageStr.replaceFirst("%9", sLastCustomVirt); + } + } + else + { + if (sFirstPhy == sFirstCustomPhy && sLastPhy == sLastCustomPhy) + { + aPageStr = SwResId(STR_PAGE_COUNT_EXTENDED); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sPageCount); + aPageStr = aPageStr.replaceFirst("%3", sFirstVirt); + } + else + { + aPageStr = SwResId(STR_PAGE_COUNT_CUSTOM_EXTENDED); + aPageStr = aPageStr.replaceFirst("%1", sFirstPhy); + aPageStr = aPageStr.replaceFirst("%2", sFirstCustomPhy); + aPageStr = aPageStr.replaceFirst("%3", sPageCount); + aPageStr = aPageStr.replaceFirst("%4", sFirstVirt); + aPageStr = aPageStr.replaceFirst("%5", sFirstCustomVirt); + } + } + } + + // replace range indicator with two pages conjunction if applicable + if ((aVisiblePageNumbers.nLastPhy - aVisiblePageNumbers.nFirstPhy) == 1) + aPageStr = aPageStr.replaceAll("-", SwResId(STR_PAGES_TWO_CONJUNCTION)); + + // status bar bookmark control string and tooltip std::vector<OUString> aStringList { - GetPageStr(nPage, nLogPage, sDisplay), + aPageStr, aTooltip }; rSet.Put(SfxStringListItem(FN_STAT_PAGE, &aStringList)); + //if existing page number is not equal to old page number, send out this event. - if (m_nOldPageNum != nLogPage ) + if (m_nOldPageNum != aVisiblePageNumbers.nFirstPhy) { if (m_nOldPageNum != 0) - SwCursorShell::FirePageChangeEvent(m_nOldPageNum, nLogPage); - m_nOldPageNum = nLogPage; + SwCursorShell::FirePageChangeEvent(m_nOldPageNum, aVisiblePageNumbers.nFirstPhy); + m_nOldPageNum = aVisiblePageNumbers.nFirstPhy; } const sal_uInt16 nCnt = GetWrtShell().GetPageCnt(); if (m_nPageCnt != nCnt) // notify Basic