Now wxTimePickerCtrl is a native control under wxQt

This commit is contained in:
ali kettab 2023-10-15 12:08:41 +01:00
parent e20d8ba2cc
commit 032fc66cea
9 changed files with 219 additions and 13 deletions

View file

@ -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

View file

@ -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
</set>
<set var="QT_SRC" hints="files">
@ -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
</set>
<set var="MEDIA_QT_SRC" hints="files">

View file

@ -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

View file

@ -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

View file

@ -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 )

57
include/wx/qt/timectrl.h Normal file
View file

@ -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_

View file

@ -101,6 +101,10 @@ typedef wxTimePickerCtrlCommonBase<wxDateTimePickerCtrl> 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"

View file

@ -15,6 +15,7 @@
#if wxUSE_DATETIME
#include "wx/datetime.h"
#include <QtCore/QDate>
#include <QtCore/QTime>
#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 )

101
src/qt/timectrl.cpp Normal file
View file

@ -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 <QtWidgets/QTimeEdit>
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