diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-10-04 12:41:22 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-11-01 22:12:33 +0100 |
commit | 26c375671aa362b2f59d84645784938677ae1719 (patch) | |
tree | 5ea3214bf75b3d612a6760597e16ab2cc041ce29 /sw/source/ui/dialog | |
parent | d611d5535b818854f9c6c6d4c144c2e5a9155a1a (diff) |
weld SwWordCountFloatDlg
enable modeless dialogs to emit a response so runAsync can be used with
them and get something called when the dialog is dismissed
Change-Id: Ie9603bcc063cefabbae635949671baf06620785d
Reviewed-on: https://gerrit.libreoffice.org/61383
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sw/source/ui/dialog')
-rw-r--r-- | sw/source/ui/dialog/swdlgfact.cxx | 19 | ||||
-rw-r--r-- | sw/source/ui/dialog/swdlgfact.hxx | 17 | ||||
-rw-r--r-- | sw/source/ui/dialog/wordcountdialog.cxx | 114 |
3 files changed, 63 insertions, 87 deletions
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx index c30b671d3b29..b634d18970d2 100644 --- a/sw/source/ui/dialog/swdlgfact.cxx +++ b/sw/source/ui/dialog/swdlgfact.cxx @@ -87,7 +87,11 @@ using namespace ::com::sun::star; using namespace css::frame; using namespace css::uno; -IMPL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl); +short AbstractSwWordCountFloatDlg_Impl::Execute() +{ + return m_xDlg->run(); +} + IMPL_ABSTDLG_BASE(AbstractSwInsertAbstractDlg_Impl); IMPL_ABSTDLG_BASE(SwAbstractSfxDialog_Impl); @@ -695,19 +699,19 @@ vcl::Window* AbstractAuthMarkFloatDlg_Impl::GetWindow() return static_cast<vcl::Window*>(pDlg); } -vcl::Window* AbstractSwWordCountFloatDlg_Impl::GetWindow() +std::shared_ptr<SfxModelessDialogController> AbstractSwWordCountFloatDlg_Impl::GetController() { - return static_cast<vcl::Window*>(pDlg); + return m_xDlg; } void AbstractSwWordCountFloatDlg_Impl::UpdateCounts() { - pDlg->UpdateCounts(); + m_xDlg->UpdateCounts(); } void AbstractSwWordCountFloatDlg_Impl::SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat) { - pDlg->SetCounts(rCurrCnt, rDocStat); + m_xDlg->SetCounts(rCurrCnt, rDocStat); } AbstractMailMergeWizard_Impl::~AbstractMailMergeWizard_Impl() @@ -1109,11 +1113,10 @@ VclPtr<AbstractMarkFloatDlg> SwAbstractDialogFactory_Impl::CreateAuthMarkFloatDl VclPtr<AbstractSwWordCountFloatDlg> SwAbstractDialogFactory_Impl::CreateSwWordCountDialog( SfxBindings* pBindings, SfxChildWindow* pChild, - vcl::Window *pParent, + weld::Window *pParent, SfxChildWinInfo* pInfo) { - VclPtr<SwWordCountFloatDlg> pDlg = VclPtr<SwWordCountFloatDlg>::Create( pBindings, pChild, pParent, pInfo ); - return VclPtr<AbstractSwWordCountFloatDlg_Impl>::Create( pDlg ); + return VclPtr<AbstractSwWordCountFloatDlg_Impl>::Create(o3tl::make_unique<SwWordCountFloatDlg>(pBindings, pChild, pParent, pInfo)); } VclPtr<VclAbstractDialog> SwAbstractDialogFactory_Impl::CreateIndexMarkModalDlg( diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx index 103b04b35a02..14b802ef7e2d 100644 --- a/sw/source/ui/dialog/swdlgfact.hxx +++ b/sw/source/ui/dialog/swdlgfact.hxx @@ -74,10 +74,17 @@ bool Class::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) \ class SwWordCountFloatDlg; class AbstractSwWordCountFloatDlg_Impl : public AbstractSwWordCountFloatDlg { - DECL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl,SwWordCountFloatDlg) - virtual void UpdateCounts() override; - virtual void SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat) override; - virtual vcl::Window * GetWindow() override; //this method is added for return a Window type pointer +protected: + std::shared_ptr<SwWordCountFloatDlg> m_xDlg; +public: + explicit AbstractSwWordCountFloatDlg_Impl(std::unique_ptr<SwWordCountFloatDlg> p) + : m_xDlg(std::move(p)) + { + } + virtual short Execute() override; + virtual void UpdateCounts() override; + virtual void SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat) override; + virtual std::shared_ptr<SfxModelessDialogController> GetController() override; }; class AbstractSwInsertAbstractDlg_Impl : public AbstractSwInsertAbstractDlg @@ -596,7 +603,7 @@ public: virtual VclPtr<SfxAbstractDialog> CreateSwDropCapsDialog(weld::Window* pParent, const SfxItemSet& rSet) override; virtual VclPtr<SfxAbstractDialog> CreateSwBackgroundDialog(weld::Window* pParent, const SfxItemSet& rSet) override; virtual VclPtr<AbstractSwWordCountFloatDlg> CreateSwWordCountDialog(SfxBindings* pBindings, - SfxChildWindow* pChild, vcl::Window *pParent, SfxChildWinInfo* pInfo) override; + SfxChildWindow* pChild, weld::Window *pParent, SfxChildWinInfo* pInfo) override; virtual VclPtr<AbstractSwInsertAbstractDlg> CreateSwInsertAbstractDlg() override; virtual VclPtr<SfxAbstractDialog> CreateSwAddressAbstractDlg(vcl::Window* pParent, const SfxItemSet& rSet) override; virtual VclPtr<AbstractSwAsciiFilterDlg> CreateSwAsciiFilterDlg(weld::Window* pParent, SwDocShell& rDocSh, diff --git a/sw/source/ui/dialog/wordcountdialog.cxx b/sw/source/ui/dialog/wordcountdialog.cxx index cc350e6fb9c8..b24767823963 100644 --- a/sw/source/ui/dialog/wordcountdialog.cxx +++ b/sw/source/ui/dialog/wordcountdialog.cxx @@ -31,126 +31,92 @@ #include <unotools/localedatawrapper.hxx> #include <vcl/settings.hxx> -IMPL_STATIC_LINK_NOARG(SwWordCountFloatDlg, CloseHdl, Button*, void) -{ - SfxViewFrame* pVFrame = ::GetActiveView()->GetViewFrame(); - if (pVFrame != nullptr) - { - pVFrame->ToggleChildWindow(FN_WORDCOUNT_DIALOG); - } -} - SwWordCountFloatDlg::~SwWordCountFloatDlg() { - disposeOnce(); -} - -void SwWordCountFloatDlg::dispose() -{ SwViewShell::SetCareWin( nullptr ); - m_pCurrentWordFT.clear(); - m_pCurrentCharacterFT.clear(); - m_pCurrentCharacterExcludingSpacesFT.clear(); - m_pCurrentCjkcharsFT.clear(); - m_pCurrentStandardizedPagesFT.clear(); - m_pDocWordFT.clear(); - m_pDocCharacterFT.clear(); - m_pDocCharacterExcludingSpacesFT.clear(); - m_pDocCjkcharsFT.clear(); - m_pDocStandardizedPagesFT.clear(); - m_pCjkcharsLabelFT.clear(); - m_pStandardizedPagesLabelFT.clear(); - m_pClosePB.clear(); - SfxModelessDialog::dispose(); } namespace { - void setValue(FixedText *pWidget, sal_uLong nValue, const LocaleDataWrapper& rLocaleData) + void setValue(weld::Label& rWidget, sal_uLong nValue, const LocaleDataWrapper& rLocaleData) { - pWidget->SetText(rLocaleData.getNum(nValue, 0)); + rWidget.set_label(rLocaleData.getNum(nValue, 0)); } - void setDoubleValue(FixedText *pWidget, double fValue) + void setDoubleValue(weld::Label& rWidget, double fValue) { OUString sValue(OUString::number(::rtl::math::round(fValue, 1))); - pWidget->SetText(sValue); + rWidget.set_label(sValue); } } void SwWordCountFloatDlg::SetValues(const SwDocStat& rCurrent, const SwDocStat& rDoc) { - const LocaleDataWrapper& rLocaleData = GetSettings().GetUILocaleDataWrapper(); - setValue(m_pCurrentWordFT, rCurrent.nWord, rLocaleData); - setValue(m_pCurrentCharacterFT, rCurrent.nChar, rLocaleData); - setValue(m_pCurrentCharacterExcludingSpacesFT, rCurrent.nCharExcludingSpaces, rLocaleData); - setValue(m_pCurrentCjkcharsFT, rCurrent.nAsianWord, rLocaleData); - setValue(m_pDocWordFT, rDoc.nWord, rLocaleData); - setValue(m_pDocCharacterFT, rDoc.nChar, rLocaleData); - setValue(m_pDocCharacterExcludingSpacesFT, rDoc.nCharExcludingSpaces, rLocaleData); - setValue(m_pDocCjkcharsFT, rDoc.nAsianWord, rLocaleData); - - if (m_pStandardizedPagesLabelFT->IsVisible()) + const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetUILocaleDataWrapper(); + setValue(*m_xCurrentWordFT, rCurrent.nWord, rLocaleData); + setValue(*m_xCurrentCharacterFT, rCurrent.nChar, rLocaleData); + setValue(*m_xCurrentCharacterExcludingSpacesFT, rCurrent.nCharExcludingSpaces, rLocaleData); + setValue(*m_xCurrentCjkcharsFT, rCurrent.nAsianWord, rLocaleData); + setValue(*m_xDocWordFT, rDoc.nWord, rLocaleData); + setValue(*m_xDocCharacterFT, rDoc.nChar, rLocaleData); + setValue(*m_xDocCharacterExcludingSpacesFT, rDoc.nCharExcludingSpaces, rLocaleData); + setValue(*m_xDocCjkcharsFT, rDoc.nAsianWord, rLocaleData); + + if (m_xStandardizedPagesLabelFT->get_visible()) { sal_Int64 nCharsPerStandardizedPage = officecfg::Office::Writer::WordCount::StandardizedPageSize::get(); - setDoubleValue(m_pCurrentStandardizedPagesFT, + setDoubleValue(*m_xCurrentStandardizedPagesFT, static_cast<double>(rCurrent.nChar) / nCharsPerStandardizedPage); - setDoubleValue(m_pDocStandardizedPagesFT, + setDoubleValue(*m_xDocStandardizedPagesFT, static_cast<double>(rDoc.nChar) / nCharsPerStandardizedPage); } bool bShowCJK = (SvtCJKOptions().IsAnyEnabled() || rDoc.nAsianWord); - bool bToggleCJK = m_pCurrentCjkcharsFT->IsVisible() != bShowCJK; + bool bToggleCJK = m_xCurrentCjkcharsFT->get_visible() != bShowCJK; if (bToggleCJK) { showCJK(bShowCJK); - setOptimalLayoutSize(); //force resize of dialog + m_xDialog->resize_to_request(); //force resize of dialog } } void SwWordCountFloatDlg::showCJK(bool bShowCJK) { - m_pCurrentCjkcharsFT->Show(bShowCJK); - m_pDocCjkcharsFT->Show(bShowCJK); - m_pCjkcharsLabelFT->Show(bShowCJK); + m_xCurrentCjkcharsFT->show(bShowCJK); + m_xDocCjkcharsFT->show(bShowCJK); + m_xCjkcharsLabelFT->show(bShowCJK); } void SwWordCountFloatDlg::showStandardizedPages(bool bShowStandardizedPages) { - m_pCurrentStandardizedPagesFT->Show(bShowStandardizedPages); - m_pDocStandardizedPagesFT->Show(bShowStandardizedPages); - m_pStandardizedPagesLabelFT->Show(bShowStandardizedPages); + m_xCurrentStandardizedPagesFT->show(bShowStandardizedPages); + m_xDocStandardizedPagesFT->show(bShowStandardizedPages); + m_xStandardizedPagesLabelFT->show(bShowStandardizedPages); } SwWordCountFloatDlg::SwWordCountFloatDlg(SfxBindings* _pBindings, SfxChildWindow* pChild, - vcl::Window *pParent, + weld::Window *pParent, SfxChildWinInfo const * pInfo) - : SfxModelessDialog(_pBindings, pChild, pParent, "WordCountDialog", "modules/swriter/ui/wordcount.ui") + : SfxModelessDialogController(_pBindings, pChild, pParent, "modules/swriter/ui/wordcount.ui", "WordCountDialog") + , m_xCurrentWordFT(m_xBuilder->weld_label("selectwords")) + , m_xCurrentCharacterFT(m_xBuilder->weld_label("selectchars")) + , m_xCurrentCharacterExcludingSpacesFT(m_xBuilder->weld_label("selectcharsnospaces")) + , m_xCurrentCjkcharsFT(m_xBuilder->weld_label("selectcjkchars")) + , m_xCurrentStandardizedPagesFT(m_xBuilder->weld_label("selectstandardizedpages")) + , m_xDocWordFT(m_xBuilder->weld_label("docwords")) + , m_xDocCharacterFT(m_xBuilder->weld_label("docchars")) + , m_xDocCharacterExcludingSpacesFT(m_xBuilder->weld_label("doccharsnospaces")) + , m_xDocCjkcharsFT(m_xBuilder->weld_label("doccjkchars")) + , m_xDocStandardizedPagesFT(m_xBuilder->weld_label("docstandardizedpages")) + , m_xCjkcharsLabelFT(m_xBuilder->weld_label("cjkcharsft")) + , m_xStandardizedPagesLabelFT(m_xBuilder->weld_label("standardizedpages")) + , m_xClosePB(m_xBuilder->weld_button("close")) { - get(m_pCurrentWordFT, "selectwords"); - get(m_pCurrentCharacterFT, "selectchars"); - get(m_pCurrentCharacterExcludingSpacesFT, "selectcharsnospaces"); - get(m_pCurrentCjkcharsFT, "selectcjkchars"); - get(m_pCurrentStandardizedPagesFT, "selectstandardizedpages"); - - get(m_pDocWordFT, "docwords"); - get(m_pDocCharacterFT, "docchars"); - get(m_pDocCharacterExcludingSpacesFT, "doccharsnospaces"); - get(m_pDocCjkcharsFT, "doccjkchars"); - get(m_pDocStandardizedPagesFT, "docstandardizedpages"); - - get(m_pCjkcharsLabelFT, "cjkcharsft"); - get(m_pStandardizedPagesLabelFT, "standardizedpages"); - - get(m_pClosePB, "close"); - showCJK(SvtCJKOptions().IsAnyEnabled()); showStandardizedPages(officecfg::Office::Writer::WordCount::ShowStandardizedPageCount::get()); Initialize(pInfo); - - m_pClosePB->SetClickHdl(LINK(this, SwWordCountFloatDlg, CloseHdl)); } void SwWordCountFloatDlg::UpdateCounts() |