NFC sw dialog titlepage.cxx: general code cleanup

1.) make the shell a reference since it is always assumed.
2.) flatten and reduce unnecessary code
3.) aTitleDesc can be initialized earlier, so eliminate
one unecessary page jump.
4.) rename nNoPages - since "No" really needs to be "No."
with a fullstop in order to be a shortform for number.
Plus there are lots of NumPages here - so which one is it?

Change-Id: I2b6b73ddd9f6ec1b72f7e71b7803ed28355a030d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108331
Tested-by: Jenkins
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
This commit is contained in:
Justin Luth 2020-12-26 15:39:56 +03:00 committed by Miklos Vajna
parent d0f6c9f924
commit 40281e6c5b
2 changed files with 60 additions and 76 deletions

View File

@ -19,11 +19,11 @@
namespace
{
bool lcl_GetPageDesc(SwWrtShell *pSh, sal_uInt16 &rPageNo, std::unique_ptr<const SwFormatPageDesc>* ppPageFormatDesc)
bool lcl_GetPageDesc(SwWrtShell& rSh, sal_uInt16 &rPageNo, std::unique_ptr<const SwFormatPageDesc>* ppPageFormatDesc)
{
bool bRet = false;
SfxItemSet aSet( pSh->GetAttrPool(), svl::Items<RES_PAGEDESC, RES_PAGEDESC>{} );
if (pSh->GetCurAttr( aSet ))
SfxItemSet aSet(rSh.GetAttrPool(), svl::Items<RES_PAGEDESC, RES_PAGEDESC>{});
if (rSh.GetCurAttr(aSet))
{
const SfxPoolItem* pItem(nullptr);
if (SfxItemState::SET == aSet.GetItemState( RES_PAGEDESC, true, &pItem ) && pItem)
@ -39,40 +39,26 @@ namespace
return bRet;
}
void lcl_ChangePage(SwWrtShell *pSh, sal_uInt16 nNewNumber,
const SwPageDesc *pNewDesc)
void lcl_ChangePage(SwWrtShell& rSh, sal_uInt16 nNewNumber, const SwPageDesc *pNewDesc)
{
const size_t nCurIdx = pSh->GetCurPageDesc();
const SwPageDesc &rCurrentDesc = pSh->GetPageDesc( nCurIdx );
const size_t nCurIdx = rSh.GetCurPageDesc();
const SwPageDesc &rCurrentDesc = rSh.GetPageDesc(nCurIdx);
std::unique_ptr<const SwFormatPageDesc> pPageFormatDesc;
sal_uInt16 nDontCare;
lcl_GetPageDesc(pSh, nDontCare, &pPageFormatDesc);
lcl_GetPageDesc(rSh, nDontCare, &pPageFormatDesc);
// If we want a new number then set it, otherwise reuse the existing one
sal_uInt16 nPgNo;
sal_uInt16 nPgNo = 0;
if (nNewNumber)
{
nPgNo = nNewNumber;
}
else
else if (pPageFormatDesc)
{
if (pPageFormatDesc)
{
::std::optional<sal_uInt16> oNumOffset = pPageFormatDesc->GetNumOffset();
if (oNumOffset)
{
nPgNo = *oNumOffset;
}
else
{
nPgNo = 0;
}
}
else
{
nPgNo = 0;
}
::std::optional<sal_uInt16> oNumOffset = pPageFormatDesc->GetNumOffset();
if (oNumOffset)
nPgNo = *oNumOffset;
}
// If we want a new descriptor then set it, otherwise reuse the existing one
@ -80,29 +66,29 @@ namespace
{
SwFormatPageDesc aPageFormatDesc(pNewDesc ? pNewDesc : &rCurrentDesc);
if (nPgNo) aPageFormatDesc.SetNumOffset(nPgNo);
pSh->SetAttrItem(aPageFormatDesc);
rSh.SetAttrItem(aPageFormatDesc);
}
}
void lcl_PushCursor(SwWrtShell *pSh)
void lcl_PushCursor(SwWrtShell& rSh)
{
pSh->LockView( true );
pSh->StartAllAction();
pSh->SwCursorShell::Push();
rSh.LockView(true);
rSh.StartAllAction();
rSh.SwCursorShell::Push();
}
void lcl_PopCursor(SwWrtShell *pSh)
void lcl_PopCursor(SwWrtShell& rSh)
{
pSh->SwCursorShell::Pop(SwCursorShell::PopMode::DeleteCurrent);
pSh->EndAllAction();
pSh->LockView( false );
rSh.SwCursorShell::Pop(SwCursorShell::PopMode::DeleteCurrent);
rSh.EndAllAction();
rSh.LockView(false);
}
sal_uInt16 lcl_GetCurrentPage(SwWrtShell const *pSh)
sal_uInt16 lcl_GetCurrentPage(const SwWrtShell& rSh)
{
OUString sDummy;
sal_uInt16 nPhyNum=1, nVirtNum=1;
pSh->GetPageNumber(0, true, nPhyNum, nVirtNum, sDummy);
rSh.GetPageNumber(0, true, nPhyNum, nVirtNum, sDummy);
return nPhyNum;
}
}
@ -136,6 +122,7 @@ sal_uInt16 SwTitlePageDlg::GetInsertPosition() const
SwTitlePageDlg::SwTitlePageDlg(weld::Window *pParent)
: SfxDialogController(pParent, "modules/swriter/ui/titlepage.ui", "DLG_TITLEPAGE")
, mrSh(*::GetActiveView()->GetWrtShellPtr())
, m_xUseExistingPagesRB(m_xBuilder->weld_radio_button("RB_USE_EXISTING_PAGES"))
, m_xPageCountNF(m_xBuilder->weld_spin_button("NF_PAGE_COUNT"))
, m_xDocumentStartRB(m_xBuilder->weld_radio_button("RB_DOCUMENT_START"))
@ -156,39 +143,38 @@ SwTitlePageDlg::SwTitlePageDlg(weld::Window *pParent)
sal_uInt16 nSetPage = 1;
sal_uInt16 nResetPage = 1;
sal_uInt16 nTitlePages = 1;
mpSh = ::GetActiveView()->GetWrtShellPtr();
lcl_PushCursor(mpSh);
lcl_PushCursor(mrSh);
SwView& rView = mpSh->GetView();
SwView& rView = mrSh.GetView();
rView.InvalidateRulerPos();
bool bMaybeResetNumbering = false;
mpTitleDesc = mpSh->GetPageDescFromPool(RES_POOLPAGE_FIRST);
mpIndexDesc = mpSh->GetPageDescFromPool(RES_POOLPAGE_REGISTER);
mpNormalDesc = mpSh->GetPageDescFromPool(RES_POOLPAGE_STANDARD);
mpTitleDesc = mrSh.GetPageDescFromPool(RES_POOLPAGE_FIRST);
mpIndexDesc = mrSh.GetPageDescFromPool(RES_POOLPAGE_REGISTER);
mpNormalDesc = mrSh.GetPageDescFromPool(RES_POOLPAGE_STANDARD);
mpSh->StartOfSection();
if (lcl_GetPageDesc( mpSh, nSetPage, &mpPageFormatDesc ))
mrSh.StartOfSection();
if (lcl_GetPageDesc(mrSh, nSetPage, &mpPageFormatDesc))
{
if (mpPageFormatDesc->GetPageDesc() == mpTitleDesc)
{
while (mpSh->SttNxtPg())
while (mrSh.SttNxtPg())
{
const size_t nCurIdx = mpSh->GetCurPageDesc();
const SwPageDesc &rPageDesc = mpSh->GetPageDesc( nCurIdx );
const size_t nCurIdx = mrSh.GetCurPageDesc();
const SwPageDesc& rPageDesc = mrSh.GetPageDesc(nCurIdx);
if (mpIndexDesc != &rPageDesc)
{
mpNormalDesc = &rPageDesc;
bMaybeResetNumbering = lcl_GetPageDesc(mpSh, nResetPage, nullptr);
bMaybeResetNumbering = lcl_GetPageDesc(mrSh, nResetPage, nullptr);
break;
}
++nTitlePages;
}
}
}
lcl_PopCursor(mpSh);
lcl_PopCursor(mrSh);
m_xUseExistingPagesRB->set_active(true);
m_xPageCountNF->set_value(nTitlePages);
@ -196,7 +182,7 @@ SwTitlePageDlg::SwTitlePageDlg(weld::Window *pParent)
m_xDocumentStartRB->set_active(true);
m_xPageStartNF->set_sensitive(false);
m_xPageStartNF->set_value(lcl_GetCurrentPage(mpSh));
m_xPageStartNF->set_value(lcl_GetCurrentPage(mrSh));
Link<weld::ToggleButton&,void> aStartPageHdl = LINK(this, SwTitlePageDlg, StartPageHdl);
m_xDocumentStartRB->connect_toggled(aStartPageHdl);
m_xPageStartRB->connect_toggled(aStartPageHdl);
@ -244,8 +230,8 @@ SwTitlePageDlg::~SwTitlePageDlg()
IMPL_LINK_NOARG(SwTitlePageDlg, EditHdl, weld::Button&, void)
{
SwView& rView = mpSh->GetView();
rView.GetDocShell()->FormatPage(m_xPagePropertiesLB->get_active_text(), "page", *mpSh);
SwView& rView = mrSh.GetView();
rView.GetDocShell()->FormatPage(m_xPagePropertiesLB->get_active_text(), "page", mrSh);
rView.InvalidateRulerPos();
}
@ -253,9 +239,9 @@ IMPL_LINK_NOARG(SwTitlePageDlg, OKHdl, weld::Button&, void)
{
// FIXME: This wizard is almost completely non-functional for inserting new pages.
lcl_PushCursor(mpSh);
lcl_PushCursor(mrSh);
mpSh->StartUndo();
mrSh.StartUndo();
SwFormatPageDesc aTitleDesc(mpTitleDesc);
@ -264,47 +250,45 @@ IMPL_LINK_NOARG(SwTitlePageDlg, OKHdl, weld::Button&, void)
else if (mpPageFormatDesc)
aTitleDesc.SetNumOffset(mpPageFormatDesc->GetNumOffset());
sal_uInt16 nNoPages = m_xPageCountNF->get_value();
sal_uInt16 nNumTitlePages = m_xPageCountNF->get_value();
if (!m_xUseExistingPagesRB->get_active())
{
// FIXME: If the starting page number is larger than the last page,
// probably should add pages AFTER the last page, not before it.
mpSh->GotoPage(GetInsertPosition(), false);
mrSh.GotoPage(GetInsertPosition(), false);
// FIXME: These new pages cannot be accessed currently with GotoPage. It doesn't know they exist.
for (sal_uInt16 nI=0; nI < nNoPages; ++nI)
mpSh->InsertPageBreak();
for (sal_uInt16 nI = 0; nI < nNumTitlePages; ++nI)
mrSh.InsertPageBreak();
}
mpSh->GotoPage(GetInsertPosition(), false);
mrSh.GotoPage(GetInsertPosition(), false);
mrSh.SetAttrItem(aTitleDesc);
// FIXME: GotoPage is pointing to a page after the newly created index pages, so the wrong pages are getting Index style.
for (sal_uInt16 nI=1; nI < nNoPages; ++nI)
for (sal_uInt16 nI = 1; nI < nNumTitlePages; ++nI)
{
if (mpSh->SttNxtPg())
lcl_ChangePage(mpSh, 0, mpIndexDesc);
if (mrSh.SttNxtPg())
lcl_ChangePage(mrSh, 0, mpIndexDesc);
}
mpSh->GotoPage(GetInsertPosition(), false);
mpSh->SetAttrItem(aTitleDesc);
if (nNoPages > 1 && mpSh->GotoPage(GetInsertPosition() + nNoPages, false))
if (nNumTitlePages > 1 && mrSh.GotoPage(GetInsertPosition() + nNumTitlePages, false))
{
// FIXME: By definition, GotoPage(x,bRecord=false) returns false. This is dead code.
SwFormatPageDesc aPageFormatDesc(mpNormalDesc);
mpSh->SetAttrItem(aPageFormatDesc);
mrSh.SetAttrItem(aPageFormatDesc);
}
if (m_xRestartNumberingCB->get_active() || nNoPages > 1)
if (m_xRestartNumberingCB->get_active() || nNumTitlePages > 1)
{
sal_uInt16 nPgNo = m_xRestartNumberingCB->get_active() ? m_xRestartNumberingNF->get_value() : 0;
const SwPageDesc *pNewDesc = nNoPages > 1 ? mpNormalDesc : nullptr;
mpSh->GotoPage(GetInsertPosition() + nNoPages, false);
lcl_ChangePage(mpSh, nPgNo, pNewDesc);
const SwPageDesc* pNewDesc = nNumTitlePages > 1 ? mpNormalDesc : nullptr;
mrSh.GotoPage(GetInsertPosition() + nNumTitlePages, false);
lcl_ChangePage(mrSh, nPgNo, pNewDesc);
}
mpSh->EndUndo();
lcl_PopCursor(mpSh);
mrSh.EndUndo();
lcl_PopCursor(mrSh);
if (!m_xUseExistingPagesRB->get_active())
mpSh->GotoPage(GetInsertPosition(), false);
mrSh.GotoPage(GetInsertPosition(), false);
m_xDialog->response(RET_OK);
}

View File

@ -24,7 +24,7 @@ class SwPageDesc;
class SwTitlePageDlg : public SfxDialogController
{
private:
SwWrtShell* mpSh;
SwWrtShell& mrSh;
std::unique_ptr<const SwFormatPageDesc> mpPageFormatDesc;