summaryrefslogtreecommitdiff
path: root/chart2/source
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-11-26 20:30:25 +0000
committerCaolán McNamara <caolanm@redhat.com>2018-11-27 21:10:52 +0100
commit0f25a3c36f27fd51453b9a9115f236b83c143684 (patch)
tree011ca20c47b3ecfce2638df467256d547c04f27b /chart2/source
parent471d6c3653b8b8006db022c5d94af7503adfdc56 (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.cxx138
-rw-r--r--chart2/source/controller/dialogs/tp_DataSource.cxx30
-rw-r--r--chart2/source/controller/dialogs/tp_DataSource.hxx4
-rw-r--r--chart2/source/controller/dialogs/tp_RangeChooser.cxx24
-rw-r--r--chart2/source/controller/dialogs/tp_RangeChooser.hxx4
-rw-r--r--chart2/source/controller/inc/dlg_DataSource.hxx25
-rw-r--r--chart2/source/controller/main/ChartController.cxx4
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();