diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2018-11-02 15:38:46 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2018-11-02 16:51:29 +0100 |
commit | 4b0db40ab4a05a0940096654e8d60ed04f0cd2e6 (patch) | |
tree | ab91ce13fccbe99ceb96c75a4987e51d3e7ecd4a /sw/source/ui/dialog | |
parent | d562ee86414c8946c3b650d6e917db3f729325d3 (diff) |
Revert "weld SwWordCountFloatDlg"
This reverts commit 26c375671aa362b2f59d84645784938677ae1719.
Conflicts:
vcl/qt5/Qt5Frame.cxx
It caused null pointer dereference during UITest_writer_tests, as seen at
<https://ci.libreoffice.org//job/lo_ubsan/1090/>:
> /sfx2/source/appl/childwin.cxx:654:18: runtime error: member call on null pointer of type 'vcl::Window'
> #0 0x2b97d4160fa3 in SfxChildWindow::SetWorkWindow_Impl(SfxWorkWindow*) /sfx2/source/appl/childwin.cxx:654:18
> #1 0x2b97d462ab86 in SfxWorkWindow::CreateChildWin_Impl(SfxChildWin_Impl*, bool) /sfx2/source/appl/workwin.cxx:1350:9
> #2 0x2b97d463e6bb in SfxWorkWindow::ToggleChildWindow_Impl(unsigned short, bool) /sfx2/source/appl/workwin.cxx:1837:21
> #3 0x2b97d6eae94d in SfxViewFrame::ToggleChildWindow(unsigned short) /sfx2/source/view/viewfrm.cxx:3080:9
> #4 0x2b987664316d in SwView::UpdateWordCount(SfxShell*, unsigned short) /sw/source/uibase/uiview/view1.cxx:212:9
> #5 0x2b9876126a5d in SwTextShell::Execute(SfxRequest&) /sw/source/uibase/shells/textsh1.cxx:1369:9
> #6 0x2b98760a2391 in SfxStubSwTextShellExecute(SfxShell*, SfxRequest&) /workdir/SdiTarget/sw/sdi/swslots.hxx:2974:1
> #7 0x2b97d49050f6 in SfxShell::CallExec(void (*)(SfxShell*, SfxRequest&), SfxRequest&) /include/sfx2/shell.hxx:207:35
> #8 0x2b97d48c27d0 in SfxDispatcher::Call_Impl(SfxShell&, SfxSlot const&, SfxRequest&, bool) /sfx2/source/control/dispatch.cxx:353:13
> #9 0x2b97d48de12d in SfxDispatcher::Execute_(SfxShell&, SfxSlot const&, SfxRequest&, SfxCallMode) /sfx2/source/control/dispatch.cxx:854:9
> #10 0x2b97d482ea34 in SfxBindings::Execute_Impl(SfxRequest&, SfxSlot const*, SfxShell*) /sfx2/source/control/bindings.cxx:1063:9
> #11 0x2b97d4e5cead in SfxDispatchController_Impl::dispatch(com::sun::star::util::URL const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> const&) /sfx2/source/control/unoctitm.cxx:754:29
> #12 0x2b97d4e60b5e in SfxOfficeDispatch::dispatchWithNotification(com::sun::star::util::URL const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> const&) /sfx2/source/control/unoctitm.cxx:239:9
> #13 0x2b97c6c10b19 in comphelper::dispatchCommand(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XDispatchResultListener> const&) /comphelper/source/misc/dispatchcommand.cxx:60:9
> #14 0x2b980472020c in UITest::executeCommand(rtl::OUString const&) /vcl/source/uitest/uitest.cxx:22:12
[...]
Change-Id: I276684a5617bfec3803b195af59c51735bfa470a
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, 87 insertions, 63 deletions
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx index b634d18970d2..c30b671d3b29 100644 --- a/sw/source/ui/dialog/swdlgfact.cxx +++ b/sw/source/ui/dialog/swdlgfact.cxx @@ -87,11 +87,7 @@ using namespace ::com::sun::star; using namespace css::frame; using namespace css::uno; -short AbstractSwWordCountFloatDlg_Impl::Execute() -{ - return m_xDlg->run(); -} - +IMPL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl); IMPL_ABSTDLG_BASE(AbstractSwInsertAbstractDlg_Impl); IMPL_ABSTDLG_BASE(SwAbstractSfxDialog_Impl); @@ -699,19 +695,19 @@ vcl::Window* AbstractAuthMarkFloatDlg_Impl::GetWindow() return static_cast<vcl::Window*>(pDlg); } -std::shared_ptr<SfxModelessDialogController> AbstractSwWordCountFloatDlg_Impl::GetController() +vcl::Window* AbstractSwWordCountFloatDlg_Impl::GetWindow() { - return m_xDlg; + return static_cast<vcl::Window*>(pDlg); } void AbstractSwWordCountFloatDlg_Impl::UpdateCounts() { - m_xDlg->UpdateCounts(); + pDlg->UpdateCounts(); } void AbstractSwWordCountFloatDlg_Impl::SetCounts(const SwDocStat &rCurrCnt, const SwDocStat &rDocStat) { - m_xDlg->SetCounts(rCurrCnt, rDocStat); + pDlg->SetCounts(rCurrCnt, rDocStat); } AbstractMailMergeWizard_Impl::~AbstractMailMergeWizard_Impl() @@ -1113,10 +1109,11 @@ VclPtr<AbstractMarkFloatDlg> SwAbstractDialogFactory_Impl::CreateAuthMarkFloatDl VclPtr<AbstractSwWordCountFloatDlg> SwAbstractDialogFactory_Impl::CreateSwWordCountDialog( SfxBindings* pBindings, SfxChildWindow* pChild, - weld::Window *pParent, + vcl::Window *pParent, SfxChildWinInfo* pInfo) { - return VclPtr<AbstractSwWordCountFloatDlg_Impl>::Create(o3tl::make_unique<SwWordCountFloatDlg>(pBindings, pChild, pParent, pInfo)); + VclPtr<SwWordCountFloatDlg> pDlg = VclPtr<SwWordCountFloatDlg>::Create( pBindings, pChild, pParent, pInfo ); + return VclPtr<AbstractSwWordCountFloatDlg_Impl>::Create( pDlg ); } VclPtr<VclAbstractDialog> SwAbstractDialogFactory_Impl::CreateIndexMarkModalDlg( diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx index 14b802ef7e2d..103b04b35a02 100644 --- a/sw/source/ui/dialog/swdlgfact.hxx +++ b/sw/source/ui/dialog/swdlgfact.hxx @@ -74,17 +74,10 @@ bool Class::StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) \ class SwWordCountFloatDlg; class AbstractSwWordCountFloatDlg_Impl : public AbstractSwWordCountFloatDlg { -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; + 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 }; class AbstractSwInsertAbstractDlg_Impl : public AbstractSwInsertAbstractDlg @@ -603,7 +596,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, weld::Window *pParent, SfxChildWinInfo* pInfo) override; + SfxChildWindow* pChild, vcl::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 b24767823963..cc350e6fb9c8 100644 --- a/sw/source/ui/dialog/wordcountdialog.cxx +++ b/sw/source/ui/dialog/wordcountdialog.cxx @@ -31,92 +31,126 @@ #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(weld::Label& rWidget, sal_uLong nValue, const LocaleDataWrapper& rLocaleData) + void setValue(FixedText *pWidget, sal_uLong nValue, const LocaleDataWrapper& rLocaleData) { - rWidget.set_label(rLocaleData.getNum(nValue, 0)); + pWidget->SetText(rLocaleData.getNum(nValue, 0)); } - void setDoubleValue(weld::Label& rWidget, double fValue) + void setDoubleValue(FixedText *pWidget, double fValue) { OUString sValue(OUString::number(::rtl::math::round(fValue, 1))); - rWidget.set_label(sValue); + pWidget->SetText(sValue); } } void SwWordCountFloatDlg::SetValues(const SwDocStat& rCurrent, const SwDocStat& rDoc) { - 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()) + 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()) { sal_Int64 nCharsPerStandardizedPage = officecfg::Office::Writer::WordCount::StandardizedPageSize::get(); - setDoubleValue(*m_xCurrentStandardizedPagesFT, + setDoubleValue(m_pCurrentStandardizedPagesFT, static_cast<double>(rCurrent.nChar) / nCharsPerStandardizedPage); - setDoubleValue(*m_xDocStandardizedPagesFT, + setDoubleValue(m_pDocStandardizedPagesFT, static_cast<double>(rDoc.nChar) / nCharsPerStandardizedPage); } bool bShowCJK = (SvtCJKOptions().IsAnyEnabled() || rDoc.nAsianWord); - bool bToggleCJK = m_xCurrentCjkcharsFT->get_visible() != bShowCJK; + bool bToggleCJK = m_pCurrentCjkcharsFT->IsVisible() != bShowCJK; if (bToggleCJK) { showCJK(bShowCJK); - m_xDialog->resize_to_request(); //force resize of dialog + setOptimalLayoutSize(); //force resize of dialog } } void SwWordCountFloatDlg::showCJK(bool bShowCJK) { - m_xCurrentCjkcharsFT->show(bShowCJK); - m_xDocCjkcharsFT->show(bShowCJK); - m_xCjkcharsLabelFT->show(bShowCJK); + m_pCurrentCjkcharsFT->Show(bShowCJK); + m_pDocCjkcharsFT->Show(bShowCJK); + m_pCjkcharsLabelFT->Show(bShowCJK); } void SwWordCountFloatDlg::showStandardizedPages(bool bShowStandardizedPages) { - m_xCurrentStandardizedPagesFT->show(bShowStandardizedPages); - m_xDocStandardizedPagesFT->show(bShowStandardizedPages); - m_xStandardizedPagesLabelFT->show(bShowStandardizedPages); + m_pCurrentStandardizedPagesFT->Show(bShowStandardizedPages); + m_pDocStandardizedPagesFT->Show(bShowStandardizedPages); + m_pStandardizedPagesLabelFT->Show(bShowStandardizedPages); } SwWordCountFloatDlg::SwWordCountFloatDlg(SfxBindings* _pBindings, SfxChildWindow* pChild, - weld::Window *pParent, + vcl::Window *pParent, SfxChildWinInfo const * pInfo) - : 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")) + : SfxModelessDialog(_pBindings, pChild, pParent, "WordCountDialog", "modules/swriter/ui/wordcount.ui") { + 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() |