summaryrefslogtreecommitdiff
path: root/sw/source/ui/dialog
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2018-11-02 15:38:46 +0100
committerStephan Bergmann <sbergman@redhat.com>2018-11-02 16:51:29 +0100
commit4b0db40ab4a05a0940096654e8d60ed04f0cd2e6 (patch)
treeab91ce13fccbe99ceb96c75a4987e51d3e7ecd4a /sw/source/ui/dialog
parentd562ee86414c8946c3b650d6e917db3f729325d3 (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.cxx19
-rw-r--r--sw/source/ui/dialog/swdlgfact.hxx17
-rw-r--r--sw/source/ui/dialog/wordcountdialog.cxx114
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()