diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-07-13 15:14:21 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-07-15 15:00:17 +0200 |
commit | 0abbf64dc1ebe9f12523a69ce1cfd25fe189d869 (patch) | |
tree | 33707dcc5f9e634305a99e1721363bfbd5e90893 /svx | |
parent | 288b9f7edd26458e3a71aad9f96279ec9ef00931 (diff) |
weld TimeControl
Change-Id: Idb19639eb39bc83fb8bdc7c2181bf63e9c522d18
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98670
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/fmcomp/gridcell.cxx | 72 | ||||
-rw-r--r-- | svx/source/inc/gridcell.hxx | 2 |
2 files changed, 44 insertions, 30 deletions
diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx index bddf63079c0c..b29fdcbc5f79 100644 --- a/svx/source/fmcomp/gridcell.cxx +++ b/svx/source/fmcomp/gridcell.cxx @@ -2272,10 +2272,14 @@ DbTimeField::DbTimeField( DbGridColumn& _rColumn ) doPropertyListening( FM_PROP_STRICTFORMAT ); } -VclPtr<Control> DbTimeField::createField(BrowserDataWin* _pParent, bool bSpinButton, const Reference< XPropertySet >& /*_rxModel*/ ) +VclPtr<Control> DbTimeField::createField(BrowserDataWin* pParent, bool bSpinButton, const Reference< XPropertySet >& /*rxModel*/ ) { - WinBits _nFieldStyle = bSpinButton ? (WB_REPEAT | WB_SPIN) : 0; - return VclPtr<TimeField>::Create( _pParent, _nFieldStyle ); + return VclPtr<TimeControl>::Create(pParent, bSpinButton); +} + +CellControllerRef DbTimeField::CreateController() const +{ + return new ::svt::FormattedFieldCellController(static_cast<FormattedControlBase*>(m_pWindow.get())); } void DbTimeField::implAdjustGenericFieldSetting( const Reference< XPropertySet >& _rxModel ) @@ -2292,23 +2296,28 @@ void DbTimeField::implAdjustGenericFieldSetting( const Reference< XPropertySet > OSL_VERIFY( _rxModel->getPropertyValue( FM_PROP_TIMEMAX ) >>= aMax ); bool bStrict = getBOOL( _rxModel->getPropertyValue( FM_PROP_STRICTFORMAT ) ); - static_cast< TimeField* >( m_pWindow.get() )->SetExtFormat( static_cast<ExtTimeFieldFormat>(nFormat) ); - static_cast< TimeField* >( m_pWindow.get() )->SetMin( aMin ); - static_cast< TimeField* >( m_pWindow.get() )->SetMax( aMax ); - static_cast< TimeField* >( m_pWindow.get() )->SetStrictFormat( bStrict ); - static_cast< TimeField* >( m_pWindow.get() )->EnableEmptyFieldValue( true ); + FormattedControlBase* pControl = static_cast<FormattedControlBase*>(m_pWindow.get()); + weld::TimeFormatter& rControlFormatter = static_cast<weld::TimeFormatter&>(pControl->get_formatter()); + + rControlFormatter.SetExtFormat(static_cast<ExtTimeFieldFormat>(nFormat)); + rControlFormatter.SetMin(aMin); + rControlFormatter.SetMax(aMax); + rControlFormatter.SetStrictFormat(bStrict); + rControlFormatter.EnableEmptyField(true); + + FormattedControlBase* pPainter = static_cast<FormattedControlBase*>(m_pPainter.get()); + weld::TimeFormatter& rPainterFormatter = static_cast<weld::TimeFormatter&>(pPainter->get_formatter()); - static_cast< TimeField* >( m_pPainter.get() )->SetExtFormat( static_cast<ExtTimeFieldFormat>(nFormat) ); - static_cast< TimeField* >( m_pPainter.get() )->SetMin( aMin ); - static_cast< TimeField* >( m_pPainter.get() )->SetMax( aMax ); - static_cast< TimeField* >( m_pPainter.get() )->SetStrictFormat( bStrict ); - static_cast< TimeField* >( m_pPainter.get() )->EnableEmptyFieldValue( true ); + rPainterFormatter.SetExtFormat(static_cast<ExtTimeFieldFormat>(nFormat)); + rPainterFormatter.SetMin(aMin); + rPainterFormatter.SetMax(aMax); + rPainterFormatter.SetStrictFormat(bStrict); + rPainterFormatter.EnableEmptyField(true); } namespace { - - OUString lcl_setFormattedTime_nothrow( TimeField& _rField, const Reference< XColumn >& _rxField ) + OUString lcl_setFormattedTime_nothrow(TimeControl& _rField, const Reference<XColumn>& _rxField) { OUString sTime; if ( _rxField.is() ) @@ -2316,12 +2325,10 @@ namespace try { css::util::Time aValue = _rxField->getTime(); - if ( _rxField->wasNull() ) - _rField.SetText( sTime ); - else + if (!_rxField->wasNull()) { - _rField.SetTime( ::tools::Time( aValue ) ); - sTime = _rField.GetText(); + static_cast<weld::TimeFormatter&>(_rField.get_formatter()).SetTime( ::tools::Time( aValue ) ); + sTime = _rField.get_widget().get_text(); } } catch( const Exception& ) @@ -2335,34 +2342,41 @@ namespace OUString DbTimeField::GetFormatText(const Reference< css::sdb::XColumn >& _rxField, const Reference< css::util::XNumberFormatter >& /*xFormatter*/, Color** /*ppColor*/) { - return lcl_setFormattedTime_nothrow( *static_cast< TimeField* >( m_pPainter.get() ), _rxField ); + return lcl_setFormattedTime_nothrow(*static_cast<TimeControl*>(m_pPainter.get()), _rxField); } void DbTimeField::UpdateFromField(const Reference< css::sdb::XColumn >& _rxField, const Reference< XNumberFormatter >& /*xFormatter*/) { - lcl_setFormattedTime_nothrow( *static_cast< TimeField* >( m_pWindow.get() ), _rxField ); + lcl_setFormattedTime_nothrow(*static_cast<TimeControl*>(m_pWindow.get()), _rxField); } void DbTimeField::updateFromModel( Reference< XPropertySet > _rxModel ) { OSL_ENSURE( _rxModel.is() && m_pWindow, "DbTimeField::updateFromModel: invalid call!" ); + FormattedControlBase* pControl = static_cast<FormattedControlBase*>(m_pWindow.get()); + weld::TimeFormatter& rControlFormatter = static_cast<weld::TimeFormatter&>(pControl->get_formatter()); + util::Time aTime; if ( _rxModel->getPropertyValue( FM_PROP_TIME ) >>= aTime ) - static_cast< TimeField* >( m_pWindow.get() )->SetTime( ::tools::Time( aTime ) ); + rControlFormatter.SetTime(::tools::Time(aTime)); else - static_cast< TimeField* >( m_pWindow.get() )->SetText( OUString() ); + pControl->get_widget().set_text(OUString()); } bool DbTimeField::commitControl() { - OUString aText(m_pWindow->GetText()); + FormattedControlBase* pControl = static_cast<FormattedControlBase*>(m_pWindow.get()); + OUString aText(pControl->get_widget().get_text()); Any aVal; - if (!aText.isEmpty()) - aVal <<= static_cast<TimeField*>(m_pWindow.get())->GetTime().GetUNOTime(); - else - aVal.clear(); + fprintf(stderr, "text is %s\n", aText.toUtf8().getStr()); + + if (!aText.isEmpty()) // not empty + { + weld::TimeFormatter& rControlFormatter = static_cast<weld::TimeFormatter&>(pControl->get_formatter()); + aVal <<= rControlFormatter.GetTime().GetUNOTime(); + } m_rColumn.getModel()->setPropertyValue(FM_PROP_TIME, aVal); return true; } diff --git a/svx/source/inc/gridcell.hxx b/svx/source/inc/gridcell.hxx index 121720b29b1a..6b4a3afc8585 100644 --- a/svx/source/inc/gridcell.hxx +++ b/svx/source/inc/gridcell.hxx @@ -576,11 +576,11 @@ protected: virtual void implAdjustGenericFieldSetting( const css::uno::Reference< css::beans::XPropertySet >& _rxModel ) override; }; - class DbTimeField : public DbSpinField { public: DbTimeField(DbGridColumn& _rColumn); + virtual ::svt::CellControllerRef CreateController() const override; virtual OUString GetFormatText(const css::uno::Reference< css::sdb::XColumn >& _rxField, const css::uno::Reference< css::util::XNumberFormatter >& xFormatter, Color** ppColor = nullptr) override; virtual void UpdateFromField(const css::uno::Reference< css::sdb::XColumn >& _rxField, const css::uno::Reference< css::util::XNumberFormatter >& xFormatter) override; |