Now wxDatePickerCtrl is a native control under wxQt

This commit is contained in:
ali kettab 2023-10-15 11:58:00 +01:00
parent 4faf201a08
commit e20d8ba2cc
7 changed files with 231 additions and 13 deletions

View file

@ -3526,7 +3526,8 @@ COND_TOOLKIT_QT_GUI_HDR = \
wx/qt/dvrenderers.h \
$(QT_PLATFORM_HDR) \
wx/qt/treectrl.h \
wx/generic/paletteg.h
wx/generic/paletteg.h \
wx/qt/datectrl.h
@COND_TOOLKIT_QT@GUI_HDR = $(COND_TOOLKIT_QT_GUI_HDR)
@COND_TOOLKIT_COCOA@MEDIA_PLATFORM_HDR =
@COND_TOOLKIT_GTK@MEDIA_PLATFORM_HDR =
@ -5342,7 +5343,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS = \
monodll_msw_bmpcbox.o \
monodll_msw_hyperlink.o \
monodll_msw_calctrl.o \
monodll_datectrl.o \
monodll_msw_datectrl.o \
monodll_msw_datetimectrl.o \
monodll_timectrl.o \
monodll_datecontrols.o \
@ -5529,7 +5530,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS = \
monodll_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS) \
monodll_qt_treectrl.o \
monodll_paletteg.o
monodll_paletteg.o \
monodll_qt_datectrl.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 \
@ -7102,7 +7104,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_1 = \
monolib_msw_bmpcbox.o \
monolib_msw_hyperlink.o \
monolib_msw_calctrl.o \
monolib_datectrl.o \
monolib_msw_datectrl.o \
monolib_msw_datetimectrl.o \
monolib_timectrl.o \
monolib_datecontrols.o \
@ -7289,7 +7291,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_1 = \
monolib_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS_1) \
monolib_qt_treectrl.o \
monolib_paletteg.o
monolib_paletteg.o \
monolib_qt_datectrl.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 \
@ -9014,7 +9017,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_2 = \
coredll_msw_bmpcbox.o \
coredll_msw_hyperlink.o \
coredll_msw_calctrl.o \
coredll_datectrl.o \
coredll_msw_datectrl.o \
coredll_msw_datetimectrl.o \
coredll_timectrl.o \
coredll_datecontrols.o \
@ -9201,7 +9204,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_2 = \
coredll_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS_2) \
coredll_qt_treectrl.o \
coredll_paletteg.o
coredll_paletteg.o \
coredll_qt_datectrl.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 \
@ -10502,7 +10506,7 @@ COND_TOOLKIT_MSW___GUI_SRC_OBJECTS_3 = \
corelib_msw_bmpcbox.o \
corelib_msw_hyperlink.o \
corelib_msw_calctrl.o \
corelib_datectrl.o \
corelib_msw_datectrl.o \
corelib_msw_datetimectrl.o \
corelib_timectrl.o \
corelib_datecontrols.o \
@ -10689,7 +10693,8 @@ COND_TOOLKIT_QT___GUI_SRC_OBJECTS_3 = \
corelib_qt_window.o \
$(__QT_PLATFORM_SRC_OBJECTS_3) \
corelib_qt_treectrl.o \
corelib_paletteg.o
corelib_paletteg.o \
corelib_qt_datectrl.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 \
@ -15300,7 +15305,7 @@ monodll_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(MONODLL_ODEP)
monodll_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
monodll_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONODLL_ODEP)
monodll_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
monodll_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(MONODLL_ODEP)
@ -15783,6 +15788,9 @@ monodll_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(MONODLL_ODEP)
monodll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
monodll_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
monodll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONODLL_ODEP)
$(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@ -20040,7 +20048,7 @@ monolib_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(MONOLIB_ODEP)
monolib_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
monolib_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONOLIB_ODEP)
monolib_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
monolib_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(MONOLIB_ODEP)
@ -20523,6 +20531,9 @@ monolib_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(MONOLIB_ODEP)
monolib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
monolib_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
monolib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(MONOLIB_ODEP)
$(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@ -25458,7 +25469,7 @@ coredll_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(COREDLL_ODEP)
coredll_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
coredll_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(COREDLL_ODEP)
coredll_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
coredll_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(COREDLL_ODEP)
@ -25941,6 +25952,9 @@ coredll_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(COREDLL_ODEP)
coredll_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
coredll_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
coredll_mdig.o: $(srcdir)/src/generic/mdig.cpp $(COREDLL_ODEP)
$(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp
@ -29172,7 +29186,7 @@ corelib_msw_hyperlink.o: $(srcdir)/src/msw/hyperlink.cpp $(CORELIB_ODEP)
corelib_msw_calctrl.o: $(srcdir)/src/msw/calctrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/calctrl.cpp
corelib_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(CORELIB_ODEP)
corelib_msw_datectrl.o: $(srcdir)/src/msw/datectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/datectrl.cpp
corelib_msw_datetimectrl.o: $(srcdir)/src/msw/datetimectrl.cpp $(CORELIB_ODEP)
@ -29655,6 +29669,9 @@ corelib_qt_graphics.o: $(srcdir)/src/qt/graphics.cpp $(CORELIB_ODEP)
corelib_qt_treectrl.o: $(srcdir)/src/qt/treectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/treectrl.cpp
corelib_qt_datectrl.o: $(srcdir)/src/qt/datectrl.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/qt/datectrl.cpp
corelib_mdig.o: $(srcdir)/src/generic/mdig.cpp $(CORELIB_ODEP)
$(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/generic/mdig.cpp

View file

@ -375,6 +375,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
$(QT_PLATFORM_HDR)
wx/qt/treectrl.h
wx/generic/paletteg.h
wx/qt/datectrl.h
</set>
<set var="QT_SRC" hints="files">
@ -473,6 +474,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
$(QT_PLATFORM_SRC)
src/qt/treectrl.cpp
src/generic/paletteg.cpp
src/qt/datectrl.cpp
</set>
<set var="MEDIA_QT_SRC" hints="files">

View file

@ -288,6 +288,7 @@ set(QT_HDR
${QT_PLATFORM_HDR}
wx/qt/treectrl.h
wx/generic/paletteg.h
wx/qt/datectrl.h
)
set(QT_SRC
@ -386,6 +387,7 @@ set(QT_SRC
${QT_PLATFORM_SRC}
src/qt/treectrl.cpp
src/generic/paletteg.cpp
src/qt/datectrl.cpp
)
set(MEDIA_QT_SRC

View file

@ -258,6 +258,7 @@ QT_HDR =
wx/qt/dataobj.h
wx/qt/dataobj2.h
wx/qt/dataview.h
wx/qt/datectrl.h
wx/qt/dc.h
wx/qt/dcclient.h
wx/qt/dcmemory.h
@ -348,6 +349,7 @@ QT_SRC=
src/qt/cursor.cpp
src/qt/dataobj.cpp
src/qt/dataview.cpp
src/qt/datectrl.cpp
src/qt/dc.cpp
src/qt/dcclient.cpp
src/qt/dcmemory.cpp

View file

@ -89,6 +89,10 @@ typedef wxDatePickerCtrlCommonBase<wxDateTimePickerCtrl> wxDatePickerCtrlBase;
#elif defined(__WXOSX_COCOA__) && !defined(__WXUNIVERSAL__)
#include "wx/osx/datectrl.h"
#define wxHAS_NATIVE_DATEPICKCTRL
#elif defined(__WXQT__) && !defined(__WXUNIVERSAL__)
#include "wx/qt/datectrl.h"
#define wxHAS_NATIVE_DATEPICKCTRL
#else
#include "wx/generic/datectrl.h"

64
include/wx/qt/datectrl.h Normal file
View file

@ -0,0 +1,64 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/qt/datectrl.h
// Purpose: wxDatePickerCtrl for Qt
// Author: Ali Kettab
// Modified by:
// Created: 2023-10-12
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_QT_DATECTRL_H_
#define _WX_QT_DATECTRL_H_
class QDateEdit;
// ----------------------------------------------------------------------------
// wxDatePickerCtrl
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_ADV wxDatePickerCtrl : public wxDatePickerCtrlBase
{
public:
// ctors
wxDatePickerCtrl() { }
wxDatePickerCtrl(wxWindow *parent,
wxWindowID id,
const wxDateTime& dt = wxDefaultDateTime,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDP_DEFAULT | wxDP_SHOWCENTURY,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxDatePickerCtrlNameStr)
{
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 = wxDP_DEFAULT | wxDP_SHOWCENTURY,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxDatePickerCtrlNameStr);
// Override this one to add date-specific (and time-ignoring) checks.
virtual void SetValue(const wxDateTime& dt) override;
virtual wxDateTime GetValue() const override;
// Implement the base class pure virtuals.
virtual void SetRange(const wxDateTime& dt1, const wxDateTime& dt2) override;
virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const override;
virtual QWidget *GetHandle() const override;
protected:
private:
QDateEdit* m_qtDateEdit;
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl);
};
#endif // _WX_QT_DATECTRL_H_

127
src/qt/datectrl.cpp Normal file
View file

@ -0,0 +1,127 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/qt/datectrl.cpp
// Purpose: wxDatePickerCtrl implementation
// Author: Ali Kettab
// Modified by:
// Created: 2023-10-12
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#include "wx/wxprec.h"
#if wxUSE_DATEPICKCTRL
#include "wx/datectrl.h"
#include "wx/dateevt.h"
#include "wx/qt/private/converter.h"
#include "wx/qt/private/winevent.h"
#include <QtWidgets/QDateEdit>
wxIMPLEMENT_DYNAMIC_CLASS(wxDatePickerCtrl, wxControl);
// ============================================================================
// implementation
// ============================================================================
class wxQtDateEdit : public wxQtEventSignalHandler< QDateEdit, wxDatePickerCtrl >
{
public:
wxQtDateEdit( wxWindow* parent, wxDatePickerCtrl* handler );
private:
void dateChanged(const QDate& date);
};
wxQtDateEdit::wxQtDateEdit( wxWindow* parent, wxDatePickerCtrl* handler )
: wxQtEventSignalHandler< QDateEdit, wxDatePickerCtrl >( parent, handler )
{
connect(this, &QDateTimeEdit::dateChanged,
this, &wxQtDateEdit::dateChanged);
}
void wxQtDateEdit::dateChanged(const QDate& date)
{
wxDateEvent event(GetHandler(), wxQtConvertDate(date), wxEVT_DATE_CHANGED);
EmitEvent( event );
}
// ----------------------------------------------------------------------------
// wxDatePickerCtrl creation
// ----------------------------------------------------------------------------
bool
wxDatePickerCtrl::Create(wxWindow *parent,
wxWindowID id,
const wxDateTime& dt,
const wxPoint& pos,
const wxSize& size,
long style,
const wxValidator& validator,
const wxString& name)
{
m_qtDateEdit = new wxQtDateEdit( parent, this );
m_qtDateEdit->setDate( dt.IsValid() ? wxQtConvertDate(dt) :
wxQtConvertDate(wxDateTime::Today()) );
m_qtDateEdit->setCalendarPopup(style & wxDP_DROPDOWN);
m_qtDateEdit->setDisplayFormat(QLocale::system().dateFormat(QLocale::ShortFormat));
return QtCreateControl( parent, id, pos, size, style, validator, name );
}
// ----------------------------------------------------------------------------
// wxDatePickerCtrl operations
// ----------------------------------------------------------------------------
void wxDatePickerCtrl::SetValue(const wxDateTime& dt)
{
wxASSERT_MSG( dt.IsValid() || HasFlag(wxDP_ALLOWNONE),
"this control must have a valid date" );
const auto qtDate = wxQtConvertDate(dt);
if ( qtDate >= m_qtDateEdit->minimumDate() &&
qtDate <= m_qtDateEdit->maximumDate() )
{
wxQtEnsureSignalsBlocked blocker(m_qtDateEdit);
m_qtDateEdit->setDate( qtDate );
}
}
wxDateTime wxDatePickerCtrl::GetValue() const
{
return wxQtConvertDate( m_qtDateEdit->date() );
}
void wxDatePickerCtrl::SetRange(const wxDateTime& dt1, const wxDateTime& dt2)
{
m_qtDateEdit->setDateRange( wxQtConvertDate(dt1), wxQtConvertDate(dt2) );
}
bool wxDatePickerCtrl::GetRange(wxDateTime *dt1, wxDateTime *dt2) const
{
if ( dt1 )
*dt1 = wxQtConvertDate( m_qtDateEdit->minimumDate() );
if ( dt2 )
*dt2 = wxQtConvertDate( m_qtDateEdit->maximumDate() );
return true;
}
QWidget* wxDatePickerCtrl::GetHandle() const
{
return m_qtDateEdit;
}
#endif // wxUSE_DATEPICKCTRL