diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-11-26 20:30:25 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-11-27 21:10:52 +0100 |
commit | 0f25a3c36f27fd51453b9a9115f236b83c143684 (patch) | |
tree | 011ca20c47b3ecfce2638df467256d547c04f27b /chart2/source | |
parent | 471d6c3653b8b8006db022c5d94af7503adfdc56 (diff) |
weld DataSourceDialog
Change-Id: I4d3eb8aa354043d3ff57b4996db7b28ad25e0262
Reviewed-on: https://gerrit.libreoffice.org/64072
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'chart2/source')
-rw-r--r-- | chart2/source/controller/dialogs/dlg_DataSource.cxx | 138 | ||||
-rw-r--r-- | chart2/source/controller/dialogs/tp_DataSource.cxx | 30 | ||||
-rw-r--r-- | chart2/source/controller/dialogs/tp_DataSource.hxx | 4 | ||||
-rw-r--r-- | chart2/source/controller/dialogs/tp_RangeChooser.cxx | 24 | ||||
-rw-r--r-- | chart2/source/controller/dialogs/tp_RangeChooser.hxx | 4 | ||||
-rw-r--r-- | chart2/source/controller/inc/dlg_DataSource.hxx | 25 | ||||
-rw-r--r-- | chart2/source/controller/main/ChartController.cxx | 4 |
7 files changed, 122 insertions, 107 deletions
diff --git a/chart2/source/controller/dialogs/dlg_DataSource.cxx b/chart2/source/controller/dialogs/dlg_DataSource.cxx index 76b03043b1dd..86651bcfd6bd 100644 --- a/chart2/source/controller/dialogs/dlg_DataSource.cxx +++ b/chart2/source/controller/dialogs/dlg_DataSource.cxx @@ -76,41 +76,6 @@ Reference< chart2::XChartTypeTemplate > DocumentChartTypeTemplateProvider::getCu return m_xTemplate; } -class DataSourceTabControl : public TabControl -{ -public: - explicit DataSourceTabControl(vcl::Window* pParent); - - virtual bool DeactivatePage() override; - - void DisableTabToggling(); - void EnableTabToggling(); - -private: - bool m_bTogglingEnabled; -}; - -DataSourceTabControl::DataSourceTabControl(vcl::Window* pParent) - : TabControl(pParent) - , m_bTogglingEnabled(true) -{ -} - -bool DataSourceTabControl::DeactivatePage() -{ - return TabControl::DeactivatePage() && m_bTogglingEnabled; -} - -void DataSourceTabControl::DisableTabToggling() -{ - m_bTogglingEnabled = false; -} - -void DataSourceTabControl::EnableTabToggling() -{ - m_bTogglingEnabled = true; -} - sal_uInt16 DataSourceDialog::m_nLastPageId = 0; enum DataSourceDialogPages @@ -119,56 +84,47 @@ enum DataSourceDialogPages TP_DATA_SOURCE = 2 }; -DataSourceDialog::DataSourceDialog(vcl::Window * pParent, +DataSourceDialog::DataSourceDialog(weld::Window * pParent, const Reference< XChartDocument > & xChartDocument, const Reference< uno::XComponentContext > & xContext) - : TabDialog(pParent, "DataRangeDialog", - "modules/schart/ui/datarangedialog.ui") + : GenericDialogController(pParent, "modules/schart/ui/datarangedialog.ui", + "DataRangeDialog") , m_apDocTemplateProvider(new DocumentChartTypeTemplateProvider(xChartDocument)) , m_apDialogModel(new DialogModel(xChartDocument, xContext)) - , m_pTabControl(VclPtr<DataSourceTabControl>::Create(get_content_area())) , m_pRangeChooserTabPage(nullptr) , m_pDataSourceTabPage(nullptr) , m_bRangeChooserTabIsValid(true) , m_bDataSourceTabIsValid(true) -{ - get(m_pBtnOK, "ok"); - - m_pTabControl->Show(); - - m_pRangeChooserTabPage = VclPtr<RangeChooserTabPage>::Create(TabPageParent(m_pTabControl), *(m_apDialogModel.get()), - m_apDocTemplateProvider.get(), this, true /* bHideDescription */ ); - m_pDataSourceTabPage = VclPtr<DataSourceTabPage>::Create(TabPageParent(m_pTabControl), *(m_apDialogModel.get()), - m_apDocTemplateProvider.get(), this, true /* bHideDescription */ ); - - m_pTabControl->InsertPage( TP_RANGECHOOSER, SchResId(STR_PAGE_DATA_RANGE) ); - m_pTabControl->InsertPage( TP_DATA_SOURCE, SchResId(STR_OBJECT_DATASERIES_PLURAL) ); - - m_pTabControl->SetTabPage( TP_DATA_SOURCE, m_pDataSourceTabPage ); - m_pTabControl->SetTabPage( TP_RANGECHOOSER, m_pRangeChooserTabPage ); - - m_pTabControl->SelectTabPage( m_nLastPageId ); + , m_bTogglingEnabled(true) + , m_xTabControl(m_xBuilder->weld_notebook("notebook")) + , m_xBtnOK(m_xBuilder->weld_button("ok")) +{ + TabPageParent aRangeParent(m_xTabControl->get_page("range"), this); + m_pRangeChooserTabPage = VclPtr<RangeChooserTabPage>::Create(aRangeParent, *(m_apDialogModel.get()), + m_apDocTemplateProvider.get(), nullptr, true /* bHideDescription */ ); + TabPageParent aSeriesParent(m_xTabControl->get_page("series"), this); + m_pDataSourceTabPage = VclPtr<DataSourceTabPage>::Create(aSeriesParent, *(m_apDialogModel.get()), + m_apDocTemplateProvider.get(), nullptr, true /* bHideDescription */ ); + m_xTabControl->connect_enter_page(LINK(this, DataSourceDialog, ActivatePageHdl)); + m_xTabControl->connect_leave_page(LINK(this, DataSourceDialog, DeactivatePageHdl)); + ActivatePageHdl(m_xTabControl->get_current_page_ident()); + if (m_nLastPageId != 0) + { + m_xTabControl->set_current_page(m_nLastPageId); + ActivatePageHdl(m_xTabControl->get_current_page_ident()); + } } DataSourceDialog::~DataSourceDialog() { - disposeOnce(); -} - -void DataSourceDialog::dispose() -{ m_pRangeChooserTabPage.disposeAndClear(); m_pDataSourceTabPage.disposeAndClear(); - if (m_pTabControl) - m_nLastPageId = m_pTabControl->GetCurPageId(); - m_pTabControl.disposeAndClear(); - m_pBtnOK.clear(); - TabDialog::dispose(); + m_nLastPageId = m_xTabControl->get_current_page(); } -short DataSourceDialog::Execute() +short DataSourceDialog::run() { - short nResult = TabDialog::Execute(); + short nResult = GenericDialogController::run(); if( nResult == RET_OK ) { if( m_pRangeChooserTabPage ) @@ -179,25 +135,48 @@ short DataSourceDialog::Execute() return nResult; } +IMPL_LINK(DataSourceDialog, ActivatePageHdl, const OString&, rPage, void) +{ + if (rPage == "range") + m_pRangeChooserTabPage->ActivatePage(); + else if (rPage == "series") + m_pDataSourceTabPage->ActivatePage(); +} + +// allow/disallow user to leave page +IMPL_LINK_NOARG(DataSourceDialog, DeactivatePageHdl, const OString&, bool) +{ + return m_bTogglingEnabled; +} + +void DataSourceDialog::DisableTabToggling() +{ + m_bTogglingEnabled = false; +} + +void DataSourceDialog::EnableTabToggling() +{ + m_bTogglingEnabled = true; +} + void DataSourceDialog::setInvalidPage( TabPage * pTabPage ) { - if( pTabPage == m_pRangeChooserTabPage ) + if (pTabPage == m_pRangeChooserTabPage) m_bRangeChooserTabIsValid = false; - else if( pTabPage == m_pDataSourceTabPage ) + else if (pTabPage == m_pDataSourceTabPage) m_bDataSourceTabIsValid = false; - if( ! (m_bRangeChooserTabIsValid && m_bDataSourceTabIsValid )) + if (!(m_bRangeChooserTabIsValid && m_bDataSourceTabIsValid)) { - m_pBtnOK->Enable( false ); - OSL_ASSERT( m_pTabControl ); + m_xBtnOK->set_sensitive(false); // note: there seems to be no suitable mechanism to address pages by // identifier, at least it is unclear what the page identifiers are. // @todo: change the fixed numbers to identifiers if( m_bRangeChooserTabIsValid ) - m_pTabControl->SetCurPageId( m_pTabControl->GetPageId( 1 )); + m_xTabControl->set_current_page(1); else if( m_bDataSourceTabIsValid ) - m_pTabControl->SetCurPageId( m_pTabControl->GetPageId( 0 )); - m_pTabControl->DisableTabToggling(); + m_xTabControl->set_current_page(0); + DisableTabToggling(); } } @@ -208,11 +187,10 @@ void DataSourceDialog::setValidPage( TabPage * pTabPage ) else if( pTabPage == m_pDataSourceTabPage ) m_bDataSourceTabIsValid = true; - if( m_bRangeChooserTabIsValid && m_bDataSourceTabIsValid ) + if (m_bRangeChooserTabIsValid && m_bDataSourceTabIsValid) { - m_pBtnOK->Enable(); - OSL_ASSERT( m_pTabControl ); - m_pTabControl->EnableTabToggling(); + m_xBtnOK->set_sensitive(true); + EnableTabToggling(); } } diff --git a/chart2/source/controller/dialogs/tp_DataSource.cxx b/chart2/source/controller/dialogs/tp_DataSource.cxx index 5b1ef9ff44e4..758664428019 100644 --- a/chart2/source/controller/dialogs/tp_DataSource.cxx +++ b/chart2/source/controller/dialogs/tp_DataSource.cxx @@ -124,11 +124,20 @@ void lcl_enableRangeChoosing( bool bEnable, Dialog * pDialog ) { if( pDialog ) { - pDialog->Show( !bEnable ); pDialog->SetModalInputMode( !bEnable ); + pDialog->Show( !bEnable ); } } +void lcl_enableRangeChoosing(bool bEnable, weld::DialogController* pDialog) +{ + if (!pDialog) + return; + weld::Dialog* pDlg = pDialog->getDialog(); + pDlg->set_modal(!bEnable); + pDlg->show(!bEnable); +} + void lcl_addLSequenceToDataSource( const Reference< chart2::data::XLabeledDataSequence > & xLSequence, const Reference< chart2::data::XDataSource > & xSource ) @@ -178,7 +187,9 @@ DataSourceTabPage::DataSourceTabPage(TabPageParent pParent, DialogModel & rDialo , m_pCurrentRangeChoosingField( nullptr ) , m_bIsDirty( false ) , m_pParentDialog( pParentDialog ) - , m_pTabPageNotifiable( dynamic_cast< TabPageNotifiable * >( pParentDialog )) + , m_pParentController(pParent.pController) + , m_pTabPageNotifiable(pParentDialog ? dynamic_cast<TabPageNotifiable*>(pParentDialog) + : dynamic_cast<TabPageNotifiable*>(m_pParentController)) , m_xFT_CAPTION(m_xBuilder->weld_label("FT_CAPTION_FOR_WIZARD")) , m_xFT_SERIES(m_xBuilder->weld_label("FT_SERIES")) , m_xLB_SERIES(m_xBuilder->weld_tree_view("LB_SERIES")) @@ -232,7 +243,6 @@ DataSourceTabPage::DataSourceTabPage(TabPageParent pParent, DialogModel & rDialo // select first series if (m_xLB_SERIES->n_children()) m_xLB_SERIES->select(0); - m_xLB_SERIES->grab_focus(); } void DataSourceTabPage::InsertRoleLBEntry(const OUString& rRole, const OUString& rRange) @@ -260,6 +270,7 @@ void DataSourceTabPage::ActivatePage() { OWizardPage::ActivatePage(); updateControlsFromDialogModel(); + m_xLB_SERIES->grab_focus(); } void DataSourceTabPage::initializePage() @@ -340,8 +351,6 @@ void DataSourceTabPage::updateControlsFromDialogModel() void DataSourceTabPage::fillSeriesListBox() { - m_xLB_SERIES->freeze(); - Reference< XDataSeries > xSelected; SeriesEntry* pEntry = nullptr; int nEntry = m_xLB_SERIES->get_selected_index(); @@ -353,6 +362,8 @@ void DataSourceTabPage::fillSeriesListBox() bool bHasSelectedEntry = (pEntry != nullptr); int nSelectedEntry = -1; + + m_xLB_SERIES->freeze(); m_xLB_SERIES->clear(); std::vector< DialogModel::tSeriesWithChartTypeByName > aSeries( @@ -464,15 +475,15 @@ void DataSourceTabPage::updateControlState() m_xIMB_RANGE_CAT->show(bShowIB); - m_xFT_SERIES->set_sensitive(true); - m_xLB_SERIES->set_sensitive(true); - m_xFT_ROLE->set_sensitive(bHasSelectedSeries); m_xLB_ROLE->set_sensitive(bHasSelectedSeries); m_xFT_RANGE->set_sensitive(bHasValidRole); m_xEDT_RANGE->set_sensitive(bHasValidRole); + m_xFT_SERIES->set_sensitive(true); + m_xLB_SERIES->set_sensitive(true); + m_xIMB_RANGE_MAIN->show(bShowIB); isValid(); @@ -548,6 +559,7 @@ IMPL_LINK_NOARG(DataSourceTabPage, MainRangeButtonClickedHdl, weld::Button&, voi } lcl_enableRangeChoosing( true, m_pParentDialog ); + lcl_enableRangeChoosing( true, m_pParentController ); m_rDialogModel.getRangeSelectionHelper()->chooseRange( aSelectedRolesRange, aUIStr, *this ); } else @@ -564,6 +576,7 @@ IMPL_LINK_NOARG(DataSourceTabPage, CategoriesRangeButtonClickedHdl, weld::Button OUString aStr(SchResId(m_xFT_CATEGORIES->get_visible() ? STR_DATA_SELECT_RANGE_FOR_CATEGORIES : STR_DATA_SELECT_RANGE_FOR_DATALABELS)); lcl_enableRangeChoosing(true, m_pParentDialog); + lcl_enableRangeChoosing(true, m_pParentController); m_rDialogModel.getRangeSelectionHelper()->chooseRange( m_rDialogModel.getCategoriesRange(), aStr, *this ); } @@ -744,6 +757,7 @@ void DataSourceTabPage::listeningFinished( updateControlState(); lcl_enableRangeChoosing(false, m_pParentDialog); + lcl_enableRangeChoosing(false, m_pParentController); } void DataSourceTabPage::disposingRangeSelection() diff --git a/chart2/source/controller/dialogs/tp_DataSource.hxx b/chart2/source/controller/dialogs/tp_DataSource.hxx index 6357a42b437b..0d237ffa79a5 100644 --- a/chart2/source/controller/dialogs/tp_DataSource.hxx +++ b/chart2/source/controller/dialogs/tp_DataSource.hxx @@ -62,11 +62,12 @@ public: bool bHideDescription = false); virtual ~DataSourceTabPage() override; + virtual void ActivatePage() override; + void commitPage(); private: // OWizardPage - virtual void ActivatePage() override; virtual void dispose() override; virtual bool commitPage( ::svt::WizardTypes::CommitPageReason eReason ) override; @@ -127,6 +128,7 @@ private: bool m_bIsDirty; VclPtr<Dialog> m_pParentDialog; + weld::DialogController* m_pParentController; TabPageNotifiable * m_pTabPageNotifiable; std::unique_ptr<weld::Label> m_xFT_CAPTION; diff --git a/chart2/source/controller/dialogs/tp_RangeChooser.cxx b/chart2/source/controller/dialogs/tp_RangeChooser.cxx index 158266f00d42..130ab64df371 100644 --- a/chart2/source/controller/dialogs/tp_RangeChooser.cxx +++ b/chart2/source/controller/dialogs/tp_RangeChooser.cxx @@ -43,15 +43,24 @@ namespace } } - void lcl_enableRangeChoosing( bool bEnable, Dialog * pDialog ) + void lcl_enableRangeChoosing(bool bEnable, Dialog * pDialog) { if( pDialog ) { - pDialog->Show( !bEnable ); pDialog->SetModalInputMode( !bEnable ); + pDialog->Show(!bEnable); } } + void lcl_enableRangeChoosing(bool bEnable, weld::DialogController* pDialog) + { + if (!pDialog) + return; + weld::Dialog* pDlg = pDialog->getDialog(); + pDlg->set_modal(!bEnable); + pDlg->show(!bEnable); + } + } // anonymous namespace namespace chart @@ -63,15 +72,17 @@ using ::com::sun::star::uno::Sequence; RangeChooserTabPage::RangeChooserTabPage(TabPageParent pParent, DialogModel & rDialogModel, ChartTypeTemplateProvider* pTemplateProvider, - Dialog * pParentDialog, bool bHideDescription /* = false */) + Dialog* pParentDialog, bool bHideDescription /* = false */) : OWizardPage(pParent, "modules/schart/ui/tp_RangeChooser.ui", "tp_RangeChooser") , m_nChangingControlCalls(0) , m_bIsDirty(false) , m_aLastValidRangeString() , m_pTemplateProvider(pTemplateProvider) , m_rDialogModel( rDialogModel ) - , m_pParentDialog( pParentDialog ) - , m_pTabPageNotifiable( dynamic_cast< TabPageNotifiable * >( pParentDialog )) + , m_pParentDialog(pParentDialog) + , m_pParentController(pParent.pController) + , m_pTabPageNotifiable(pParentDialog ? dynamic_cast<TabPageNotifiable*>(pParentDialog) + : dynamic_cast<TabPageNotifiable*>(m_pParentController)) , m_xFT_Caption(m_xBuilder->weld_label("FT_CAPTION_FOR_WIZARD")) , m_xFT_Range(m_xBuilder->weld_label("FT_RANGE")) , m_xED_Range(m_xBuilder->weld_entry("ED_RANGE")) @@ -140,6 +151,7 @@ void RangeChooserTabPage::ActivatePage() { OWizardPage::ActivatePage(); initControlsFromModel(); + m_xED_Range->grab_focus(); } void RangeChooserTabPage::initControlsFromModel() @@ -352,6 +364,7 @@ IMPL_LINK_NOARG(RangeChooserTabPage, ChooseRangeHdl, weld::Button&, void) OUString aTitle = m_xFTTitle->get_label(); lcl_enableRangeChoosing( true, m_pParentDialog ); + lcl_enableRangeChoosing( true, m_pParentController ); m_rDialogModel.getRangeSelectionHelper()->chooseRange( aRange, aTitle, *this ); } @@ -378,6 +391,7 @@ void RangeChooserTabPage::listeningFinished( const OUString & rNewRange ) changeDialogModelAccordingToControls(); lcl_enableRangeChoosing( false, m_pParentDialog ); + lcl_enableRangeChoosing( false, m_pParentController ); } void RangeChooserTabPage::disposingRangeSelection() { diff --git a/chart2/source/controller/dialogs/tp_RangeChooser.hxx b/chart2/source/controller/dialogs/tp_RangeChooser.hxx index fb7325d72e13..c020ccceb1ea 100644 --- a/chart2/source/controller/dialogs/tp_RangeChooser.hxx +++ b/chart2/source/controller/dialogs/tp_RangeChooser.hxx @@ -47,12 +47,13 @@ public: virtual void listeningFinished( const OUString & rNewRange ) override; virtual void disposingRangeSelection() override; + virtual void ActivatePage() override; + void commitPage(); private: //OWizardPage - virtual void ActivatePage() override; virtual bool commitPage( ::svt::WizardTypes::CommitPageReason eReason ) override; //TabPage @@ -78,6 +79,7 @@ private: DialogModel & m_rDialogModel; VclPtr<Dialog> m_pParentDialog; + weld::DialogController* m_pParentController; TabPageNotifiable * m_pTabPageNotifiable; std::unique_ptr<weld::Label> m_xFT_Caption; diff --git a/chart2/source/controller/inc/dlg_DataSource.hxx b/chart2/source/controller/inc/dlg_DataSource.hxx index 1e0eac3b5271..64273e9d5b20 100644 --- a/chart2/source/controller/inc/dlg_DataSource.hxx +++ b/chart2/source/controller/inc/dlg_DataSource.hxx @@ -19,8 +19,7 @@ #ifndef INCLUDED_CHART2_SOURCE_CONTROLLER_INC_DLG_DATASOURCE_HXX #define INCLUDED_CHART2_SOURCE_CONTROLLER_INC_DLG_DATASOURCE_HXX -#include <vcl/tabdlg.hxx> -#include <vcl/button.hxx> +#include <vcl/weld.hxx> #include <vcl/vclptr.hxx> #include "TabPageNotifiable.hxx" @@ -42,35 +41,41 @@ class ChartTypeTemplateProvider; class DialogModel; class DataSourceDialog final : - public TabDialog, + public weld::GenericDialogController, public TabPageNotifiable { public: explicit DataSourceDialog( - vcl::Window * pParent, + weld::Window * pParent, const css::uno::Reference< css::chart2::XChartDocument > & xChartDocument, const css::uno::Reference< css::uno::XComponentContext > & xContext ); virtual ~DataSourceDialog() override; - virtual void dispose() override; - // from Dialog (base of TabDialog) - virtual short Execute() override; + // from GenericDialogController base + virtual short run() override; // TabPageNotifiable virtual void setInvalidPage( TabPage * pTabPage ) override; virtual void setValidPage( TabPage * pTabPage ) override; private: + void DisableTabToggling(); + void EnableTabToggling(); + + DECL_LINK(ActivatePageHdl, const OString&, void); + DECL_LINK(DeactivatePageHdl, const OString&, bool); + std::unique_ptr< ChartTypeTemplateProvider > m_apDocTemplateProvider; std::unique_ptr< DialogModel > m_apDialogModel; - VclPtr<DataSourceTabControl> m_pTabControl; - VclPtr<OKButton> m_pBtnOK; - VclPtr<RangeChooserTabPage> m_pRangeChooserTabPage; VclPtr<DataSourceTabPage> m_pDataSourceTabPage; bool m_bRangeChooserTabIsValid; bool m_bDataSourceTabIsValid; + bool m_bTogglingEnabled; + + std::unique_ptr<weld::Notebook> m_xTabControl; + std::unique_ptr<weld::Button> m_xBtnOK; static sal_uInt16 m_nLastPageId; }; diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx index d9f246fc2bd2..3350e5e521d1 100644 --- a/chart2/source/controller/main/ChartController.cxx +++ b/chart2/source/controller/main/ChartController.cxx @@ -1358,8 +1358,8 @@ void ChartController::executeDispatch_SourceData() SchResId(STR_ACTION_EDIT_DATA_RANGES), m_xUndoManager); SolarMutexGuard aSolarGuard; - ScopedVclPtrInstance< ::chart::DataSourceDialog > aDlg( GetChartWindow(), xChartDoc, m_xCC ); - if( aDlg->Execute() == RET_OK ) + ::chart::DataSourceDialog aDlg(GetChartFrame(), xChartDoc, m_xCC); + if (aDlg.run() == RET_OK) { impl_adaptDataSeriesAutoResize(); aUndoGuard.commit(); |