compilerplugins/clang/constantparam.booleans.results | 4 - extensions/source/propctrlr/commoncontrol.cxx | 2 extensions/source/propctrlr/commoncontrol.hxx | 2 extensions/source/propctrlr/propcontroller.cxx | 2 extensions/source/propctrlr/standardcontrol.cxx | 20 +++-- extensions/source/propctrlr/standardcontrol.hxx | 11 +- include/sfx2/dinfdlg.hxx | 18 +++- include/svx/ctredlin.hxx | 13 ++- include/vcl/formatter.hxx | 4 - include/vcl/weld.hxx | 71 ------------------ include/vcl/weldutils.hxx | 19 +++-- sd/source/filter/html/pubdlg.cxx | 12 +-- sd/source/ui/dlg/animobjs.cxx | 23 +++--- sd/source/ui/dlg/present.cxx | 16 ++-- sd/source/ui/inc/animobjs.hxx | 6 + sd/source/ui/inc/present.hxx | 6 + sd/source/ui/inc/pubdlg.hxx | 4 - sfx2/source/dialog/dinfdlg.cxx | 28 ++++++- svx/source/dialog/ctredlin.cxx | 60 ++++++++------- vcl/inc/salvtables.hxx | 4 - vcl/source/app/salvtables.cxx | 34 ++++++-- vcl/source/app/weldutils.cxx | 14 +++ vcl/source/window/builder.cxx | 72 ------------------- vcl/unx/gtk3/gtk3gtkinst.cxx | 6 - 24 files changed, 196 insertions(+), 255 deletions(-)
New commits: commit 299e128b5175f4c3d794848ab51e81d14385a547 Author: Caolán McNamara <[email protected]> AuthorDate: Tue Jul 14 16:45:39 2020 +0100 Commit: Caolán McNamara <[email protected]> CommitDate: Wed Jul 15 15:00:56 2020 +0200 replace TimeSpinButton with FormattedSpinButton with a TimeFormatter rather than have duplicate functionality Change-Id: I99f1f2aabee5f81485f97755ba3675870317cfb9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98791 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> diff --git a/compilerplugins/clang/constantparam.booleans.results b/compilerplugins/clang/constantparam.booleans.results index 141f31665d5f..c93c2533270a 100644 --- a/compilerplugins/clang/constantparam.booleans.results +++ b/compilerplugins/clang/constantparam.booleans.results @@ -1842,10 +1842,6 @@ include/vcl/weld.hxx:2282 class std::unique_ptr<class weld::FormattedSpinButton, struct std::default_delete<class weld::FormattedSpinButton> > weld::Builder::weld_formatted_spin_button(const class rtl::OString &,_Bool) _Bool bTakeOwnership 0 -include/vcl/weld.hxx:2284 - class std::unique_ptr<class weld::TimeSpinButton, struct std::default_delete<class weld::TimeSpinButton> > weld::Builder::weld_time_spin_button(const class rtl::OString &,enum TimeFieldFormat,_Bool) - _Bool bTakeOwnership - 0 include/vcl/weld.hxx:2286 class std::unique_ptr<class weld::ComboBox, struct std::default_delete<class weld::ComboBox> > weld::Builder::weld_combo_box(const class rtl::OString &,_Bool) _Bool bTakeOwnership diff --git a/extensions/source/propctrlr/commoncontrol.cxx b/extensions/source/propctrlr/commoncontrol.cxx index 02f52a6ecd80..243bbd813b57 100644 --- a/extensions/source/propctrlr/commoncontrol.cxx +++ b/extensions/source/propctrlr/commoncontrol.cxx @@ -93,7 +93,7 @@ namespace pcr setModified(); } - IMPL_LINK_NOARG( CommonBehaviourControlHelper, TimeModifiedHdl, weld::TimeSpinButton&, void ) + IMPL_LINK_NOARG( CommonBehaviourControlHelper, TimeModifiedHdl, weld::FormattedSpinButton&, void ) { setModified(); } diff --git a/extensions/source/propctrlr/commoncontrol.hxx b/extensions/source/propctrlr/commoncontrol.hxx index 2097a88df3ff..919a7747c48c 100644 --- a/extensions/source/propctrlr/commoncontrol.hxx +++ b/extensions/source/propctrlr/commoncontrol.hxx @@ -91,7 +91,7 @@ namespace pcr DECL_LINK( EditModifiedHdl, weld::Entry&, void ); DECL_LINK( MetricModifiedHdl, weld::MetricSpinButton&, void ); DECL_LINK( FormattedModifiedHdl, weld::FormattedSpinButton&, void ); - DECL_LINK( TimeModifiedHdl, weld::TimeSpinButton&, void ); + DECL_LINK( TimeModifiedHdl, weld::FormattedSpinButton&, void ); DECL_LINK( DateModifiedHdl, SvtCalendarBox&, void ); DECL_LINK( GetFocusHdl, weld::Widget&, void ); DECL_LINK( LoseFocusHdl, weld::Widget&, void ); diff --git a/extensions/source/propctrlr/propcontroller.cxx b/extensions/source/propctrlr/propcontroller.cxx index d75c117a3e20..76e92f064638 100644 --- a/extensions/source/propctrlr/propcontroller.cxx +++ b/extensions/source/propctrlr/propcontroller.cxx @@ -790,7 +790,7 @@ namespace pcr case PropertyControlType::TimeField: { std::unique_ptr<weld::Builder> xBuilder(PropertyHandlerHelper::makeBuilder("modules/spropctrlr/ui/timefield.ui", m_xContext)); - auto pTimeSpinButton = xBuilder->weld_time_spin_button("timefield", TimeFieldFormat::F_SEC); + auto pTimeSpinButton = xBuilder->weld_formatted_spin_button("timefield"); auto pControl = new OTimeControl(std::move(pTimeSpinButton), std::move(xBuilder), bCreateReadOnly); pControl->SetModifyHandler(); xControl = pControl; diff --git a/extensions/source/propctrlr/standardcontrol.cxx b/extensions/source/propctrlr/standardcontrol.cxx index dc1891eab122..2084a9dae6bf 100644 --- a/extensions/source/propctrlr/standardcontrol.cxx +++ b/extensions/source/propctrlr/standardcontrol.cxx @@ -53,9 +53,11 @@ namespace pcr using namespace ::com::sun::star::inspection; //= OTimeControl - OTimeControl::OTimeControl(std::unique_ptr<weld::TimeSpinButton> xWidget, std::unique_ptr<weld::Builder> xBuilder, bool bReadOnly) + OTimeControl::OTimeControl(std::unique_ptr<weld::FormattedSpinButton> xWidget, std::unique_ptr<weld::Builder> xBuilder, bool bReadOnly) : OTimeControl_Base(PropertyControlType::TimeField, std::move(xBuilder), std::move(xWidget), bReadOnly) + , m_xFormatter(new weld::TimeFormatter(*getTypedControlWindow())) { + m_xFormatter->SetExtFormat(ExtTimeFieldFormat::LongDuration); } void SAL_CALL OTimeControl::setValue( const Any& _rValue ) @@ -64,11 +66,11 @@ namespace pcr if ( !( _rValue >>= aUNOTime ) ) { getTypedControlWindow()->set_text(""); - getTypedControlWindow()->set_value(tools::Time(tools::Time::EMPTY)); + m_xFormatter->SetTime(tools::Time(tools::Time::EMPTY)); } else { - getTypedControlWindow()->set_value(::tools::Time(aUNOTime)); + m_xFormatter->SetTime(::tools::Time(aUNOTime)); } } @@ -77,7 +79,7 @@ namespace pcr Any aPropValue; if ( !getTypedControlWindow()->get_text().isEmpty() ) { - aPropValue <<= getTypedControlWindow()->get_value().GetUNOTime(); + aPropValue <<= m_xFormatter->GetTime().GetUNOTime(); } return aPropValue; } @@ -205,8 +207,10 @@ namespace pcr ODateTimeControl::ODateTimeControl(std::unique_ptr<weld::Container> xWidget, std::unique_ptr<weld::Builder> xBuilder, bool bReadOnly) : ODateTimeControl_Base(PropertyControlType::DateTimeField, std::move(xBuilder), std::move(xWidget), bReadOnly) , m_xDate(std::make_unique<SvtCalendarBox>(m_xBuilder->weld_menu_button("datefield"))) - , m_xTime(m_xBuilder->weld_time_spin_button("timefield", TimeFieldFormat::F_SEC)) + , m_xTime(m_xBuilder->weld_formatted_spin_button("timefield")) + , m_xFormatter(new weld::TimeFormatter(*m_xTime)) { + m_xFormatter->SetExtFormat(ExtTimeFieldFormat::LongDuration); } void SAL_CALL ODateTimeControl::setValue( const Any& _rValue ) @@ -215,7 +219,7 @@ namespace pcr { m_xDate->set_date(::Date(::Date::SYSTEM)); m_xTime->set_text(""); - m_xTime->set_value(tools::Time(tools::Time::EMPTY)); + m_xFormatter->SetTime(tools::Time(tools::Time::EMPTY)); } else { @@ -226,7 +230,7 @@ namespace pcr ::utl::typeConvert( aUNODateTime, aDateTime ); m_xDate->set_date(aDateTime); - m_xTime->set_value(aDateTime); + m_xFormatter->SetTime(aDateTime); } } @@ -235,7 +239,7 @@ namespace pcr Any aPropValue; if (!m_xTime->get_text().isEmpty()) { - ::DateTime aDateTime(m_xDate->get_date(), m_xTime->get_value()); + ::DateTime aDateTime(m_xDate->get_date(), m_xFormatter->GetTime()); util::DateTime aUNODateTime; ::utl::typeConvert( aDateTime, aUNODateTime ); diff --git a/extensions/source/propctrlr/standardcontrol.hxx b/extensions/source/propctrlr/standardcontrol.hxx index 1b4fd2fd08dc..1eccceb9451e 100644 --- a/extensions/source/propctrlr/standardcontrol.hxx +++ b/extensions/source/propctrlr/standardcontrol.hxx @@ -35,11 +35,12 @@ namespace pcr //= OTimeControl - typedef CommonBehaviourControl<css::inspection::XPropertyControl, weld::TimeSpinButton> OTimeControl_Base; + typedef CommonBehaviourControl<css::inspection::XPropertyControl, weld::FormattedSpinButton> OTimeControl_Base; class OTimeControl : public OTimeControl_Base { + std::unique_ptr<weld::TimeFormatter> m_xFormatter; public: - OTimeControl(std::unique_ptr<weld::TimeSpinButton> xWidget, std::unique_ptr<weld::Builder> xBuilder, bool bReadOnly); + OTimeControl(std::unique_ptr<weld::FormattedSpinButton> xWidget, std::unique_ptr<weld::Builder> xBuilder, bool bReadOnly); // XPropertyControl virtual css::uno::Any SAL_CALL getValue() override; @@ -52,7 +53,7 @@ namespace pcr getTypedControlWindow()->connect_value_changed( LINK( this, CommonBehaviourControlHelper, TimeModifiedHdl ) ); } - virtual weld::Widget* getWidget() override { return &getTypedControlWindow()->get_widget(); } + virtual weld::Widget* getWidget() override { return getTypedControlWindow(); } }; //= ODateControl @@ -108,7 +109,8 @@ namespace pcr { private: std::unique_ptr<SvtCalendarBox> m_xDate; - std::unique_ptr<weld::TimeSpinButton> m_xTime; + std::unique_ptr<weld::FormattedSpinButton> m_xTime; + std::unique_ptr<weld::TimeFormatter> m_xFormatter; public: ODateTimeControl(std::unique_ptr<weld::Container> xWidget, std::unique_ptr<weld::Builder> xBuilder, bool bReadOnly); @@ -126,6 +128,7 @@ namespace pcr virtual void SAL_CALL disposing() override { + m_xFormatter.reset(); m_xTime.reset(); m_xDate.reset(); ODateTimeControl_Base::disposing(); diff --git a/include/sfx2/dinfdlg.hxx b/include/sfx2/dinfdlg.hxx index 09e2473b9ed0..5f1efdfe7b3c 100644 --- a/include/sfx2/dinfdlg.hxx +++ b/include/sfx2/dinfdlg.hxx @@ -248,16 +248,23 @@ public: ~CustomPropertiesDateField(); }; +namespace weld +{ + class TimeFormatter; +} + class CustomPropertiesTimeField { public: - std::unique_ptr<weld::TimeSpinButton> m_xTimeField; + std::unique_ptr<weld::FormattedSpinButton> m_xTimeField; + std::unique_ptr<weld::TimeFormatter> m_xFormatter; bool m_isUTC; - CustomPropertiesTimeField(std::unique_ptr<weld::TimeSpinButton> xTimeField); + CustomPropertiesTimeField(std::unique_ptr<weld::FormattedSpinButton> xTimeField); void set_visible(bool bVisible) { m_xTimeField->set_visible(bVisible); } - tools::Time get_value() const { return m_xTimeField->get_value(); } - void set_value(const tools::Time& rTime) { m_xTimeField->set_value(rTime); } + tools::Time get_value() const; + void set_value(const tools::Time& rTime); + ~CustomPropertiesTimeField(); }; @@ -459,7 +466,8 @@ struct CmisDateTime std::unique_ptr<weld::Builder> m_xBuilder; std::unique_ptr<weld::Frame> m_xFrame; std::unique_ptr<SvtCalendarBox> m_xDateField; - std::unique_ptr<weld::TimeSpinButton> m_xTimeField; + std::unique_ptr<weld::FormattedSpinButton> m_xTimeField; + std::unique_ptr<weld::TimeFormatter> m_xFormatter; CmisDateTime(weld::Widget* pParent, const css::util::DateTime& rDateTime); }; diff --git a/include/svx/ctredlin.hxx b/include/svx/ctredlin.hxx index 55462c9dce28..b7d0f80ada23 100644 --- a/include/svx/ctredlin.hxx +++ b/include/svx/ctredlin.hxx @@ -144,6 +144,11 @@ public: void Show() { m_xContainer->show(); } }; +namespace weld +{ + class TimeFormatter; +} + /// Tabpage with the filter text entries etc. class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxTPFilter final : public SvxTPage { @@ -156,11 +161,13 @@ class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxTPFilter final : public SvxTPage std::unique_ptr<weld::CheckButton> m_xCbDate; std::unique_ptr<weld::ComboBox> m_xLbDate; std::unique_ptr<SvtCalendarBox> m_xDfDate; - std::unique_ptr<weld::TimeSpinButton> m_xTfDate; + std::unique_ptr<weld::FormattedSpinButton> m_xTfDate; + std::unique_ptr<weld::TimeFormatter> m_xTfDateFormatter; std::unique_ptr<weld::Button> m_xIbClock; std::unique_ptr<weld::Label> m_xFtDate2; std::unique_ptr<SvtCalendarBox> m_xDfDate2; - std::unique_ptr<weld::TimeSpinButton> m_xTfDate2; + std::unique_ptr<weld::FormattedSpinButton> m_xTfDate2; + std::unique_ptr<weld::TimeFormatter> m_xTfDate2Formatter; std::unique_ptr<weld::Button> m_xIbClock2; std::unique_ptr<weld::CheckButton> m_xCbAuthor; std::unique_ptr<weld::ComboBox> m_xLbAuthor; @@ -178,7 +185,7 @@ class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxTPFilter final : public SvxTPage DECL_LINK( ModifyHdl, weld::Entry&, void ); DECL_LINK( ModifyListBoxHdl, weld::ComboBox&, void ); DECL_LINK( ModifyDate, SvtCalendarBox&, void ); - DECL_LINK( ModifyTime, weld::TimeSpinButton&, void ); + DECL_LINK( ModifyTime, weld::FormattedSpinButton&, void ); DECL_LINK( RefHandle, weld::Button&, void ); void EnableDateLine1(bool bFlag); diff --git a/include/vcl/formatter.hxx b/include/vcl/formatter.hxx index 4f9a016cc6da..fce7f5018aee 100644 --- a/include/vcl/formatter.hxx +++ b/include/vcl/formatter.hxx @@ -287,6 +287,8 @@ public: void EntryLostFocus(); + void ReFormat(); + // any aspect of the current format has changed virtual void FormatChanged(FORMAT_CHANGE_TYPE nWhat); @@ -305,8 +307,6 @@ protected: SvNumberFormatter* CreateFormatter() { SetFormatter(StandardFormatter()); return m_pFormatter; } virtual void UpdateCurrentValue(double dCurrentValue) { m_dCurrentValue = dCurrentValue; } - - void ReFormat(); }; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 0d8b702e5f20..7bd54920a0bc 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1924,74 +1924,6 @@ public: weld::SpinButton& get_widget() { return *m_xSpinButton; } }; -class VCL_DLLPUBLIC TimeSpinButton final -{ - TimeFieldFormat m_eFormat; - std::unique_ptr<weld::SpinButton> m_xSpinButton; - Link<TimeSpinButton&, void> m_aValueChangedHdl; - - DECL_LINK(spin_button_value_changed, weld::SpinButton&, void); - DECL_LINK(spin_button_output, weld::SpinButton&, void); - DECL_LINK(spin_button_input, int* result, bool); - DECL_LINK(spin_button_cursor_position, weld::Entry&, void); - - void signal_value_changed() { m_aValueChangedHdl.Call(*this); } - - static tools::Time ConvertValue(int nValue); - static int ConvertValue(const tools::Time& rTime); - OUString format_number(int nValue) const; - void update_width_chars(); - -public: - TimeSpinButton(std::unique_ptr<SpinButton> pSpinButton, TimeFieldFormat eFormat) - : m_eFormat(eFormat) - , m_xSpinButton(std::move(pSpinButton)) - { - update_width_chars(); - m_xSpinButton->connect_output(LINK(this, TimeSpinButton, spin_button_output)); - m_xSpinButton->connect_input(LINK(this, TimeSpinButton, spin_button_input)); - m_xSpinButton->connect_value_changed(LINK(this, TimeSpinButton, spin_button_value_changed)); - m_xSpinButton->connect_cursor_position( - LINK(this, TimeSpinButton, spin_button_cursor_position)); - spin_button_output(*m_xSpinButton); - } - - void set_value(const tools::Time& rTime) { m_xSpinButton->set_value(ConvertValue(rTime)); } - - tools::Time get_value() const { return ConvertValue(m_xSpinButton->get_value()); } - - void connect_value_changed(const Link<TimeSpinButton&, void>& rLink) - { - m_aValueChangedHdl = rLink; - } - - void set_sensitive(bool sensitive) { m_xSpinButton->set_sensitive(sensitive); } - bool get_sensitive() const { return m_xSpinButton->get_sensitive(); } - void set_visible(bool bShow) { m_xSpinButton->set_visible(bShow); } - bool get_visible() const { return m_xSpinButton->get_visible(); } - void grab_focus() { m_xSpinButton->grab_focus(); } - bool has_focus() const { return m_xSpinButton->has_focus(); } - void show() { m_xSpinButton->show(); } - void hide() { m_xSpinButton->hide(); } - void save_value() { m_xSpinButton->save_value(); } - bool get_value_changed_from_saved() const - { - return m_xSpinButton->get_value_changed_from_saved(); - } - void set_position(int nCursorPos) { m_xSpinButton->set_position(nCursorPos); } - void set_text(const OUString& rText) { m_xSpinButton->set_text(rText); } - OUString get_text() const { return m_xSpinButton->get_text(); } - void connect_focus_in(const Link<Widget&, void>& rLink) - { - m_xSpinButton->connect_focus_in(rLink); - } - void connect_focus_out(const Link<Widget&, void>& rLink) - { - m_xSpinButton->connect_focus_out(rLink); - } - weld::SpinButton& get_widget() { return *m_xSpinButton; } -}; - class VCL_DLLPUBLIC Label : virtual public Widget { public: @@ -2308,9 +2240,6 @@ public: weld_metric_spin_button(const OString& id, FieldUnit eUnit, bool bTakeOwnership = false) = 0; virtual std::unique_ptr<FormattedSpinButton> weld_formatted_spin_button(const OString& id, bool bTakeOwnership = false) = 0; - virtual std::unique_ptr<TimeSpinButton> - weld_time_spin_button(const OString& id, TimeFieldFormat eFormat, bool bTakeOwnership = false) - = 0; virtual std::unique_ptr<ComboBox> weld_combo_box(const OString& id, bool bTakeOwnership = false) = 0; virtual std::unique_ptr<TreeView> weld_tree_view(const OString& id, bool bTakeOwnership = false) diff --git a/include/vcl/weldutils.hxx b/include/vcl/weldutils.hxx index e4faeea905a7..e1944cc41ee8 100644 --- a/include/vcl/weldutils.hxx +++ b/include/vcl/weldutils.hxx @@ -160,12 +160,6 @@ public: EntryFormatter(weld::Entry& rEntry); EntryFormatter(weld::FormattedSpinButton& rSpinButton); - // EntryFormatter will set listeners to "changed" and "focus-out" of the - // entry so users that want to add their own listeners to those must set - // them through this formatter and not directly on the entry - void connect_changed(const Link<weld::Entry&, void>& rLink) { m_aModifyHdl = rLink; } - void connect_focus_out(const Link<weld::Widget&, void>& rLink) { m_aFocusOutHdl = rLink; } - weld::Entry& get_widget() { return m_rEntry; } // public Formatter overrides, drives interactions with the Entry @@ -186,6 +180,17 @@ public: void SetEntrySelectionOptions(SelectionOptions eOptions) { m_eOptions = eOptions; } + /* EntryFormatter will set listeners to "changed" and "focus-out" of the + Entry so users that want to add their own listeners to those must set + them through this formatter and not directly on that entry. + + If EntryFormatter is used with a weld::FormattedSpinButton this is + handled transparently by the FormattedSpinButton for the user and the + handlers can be set on the FormattedSpinButton + */ + void connect_changed(const Link<weld::Entry&, void>& rLink) { m_aModifyHdl = rLink; } + void connect_focus_out(const Link<weld::Widget&, void>& rLink) { m_aFocusOutHdl = rLink; } + virtual ~EntryFormatter() override; private: @@ -247,6 +252,8 @@ public: TimeFormatter(weld::FormattedSpinButton& rSpinButton); void SetExtFormat(ExtTimeFieldFormat eFormat); + void SetDuration(bool bDuration); + void SetTimeFormat(TimeFieldFormat eTimeFormat); void SetMin(const tools::Time& rNewMin); void SetMax(const tools::Time& rNewMax); diff --git a/sd/source/filter/html/pubdlg.cxx b/sd/source/filter/html/pubdlg.cxx index 144797fd1a8e..0855240aac7d 100644 --- a/sd/source/filter/html/pubdlg.cxx +++ b/sd/source/filter/html/pubdlg.cxx @@ -532,7 +532,9 @@ void SdPublishingDlg::CreatePages() m_xPage2_ChgDefault = m_xBuilder->weld_radio_button("chgDefaultRadiobutton"); m_xPage2_ChgAuto = m_xBuilder->weld_radio_button("chgAutoRadiobutton"); m_xPage2_Duration_txt = m_xBuilder->weld_label("durationTxtLabel"); - m_xPage2_Duration = m_xBuilder->weld_time_spin_button("durationSpinbutton", TimeFieldFormat::F_SEC); + m_xPage2_Duration = m_xBuilder->weld_formatted_spin_button("durationSpinbutton"); + m_xFormatter.reset(new weld::TimeFormatter(*m_xPage2_Duration)); + m_xFormatter->SetExtFormat(ExtTimeFieldFormat::LongDuration); m_xPage2_Endless = m_xBuilder->weld_check_button("endlessCheckbutton"); aAssistentFunc.InsertControl(2, m_xPage2_Title_WebCast.get()); aAssistentFunc.InsertControl(2, m_xPage2_Index_txt.get()); @@ -547,7 +549,7 @@ void SdPublishingDlg::CreatePages() aAssistentFunc.InsertControl(2, m_xPage2_ChgDefault.get()); aAssistentFunc.InsertControl(2, m_xPage2_ChgAuto.get()); aAssistentFunc.InsertControl(2, m_xPage2_Duration_txt.get()); - aAssistentFunc.InsertControl(2, &m_xPage2_Duration->get_widget()); + aAssistentFunc.InsertControl(2, m_xPage2_Duration.get()); aAssistentFunc.InsertControl(2, m_xPage2_Endless.get()); // Page 3 @@ -712,7 +714,7 @@ void SdPublishingDlg::GetParameterSequence( Sequence< PropertyValue >& rParams ) if( m_xPage2_Kiosk->get_active() && m_xPage2_ChgAuto->get_active() ) { aValue.Name = "KioskSlideDuration"; - aValue.Value <<= static_cast<sal_uInt32>(m_xPage2_Duration->get_value().GetMSFromTime()) / 1000; + aValue.Value <<= static_cast<sal_uInt32>(m_xFormatter->GetTime().GetMSFromTime()) / 1000; aProps.push_back( aValue ); aValue.Name = "KioskEndless"; @@ -1281,7 +1283,7 @@ void SdPublishingDlg::SetDesign( SdPublishingDesign const * pDesign ) tools::Time aTime( tools::Time::EMPTY ); aTime.MakeTimeFromMS( pDesign->m_nSlideDuration * 1000 ); - m_xPage2_Duration->set_value(aTime); + m_xFormatter->SetTime(aTime); m_xPage2_Endless->set_sensitive( pDesign->m_bEndless ); @@ -1385,7 +1387,7 @@ void SdPublishingDlg::GetDesign( SdPublishingDesign* pDesign ) pDesign->m_aURL = m_xPage2_URL->get_text(); pDesign->m_bAutoSlide = m_xPage2_ChgAuto->get_active(); - pDesign->m_nSlideDuration = static_cast<sal_uInt32>(m_xPage2_Duration->get_value().GetMSFromTime()) / 1000; + pDesign->m_nSlideDuration = static_cast<sal_uInt32>(m_xFormatter->GetTime().GetMSFromTime()) / 1000; pDesign->m_bEndless = m_xPage2_Endless->get_active(); } diff --git a/sd/source/ui/dlg/animobjs.cxx b/sd/source/ui/dlg/animobjs.cxx index 7b11b240748e..830149e62a0a 100644 --- a/sd/source/ui/dlg/animobjs.cxx +++ b/sd/source/ui/dlg/animobjs.cxx @@ -132,7 +132,8 @@ AnimationWindow::AnimationWindow(SfxBindings* pInBindings, SfxChildWindow *pCW, , m_xBtnPlay(m_xBuilder->weld_button("next")) , m_xBtnLast(m_xBuilder->weld_button("last")) , m_xNumFldBitmap(m_xBuilder->weld_spin_button("numbitmap")) - , m_xTimeField(m_xBuilder->weld_time_spin_button("duration", TimeFieldFormat::F_SEC_CS)) + , m_xTimeField(m_xBuilder->weld_formatted_spin_button("duration")) + , m_xFormatter(new weld::TimeFormatter(*m_xTimeField)) , m_xLbLoopCount(m_xBuilder->weld_combo_box("loopcount")) , m_xBtnGetOneObject(m_xBuilder->weld_button("getone")) , m_xBtnGetAllObjects(m_xBuilder->weld_button("getall")) @@ -151,6 +152,10 @@ AnimationWindow::AnimationWindow(SfxBindings* pInBindings, SfxChildWindow *pCW, { SetText(SdResId(STR_ANIMATION_DIALOG_TITLE)); + m_xFormatter->SetDuration(true); + m_xFormatter->SetTimeFormat(TimeFieldFormat::F_SEC_CS); + m_xFormatter->EnableEmptyField(false); + // create new document with page pMyDoc.reset( new SdDrawDocument(DocumentType::Impress, nullptr) ); SdPage* pPage = pMyDoc->AllocSdPage(false); @@ -207,6 +212,7 @@ void AnimationWindow::dispose() m_xBtnPlay.reset(); m_xBtnLast.reset(); m_xNumFldBitmap.reset(); + m_xFormatter.reset(); m_xTimeField.reset(); m_xLbLoopCount.reset(); m_xBtnGetOneObject.reset(); @@ -293,7 +299,7 @@ IMPL_LINK( AnimationWindow, ClickPlayHdl, weld::Button&, rButton, void ) { ::tools::Time const & rTime = m_FrameList[i].second; - m_xTimeField->set_value( rTime ); + m_xFormatter->SetTime( rTime ); sal_uLong nTime = rTime.GetMSFromTime(); WaitInEffect( nTime, nTmpTime, pProgress.get() ); @@ -369,7 +375,8 @@ IMPL_LINK_NOARG(AnimationWindow, ClickRbtHdl, weld::Button&, void) if( n > 0 ) { ::tools::Time const & rTime = m_FrameList[n - 1].second; - m_xTimeField->set_value( rTime ); + m_xFormatter->SetTime( rTime ); + m_xFormatter->ReFormat(); } m_xTimeField->set_sensitive(true); m_xLbLoopCount->set_sensitive(true); @@ -486,13 +493,13 @@ IMPL_LINK_NOARG(AnimationWindow, ModifyBitmapHdl, weld::SpinButton&, void) UpdateControl(); } -IMPL_LINK_NOARG(AnimationWindow, ModifyTimeHdl, weld::TimeSpinButton&, void) +IMPL_LINK_NOARG(AnimationWindow, ModifyTimeHdl, weld::FormattedSpinButton&, void) { sal_uLong nPos = m_xNumFldBitmap->get_value() - 1; ::tools::Time & rTime = m_FrameList[nPos].second; - rTime = m_xTimeField->get_value(); + rTime = m_xFormatter->GetTime(); } void AnimationWindow::UpdateControl(bool const bDisableCtrls) @@ -759,7 +766,7 @@ void AnimationWindow::AddObj (::sd::View& rView ) size_t nIndex = m_nCurrentFrame + 1; m_FrameList.insert( m_FrameList.begin() + nIndex, - ::std::make_pair(aBitmapEx, m_xTimeField->get_value())); + ::std::make_pair(aBitmapEx, m_xFormatter->GetTime())); // increment => next one inserted after this one ++m_nCurrentFrame; @@ -777,7 +784,7 @@ void AnimationWindow::AddObj (::sd::View& rView ) { BitmapEx aBitmapEx(rView.GetAllMarkedGraphic().GetBitmapEx()); - ::tools::Time aTime( m_xTimeField->get_value() ); + ::tools::Time aTime( m_xFormatter->GetTime() ); size_t nIndex = m_nCurrentFrame + 1; m_FrameList.insert( @@ -808,7 +815,7 @@ void AnimationWindow::AddObj (::sd::View& rView ) size_t nIndex = m_nCurrentFrame + 1; m_FrameList.insert( m_FrameList.begin() + nIndex, - ::std::make_pair(aBitmapEx, m_xTimeField->get_value())); + ::std::make_pair(aBitmapEx, m_xFormatter->GetTime())); // increment => next one inserted after this one ++m_nCurrentFrame; diff --git a/sd/source/ui/dlg/present.cxx b/sd/source/ui/dlg/present.cxx index 244cfd218880..bd06661554cb 100644 --- a/sd/source/ui/dlg/present.cxx +++ b/sd/source/ui/dlg/present.cxx @@ -45,7 +45,8 @@ SdStartPresentationDlg::SdStartPresentationDlg(weld::Window* pWindow, const SfxI , m_xRbtStandard(m_xBuilder->weld_radio_button("default")) , m_xRbtWindow(m_xBuilder->weld_radio_button("window")) , m_xRbtAuto(m_xBuilder->weld_radio_button("auto")) - , m_xTmfPause(m_xBuilder->weld_time_spin_button("pauseduration", TimeFieldFormat::F_SEC)) + , m_xTmfPause(m_xBuilder->weld_formatted_spin_button("pauseduration")) + , m_xFormatter(new weld::TimeFormatter(*m_xTmfPause)) , m_xCbxAutoLogo(m_xBuilder->weld_check_button("showlogo")) , m_xCbxManuel(m_xBuilder->weld_check_button("manualslides")) , m_xCbxMousepointer(m_xBuilder->weld_check_button("pointervisible")) @@ -60,6 +61,9 @@ SdStartPresentationDlg::SdStartPresentationDlg(weld::Window* pWindow, const SfxI , m_xMonitorExternal(m_xBuilder->weld_label("externalmonitor_str")) , m_xExternal(m_xBuilder->weld_label("external_str")) { + m_xFormatter->SetExtFormat(ExtTimeFieldFormat::LongDuration); + m_xFormatter->EnableEmptyField(false); + Link<weld::Button&,void> aLink( LINK( this, SdStartPresentationDlg, ChangeRangeHdl ) ); m_xRbtAll->connect_clicked( aLink ); @@ -113,7 +117,7 @@ SdStartPresentationDlg::SdStartPresentationDlg(weld::Window* pWindow, const SfxI const bool bWindow = !static_cast<const SfxBoolItem&>( rOutAttrs.Get( ATTR_PRESENT_FULLSCREEN ) ).GetValue(); const long nPause = static_cast<const SfxUInt32Item&>( rOutAttrs.Get( ATTR_PRESENT_PAUSE_TIMEOUT ) ).GetValue(); - m_xTmfPause->set_value( tools::Time( 0, 0, nPause ) ); + m_xFormatter->SetTime( tools::Time( 0, 0, nPause ) ); // set cursor in timefield to end m_xTmfPause->set_position(-1); @@ -258,7 +262,7 @@ void SdStartPresentationDlg::GetAttr( SfxItemSet& rAttr ) rAttr.Put( SfxBoolItem ( ATTR_PRESENT_ALWAYS_ON_TOP, m_xCbxAlwaysOnTop->get_active() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_FULLSCREEN, !m_xRbtWindow->get_active() ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_ENDLESS, m_xRbtAuto->get_active() ) ); - rAttr.Put( SfxUInt32Item ( ATTR_PRESENT_PAUSE_TIMEOUT, m_xTmfPause->get_value().GetMSFromTime() / 1000 ) ); + rAttr.Put( SfxUInt32Item ( ATTR_PRESENT_PAUSE_TIMEOUT, m_xFormatter->GetTime().GetMSFromTime() / 1000 ) ); rAttr.Put( SfxBoolItem ( ATTR_PRESENT_SHOW_PAUSELOGO, m_xCbxAutoLogo->get_active() ) ); int nPos = m_xLBMonitor->get_active(); @@ -289,7 +293,7 @@ IMPL_LINK_NOARG(SdStartPresentationDlg, ClickWindowPresentationHdl, weld::Button // m_xFtPause.set_sensitive( bAuto ); m_xTmfPause->set_sensitive( bAuto ); - m_xCbxAutoLogo->set_sensitive( bAuto && ( m_xTmfPause->get_value().GetMSFromTime() > 0 ) ); + m_xCbxAutoLogo->set_sensitive( bAuto && ( m_xFormatter->GetTime().GetMSFromTime() > 0 ) ); const bool bDisplay = !bWindow && ( mnMonitors > 1 ); m_xFtMonitor->set_sensitive( bDisplay ); @@ -307,14 +311,14 @@ IMPL_LINK_NOARG(SdStartPresentationDlg, ClickWindowPresentationHdl, weld::Button /** * Handler: Enabled/Disabled Checkbox "AlwaysOnTop" */ -IMPL_LINK_NOARG(SdStartPresentationDlg, ChangePauseHdl, weld::TimeSpinButton&, void) +IMPL_LINK_NOARG(SdStartPresentationDlg, ChangePauseHdl, weld::FormattedSpinButton&, void) { ChangePause(); } void SdStartPresentationDlg::ChangePause() { - m_xCbxAutoLogo->set_sensitive(m_xRbtAuto->get_active() && ( m_xTmfPause->get_value().GetMSFromTime() > 0 )); + m_xCbxAutoLogo->set_sensitive(m_xRbtAuto->get_active() && ( m_xFormatter->GetTime().GetMSFromTime() > 0 )); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/inc/animobjs.hxx b/sd/source/ui/inc/animobjs.hxx index 34b48dbea665..1d3321e0dbb6 100644 --- a/sd/source/ui/inc/animobjs.hxx +++ b/sd/source/ui/inc/animobjs.hxx @@ -27,6 +27,7 @@ #include <misc/scopelock.hxx> #include <vcl/customweld.hxx> #include <vcl/weld.hxx> +#include <vcl/weldutils.hxx> class SdDrawDocument; @@ -94,7 +95,8 @@ private: std::unique_ptr<weld::Button> m_xBtnPlay; std::unique_ptr<weld::Button> m_xBtnLast; std::unique_ptr<weld::SpinButton> m_xNumFldBitmap; - std::unique_ptr<weld::TimeSpinButton> m_xTimeField; + std::unique_ptr<weld::FormattedSpinButton> m_xTimeField; + std::unique_ptr<weld::TimeFormatter> m_xFormatter; std::unique_ptr<weld::ComboBox> m_xLbLoopCount; std::unique_ptr<weld::Button> m_xBtnGetOneObject; std::unique_ptr<weld::Button> m_xBtnGetAllObjects; @@ -131,7 +133,7 @@ private: DECL_LINK( ClickHelpHdl, weld::Button&, void ); DECL_LINK( ClickCreateGroupHdl, weld::Button&, void ); DECL_LINK( ModifyBitmapHdl, weld::SpinButton&, void ); - DECL_LINK( ModifyTimeHdl, weld::TimeSpinButton&, void ); + DECL_LINK( ModifyTimeHdl, weld::FormattedSpinButton&, void ); void UpdateControl(bool bDisableCtrls = false); void ResetAttrs(); diff --git a/sd/source/ui/inc/present.hxx b/sd/source/ui/inc/present.hxx index fc84f0e8cbb1..ef6523fd9b61 100644 --- a/sd/source/ui/inc/present.hxx +++ b/sd/source/ui/inc/present.hxx @@ -21,6 +21,7 @@ #define INCLUDED_SD_SOURCE_UI_INC_PRESENT_HXX #include <vcl/weld.hxx> +#include <vcl/weldutils.hxx> class SfxItemSet; class SdCustomShowList; @@ -44,7 +45,8 @@ private: std::unique_ptr<weld::RadioButton> m_xRbtStandard; std::unique_ptr<weld::RadioButton> m_xRbtWindow; std::unique_ptr<weld::RadioButton> m_xRbtAuto; - std::unique_ptr<weld::TimeSpinButton> m_xTmfPause; + std::unique_ptr<weld::FormattedSpinButton> m_xTmfPause; + std::unique_ptr<weld::TimeFormatter> m_xFormatter; std::unique_ptr<weld::CheckButton> m_xCbxAutoLogo; std::unique_ptr<weld::CheckButton> m_xCbxManuel; @@ -65,7 +67,7 @@ private: DECL_LINK(ChangeRangeHdl, weld::Button&, void); DECL_LINK(ClickWindowPresentationHdl, weld::Button&, void); void ChangePause(); - DECL_LINK(ChangePauseHdl, weld::TimeSpinButton&, void); + DECL_LINK(ChangePauseHdl, weld::FormattedSpinButton&, void); void InitMonitorSettings(); enum DisplayType { diff --git a/sd/source/ui/inc/pubdlg.hxx b/sd/source/ui/inc/pubdlg.hxx index 4b89a7cf3083..9556249c1135 100644 --- a/sd/source/ui/inc/pubdlg.hxx +++ b/sd/source/ui/inc/pubdlg.hxx @@ -22,6 +22,7 @@ #include <svtools/valueset.hxx> #include <vcl/weld.hxx> +#include <vcl/weldutils.hxx> #include <pres.hxx> #include "assclass.hxx" @@ -86,7 +87,8 @@ private: std::unique_ptr<weld::RadioButton> m_xPage2_ChgDefault; std::unique_ptr<weld::RadioButton> m_xPage2_ChgAuto; std::unique_ptr<weld::Label> m_xPage2_Duration_txt; - std::unique_ptr<weld::TimeSpinButton> m_xPage2_Duration; + std::unique_ptr<weld::FormattedSpinButton> m_xPage2_Duration; + std::unique_ptr<weld::TimeFormatter> m_xFormatter; std::unique_ptr<weld::CheckButton> m_xPage2_Endless; // page 3 controls diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx index 0d1fac1a9622..23774c4954da 100644 --- a/sfx2/source/dialog/dinfdlg.cxx +++ b/sfx2/source/dialog/dinfdlg.cxx @@ -23,6 +23,7 @@ #include <tools/urlobj.hxx> #include <vcl/svapp.hxx> #include <vcl/weld.hxx> +#include <vcl/weldutils.hxx> #include <unotools/datetime.hxx> #include <unotools/localedatawrapper.hxx> #include <unotools/cmdoptions.hxx> @@ -1265,7 +1266,7 @@ CustomPropertyLine::CustomPropertyLine(CustomPropertiesWindow* pParent, weld::Wi , m_xValueEdit(m_xBuilder->weld_entry("valueedit")) , m_xDateTimeBox(m_xBuilder->weld_widget("datetimebox")) , m_xDateField(new CustomPropertiesDateField(new SvtCalendarBox(m_xBuilder->weld_menu_button("date")))) - , m_xTimeField(new CustomPropertiesTimeField(m_xBuilder->weld_time_spin_button("time", TimeFieldFormat::F_SEC))) + , m_xTimeField(new CustomPropertiesTimeField(m_xBuilder->weld_formatted_spin_button("time"))) , m_xDurationBox(m_xBuilder->weld_widget("durationbox")) , m_xDurationField(new CustomPropertiesDurationField(m_xBuilder->weld_entry("duration"), m_xBuilder->weld_button("durationbutton"))) @@ -1523,10 +1524,23 @@ Sequence< beans::PropertyValue > CustomPropertiesWindow::GetCustomProperties() return aPropertiesSeq; } -CustomPropertiesTimeField::CustomPropertiesTimeField(std::unique_ptr<weld::TimeSpinButton> xTimeField) +CustomPropertiesTimeField::CustomPropertiesTimeField(std::unique_ptr<weld::FormattedSpinButton> xTimeField) : m_xTimeField(std::move(xTimeField)) + , m_xFormatter(new weld::TimeFormatter(*m_xTimeField)) , m_isUTC(false) { + m_xFormatter->SetExtFormat(ExtTimeFieldFormat::LongDuration); + m_xFormatter->EnableEmptyField(false); +} + +tools::Time CustomPropertiesTimeField::get_value() const +{ + return m_xFormatter->GetTime(); +} + +void CustomPropertiesTimeField::set_value(const tools::Time& rTime) +{ + m_xFormatter->SetTime(rTime); } CustomPropertiesTimeField::~CustomPropertiesTimeField() @@ -1964,12 +1978,16 @@ CmisDateTime::CmisDateTime(weld::Widget* pParent, const util::DateTime& aDateTim : m_xBuilder(Application::CreateBuilder(pParent, "sfx/ui/cmisline.ui")) , m_xFrame(m_xBuilder->weld_frame("CmisFrame")) , m_xDateField(new SvtCalendarBox(m_xBuilder->weld_menu_button("date"))) - , m_xTimeField(m_xBuilder->weld_time_spin_button("time", TimeFieldFormat::F_SEC)) + , m_xTimeField(m_xBuilder->weld_formatted_spin_button("time")) + , m_xFormatter(new weld::TimeFormatter(*m_xTimeField)) { + m_xFormatter->SetExtFormat(ExtTimeFieldFormat::LongDuration); + m_xFormatter->EnableEmptyField(false); + m_xDateField->show(); m_xTimeField->show(); m_xDateField->set_date(Date(aDateTime)); - m_xTimeField->set_value(tools::Time(aDateTime)); + m_xFormatter->SetTime(tools::Time(aDateTime)); } CmisYesNo::CmisYesNo(weld::Widget* pParent, bool bValue) @@ -2185,7 +2203,7 @@ Sequence< document::CmisProperty > CmisPropertiesWindow::GetCmisProperties() con for ( const auto& rxDateTime : pLine->m_aDateTimes ) { Date aTmpDate = rxDateTime->m_xDateField->get_date(); - tools::Time aTmpTime = rxDateTime->m_xTimeField->get_value(); + tools::Time aTmpTime = rxDateTime->m_xFormatter->GetTime(); util::DateTime aDateTime( aTmpTime.GetNanoSec(), aTmpTime.GetSec(), aTmpTime.GetMin(), aTmpTime.GetHour(), aTmpDate.GetDay(), aTmpDate.GetMonth(), diff --git a/svx/source/dialog/ctredlin.cxx b/svx/source/dialog/ctredlin.cxx index 3374efde51b5..3b07ab66fb9d 100644 --- a/svx/source/dialog/ctredlin.cxx +++ b/svx/source/dialog/ctredlin.cxx @@ -22,6 +22,7 @@ #include <i18nlangtag/languagetag.hxx> #include <vcl/svapp.hxx> #include <vcl/settings.hxx> +#include <vcl/weldutils.hxx> #include <svtools/ctrlbox.hxx> #include <unotools/textsearch.hxx> @@ -496,11 +497,13 @@ SvxTPFilter::SvxTPFilter(weld::Container* pParent) , m_xCbDate(m_xBuilder->weld_check_button("date")) , m_xLbDate(m_xBuilder->weld_combo_box("datecond")) , m_xDfDate(new SvtCalendarBox(m_xBuilder->weld_menu_button("startdate"))) - , m_xTfDate(m_xBuilder->weld_time_spin_button("starttime", TimeFieldFormat::F_NONE)) + , m_xTfDate(m_xBuilder->weld_formatted_spin_button("starttime")) + , m_xTfDateFormatter(new weld::TimeFormatter(*m_xTfDate)) , m_xIbClock(m_xBuilder->weld_button("startclock")) , m_xFtDate2(m_xBuilder->weld_label("and")) , m_xDfDate2(new SvtCalendarBox(m_xBuilder->weld_menu_button("enddate"))) - , m_xTfDate2(m_xBuilder->weld_time_spin_button("endtime", TimeFieldFormat::F_NONE)) + , m_xTfDate2(m_xBuilder->weld_formatted_spin_button("endtime")) + , m_xTfDate2Formatter(new weld::TimeFormatter(*m_xTfDate2)) , m_xIbClock2(m_xBuilder->weld_button("endclock")) , m_xCbAuthor(m_xBuilder->weld_check_button("author")) , m_xLbAuthor(m_xBuilder->weld_combo_box("authorlist")) @@ -512,6 +515,9 @@ SvxTPFilter::SvxTPFilter(weld::Container* pParent) , m_xCbComment(m_xBuilder->weld_check_button("comment")) , m_xEdComment(m_xBuilder->weld_entry("commentedit")) { + m_xTfDateFormatter->EnableEmptyField(false); + m_xTfDate2Formatter->EnableEmptyField(false); + m_xLbDate->set_active(0); m_xLbDate->connect_changed( LINK( this, SvxTPFilter, SelDateHdl ) ); m_xIbClock->connect_clicked( LINK( this, SvxTPFilter, TimeHdl) ); @@ -529,7 +535,7 @@ SvxTPFilter::SvxTPFilter(weld::Container* pParent) m_xDfDate->connect_activated(a2Link); m_xDfDate2->connect_activated(a2Link); - Link<weld::TimeSpinButton&,void> a3Link=LINK(this, SvxTPFilter, ModifyTime); + Link<weld::FormattedSpinButton&,void> a3Link=LINK(this, SvxTPFilter, ModifyTime); m_xTfDate->connect_value_changed(a3Link); m_xTfDate2->connect_value_changed(a3Link); @@ -545,11 +551,11 @@ SvxTPFilter::SvxTPFilter(weld::Container* pParent) RowEnableHdl(*m_xCbAction); RowEnableHdl(*m_xCbComment); - DateTime aDateTime( DateTime::SYSTEM ); - m_xDfDate->set_date(aDateTime); - m_xDfDate2->set_date(aDateTime); - m_xTfDate->set_value(aDateTime); - m_xTfDate2->set_value(aDateTime); + DateTime aDateTime(DateTime::SYSTEM); + SetFirstDate(aDateTime); + SetLastDate(aDateTime); + SetFirstTime(aDateTime); + SetLastTime(aDateTime); HideRange(); ShowAction(); bModified=false; @@ -611,12 +617,12 @@ void SvxTPFilter::SetFirstDate(const Date &aDate) tools::Time SvxTPFilter::GetFirstTime() const { - return m_xTfDate->get_value(); + return m_xTfDateFormatter->GetTime(); } void SvxTPFilter::SetFirstTime(const tools::Time &aTime) { - m_xTfDate->set_value(aTime); + m_xTfDateFormatter->SetTime(aTime); } Date SvxTPFilter::GetLastDate() const @@ -631,12 +637,12 @@ void SvxTPFilter::SetLastDate(const Date &aDate) tools::Time SvxTPFilter::GetLastTime() const { - return m_xTfDate2->get_value(); + return m_xTfDate2Formatter->GetTime(); } void SvxTPFilter::SetLastTime(const tools::Time &aTime) { - m_xTfDate2->set_value(aTime); + m_xTfDate2Formatter->SetTime(aTime); } void SvxTPFilter::SetDateMode(sal_uInt16 nMode) @@ -865,13 +871,13 @@ IMPL_LINK(SvxTPFilter, TimeHdl, weld::Button&, rIB, void) DateTime aDateTime( DateTime::SYSTEM ); if (&rIB == m_xIbClock.get()) { - m_xDfDate->set_date(aDateTime); - m_xTfDate->set_value(aDateTime); + SetFirstDate(aDateTime); + SetFirstTime(aDateTime); } else if (&rIB == m_xIbClock2.get()) { - m_xDfDate2->set_date(aDateTime); - m_xTfDate2->set_value(aDateTime); + SetLastDate(aDateTime); + SetLastTime(aDateTime); } bModified=true; } @@ -894,10 +900,10 @@ void SvxTPFilter::DeactivatePage() { m_pRedlinTable->SetFilterDate(IsDate()); m_pRedlinTable->SetDateTimeMode(GetDateMode()); - m_pRedlinTable->SetFirstDate(m_xDfDate->get_date()); - m_pRedlinTable->SetLastDate(m_xDfDate2->get_date()); - m_pRedlinTable->SetFirstTime(m_xTfDate->get_value()); - m_pRedlinTable->SetLastTime(m_xTfDate2->get_value()); + m_pRedlinTable->SetFirstDate(GetFirstDate()); + m_pRedlinTable->SetLastDate(GetLastDate()); + m_pRedlinTable->SetFirstTime(GetFirstTime()); + m_pRedlinTable->SetLastTime(GetLastTime()); m_pRedlinTable->SetFilterAuthor(IsAuthor()); m_pRedlinTable->SetAuthor(GetSelectedAuthor()); @@ -950,24 +956,24 @@ IMPL_LINK(SvxTPFilter, ModifyDate, SvtCalendarBox&, rTF, void) bModified=true; } -IMPL_LINK(SvxTPFilter, ModifyTime, weld::TimeSpinButton&, rTF, void) +IMPL_LINK(SvxTPFilter, ModifyTime, weld::FormattedSpinButton&, rTF, void) { tools::Time aTime(0); if (m_xTfDate.get() == &rTF) { if (m_xTfDate->get_text().isEmpty()) - m_xTfDate->set_value(aTime); + SetFirstTime(aTime); - if(m_pRedlinTable!=nullptr) - m_pRedlinTable->SetFirstTime(m_xTfDate->get_value()); + if (m_pRedlinTable!=nullptr) + m_pRedlinTable->SetFirstTime(GetFirstTime()); } else if (m_xTfDate2.get() == &rTF) { if (m_xTfDate2->get_text().isEmpty()) - m_xTfDate2->set_value(aTime); + SetLastTime(aTime); - if(m_pRedlinTable!=nullptr) - m_pRedlinTable->SetLastTime(m_xTfDate2->get_value()); + if (m_pRedlinTable!=nullptr) + m_pRedlinTable->SetLastTime(GetLastTime()); } bModified=true; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index 062bf9bd66ee..1e2fa89786c6 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -117,10 +117,6 @@ public: virtual std::unique_ptr<weld::FormattedSpinButton> weld_formatted_spin_button(const OString& id, bool bTakeOwnership = false) override; - virtual std::unique_ptr<weld::TimeSpinButton> - weld_time_spin_button(const OString& id, TimeFieldFormat eFormat, - bool bTakeOwnership = false) override; - virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OString& id, bool bTakeOwnership = false) override; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 3c564aa5371c..a4f8fb427230 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -5343,12 +5343,14 @@ class SalInstanceFormattedSpinButton : public SalInstanceEntry, { private: VclPtr<FormattedField> m_xButton; + weld::EntryFormatter* m_pFormatter; public: SalInstanceFormattedSpinButton(FormattedField* pButton, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : SalInstanceEntry(pButton, pBuilder, bTakeOwnership) , m_xButton(pButton) + , m_pFormatter(nullptr) { } @@ -5359,8 +5361,29 @@ public: enable_notify_events(); } + virtual void connect_changed(const Link<weld::Entry&, void>& rLink) override + { + if (!m_pFormatter) // once a formatter is set, it takes over "changed" + { + SalInstanceEntry::connect_changed(rLink); + return; + } + m_pFormatter->connect_changed(rLink); + } + + virtual void connect_focus_out(const Link<weld::Widget&, void>& rLink) override + { + if (!m_pFormatter) // once a formatter is set, it takes over "focus-out" + { + SalInstanceEntry::connect_focus_out(rLink); + return; + } + m_pFormatter->connect_focus_out(rLink); + } + virtual void SetFormatter(weld::EntryFormatter* pFormatter) override { + m_pFormatter = pFormatter; m_xButton->SetFormatter(pFormatter); } @@ -6650,17 +6673,6 @@ SalInstanceBuilder::weld_formatted_spin_button(const OString& id, bool bTakeOwne : nullptr; } -std::unique_ptr<weld::TimeSpinButton> -SalInstanceBuilder::weld_time_spin_button(const OString& id, TimeFieldFormat eFormat, - bool bTakeOwnership) -{ - std::unique_ptr<weld::TimeSpinButton> pRet( - new weld::TimeSpinButton(weld_spin_button(id, bTakeOwnership), eFormat)); - SalInstanceSpinButton& rButton = dynamic_cast<SalInstanceSpinButton&>(pRet->get_widget()); - rButton.DisableRemainderFactor(); //so with hh::mm::ss, incrementing mm will not reset ss - return pRet; -} - std::unique_ptr<weld::ComboBox> SalInstanceBuilder::weld_combo_box(const OString& id, bool bTakeOwnership) { diff --git a/vcl/source/app/weldutils.cxx b/vcl/source/app/weldutils.cxx index 21161e396db8..9efab321e91d 100644 --- a/vcl/source/app/weldutils.cxx +++ b/vcl/source/app/weldutils.cxx @@ -346,6 +346,8 @@ TimeFormatter::TimeFormatter(weld::FormattedSpinButton& rSpinButton) void TimeFormatter::Init() { + DisableRemainderFactor(); //so with hh::mm::ss, incrementing mm will not reset ss + SetOutputHdl(LINK(this, TimeFormatter, FormatOutputHdl)); SetInputHdl(LINK(this, TimeFormatter, ParseInputHdl)); @@ -407,6 +409,18 @@ void TimeFormatter::SetExtFormat(ExtTimeFieldFormat eFormat) ReFormat(); } +void TimeFormatter::SetDuration(bool bDuration) +{ + m_bDuration = bDuration; + ReFormat(); +} + +void TimeFormatter::SetTimeFormat(TimeFieldFormat eTimeFormat) +{ + m_eFormat = eTimeFormat; + ReFormat(); +} + TimeFormatter::~TimeFormatter() = default; } diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 368c4292fd06..6a02b7a9f86d 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -354,78 +354,6 @@ namespace weld return bRet; } - IMPL_LINK_NOARG(TimeSpinButton, spin_button_cursor_position, Entry&, void) - { - int nStartPos, nEndPos; - m_xSpinButton->get_selection_bounds(nStartPos, nEndPos); - - const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetLocaleDataWrapper(); - const int nTimeArea = ::TimeFormatter::GetTimeArea(m_eFormat, m_xSpinButton->get_text(), nEndPos, - rLocaleData); - - int nIncrements = 1; - - if (nTimeArea == 1) - nIncrements = 1000 * 60 * 60; - else if (nTimeArea == 2) - nIncrements = 1000 * 60; - else if (nTimeArea == 3) - nIncrements = 1000; - - m_xSpinButton->set_increments(nIncrements, nIncrements * 10); - } - - IMPL_LINK_NOARG(TimeSpinButton, spin_button_value_changed, SpinButton&, void) - { - signal_value_changed(); - } - - IMPL_LINK(TimeSpinButton, spin_button_output, SpinButton&, rSpinButton, void) - { - int nStartPos, nEndPos; - rSpinButton.get_selection_bounds(nStartPos, nEndPos); - rSpinButton.set_text(format_number(rSpinButton.get_value())); - rSpinButton.set_position(nEndPos); - } - - IMPL_LINK(TimeSpinButton, spin_button_input, int*, result, bool) - { - const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetLocaleDataWrapper(); - tools::Time aResult(0); - bool bRet = ::TimeFormatter::TextToTime(m_xSpinButton->get_text(), aResult, m_eFormat, true, rLocaleData); - if (bRet) - *result = ConvertValue(aResult); - return bRet; - } - - void TimeSpinButton::update_width_chars() - { - int min, max; - m_xSpinButton->get_range(min, max); - auto width = std::max(m_xSpinButton->get_pixel_size(format_number(min)).Width(), - m_xSpinButton->get_pixel_size(format_number(max)).Width()); - int chars = ceil(width / m_xSpinButton->get_approximate_digit_width()); - m_xSpinButton->set_width_chars(chars); - } - - tools::Time TimeSpinButton::ConvertValue(int nValue) - { - tools::Time aTime(0); - aTime.MakeTimeFromMS(nValue); - return aTime; - } - - int TimeSpinButton::ConvertValue(const tools::Time& rTime) - { - return rTime.GetMSFromTime(); - } - - OUString TimeSpinButton::format_number(int nValue) const - { - const LocaleDataWrapper& rLocaleData = Application::GetSettings().GetLocaleDataWrapper(); - return ::TimeFormatter::FormatTime(ConvertValue(nValue), m_eFormat, TimeFormat::Hour24, true, rLocaleData); - } - EntryTreeView::EntryTreeView(std::unique_ptr<Entry> xEntry, std::unique_ptr<TreeView> xTreeView) : m_xEntry(std::move(xEntry)) , m_xTreeView(std::move(xTreeView)) diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 29199170b5f9..3b37ab24499a 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -15856,12 +15856,6 @@ public: return std::make_unique<GtkInstanceFormattedSpinButton>(pSpinButton, this, bTakeOwnership); } - virtual std::unique_ptr<weld::TimeSpinButton> weld_time_spin_button(const OString& id, TimeFieldFormat eFormat, - bool bTakeOwnership) override - { - return std::make_unique<weld::TimeSpinButton>(weld_spin_button(id, bTakeOwnership), eFormat); - } - virtual std::unique_ptr<weld::ComboBox> weld_combo_box(const OString &id, bool bTakeOwnership) override { GtkComboBox* pComboBox = GTK_COMBO_BOX(gtk_builder_get_object(m_pBuilder, id.getStr())); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
