From 158cd800d607898b1d2fe9bf4514900802ca1d90 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Wed, 18 Apr 2018 11:49:10 +0100 Subject: weld EPUBExportDialog and add parent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iec4fa3afb1e90ec36f792ea65b8c57b11cff98b3 Reviewed-on: https://gerrit.libreoffice.org/53094 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- writerperfect/source/writer/EPUBExportDialog.cxx | 153 +++++++++------------ writerperfect/source/writer/EPUBExportDialog.hxx | 57 ++++---- .../source/writer/EPUBExportUIComponent.cxx | 13 +- .../source/writer/EPUBExportUIComponent.hxx | 7 + writerperfect/uiconfig/ui/exportepub.ui | 20 ++- 5 files changed, 123 insertions(+), 127 deletions(-) (limited to 'writerperfect') diff --git a/writerperfect/source/writer/EPUBExportDialog.cxx b/writerperfect/source/writer/EPUBExportDialog.cxx index c01bc32ec111..bf1f4a0e4cfd 100644 --- a/writerperfect/source/writer/EPUBExportDialog.cxx +++ b/writerperfect/source/writer/EPUBExportDialog.cxx @@ -70,25 +70,37 @@ sal_Int32 PositionToVersion(sal_Int32 nPosition) namespace writerperfect { -EPUBExportDialog::EPUBExportDialog(vcl::Window *pParent, comphelper::SequenceAsHashMap &rFilterData, uno::Reference xContext, css::uno::Reference xDocument) - : ModalDialog(pParent, "EpubDialog", "writerperfect/ui/exportepub.ui"), - mxContext(std::move(xContext)), - mrFilterData(rFilterData), - mxSourceDocument(std::move(xDocument)) +EPUBExportDialog::EPUBExportDialog(weld::Window *pParent, comphelper::SequenceAsHashMap &rFilterData, uno::Reference xContext, css::uno::Reference xDocument) + : GenericDialogController(pParent, "writerperfect/ui/exportepub.ui", "EpubDialog") + , m_xContext(std::move(xContext)) + , m_rFilterData(rFilterData) + , m_xSourceDocument(std::move(xDocument)) + , m_xVersion(m_xBuilder->weld_combo_box_text("versionlb")) + , m_xSplit(m_xBuilder->weld_combo_box_text("splitlb")) + , m_xLayout(m_xBuilder->weld_combo_box_text("layoutlb")) + , m_xCoverPath(m_xBuilder->weld_entry("coverpath")) + , m_xCoverButton(m_xBuilder->weld_button("coverbutton")) + , m_xMediaDir(m_xBuilder->weld_entry("mediadir")) + , m_xMediaButton(m_xBuilder->weld_button("mediabutton")) + , m_xOKButton(m_xBuilder->weld_button("ok")) + , m_xIdentifier(m_xBuilder->weld_entry("identifier")) + , m_xTitle(m_xBuilder->weld_entry("title")) + , m_xInitialCreator(m_xBuilder->weld_entry("author")) + , m_xLanguage(m_xBuilder->weld_entry("language")) + , m_xDate(m_xBuilder->weld_entry("date")) + { - get(m_pVersion, "versionlb"); - assert(PositionToVersion(m_pVersion->GetSelectedEntryPos()) == EPUBExportFilter::GetDefaultVersion()); + assert(PositionToVersion(m_xVersion->get_active()) == EPUBExportFilter::GetDefaultVersion()); auto it = rFilterData.find("EPUBVersion"); if (it != rFilterData.end()) { sal_Int32 nVersion = 0; if (it->second >>= nVersion) - m_pVersion->SelectEntryPos(VersionToPosition(nVersion)); + m_xVersion->set_active(VersionToPosition(nVersion)); } - m_pVersion->SetSelectHdl(LINK(this, EPUBExportDialog, VersionSelectHdl)); + m_xVersion->connect_changed(LINK(this, EPUBExportDialog, VersionSelectHdl)); - get(m_pSplit, "splitlb"); it = rFilterData.find("EPUBSplitMethod"); if (it != rFilterData.end()) { @@ -96,13 +108,12 @@ EPUBExportDialog::EPUBExportDialog(vcl::Window *pParent, comphelper::SequenceAsH if (it->second >>= nSplitMethod) // No conversion, 1:1 mapping between libepubgen::EPUBSplitMethod // and entry positions. - m_pSplit->SelectEntryPos(nSplitMethod); + m_xSplit->set_active(nSplitMethod); } else - m_pSplit->SelectEntryPos(EPUBExportFilter::GetDefaultSplitMethod()); - m_pSplit->SetSelectHdl(LINK(this, EPUBExportDialog, SplitSelectHdl)); + m_xSplit->set_active(EPUBExportFilter::GetDefaultSplitMethod()); + m_xSplit->connect_changed(LINK(this, EPUBExportDialog, SplitSelectHdl)); - get(m_pLayout, "layoutlb"); it = rFilterData.find("EPUBLayoutMethod"); if (it != rFilterData.end()) { @@ -110,137 +121,105 @@ EPUBExportDialog::EPUBExportDialog(vcl::Window *pParent, comphelper::SequenceAsH if (it->second >>= nLayoutMethod) // No conversion, 1:1 mapping between libepubgen::EPUBLayoutMethod // and entry positions. - m_pLayout->SelectEntryPos(nLayoutMethod); + m_xLayout->set_active(nLayoutMethod); } else - m_pLayout->SelectEntryPos(EPUBExportFilter::GetDefaultLayoutMethod()); - m_pLayout->SetSelectHdl(LINK(this, EPUBExportDialog, LayoutSelectHdl)); - - get(m_pCoverPath, "coverpath"); - - get(m_pCoverButton, "coverbutton"); - m_pCoverButton->SetClickHdl(LINK(this, EPUBExportDialog, CoverClickHdl)); - - get(m_pMediaDir, "mediadir"); + m_xLayout->set_active(EPUBExportFilter::GetDefaultLayoutMethod()); + m_xLayout->connect_changed(LINK(this, EPUBExportDialog, LayoutSelectHdl)); - get(m_pMediaButton, "mediabutton"); - m_pMediaButton->SetClickHdl(LINK(this, EPUBExportDialog, MediaClickHdl)); + m_xCoverButton->connect_clicked(LINK(this, EPUBExportDialog, CoverClickHdl)); - get(m_pIdentifier, "identifier"); + m_xMediaButton->connect_clicked(LINK(this, EPUBExportDialog, MediaClickHdl)); - get(m_pTitle, "title"); - uno::Reference xDPS(mxSourceDocument, uno::UNO_QUERY); + uno::Reference xDPS(m_xSourceDocument, uno::UNO_QUERY); uno::Reference xDP; if (xDPS.is()) xDP = xDPS->getDocumentProperties(); if (xDP.is()) - m_pTitle->SetText(xDP->getTitle()); + m_xTitle->set_text(xDP->getTitle()); - get(m_pInitialCreator, "author"); if (xDP.is()) - m_pInitialCreator->SetText(xDP->getAuthor()); + m_xInitialCreator->set_text(xDP->getAuthor()); - get(m_pLanguage, "language"); if (xDP.is()) { OUString aLanguage(LanguageTag::convertToBcp47(xDP->getLanguage(), false)); - m_pLanguage->SetText(aLanguage); + m_xLanguage->set_text(aLanguage); } - get(m_pDate, "date"); if (xDP.is()) { OUStringBuffer aBuffer; util::DateTime aDate(xDP->getModificationDate()); sax::Converter::convertDateTime(aBuffer, aDate, nullptr, true); - m_pDate->SetText(aBuffer.makeStringAndClear()); + m_xDate->set_text(aBuffer.makeStringAndClear()); } - get(m_pOKButton, "ok"); - m_pOKButton->SetClickHdl(LINK(this, EPUBExportDialog, OKClickHdl)); + m_xOKButton->connect_clicked(LINK(this, EPUBExportDialog, OKClickHdl)); } -IMPL_LINK_NOARG(EPUBExportDialog, VersionSelectHdl, ListBox &, void) +IMPL_LINK_NOARG(EPUBExportDialog, VersionSelectHdl, weld::ComboBoxText &, void) { - mrFilterData["EPUBVersion"] <<= PositionToVersion(m_pVersion->GetSelectedEntryPos()); + m_rFilterData["EPUBVersion"] <<= PositionToVersion(m_xVersion->get_active()); } -IMPL_LINK_NOARG(EPUBExportDialog, SplitSelectHdl, ListBox &, void) +IMPL_LINK_NOARG(EPUBExportDialog, SplitSelectHdl, weld::ComboBoxText &, void) { // No conversion, 1:1 mapping between entry positions and // libepubgen::EPUBSplitMethod. - mrFilterData["EPUBSplitMethod"] <<= m_pSplit->GetSelectedEntryPos(); + m_rFilterData["EPUBSplitMethod"] <<= static_cast(m_xSplit->get_active()); } -IMPL_LINK_NOARG(EPUBExportDialog, LayoutSelectHdl, ListBox &, void) +IMPL_LINK_NOARG(EPUBExportDialog, LayoutSelectHdl, weld::ComboBoxText &, void) { // No conversion, 1:1 mapping between entry positions and // libepubgen::EPUBLayoutMethod. - mrFilterData["EPUBLayoutMethod"] <<= m_pLayout->GetSelectedEntryPos(); - m_pSplit->Enable(m_pLayout->GetSelectedEntryPos() != libepubgen::EPUB_LAYOUT_METHOD_FIXED); + m_rFilterData["EPUBLayoutMethod"] <<= static_cast(m_xLayout->get_active()); + m_xSplit->set_sensitive(m_xLayout->get_active() != libepubgen::EPUB_LAYOUT_METHOD_FIXED); } -IMPL_LINK_NOARG(EPUBExportDialog, CoverClickHdl, Button *, void) +IMPL_LINK_NOARG(EPUBExportDialog, CoverClickHdl, weld::Button &, void) { - SvxOpenGraphicDialog aDlg("Import", GetFrameWeld()); + SvxOpenGraphicDialog aDlg("Import", m_xDialog.get()); aDlg.EnableLink(false); if (aDlg.Execute() == ERRCODE_NONE) - m_pCoverPath->SetText(aDlg.GetPath()); + m_xCoverPath->set_text(aDlg.GetPath()); } -IMPL_LINK_NOARG(EPUBExportDialog, MediaClickHdl, Button *, void) +IMPL_LINK_NOARG(EPUBExportDialog, MediaClickHdl, weld::Button &, void) { - uno::Reference xFolderPicker = ui::dialogs::FolderPicker::create(mxContext); + uno::Reference xFolderPicker = ui::dialogs::FolderPicker::create(m_xContext); if (xFolderPicker->execute() != ui::dialogs::ExecutableDialogResults::OK) return; - m_pMediaDir->SetText(xFolderPicker->getDirectory()); + m_xMediaDir->set_text(xFolderPicker->getDirectory()); } -IMPL_LINK_NOARG(EPUBExportDialog, OKClickHdl, Button *, void) +IMPL_LINK_NOARG(EPUBExportDialog, OKClickHdl, weld::Button &, void) { // General - if (!m_pCoverPath->GetText().isEmpty()) - mrFilterData["RVNGCoverImage"] <<= m_pCoverPath->GetText(); - if (!m_pMediaDir->GetText().isEmpty()) - mrFilterData["RVNGMediaDir"] <<= m_pMediaDir->GetText(); + if (!m_xCoverPath->get_text().isEmpty()) + m_rFilterData["RVNGCoverImage"] <<= m_xCoverPath->get_text(); + if (!m_xMediaDir->get_text().isEmpty()) + m_rFilterData["RVNGMediaDir"] <<= m_xMediaDir->get_text(); // Metadata - if (!m_pIdentifier->GetText().isEmpty()) - mrFilterData["RVNGIdentifier"] <<= m_pIdentifier->GetText(); - if (!m_pTitle->GetText().isEmpty()) - mrFilterData["RVNGTitle"] <<= m_pTitle->GetText(); - if (!m_pInitialCreator->GetText().isEmpty()) - mrFilterData["RVNGInitialCreator"] <<= m_pInitialCreator->GetText(); - if (!m_pLanguage->GetText().isEmpty()) - mrFilterData["RVNGLanguage"] <<= m_pLanguage->GetText(); - if (!m_pDate->GetText().isEmpty()) - mrFilterData["RVNGDate"] <<= m_pDate->GetText(); - - EndDialog(RET_OK); + if (!m_xIdentifier->get_text().isEmpty()) + m_rFilterData["RVNGIdentifier"] <<= m_xIdentifier->get_text(); + if (!m_xTitle->get_text().isEmpty()) + m_rFilterData["RVNGTitle"] <<= m_xTitle->get_text(); + if (!m_xInitialCreator->get_text().isEmpty()) + m_rFilterData["RVNGInitialCreator"] <<= m_xInitialCreator->get_text(); + if (!m_xLanguage->get_text().isEmpty()) + m_rFilterData["RVNGLanguage"] <<= m_xLanguage->get_text(); + if (!m_xDate->get_text().isEmpty()) + m_rFilterData["RVNGDate"] <<= m_xDate->get_text(); + + m_xDialog->response(RET_OK); } EPUBExportDialog::~EPUBExportDialog() { - disposeOnce(); -} - -void EPUBExportDialog::dispose() -{ - m_pVersion.clear(); - m_pSplit.clear(); - m_pCoverPath.clear(); - m_pCoverButton.clear(); - m_pOKButton.clear(); - m_pIdentifier.clear(); - m_pTitle.clear(); - m_pInitialCreator.clear(); - m_pLanguage.clear(); - m_pDate.clear(); - m_pMediaDir.clear(); - m_pMediaButton.clear(); - m_pLayout.clear(); - ModalDialog::dispose(); } } // namespace writerperfect diff --git a/writerperfect/source/writer/EPUBExportDialog.hxx b/writerperfect/source/writer/EPUBExportDialog.hxx index ab90c48ee04c..51326c1ae1f6 100644 --- a/writerperfect/source/writer/EPUBExportDialog.hxx +++ b/writerperfect/source/writer/EPUBExportDialog.hxx @@ -10,10 +10,7 @@ #ifndef INCLUDED_WRITERPERFECT_SOURCE_WRITER_EPUBEXPORTDIALOG_HXX #define INCLUDED_WRITERPERFECT_SOURCE_WRITER_EPUBEXPORTDIALOG_HXX -#include -#include -#include -#include +#include namespace comphelper { @@ -24,37 +21,37 @@ namespace writerperfect { /// EPUB export options dialog. -class EPUBExportDialog : public ModalDialog +class EPUBExportDialog : public weld::GenericDialogController { public: - EPUBExportDialog(vcl::Window *pParent, comphelper::SequenceAsHashMap &rFilterData, css::uno::Reference xContext, css::uno::Reference xDocument); + EPUBExportDialog(weld::Window *pParent, comphelper::SequenceAsHashMap &rFilterData, css::uno::Reference xContext, css::uno::Reference xDocument); ~EPUBExportDialog() override; - void dispose() override; private: - DECL_LINK(VersionSelectHdl, ListBox &, void); - DECL_LINK(SplitSelectHdl, ListBox &, void); - DECL_LINK(LayoutSelectHdl, ListBox &, void); - DECL_LINK(CoverClickHdl, Button *, void); - DECL_LINK(MediaClickHdl, Button *, void); - DECL_LINK(OKClickHdl, Button *, void); - - css::uno::Reference mxContext; - comphelper::SequenceAsHashMap &mrFilterData; - css::uno::Reference mxSourceDocument; - VclPtr m_pVersion; - VclPtr m_pSplit; - VclPtr m_pLayout; - VclPtr m_pCoverPath; - VclPtr m_pCoverButton; - VclPtr m_pMediaDir; - VclPtr m_pMediaButton; - VclPtr m_pOKButton; - VclPtr m_pIdentifier; - VclPtr m_pTitle; - VclPtr m_pInitialCreator; - VclPtr m_pLanguage; - VclPtr m_pDate; + DECL_LINK(VersionSelectHdl, weld::ComboBoxText &, void); + DECL_LINK(SplitSelectHdl, weld::ComboBoxText &, void); + DECL_LINK(LayoutSelectHdl, weld::ComboBoxText &, void); + DECL_LINK(CoverClickHdl, weld::Button &, void); + DECL_LINK(MediaClickHdl, weld::Button &, void); + DECL_LINK(OKClickHdl, weld::Button &, void); + + css::uno::Reference m_xContext; + comphelper::SequenceAsHashMap &m_rFilterData; + css::uno::Reference m_xSourceDocument; + + std::unique_ptr m_xVersion; + std::unique_ptr m_xSplit; + std::unique_ptr m_xLayout; + std::unique_ptr m_xCoverPath; + std::unique_ptr m_xCoverButton; + std::unique_ptr m_xMediaDir; + std::unique_ptr m_xMediaButton; + std::unique_ptr m_xOKButton; + std::unique_ptr m_xIdentifier; + std::unique_ptr m_xTitle; + std::unique_ptr m_xInitialCreator; + std::unique_ptr m_xLanguage; + std::unique_ptr m_xDate; }; } // namespace writerperfect diff --git a/writerperfect/source/writer/EPUBExportUIComponent.cxx b/writerperfect/source/writer/EPUBExportUIComponent.cxx index 4df8ea4a1946..abf533f7f19a 100644 --- a/writerperfect/source/writer/EPUBExportUIComponent.cxx +++ b/writerperfect/source/writer/EPUBExportUIComponent.cxx @@ -10,7 +10,7 @@ #include "EPUBExportUIComponent.hxx" #include - +#include #include #include #include @@ -72,12 +72,19 @@ void EPUBExportUIComponent::setTitle(const OUString &/*rTitle*/) { } +void SAL_CALL EPUBExportUIComponent::initialize(const uno::Sequence& rArguments) +{ + ::comphelper::NamedValueCollection aProperties(rArguments); + if (aProperties.has("ParentWindow")) + aProperties.get("ParentWindow") >>= mxDialogParent; +} + sal_Int16 EPUBExportUIComponent::execute() { SolarMutexGuard aGuard; - ScopedVclPtrInstance pDialog(Application::GetDefDialogParent(), maFilterData, mxContext, mxSourceDocument); - if (pDialog->Execute() == RET_OK) + EPUBExportDialog aDialog(Application::GetFrameWeld(mxDialogParent), maFilterData, mxContext, mxSourceDocument); + if (aDialog.run() == RET_OK) return ui::dialogs::ExecutableDialogResults::OK; return ui::dialogs::ExecutableDialogResults::CANCEL; } diff --git a/writerperfect/source/writer/EPUBExportUIComponent.hxx b/writerperfect/source/writer/EPUBExportUIComponent.hxx index 865571dde97b..f2288a91ad76 100644 --- a/writerperfect/source/writer/EPUBExportUIComponent.hxx +++ b/writerperfect/source/writer/EPUBExportUIComponent.hxx @@ -10,8 +10,10 @@ #ifndef INCLUDED_WRITERPERFECT_SOURCE_WRITER_EPUBEXPORTUICOMPONENT_HXX #define INCLUDED_WRITERPERFECT_SOURCE_WRITER_EPUBEXPORTUICOMPONENT_HXX +#include #include #include +#include #include #include #include @@ -26,6 +28,7 @@ namespace writerperfect class EPUBExportUIComponent : public cppu::WeakImplHelper < css::beans::XPropertyAccess, + css::lang::XInitialization, css::lang::XServiceInfo, css::ui::dialogs::XExecutableDialog, css::document::XExporter @@ -50,6 +53,9 @@ public: // XExporter void SAL_CALL setSourceDocument(const css::uno::Reference &xDocument) override; + // XInitialization + void SAL_CALL initialize(const css::uno::Sequence& rArguments) override; + private: /// The full set of property values. comphelper::SequenceAsHashMap maMediaDescriptor; @@ -58,6 +64,7 @@ private: /// UNO context. css::uno::Reference mxContext; css::uno::Reference mxSourceDocument; + css::uno::Reference mxDialogParent; }; } // namespace writerperfect diff --git a/writerperfect/uiconfig/ui/exportepub.ui b/writerperfect/uiconfig/ui/exportepub.ui index 114cd0376952..8b1ff34d7b00 100644 --- a/writerperfect/uiconfig/ui/exportepub.ui +++ b/writerperfect/uiconfig/ui/exportepub.ui @@ -1,5 +1,5 @@ - + @@ -8,6 +8,8 @@ EPUB Export False True + 0 + 0 dialog @@ -296,6 +298,7 @@ True True + True True @@ -369,6 +372,7 @@ True True + True True @@ -451,6 +455,7 @@ True True + True 1 @@ -491,6 +496,7 @@ True True + True 1 @@ -516,6 +522,7 @@ True True + True 1 @@ -541,6 +548,7 @@ True True + True 1 @@ -566,6 +574,7 @@ True True + True 1 @@ -602,11 +611,8 @@ cancel help - - - 9999 - 1 - 1 - 10 + + + -- cgit