diff options
author | Akshay Deep <akshaydeepiitr@gmail.com> | 2016-06-06 11:20:16 +0530 |
---|---|---|
committer | Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> | 2016-07-08 14:05:09 +0000 |
commit | 1c39db584f9f1877a9fa5ce00e8d19dd997d8078 (patch) | |
tree | e64f485b264edfcd82572513a4854a928ad86c23 /sw/source/uibase/utlui | |
parent | 84059c853f15e0e3b1433193e8136350869c23d7 (diff) |
tdf#83054 Writer: Add "Go to Page" Entry in Edit Menu
Change-Id: I09026910687b019fe33d4016612b8247ff076100
Reviewed-on: https://gerrit.libreoffice.org/25949
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'sw/source/uibase/utlui')
-rw-r--r-- | sw/source/uibase/utlui/gotodlg.cxx | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/sw/source/uibase/utlui/gotodlg.cxx b/sw/source/uibase/utlui/gotodlg.cxx new file mode 100644 index 000000000000..107d62a27daa --- /dev/null +++ b/sw/source/uibase/utlui/gotodlg.cxx @@ -0,0 +1,116 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <swmodule.hxx> +#include <view.hxx> +#include <wrtsh.hxx> +#include <gotodlg.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <cmdid.h> + +using namespace com::sun::star; + +SwGotoPageDlg::SwGotoPageDlg( vcl::Window* pParent, SfxBindings* _pBindings): + ModalDialog(pParent, "GotoPageDialog", "modules/swriter/ui/gotopagedialog.ui"), + m_pCreateView(nullptr), + m_rBindings(_pBindings), + mnMaxPageCnt(1) +{ + get(mpMtrPageCtrl, "page"); + get(mpPageNumberLbl, "page_count"); + + sal_uInt16 nTotalPage = GetPageInfo(); + + if(nTotalPage) + { + OUString sStr = mpPageNumberLbl->GetText(); + mpPageNumberLbl->SetText(sStr.replaceFirst("$1", OUString::number(nTotalPage))); + mnMaxPageCnt = nTotalPage; + } + mpMtrPageCtrl->SetModifyHdl(LINK(this, SwGotoPageDlg, PageModifiedHdl)); + mpMtrPageCtrl->SetCursorAtLast(); +} + +SwGotoPageDlg::~SwGotoPageDlg() +{ + disposeOnce(); +} + +void SwGotoPageDlg::dispose() +{ + mpMtrPageCtrl.clear(); + mpPageNumberLbl.clear(); + + ModalDialog::dispose(); +} + +IMPL_LINK_NOARG_TYPED(SwGotoPageDlg, PageModifiedHdl, Edit&, void) +{ + if(!(mpMtrPageCtrl->GetText()).isEmpty() ) + { + int page_value = (mpMtrPageCtrl->GetText()).toInt32(); + + if(page_value <= 0.0) + mpMtrPageCtrl->SetText(OUString::number(1)); + else if(page_value > mnMaxPageCnt) + mpMtrPageCtrl->SetText(OUString::number(mnMaxPageCnt)); + + mpMtrPageCtrl->SetCursorAtLast(); + } +} + +SwView* SwGotoPageDlg::GetCreateView() const +{ + if(!m_pCreateView) + { + SwView* pView = SwModule::GetFirstView(); + while(pView) + { + if(&pView->GetViewFrame()->GetBindings() == m_rBindings) + { + const_cast<SwGotoPageDlg*>(this)->m_pCreateView = pView; + break; + } + pView = SwModule::GetNextView(pView); + } + } + + return m_pCreateView; +} + +// If the page can be set here, the maximum is set. + +sal_uInt16 SwGotoPageDlg::GetPageInfo() +{ + SwView *pView = GetCreateView(); + SwWrtShell *pSh = pView ? &pView->GetWrtShell() : nullptr; + mpMtrPageCtrl->SetText(OUString::number(1)); + if (pSh) + { + const sal_uInt16 nPageCnt = pSh->GetPageCnt(); + sal_uInt16 nPhyPage, nVirPage; + pSh->GetPageNum(nPhyPage, nVirPage); + mpMtrPageCtrl->SetText(OUString::number(nPhyPage)); + return nPageCnt; + } + return 0; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file |