diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-06-05 20:19:11 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-06-06 17:32:08 +0200 |
commit | 3880bf655fd449a8def384240b43b088536a8a4b (patch) | |
tree | 4510b102f88f13c11e0e9a9e762c2982c63d5b31 /sd/source/ui | |
parent | 36ed48a4f75fd9f014d161a48de5d11dc941b1cf (diff) |
weld HeaderFooterDialog
Change-Id: I6a5068106d0f243646cf12ec676dff60a04922ee
Reviewed-on: https://gerrit.libreoffice.org/73596
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sd/source/ui')
-rw-r--r-- | sd/source/ui/dlg/headerfooterdlg.cxx | 426 | ||||
-rw-r--r-- | sd/source/ui/dlg/sddlgfact.cxx | 17 | ||||
-rw-r--r-- | sd/source/ui/dlg/sddlgfact.hxx | 18 | ||||
-rw-r--r-- | sd/source/ui/inc/headerfooterdlg.hxx | 37 | ||||
-rw-r--r-- | sd/source/ui/view/drviews3.cxx | 7 |
5 files changed, 213 insertions, 292 deletions
diff --git a/sd/source/ui/dlg/headerfooterdlg.cxx b/sd/source/ui/dlg/headerfooterdlg.cxx index 4e88df4262ff..9145304ab2c4 100644 --- a/sd/source/ui/dlg/headerfooterdlg.cxx +++ b/sd/source/ui/dlg/headerfooterdlg.cxx @@ -44,6 +44,7 @@ #include <tools/color.hxx> #include <i18nlangtag/mslangid.hxx> #include <svtools/colorcfg.hxx> +#include <vcl/customweld.hxx> #include <vcl/decoview.hxx> #include <vcl/builderfactory.hxx> @@ -57,7 +58,7 @@ namespace sd { -class PresLayoutPreview : public Control +class PresLayoutPreview : public weld::CustomWidgetController { private: SdPage* mpMaster; @@ -69,10 +70,11 @@ private: void Paint(vcl::RenderContext& rRenderContext, SdrTextObj const * pObj, bool bVisible, bool bDotted = false); public: - explicit PresLayoutPreview(vcl::Window* pParent); + explicit PresLayoutPreview(); + + virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override; virtual void Paint(vcl::RenderContext& rRenderContext, const ::tools::Rectangle& rRect) override; - virtual Size GetOptimalSize() const override; void init(SdPage* pMaster); void update(HeaderFooterSettings const & rSettings); @@ -109,50 +111,46 @@ DateAndTimeFormat const nDateTimeFormats[nDateTimeFormatsCount] = { SvxDateFormat::AppDefault, SvxTimeFormat::HH12_MM_SS }, }; -class HeaderFooterTabPage : public TabPage +class HeaderFooterTabPage { private: - - VclPtr<FixedText> mpFTIncludeOn; - - VclPtr<CheckBox> mpCBHeader; - VclPtr<VclContainer> mpHeaderBox; - VclPtr<Edit> mpTBHeader; - - VclPtr<CheckBox> mpCBDateTime; - VclPtr<RadioButton> mpRBDateTimeFixed; - VclPtr<RadioButton> mpRBDateTimeAutomatic; - VclPtr<Edit> mpTBDateTimeFixed; - VclPtr<ListBox> mpCBDateTimeFormat; - VclPtr<FixedText> mpFTDateTimeLanguage; - VclPtr<SvxLanguageBox> mpCBDateTimeLanguage; - - VclPtr<CheckBox> mpCBFooter; - VclPtr<VclContainer> mpFooterBox; - VclPtr<Edit> mpTBFooter; - - VclPtr<CheckBox> mpCBSlideNumber; - - VclPtr<CheckBox> mpCBNotOnTitle; - - VclPtr<PresLayoutPreview> mpCTPreview; - - SdDrawDocument* mpDoc; + SdDrawDocument* mpDoc; LanguageType meOldLanguage; - bool const mbHandoutMode; - DECL_LINK( UpdateOnClickHdl, Button*, void ); - DECL_LINK( LanguageChangeHdl, ListBox&, void ); + std::unique_ptr<weld::Builder> mxBuilder; + std::unique_ptr<weld::Container> mxContainer; + std::unique_ptr<weld::Label> mxFTIncludeOn; + std::unique_ptr<weld::CheckButton> mxCBHeader; + std::unique_ptr<weld::Widget> mxHeaderBox; + std::unique_ptr<weld::Entry> mxTBHeader; + std::unique_ptr<weld::CheckButton> mxCBDateTime; + std::unique_ptr<weld::RadioButton> mxRBDateTimeFixed; + std::unique_ptr<weld::RadioButton> mxRBDateTimeAutomatic; + std::unique_ptr<weld::Entry> mxTBDateTimeFixed; + std::unique_ptr<weld::ComboBox> mxCBDateTimeFormat; + std::unique_ptr<weld::Label> mxFTDateTimeLanguage; + std::unique_ptr<LanguageBox> mxCBDateTimeLanguage; + std::unique_ptr<weld::CheckButton> mxCBFooter; + std::unique_ptr<weld::Widget> mxFooterBox; + std::unique_ptr<weld::Entry> mxTBFooter; + std::unique_ptr<weld::CheckButton> mxCBSlideNumber; + std::unique_ptr<weld::CheckButton> mxCBNotOnTitle; + std::unique_ptr<weld::Label> mxReplacementA; + std::unique_ptr<weld::Label> mxReplacementB; + std::unique_ptr<PresLayoutPreview> mxCTPreview; + std::unique_ptr<weld::CustomWeld> mxCTPreviewWin; + + + DECL_LINK( UpdateOnClickHdl, weld::Button&, void ); + DECL_LINK( LanguageChangeHdl, weld::ComboBox&, void ); void FillFormatList(sal_Int32 nSelectedPos); void GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet ); void GetOrSetDateTimeLanguage( LanguageType &rLanguage, bool bSet, SdPage* pPage ); public: - HeaderFooterTabPage( vcl::Window* pParent, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode ); - virtual ~HeaderFooterTabPage() override; - virtual void dispose() override; + HeaderFooterTabPage(weld::Container* pParent, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode ); void init( const HeaderFooterSettings& rSettings, bool bNotOnTitle ); void getData( HeaderFooterSettings& rSettings, bool& rNotOnTitle ); @@ -163,14 +161,16 @@ public: using namespace ::sd; -HeaderFooterDialog::HeaderFooterDialog( ViewShell* pViewShell, vcl::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage ) : - TabDialog ( pParent, "HeaderFooterDialog", "modules/simpress/ui/headerfooterdialog.ui" ), - mpDoc( pDoc ), - mpCurrentPage( pCurrentPage ), - mpViewShell( pViewShell ) +HeaderFooterDialog::HeaderFooterDialog(ViewShell* pViewShell, weld::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage) + : GenericDialogController(pParent, "modules/simpress/ui/headerfooterdialog.ui", "HeaderFooterDialog") + , mpDoc( pDoc ) + , mpCurrentPage( pCurrentPage ) + , mpViewShell( pViewShell ) + , mxTabCtrl(m_xBuilder->weld_notebook("tabs")) + , mxPBApplyToAll(m_xBuilder->weld_button("apply_all")) + , mxPBApply(m_xBuilder->weld_button("apply")) + , mxPBCancel(m_xBuilder->weld_button("cancel")) { - get(mpTabCtrl, "tabs" ); - SdPage* pSlide; SdPage* pNotes; if( pCurrentPage->GetPageKind() == PageKind::Standard ) @@ -192,115 +192,82 @@ HeaderFooterDialog::HeaderFooterDialog( ViewShell* pViewShell, vcl::Window* pPar mpCurrentPage = nullptr; } - pDoc->StopWorkStartupDelay(); - mpTabCtrl->Show(); + mxSlideTabPage.reset(new HeaderFooterTabPage(mxTabCtrl->get_page("slides"), pDoc, pSlide, false)); + mxNotesHandoutsTabPage.reset(new HeaderFooterTabPage(mxTabCtrl->get_page("notes"), pDoc, pNotes, true)); - mnSlidesId = mpTabCtrl->GetPageId("slides"); - mpSlideTabPage = VclPtr<HeaderFooterTabPage>::Create( mpTabCtrl, pDoc, pSlide, false ); - mpTabCtrl->SetTabPage( mnSlidesId, mpSlideTabPage ); - - Size aSiz = mpSlideTabPage->GetSizePixel(); - Size aCtrlSiz = mpTabCtrl->GetOutputSizePixel(); - // set size on TabControl only if smaller than TabPage - if ( aCtrlSiz.Width() < aSiz.Width() || aCtrlSiz.Height() < aSiz.Height() ) - { - mpTabCtrl->SetOutputSizePixel( aSiz ); - aCtrlSiz = aSiz; - } - - sal_uInt16 nNotesId = mpTabCtrl->GetPageId("notes"); - mpNotesHandoutsTabPage = VclPtr<HeaderFooterTabPage>::Create( mpTabCtrl, pDoc, pNotes, true ); - mpTabCtrl->SetTabPage( nNotesId, mpNotesHandoutsTabPage ); - - get(maPBApplyToAll, "apply_all" ); - get(maPBApply, "apply" ); - get(maPBCancel, "cancel" ); + pDoc->StopWorkStartupDelay(); + mxTabCtrl->show(); - ActivatePageHdl( mpTabCtrl ); + ActivatePageHdl(mxTabCtrl->get_current_page_ident()); - mpTabCtrl->SetActivatePageHdl( LINK( this, HeaderFooterDialog, ActivatePageHdl ) ); + mxTabCtrl->connect_enter_page( LINK( this, HeaderFooterDialog, ActivatePageHdl ) ); - maPBApplyToAll->SetClickHdl( LINK( this, HeaderFooterDialog, ClickApplyToAllHdl ) ); - maPBApply->SetClickHdl( LINK( this, HeaderFooterDialog, ClickApplyHdl ) ); - maPBCancel->SetClickHdl( LINK( this, HeaderFooterDialog, ClickCancelHdl ) ); + mxPBApplyToAll->connect_clicked( LINK( this, HeaderFooterDialog, ClickApplyToAllHdl ) ); + mxPBApply->connect_clicked( LINK( this, HeaderFooterDialog, ClickApplyHdl ) ); + mxPBCancel->connect_clicked( LINK( this, HeaderFooterDialog, ClickCancelHdl ) ); maSlideSettings = pSlide->getHeaderFooterSettings(); const HeaderFooterSettings& rTitleSettings = mpDoc->GetSdPage(0, PageKind::Standard)->getHeaderFooterSettings(); bool bNotOnTitle = !rTitleSettings.mbFooterVisible && !rTitleSettings.mbSlideNumberVisible && !rTitleSettings.mbDateTimeVisible; - mpSlideTabPage->init( maSlideSettings, bNotOnTitle ); + mxSlideTabPage->init( maSlideSettings, bNotOnTitle ); maNotesHandoutSettings = pNotes->getHeaderFooterSettings(); - mpNotesHandoutsTabPage->init( maNotesHandoutSettings, false ); + mxNotesHandoutsTabPage->init( maNotesHandoutSettings, false ); } HeaderFooterDialog::~HeaderFooterDialog() { - disposeOnce(); } -void HeaderFooterDialog::dispose() +IMPL_LINK(HeaderFooterDialog, ActivatePageHdl, const OString&, rIdent, void) { - mpSlideTabPage.disposeAndClear(); - mpNotesHandoutsTabPage.disposeAndClear(); - mpTabCtrl.clear(); - maPBApplyToAll.clear(); - maPBApply.clear(); - maPBCancel.clear(); - TabDialog::dispose(); + mxPBApply->set_visible(rIdent == "slides"); + mxPBApply->set_sensitive(mpCurrentPage != nullptr); } -IMPL_LINK( HeaderFooterDialog, ActivatePageHdl, TabControl *, pTabCtrl, void ) -{ - const sal_uInt16 nId = pTabCtrl->GetCurPageId(); - TabPage* pTabPage = pTabCtrl->GetTabPage( nId ); - pTabPage->Show(); - maPBApply->Show( nId == mnSlidesId ); - maPBApply->Enable( mpCurrentPage != nullptr ); -} - -IMPL_LINK_NOARG(HeaderFooterDialog, ClickApplyToAllHdl, Button*, void) +IMPL_LINK_NOARG(HeaderFooterDialog, ClickApplyToAllHdl, weld::Button&, void) { ApplyToAll(); } -IMPL_LINK_NOARG(HeaderFooterDialog, ClickApplyHdl, Button*, void) +IMPL_LINK_NOARG(HeaderFooterDialog, ClickApplyHdl, weld::Button&, void) { Apply(); } -IMPL_LINK_NOARG(HeaderFooterDialog, ClickCancelHdl, Button*, void) +IMPL_LINK_NOARG(HeaderFooterDialog, ClickCancelHdl, weld::Button&, void) { - EndDialog(); + m_xDialog->response(RET_CANCEL); } -short HeaderFooterDialog::Execute() +short HeaderFooterDialog::run() { - sal_uInt16 nRet = TabDialog::Execute(); - if( nRet ) + short nRet = GenericDialogController::run(); + if (nRet) mpViewShell->GetDocSh()->SetModified(); return nRet; } void HeaderFooterDialog::ApplyToAll() { - sal_uInt16 tabId = mpTabCtrl->GetCurPageId(); - apply( true, tabId == mnSlidesId ); - EndDialog(1); + OString tabId = mxTabCtrl->get_current_page_ident(); + apply(true, tabId == "slides"); + m_xDialog->response(RET_OK); } void HeaderFooterDialog::Apply() { - sal_uInt16 tabId = mpTabCtrl->GetCurPageId(); - apply( false, tabId == mnSlidesId ); - EndDialog(1); + OString tabId = mxTabCtrl->get_current_page_ident(); + apply(false, tabId == "slides"); + m_xDialog->response(RET_OK); } void HeaderFooterDialog::apply( bool bToAll, bool bForceSlides ) { std::unique_ptr<SdUndoGroup> pUndoGroup(new SdUndoGroup(mpDoc)); - OUString aComment( GetText() ); + OUString aComment( m_xDialog->get_title() ); pUndoGroup->SetComment( aComment ); HeaderFooterSettings aNewSettings; @@ -308,7 +275,7 @@ void HeaderFooterDialog::apply( bool bToAll, bool bForceSlides ) // change slide settings first ... - mpSlideTabPage->getData( aNewSettings, bNewNotOnTitle ); + mxSlideTabPage->getData( aNewSettings, bNewNotOnTitle ); // only if we pressed apply or apply all on the slide tab page or if the slide settings // have been changed @@ -351,7 +318,7 @@ void HeaderFooterDialog::apply( bool bToAll, bool bForceSlides ) // now notes settings - mpNotesHandoutsTabPage->getData( aNewSettings, bNewNotOnTitle ); + mxNotesHandoutsTabPage->getData( aNewSettings, bNewNotOnTitle ); // only if we pressed apply or apply all on the notes tab page or if the notes settings // have been changed @@ -381,172 +348,115 @@ void HeaderFooterDialog::change( SdUndoGroup* pUndoGroup, SdPage* pPage, const H pPage->setHeaderFooterSettings( rNewSettings ); } -namespace { - -void recursive_rename_ui_element(vcl::Window& rWindow, const OUString& rPrefix) -{ - OUString aID = rWindow.get_id(); - if (aID.isEmpty()) - { - rWindow.set_id(rPrefix + aID); - } - - size_t nChildCount = rWindow.GetChildCount(); - for (size_t i = 0; i < nChildCount; ++i) - { - vcl::Window* pChild = rWindow.GetChild(i); - if (pChild) - recursive_rename_ui_element(*pChild, rPrefix); - } -} - -} - -HeaderFooterTabPage::HeaderFooterTabPage( vcl::Window* pWindow, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode ) : - TabPage( pWindow, "HeaderFooterTab", "modules/simpress/ui/headerfootertab.ui" ), - mpDoc(pDoc), - mbHandoutMode( bHandoutMode ) -{ - get(mpFTIncludeOn, "include_label"); - get(mpCBHeader, "header_cb" ); - get(mpHeaderBox, "header_box" ); - get(mpTBHeader, "header_text" ); - get(mpCBDateTime, "datetime_cb" ); - get(mpRBDateTimeFixed, "rb_fixed" ); - get(mpRBDateTimeAutomatic, "rb_auto" ); - get(mpTBDateTimeFixed, "datetime_value" ); - get(mpCBDateTimeFormat, "datetime_format_list" ); - get(mpFTDateTimeLanguage, "language_label" ); - get(mpCBDateTimeLanguage, "language_list" ); - - get(mpCBFooter, "footer_cb" ); - get(mpFooterBox, "footer_box" ); - get(mpTBFooter, "footer_text" ); - - get(mpCBSlideNumber, "slide_number" ); - - get(mpCBNotOnTitle, "not_on_title" ); - - get(mpCTPreview, "preview"); - mpCTPreview->init( pActualPage ? +HeaderFooterTabPage::HeaderFooterTabPage(weld::Container* pParent, SdDrawDocument* pDoc, SdPage* pActualPage, bool bHandoutMode) + : mpDoc(pDoc) + , mbHandoutMode(bHandoutMode) + , mxBuilder(Application::CreateBuilder(pParent, "modules/simpress/ui/headerfootertab.ui")) + , mxContainer(mxBuilder->weld_container("HeaderFooterTab")) + , mxFTIncludeOn(mxBuilder->weld_label("include_label")) + , mxCBHeader(mxBuilder->weld_check_button("header_cb" )) + , mxHeaderBox(mxBuilder->weld_widget("header_box")) + , mxTBHeader(mxBuilder->weld_entry("header_text")) + , mxCBDateTime(mxBuilder->weld_check_button("datetime_cb")) + , mxRBDateTimeFixed(mxBuilder->weld_radio_button("rb_fixed")) + , mxRBDateTimeAutomatic(mxBuilder->weld_radio_button("rb_auto")) + , mxTBDateTimeFixed(mxBuilder->weld_entry("datetime_value")) + , mxCBDateTimeFormat(mxBuilder->weld_combo_box("datetime_format_list")) + , mxFTDateTimeLanguage(mxBuilder->weld_label("language_label")) + , mxCBDateTimeLanguage(new LanguageBox(mxBuilder->weld_combo_box("language_list"))) + , mxCBFooter(mxBuilder->weld_check_button("footer_cb")) + , mxFooterBox(mxBuilder->weld_widget("footer_box" )) + , mxTBFooter(mxBuilder->weld_entry("footer_text")) + , mxCBSlideNumber(mxBuilder->weld_check_button("slide_number")) + , mxCBNotOnTitle(mxBuilder->weld_check_button("not_on_title")) + , mxReplacementA(mxBuilder->weld_label("replacement_a")) + , mxReplacementB(mxBuilder->weld_label("replacement_b")) + , mxCTPreview(new PresLayoutPreview) + , mxCTPreviewWin(new weld::CustomWeld(*mxBuilder, "preview", *mxCTPreview)) +{ + mxCTPreview->init( pActualPage ? (pActualPage->IsMasterPage() ? pActualPage : static_cast<SdPage*>(&(pActualPage->TRG_GetMasterPage()))) : (pDoc->GetMasterSdPage( 0, bHandoutMode ? PageKind::Notes : PageKind::Standard )) ); if( mbHandoutMode ) { - OUString sPageNo = get<FixedText>("replacement_a")->GetText(); - mpCBSlideNumber->SetText( sPageNo ); + OUString sPageNo = mxReplacementA->get_label(); + mxCBSlideNumber->set_label( sPageNo ); - OUString sFrameTitle = get<FixedText>("replacement_b")->GetText(); - mpFTIncludeOn->SetText( sFrameTitle ); + OUString sFrameTitle = mxReplacementB->get_label(); + mxFTIncludeOn->set_label( sFrameTitle ); } - mpCBHeader->Show( mbHandoutMode ); - mpHeaderBox->Show( mbHandoutMode ); - mpCBNotOnTitle->Show( !mbHandoutMode ); + mxCBHeader->set_visible( mbHandoutMode ); + mxHeaderBox->set_visible( mbHandoutMode ); + mxCBNotOnTitle->set_visible( !mbHandoutMode ); - mpCBDateTime->SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); - mpRBDateTimeFixed->SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); - mpRBDateTimeAutomatic->SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); - mpCBFooter->SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); - mpCBHeader->SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); - mpCBSlideNumber->SetClickHdl( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); + mxCBDateTime->connect_clicked( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); + mxRBDateTimeFixed->connect_clicked( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); + mxRBDateTimeAutomatic->connect_clicked( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); + mxCBFooter->connect_clicked( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); + mxCBHeader->connect_clicked( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); + mxCBSlideNumber->connect_clicked( LINK( this, HeaderFooterTabPage, UpdateOnClickHdl ) ); - mpCBDateTimeLanguage->SetLanguageList( SvxLanguageListFlags::ALL|SvxLanguageListFlags::ONLY_KNOWN, false, false ); - mpCBDateTimeLanguage->SetSelectHdl( LINK( this, HeaderFooterTabPage, LanguageChangeHdl ) ); + mxCBDateTimeLanguage->SetLanguageList( SvxLanguageListFlags::ALL|SvxLanguageListFlags::ONLY_KNOWN, false, false ); + mxCBDateTimeLanguage->connect_changed( LINK( this, HeaderFooterTabPage, LanguageChangeHdl ) ); GetOrSetDateTimeLanguage( meOldLanguage, false ); meOldLanguage = MsLangId::getRealLanguage( meOldLanguage ); - mpCBDateTimeLanguage->SelectLanguage( meOldLanguage ); + mxCBDateTimeLanguage->set_active_id( meOldLanguage ); FillFormatList(0); - - if (mbHandoutMode) - recursive_rename_ui_element(*this, "handout"); - else - recursive_rename_ui_element(*this, "slide"); } -HeaderFooterTabPage::~HeaderFooterTabPage() +IMPL_LINK_NOARG(HeaderFooterTabPage, LanguageChangeHdl, weld::ComboBox&, void) { - disposeOnce(); -} - -void HeaderFooterTabPage::dispose() -{ - mpFTIncludeOn.clear(); - mpCBHeader.clear(); - mpHeaderBox.clear(); - mpTBHeader.clear(); - mpCBDateTime.clear(); - mpRBDateTimeFixed.clear(); - mpRBDateTimeAutomatic.clear(); - mpTBDateTimeFixed.clear(); - mpCBDateTimeFormat.clear(); - mpFTDateTimeLanguage.clear(); - mpCBDateTimeLanguage.clear(); - mpCBFooter.clear(); - mpFooterBox.clear(); - mpTBFooter.clear(); - mpCBSlideNumber.clear(); - mpCBNotOnTitle.clear(); - mpCTPreview.clear(); - TabPage::dispose(); -} - -IMPL_LINK_NOARG(HeaderFooterTabPage, LanguageChangeHdl, ListBox&, void) -{ - FillFormatList( mpCBDateTimeFormat->GetSelectedEntryPos() ); + FillFormatList( mxCBDateTimeFormat->get_active() ); } void HeaderFooterTabPage::FillFormatList( sal_Int32 nSelectedPos ) { - LanguageType eLanguage = mpCBDateTimeLanguage->GetSelectedLanguage(); + LanguageType eLanguage = mxCBDateTimeLanguage->get_active_id(); - mpCBDateTimeFormat->Clear(); + mxCBDateTimeFormat->clear(); DateTime aDateTime( DateTime::SYSTEM ); - for( int nFormat = 0; nFormat < nDateTimeFormatsCount; nFormat++ ) + for (int nFormat = 0; nFormat < nDateTimeFormatsCount; ++nFormat) { OUString aStr( SvxDateTimeField::GetFormatted( aDateTime, aDateTime, nDateTimeFormats[nFormat].meDateFormat, nDateTimeFormats[nFormat].meTimeFormat, *(SD_MOD()->GetNumberFormatter()), eLanguage ) ); - const sal_Int32 nEntry = mpCBDateTimeFormat->InsertEntry( aStr ); - if( nFormat == nSelectedPos ) - { - mpCBDateTimeFormat->SelectEntryPos( nEntry ); - mpCBDateTimeFormat->SetText( aStr ); - } + mxCBDateTimeFormat->append_text(aStr); + if (nFormat == nSelectedPos) + mxCBDateTimeFormat->set_active(nFormat); } } void HeaderFooterTabPage::init( const HeaderFooterSettings& rSettings, bool bNotOnTitle ) { - mpCBDateTime->Check( rSettings.mbDateTimeVisible ); - mpRBDateTimeFixed->Check( rSettings.mbDateTimeIsFixed ); - mpRBDateTimeAutomatic->Check( !rSettings.mbDateTimeIsFixed ); - mpTBDateTimeFixed->SetText( rSettings.maDateTimeText ); + mxCBDateTime->set_active( rSettings.mbDateTimeVisible ); + mxRBDateTimeFixed->set_active( rSettings.mbDateTimeIsFixed ); + mxRBDateTimeAutomatic->set_active( !rSettings.mbDateTimeIsFixed ); + mxTBDateTimeFixed->set_text( rSettings.maDateTimeText ); - mpCBHeader->Check( rSettings.mbHeaderVisible ); - mpTBHeader->SetText( rSettings.maHeaderText ); + mxCBHeader->set_active( rSettings.mbHeaderVisible ); + mxTBHeader->set_text( rSettings.maHeaderText ); - mpCBFooter->Check( rSettings.mbFooterVisible ); - mpTBFooter->SetText( rSettings.maFooterText ); + mxCBFooter->set_active( rSettings.mbFooterVisible ); + mxTBFooter->set_text( rSettings.maFooterText ); - mpCBSlideNumber->Check( rSettings.mbSlideNumberVisible ); + mxCBSlideNumber->set_active( rSettings.mbSlideNumberVisible ); - mpCBNotOnTitle->Check( bNotOnTitle ); + mxCBNotOnTitle->set_active( bNotOnTitle ); - mpCBDateTimeLanguage->SelectLanguage( meOldLanguage ); + mxCBDateTimeLanguage->set_active_id( meOldLanguage ); - for( sal_Int32 nPos = 0; nPos < mpCBDateTimeFormat->GetEntryCount(); nPos++ ) + for (sal_Int32 nPos = 0, nEntryCount = mxCBDateTimeFormat->get_count(); nPos < nEntryCount; ++nPos) { if( nDateTimeFormats[nPos].meDateFormat == rSettings.meDateFormat && nDateTimeFormats[nPos].meTimeFormat == rSettings.meTimeFormat ) { - mpCBDateTimeFormat->SelectEntryPos( nPos ); - mpCBDateTimeFormat->SetText( mpCBDateTimeFormat->GetEntry(nPos) ); + mxCBDateTimeFormat->set_active(nPos); break; } } @@ -556,49 +466,47 @@ void HeaderFooterTabPage::init( const HeaderFooterSettings& rSettings, bool bNot void HeaderFooterTabPage::getData( HeaderFooterSettings& rSettings, bool& rNotOnTitle ) { - rSettings.mbDateTimeVisible = mpCBDateTime->IsChecked(); - rSettings.mbDateTimeIsFixed = mpRBDateTimeFixed->IsChecked(); - rSettings.maDateTimeText = mpTBDateTimeFixed->GetText(); - rSettings.mbFooterVisible = mpCBFooter->IsChecked(); - rSettings.maFooterText = mpTBFooter->GetText(); - rSettings.mbSlideNumberVisible = mpCBSlideNumber->IsChecked(); - rSettings.mbHeaderVisible = mpCBHeader->IsChecked(); - rSettings.maHeaderText = mpTBHeader->GetText(); - - if( mpCBDateTimeFormat->GetSelectedEntryCount() == 1 ) + rSettings.mbDateTimeVisible = mxCBDateTime->get_active(); + rSettings.mbDateTimeIsFixed = mxRBDateTimeFixed->get_active(); + rSettings.maDateTimeText = mxTBDateTimeFixed->get_text(); + rSettings.mbFooterVisible = mxCBFooter->get_active(); + rSettings.maFooterText = mxTBFooter->get_text(); + rSettings.mbSlideNumberVisible = mxCBSlideNumber->get_active(); + rSettings.mbHeaderVisible = mxCBHeader->get_active(); + rSettings.maHeaderText = mxTBHeader->get_text(); + + int nPos = mxCBDateTimeFormat->get_active(); + if (nPos != -1) { - sal_Int32 nPos = mpCBDateTimeFormat->GetSelectedEntryPos(); rSettings.meDateFormat = nDateTimeFormats[nPos].meDateFormat; rSettings.meTimeFormat = nDateTimeFormats[nPos].meTimeFormat; } - LanguageType eLanguage = mpCBDateTimeLanguage->GetSelectedLanguage(); + LanguageType eLanguage = mxCBDateTimeLanguage->get_active_id(); if( eLanguage != meOldLanguage ) GetOrSetDateTimeLanguage( eLanguage, true ); - rNotOnTitle = mpCBNotOnTitle->IsChecked(); + rNotOnTitle = mxCBNotOnTitle->get_active(); } void HeaderFooterTabPage::update() { - mpRBDateTimeFixed->Enable( mpCBDateTime->IsChecked() ); - mpTBDateTimeFixed->Enable( mpRBDateTimeFixed->IsChecked() && mpCBDateTime->IsChecked() ); - mpRBDateTimeAutomatic->Enable( mpCBDateTime->IsChecked() ); - mpCBDateTimeFormat->Enable( mpCBDateTime->IsChecked() && mpRBDateTimeAutomatic->IsChecked() ); - mpFTDateTimeLanguage->Enable( mpCBDateTime->IsChecked() && mpRBDateTimeAutomatic->IsChecked() ); - mpCBDateTimeLanguage->Enable( mpCBDateTime->IsChecked() && mpRBDateTimeAutomatic->IsChecked() ); - - mpFooterBox->Enable( mpCBFooter->IsChecked() ); - - mpHeaderBox->Enable( mpCBHeader->IsChecked() ); + mxRBDateTimeFixed->set_sensitive( mxCBDateTime->get_active() ); + mxTBDateTimeFixed->set_sensitive( mxRBDateTimeFixed->get_active() && mxCBDateTime->get_active() ); + mxRBDateTimeAutomatic->set_sensitive( mxCBDateTime->get_active() ); + mxCBDateTimeFormat->set_sensitive( mxCBDateTime->get_active() && mxRBDateTimeAutomatic->get_active() ); + mxFTDateTimeLanguage->set_sensitive( mxCBDateTime->get_active() && mxRBDateTimeAutomatic->get_active() ); + mxCBDateTimeLanguage->set_sensitive( mxCBDateTime->get_active() && mxRBDateTimeAutomatic->get_active() ); + mxFooterBox->set_sensitive( mxCBFooter->get_active() ); + mxHeaderBox->set_sensitive( mxCBHeader->get_active() ); HeaderFooterSettings aSettings; bool bNotOnTitle; getData( aSettings, bNotOnTitle ); - mpCTPreview->update( aSettings ); + mxCTPreview->update( aSettings ); } -IMPL_LINK_NOARG(HeaderFooterTabPage, UpdateOnClickHdl, Button*, void) +IMPL_LINK_NOARG(HeaderFooterTabPage, UpdateOnClickHdl, weld::Button&, void) { update(); } @@ -713,17 +621,17 @@ void HeaderFooterTabPage::GetOrSetDateTimeLanguage( LanguageType &rLanguage, boo pOutl->Init( nOutlMode ); } -PresLayoutPreview::PresLayoutPreview( vcl::Window* pParent ) - : Control(pParent) - , mpMaster(nullptr) +PresLayoutPreview::PresLayoutPreview() + : mpMaster(nullptr) { } -VCL_BUILDER_FACTORY(PresLayoutPreview) - -Size PresLayoutPreview::GetOptimalSize() const +void PresLayoutPreview::SetDrawingArea(weld::DrawingArea* pDrawingArea) { - return LogicToPixel(Size(80, 80), MapMode(MapUnit::MapAppFont)); + Size aSize(pDrawingArea->get_ref_device().LogicToPixel(Size(80, 80), MapMode(MapUnit::MapAppFont))); + pDrawingArea->set_size_request(aSize.Width(), aSize.Height()); + CustomWidgetController::SetDrawingArea(pDrawingArea); + SetOutputSizePixel(aSize); } void PresLayoutPreview::init( SdPage *pMaster ) diff --git a/sd/source/ui/dlg/sddlgfact.cxx b/sd/source/ui/dlg/sddlgfact.cxx index 05353b7bcecd..6c80853da1dd 100644 --- a/sd/source/ui/dlg/sddlgfact.cxx +++ b/sd/source/ui/dlg/sddlgfact.cxx @@ -137,7 +137,16 @@ short AbstractSdVectorizeDlg_Impl::Execute() } IMPL_ABSTDLG_BASE(AbstractSdPublishingDlg_Impl); -IMPL_ABSTDLG_BASE(AbstractHeaderFooterDialog_Impl); + +short AbstractHeaderFooterDialog_Impl::Execute() +{ + return m_xDlg->run(); +} + +bool AbstractHeaderFooterDialog_Impl::StartExecuteAsync(AsyncContext &rCtx) +{ + return weld::DialogController::runAsync(m_xDlg, rCtx.maEndDialogFn); +} short AbstractBulletDialog_Impl::Execute() { @@ -521,10 +530,10 @@ VclPtr<VclAbstractDialog> SdAbstractDialogFactory_Impl::CreateMasterLayoutDialog return VclPtr<AbstractMasterLayoutDialog_Impl>::Create(std::make_unique<::sd::MasterLayoutDialog>(pParent, pDoc, pCurrentPage)); } -VclPtr<AbstractHeaderFooterDialog> SdAbstractDialogFactory_Impl::CreateHeaderFooterDialog( sd::ViewShell* pViewShell, - vcl::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage ) +VclPtr<AbstractHeaderFooterDialog> SdAbstractDialogFactory_Impl::CreateHeaderFooterDialog(sd::ViewShell* pViewShell, + weld::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage) { - return VclPtr<AbstractHeaderFooterDialog_Impl>::Create( VclPtr<::sd::HeaderFooterDialog>::Create( pViewShell, pParent, pDoc, pCurrentPage )); + return VclPtr<AbstractHeaderFooterDialog_Impl>::Create(std::make_unique<::sd::HeaderFooterDialog>(pViewShell, pParent, pDoc, pCurrentPage)); } VclPtr<VclAbstractDialog> SdAbstractDialogFactory_Impl::CreateSdPhotoAlbumDialog(weld::Window* pParent, SdDrawDocument* pDoc) diff --git a/sd/source/ui/dlg/sddlgfact.hxx b/sd/source/ui/dlg/sddlgfact.hxx index 322750bcd0e9..ea5f5587df87 100644 --- a/sd/source/ui/dlg/sddlgfact.hxx +++ b/sd/source/ui/dlg/sddlgfact.hxx @@ -353,7 +353,15 @@ class AbstractSdPublishingDlg_Impl :public AbstractSdPublishingDlg class AbstractHeaderFooterDialog_Impl :public AbstractHeaderFooterDialog { - DECL_ABSTDLG_BASE(AbstractHeaderFooterDialog_Impl,::sd::HeaderFooterDialog) +private: + std::shared_ptr<::sd::HeaderFooterDialog> m_xDlg; +public: + AbstractHeaderFooterDialog_Impl(std::unique_ptr<::sd::HeaderFooterDialog> pDlg) + : m_xDlg(std::move(pDlg)) + { + } + virtual short Execute() override; + virtual bool StartExecuteAsync(AsyncContext &rCtx) override; }; //AbstractDialogFactory_Impl implementations @@ -390,10 +398,10 @@ public: virtual VclPtr<VclAbstractDialog> CreateMasterLayoutDialog(weld::Window* pParent, SdDrawDocument* pDoc, SdPage*) override; - virtual VclPtr<AbstractHeaderFooterDialog> CreateHeaderFooterDialog( sd::ViewShell* pViewShell, - vcl::Window* pParent, - SdDrawDocument* pDoc, - SdPage* pCurrentPage ) override; + virtual VclPtr<AbstractHeaderFooterDialog> CreateHeaderFooterDialog(sd::ViewShell* pViewShell, + weld::Window* pParent, + SdDrawDocument* pDoc, + SdPage* pCurrentPage) override; // For TabPage virtual CreateTabPage GetSdOptionsContentsTabPageCreatorFunc() override; diff --git a/sd/source/ui/inc/headerfooterdlg.hxx b/sd/source/ui/inc/headerfooterdlg.hxx index ab699b0b0202..f38159fc70e0 100644 --- a/sd/source/ui/inc/headerfooterdlg.hxx +++ b/sd/source/ui/inc/headerfooterdlg.hxx @@ -19,9 +19,7 @@ #ifndef INCLUDED_SD_SOURCE_UI_INC_HEADERFOOTERDLG_HXX #define INCLUDED_SD_SOURCE_UI_INC_HEADERFOOTERDLG_HXX -#include <vcl/tabdlg.hxx> -#include <vcl/button.hxx> -#include <vcl/tabctrl.hxx> +#include <vcl/weld.hxx> #include <sdpage.hxx> @@ -33,24 +31,13 @@ class ViewShell; class HeaderFooterTabPage; -class HeaderFooterDialog : public TabDialog +class HeaderFooterDialog : public weld::GenericDialogController { private: - DECL_LINK( ActivatePageHdl, TabControl*, void ); - DECL_LINK( ClickApplyToAllHdl, Button*, void ); - DECL_LINK( ClickApplyHdl, Button*, void ); - DECL_LINK( ClickCancelHdl, Button*, void ); - - VclPtr<TabControl> mpTabCtrl; - - VclPtr<HeaderFooterTabPage> mpSlideTabPage; - VclPtr<HeaderFooterTabPage> mpNotesHandoutsTabPage; - - sal_uInt16 mnSlidesId; - - VclPtr<PushButton> maPBApplyToAll; - VclPtr<PushButton> maPBApply; - VclPtr<CancelButton> maPBCancel; + DECL_LINK( ActivatePageHdl, const OString&, void ); + DECL_LINK( ClickApplyToAllHdl, weld::Button&, void ); + DECL_LINK( ClickApplyHdl, weld::Button&, void ); + DECL_LINK( ClickCancelHdl, weld::Button&, void ); HeaderFooterSettings maSlideSettings; HeaderFooterSettings maNotesHandoutSettings; @@ -59,18 +46,24 @@ private: SdPage* mpCurrentPage; ViewShell* mpViewShell; + std::unique_ptr<weld::Notebook> mxTabCtrl; + std::unique_ptr<weld::Button> mxPBApplyToAll; + std::unique_ptr<weld::Button> mxPBApply; + std::unique_ptr<weld::Button> mxPBCancel; + std::unique_ptr<HeaderFooterTabPage> mxSlideTabPage; + std::unique_ptr<HeaderFooterTabPage> mxNotesHandoutsTabPage; + void apply( bool bToAll, bool bForceSlides ); void change( SdUndoGroup* pUndoGroup, SdPage* pPage, const HeaderFooterSettings& rNewSettings ); public: - HeaderFooterDialog( ViewShell* pViewShell, vcl::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage ); + HeaderFooterDialog(ViewShell* pViewShell, weld::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage); virtual ~HeaderFooterDialog() override; - virtual void dispose() override; void ApplyToAll(); void Apply(); - virtual short Execute() override; + virtual short run() override; }; } diff --git a/sd/source/ui/view/drviews3.cxx b/sd/source/ui/view/drviews3.cxx index ba88762b4221..54a3d09da33c 100644 --- a/sd/source/ui/view/drviews3.cxx +++ b/sd/source/ui/view/drviews3.cxx @@ -301,15 +301,18 @@ void DrawViewShell::ExecCtrl(SfxRequest& rReq) case SID_INSERT_DATE_TIME: { SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); - VclPtr<AbstractHeaderFooterDialog> pDlg(pFact->CreateHeaderFooterDialog( this, GetActiveWindow(), GetDoc(), mpActualPage )); + vcl::Window* pWin = GetActiveWindow(); + VclPtr<AbstractHeaderFooterDialog> pDlg(pFact->CreateHeaderFooterDialog(this, pWin ? pWin->GetFrameWeld() : nullptr, GetDoc(), mpActualPage)); std::shared_ptr<SfxRequest> xRequest(new SfxRequest(rReq)); rReq.Ignore(); // the 'old' request is not relevant any more - pDlg->StartExecuteAsync([this, xRequest](sal_Int32 /*nResult*/){ + pDlg->StartExecuteAsync([this, pDlg, xRequest](sal_Int32 /*nResult*/){ GetActiveWindow()->Invalidate(); UpdatePreview( mpActualPage ); Invalidate(); xRequest->Done(); + + pDlg->disposeOnce(); }); break; } |