diff --git a/Makefile.in b/Makefile.in
index 9d3477d663..00c9405c44 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -3527,7 +3527,8 @@ COND_TOOLKIT_QT_GUI_HDR = \
$(QT_PLATFORM_HDR) \
wx/qt/treectrl.h \
wx/generic/paletteg.h \
- wx/qt/datectrl.h
+ wx/qt/datectrl.h \
+ wx/qt/timectrl.h
@COND_TOOLKIT_QT@GUI_HDR = $(COND_TOOLKIT_QT_GUI_HDR)
@COND_TOOLKIT_COCOA@MEDIA_PLATFORM_HDR =
@COND_TOOLKIT_GTK@MEDIA_PLATFORM_HDR =
@@ -5345,7 +5346,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS = \
monodll_msw_calctrl.o \
monodll_msw_datectrl.o \
monodll_msw_datetimectrl.o \
- monodll_timectrl.o \
+ monodll_msw_timectrl.o \
monodll_datecontrols.o \
monodll_generic_activityindicator.o \
monodll_msw_imaglist.o \
@@ -5531,7 +5532,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS = \
$(__QT_PLATFORM_SRC_OBJECTS) \
monodll_qt_treectrl.o \
monodll_paletteg.o \
- monodll_qt_datectrl.o
+ monodll_qt_datectrl.o \
+ monodll_qt_timectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS = \
@COND_PLATFORM_UNIX_1@ monodll_unix_dialup.o monodll_unix_joystick.o \
@@ -7106,7 +7108,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_1 = \
monolib_msw_calctrl.o \
monolib_msw_datectrl.o \
monolib_msw_datetimectrl.o \
- monolib_timectrl.o \
+ monolib_msw_timectrl.o \
monolib_datecontrols.o \
monolib_generic_activityindicator.o \
monolib_msw_imaglist.o \
@@ -7292,7 +7294,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_1 = \
$(__QT_PLATFORM_SRC_OBJECTS_1) \
monolib_qt_treectrl.o \
monolib_paletteg.o \
- monolib_qt_datectrl.o
+ monolib_qt_datectrl.o \
+ monolib_qt_timectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_1 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_1)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS_1 = \
@COND_PLATFORM_UNIX_1@ monolib_unix_dialup.o monolib_unix_joystick.o \
@@ -9019,7 +9022,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_2 = \
coredll_msw_calctrl.o \
coredll_msw_datectrl.o \
coredll_msw_datetimectrl.o \
- coredll_timectrl.o \
+ coredll_msw_timectrl.o \
coredll_datecontrols.o \
coredll_generic_activityindicator.o \
coredll_msw_imaglist.o \
@@ -9205,7 +9208,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_2 = \
$(__QT_PLATFORM_SRC_OBJECTS_2) \
coredll_qt_treectrl.o \
coredll_paletteg.o \
- coredll_qt_datectrl.o
+ coredll_qt_datectrl.o \
+ coredll_qt_timectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_2 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_2)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS_2 = \
@COND_PLATFORM_UNIX_1@ coredll_unix_dialup.o coredll_unix_joystick.o \
@@ -10508,7 +10512,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_3 = \
corelib_msw_calctrl.o \
corelib_msw_datectrl.o \
corelib_msw_datetimectrl.o \
- corelib_timectrl.o \
+ corelib_msw_timectrl.o \
corelib_datecontrols.o \
corelib_generic_activityindicator.o \
corelib_msw_imaglist.o \
@@ -10694,7 +10698,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_3 = \
$(__QT_PLATFORM_SRC_OBJECTS_3) \
corelib_qt_treectrl.o \
corelib_paletteg.o \
- corelib_qt_datectrl.o
+ corelib_qt_datectrl.o \
+ corelib_qt_timectrl.o
@COND_TOOLKIT_QT@__GUI_SRC_OBJECTS_3 = $(COND_TOOLKIT_QT___GUI_SRC_OBJECTS_3)
@COND_PLATFORM_UNIX_1@__QT_PLATFORM_SRC_OBJECTS_3 = \
@COND_PLATFORM_UNIX_1@ corelib_unix_dialup.o corelib_unix_joystick.o \
@@ -15311,7 +15316,7 @@ monodll_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONODLL_ODEP)
monodll_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/datetimectrl.cpp
-monodll_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(MONODLL_ODEP)
+monodll_msw_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/timectrl.cpp
monodll_datecontrols.o: $(srcdir)/src/msw/datecontrols.cpp $(MONODLL_ODEP)
@@ -15791,6 +15796,9 @@ monodll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONODLL_ODEP)
monodll_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+monodll_qt_timectrl.o: $(srcdir)/src/qt/timectrl.cpp $(MONODLL_ODEP)
+ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/timectrl.cpp
+
monodll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@@ -20054,7 +20062,7 @@ monolib_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONOLIB_ODEP)
monolib_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/datetimectrl.cpp
-monolib_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(MONOLIB_ODEP)
+monolib_msw_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/timectrl.cpp
monolib_datecontrols.o: $(srcdir)/src/msw/datecontrols.cpp $(MONOLIB_ODEP)
@@ -20534,6 +20542,9 @@ monolib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONOLIB_ODEP)
monolib_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+monolib_qt_timectrl.o: $(srcdir)/src/qt/timectrl.cpp $(MONOLIB_ODEP)
+ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/timectrl.cpp
+
monolib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@@ -25475,7 +25486,7 @@ coredll_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(COREDLL_ODEP)
coredll_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/datetimectrl.cpp
-coredll_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(COREDLL_ODEP)
+coredll_msw_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/timectrl.cpp
coredll_datecontrols.o: $(srcdir)/src/msw/datecontrols.cpp $(COREDLL_ODEP)
@@ -25955,6 +25966,9 @@ coredll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(COREDLL_ODEP)
coredll_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+coredll_qt_timectrl.o: $(srcdir)/src/qt/timectrl.cpp $(COREDLL_ODEP)
+ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/timectrl.cpp
+
coredll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@@ -29192,7 +29206,7 @@ corelib_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(CORELIB_ODEP)
corelib_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/datetimectrl.cpp
-corelib_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(CORELIB_ODEP)
+corelib_msw_timectrl.o: $(srcdir)/src/msw/timectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/timectrl.cpp
corelib_datecontrols.o: $(srcdir)/src/msw/datecontrols.cpp $(CORELIB_ODEP)
@@ -29672,6 +29686,9 @@ corelib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(CORELIB_ODEP)
corelib_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
+corelib_qt_timectrl.o: $(srcdir)/src/qt/timectrl.cpp $(CORELIB_ODEP)
+ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/timectrl.cpp
+
corelib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
diff --git a/build/bakefiles/files.bkl b/build/bakefiles/files.bkl
index dfc67ee390..ba1c0ba6cb 100644
--- a/build/bakefiles/files.bkl
+++ b/build/bakefiles/files.bkl
@@ -376,6 +376,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/qt/treectrl.h
wx/generic/paletteg.h
wx/qt/datectrl.h
+ wx/qt/timectrl.h
@@ -475,6 +476,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/qt/treectrl.cpp
src/generic/paletteg.cpp
src/qt/datectrl.cpp
+ src/qt/timectrl.cpp
diff --git a/build/cmake/files.cmake b/build/cmake/files.cmake
index 91edbe4260..384b229205 100644
--- a/build/cmake/files.cmake
+++ b/build/cmake/files.cmake
@@ -289,6 +289,7 @@ set(QT_HDR
wx/qt/treectrl.h
wx/generic/paletteg.h
wx/qt/datectrl.h
+ wx/qt/timectrl.h
)
set(QT_SRC
@@ -388,6 +389,7 @@ set(QT_SRC
src/qt/treectrl.cpp
src/generic/paletteg.cpp
src/qt/datectrl.cpp
+ src/qt/timectrl.cpp
)
set(MEDIA_QT_SRC
diff --git a/build/files b/build/files
index e21f810cf6..b72c308e5d 100644
--- a/build/files
+++ b/build/files
@@ -305,6 +305,7 @@ QT_HDR =
wx/qt/textctrl.h
wx/qt/textentry.h
wx/qt/tglbtn.h
+ wx/qt/timectrl.h
wx/qt/toolbar.h
wx/qt/tooltip.h
wx/qt/toplevel.h
@@ -400,6 +401,7 @@ QT_SRC=
src/qt/textctrl.cpp
src/qt/textentry.cpp
src/qt/tglbtn.cpp
+ src/qt/timectrl.cpp
src/qt/timer.cpp
src/qt/toolbar.cpp
src/qt/tooltip.cpp
diff --git a/include/wx/qt/private/converter.h b/include/wx/qt/private/converter.h
index fbb4250bd6..ca8c2c28c6 100644
--- a/include/wx/qt/private/converter.h
+++ b/include/wx/qt/private/converter.h
@@ -70,10 +70,14 @@ inline QColor wxQtConvertColour(const wxColour &colour)
class WXDLLIMPEXP_FWD_BASE wxDateTime;
class QDate;
+class QTime;
wxDateTime wxQtConvertDate(const QDate& date);
QDate wxQtConvertDate(const wxDateTime& date);
+wxDateTime wxQtConvertTime(const QTime& Time);
+QTime wxQtConvertTime(const wxDateTime& time);
+
#endif // wxUSE_DATETIME
inline wxSize wxQtConvertSize( const QSize &size )
diff --git a/include/wx/qt/timectrl.h b/include/wx/qt/timectrl.h
new file mode 100644
index 0000000000..f4664b218c
--- /dev/null
+++ b/include/wx/qt/timectrl.h
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name: wx/qt/timectrl.h
+// Purpose: wxTimePickerCtrl for Qt.
+// Author: Ali Kettab
+// Created: 2023-10-13
+// Licence: wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_QT_TIMECTRL_H_
+#define _WX_QT_TIMECTRL_H_
+
+class QTimeEdit;
+
+// ----------------------------------------------------------------------------
+// wxTimePickerCtrl
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxTimePickerCtrl : public wxTimePickerCtrlBase
+{
+public:
+ // ctors
+ wxTimePickerCtrl() { }
+
+ wxTimePickerCtrl(wxWindow *parent,
+ wxWindowID id,
+ const wxDateTime& dt = wxDefaultDateTime,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxTP_DEFAULT,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxTimePickerCtrlNameStr)
+ {
+ Create(parent, id, dt, pos, size, style, validator, name);
+ }
+
+ bool Create(wxWindow *parent,
+ wxWindowID id,
+ const wxDateTime& dt = wxDefaultDateTime,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxTP_DEFAULT,
+ const wxValidator& validator = wxDefaultValidator,
+ const wxString& name = wxTimePickerCtrlNameStr);
+
+ // Override this one to add time-specific (and date-ignoring) checks.
+ virtual void SetValue(const wxDateTime& dt) override;
+ virtual wxDateTime GetValue() const override;
+
+ virtual QWidget *GetHandle() const override;
+
+private:
+ QTimeEdit* m_qtTimeEdit;
+
+ wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxTimePickerCtrl);
+};
+
+#endif // _WX_QT_TIMECTRL_H_
diff --git a/include/wx/timectrl.h b/include/wx/timectrl.h
index 05a32f2002..83d1621ab5 100644
--- a/include/wx/timectrl.h
+++ b/include/wx/timectrl.h
@@ -101,6 +101,10 @@ typedef wxTimePickerCtrlCommonBase wxTimePickerCtrlBase;
#elif defined(__WXOSX_COCOA__) && !defined(__WXUNIVERSAL__)
#include "wx/osx/timectrl.h"
+ #define wxHAS_NATIVE_TIMEPICKERCTRL
+#elif defined(__WXQT__) && !defined(__WXUNIVERSAL__)
+ #include "wx/qt/timectrl.h"
+
#define wxHAS_NATIVE_TIMEPICKERCTRL
#else
#include "wx/generic/timectrl.h"
diff --git a/src/qt/converter.cpp b/src/qt/converter.cpp
index 2d86f8b0f1..7aedee8fc6 100644
--- a/src/qt/converter.cpp
+++ b/src/qt/converter.cpp
@@ -15,6 +15,7 @@
#if wxUSE_DATETIME
#include "wx/datetime.h"
#include
+ #include
#endif // wxUSE_DATETIME
#include "wx/qt/private/converter.h"
@@ -40,6 +41,22 @@ QDate wxQtConvertDate(const wxDateTime& date)
return QDate();
}
+wxDateTime wxQtConvertTime(const QTime& time)
+{
+ if ( !time.isNull() )
+ return wxDateTime(time.hour(), time.minute(), time.second(), time.msec());
+ else
+ return wxDateTime();
+}
+
+QTime wxQtConvertTime(const wxDateTime& time)
+{
+ if ( time.IsValid() )
+ return QTime(time.GetHour(), time.GetMinute(), time.GetSecond(), time.GetMillisecond());
+ else
+ return QTime();
+}
+
#endif // wxUSE_DATETIME
Qt::Orientation wxQtConvertOrientation( long style, wxOrientation defaultOrientation )
diff --git a/src/qt/timectrl.cpp b/src/qt/timectrl.cpp
new file mode 100644
index 0000000000..0b990e2571
--- /dev/null
+++ b/src/qt/timectrl.cpp
@@ -0,0 +1,101 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name: src/qt/timectrl.cpp
+// Purpose: wxTimePickerCtrl implementation
+// Author: Ali Kettab
+// Created: 2023-10-13
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/wxprec.h"
+
+
+#if wxUSE_TIMEPICKCTRL
+
+
+#include "wx/timectrl.h"
+#include "wx/dateevt.h"
+#include "wx/qt/private/converter.h"
+#include "wx/qt/private/winevent.h"
+
+#include
+
+wxIMPLEMENT_DYNAMIC_CLASS(wxTimePickerCtrl, wxControl);
+
+// ============================================================================
+// implementation
+// ============================================================================
+
+class wxQtTimeEdit : public wxQtEventSignalHandler< QTimeEdit, wxTimePickerCtrl >
+{
+public:
+ wxQtTimeEdit( wxWindow* parent, wxTimePickerCtrl* handler );
+
+private:
+ void timeChanged(const QTime& time);
+
+};
+
+wxQtTimeEdit::wxQtTimeEdit( wxWindow* parent, wxTimePickerCtrl* handler )
+ : wxQtEventSignalHandler< QTimeEdit, wxTimePickerCtrl >( parent, handler )
+{
+ connect(this, &QDateTimeEdit::timeChanged,
+ this, &wxQtTimeEdit::timeChanged);
+}
+
+void wxQtTimeEdit::timeChanged(const QTime& time)
+{
+ wxDateEvent event(GetHandler(), wxQtConvertTime(time), wxEVT_TIME_CHANGED);
+ EmitEvent( event );
+}
+
+// ----------------------------------------------------------------------------
+// wxTimePickerCtrl creation
+// ----------------------------------------------------------------------------
+
+bool
+wxTimePickerCtrl::Create(wxWindow *parent,
+ wxWindowID id,
+ const wxDateTime& dt,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxValidator& validator,
+ const wxString& name)
+{
+ m_qtTimeEdit = new wxQtTimeEdit( parent, this );
+ m_qtTimeEdit->setTime( dt.IsValid() ? wxQtConvertTime(dt) :
+ wxQtConvertTime(wxDateTime::Now()) );
+ m_qtTimeEdit->setDisplayFormat(QLocale::system().timeFormat(QLocale::ShortFormat));
+
+ return QtCreateControl( parent, id, pos, size, style, validator, name );
+}
+
+// ----------------------------------------------------------------------------
+// wxTimePickerCtrl operations
+// ----------------------------------------------------------------------------
+
+void wxTimePickerCtrl::SetValue(const wxDateTime& dt)
+{
+ wxQtEnsureSignalsBlocked blocker(m_qtTimeEdit);
+ m_qtTimeEdit->setTime( dt.IsValid() ? wxQtConvertTime(dt) : QTime() );
+}
+
+wxDateTime wxTimePickerCtrl::GetValue() const
+{
+ return wxQtConvertTime( m_qtTimeEdit->time() );
+}
+
+QWidget* wxTimePickerCtrl::GetHandle() const
+{
+ return m_qtTimeEdit;
+}
+
+#endif // wxUSE_TIMEPICKCTRL