1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.widgets.calendarwidget;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.calendar;
17 import qt.core.coreevent;
18 import qt.core.datetime;
19 import qt.core.map;
20 import qt.core.namespace;
21 import qt.core.object;
22 import qt.core.rect;
23 import qt.core.size;
24 import qt.gui.event;
25 import qt.gui.painter;
26 import qt.gui.textformat;
27 import qt.helpers;
28 import qt.widgets.widget;
29 
30 /+ QT_REQUIRE_CONFIG(calendarwidget); +/
31 
32 
33 extern(C++, class) struct QCalendarWidgetPrivate;
34 
35 /// Binding for C++ class [QCalendarWidget](https://doc.qt.io/qt-6/qcalendarwidget.html).
36 class /+ Q_WIDGETS_EXPORT +/ QCalendarWidget : QWidget
37 {
38     mixin(Q_OBJECT);
39     /+ Q_ENUMS(Qt::DayOfWeek)
40     Q_PROPERTY(QDate selectedDate READ selectedDate WRITE setSelectedDate)
41     Q_PROPERTY(QDate minimumDate READ minimumDate WRITE setMinimumDate)
42     Q_PROPERTY(QDate maximumDate READ maximumDate WRITE setMaximumDate)
43     Q_PROPERTY(Qt::DayOfWeek firstDayOfWeek READ firstDayOfWeek WRITE setFirstDayOfWeek)
44     Q_PROPERTY(bool gridVisible READ isGridVisible WRITE setGridVisible)
45     Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
46     Q_PROPERTY(HorizontalHeaderFormat horizontalHeaderFormat READ horizontalHeaderFormat
47                WRITE setHorizontalHeaderFormat)
48     Q_PROPERTY(VerticalHeaderFormat verticalHeaderFormat READ verticalHeaderFormat
49                WRITE setVerticalHeaderFormat)
50     Q_PROPERTY(bool navigationBarVisible READ isNavigationBarVisible WRITE setNavigationBarVisible)
51     Q_PROPERTY(bool dateEditEnabled READ isDateEditEnabled WRITE setDateEditEnabled)
52     Q_PROPERTY(int dateEditAcceptDelay READ dateEditAcceptDelay WRITE setDateEditAcceptDelay) +/
53 
54 public:
55     enum HorizontalHeaderFormat {
56         NoHorizontalHeader,
57         SingleLetterDayNames,
58         ShortDayNames,
59         LongDayNames
60     }
61     /+ Q_ENUM(HorizontalHeaderFormat) +/
62 
63     enum VerticalHeaderFormat {
64         NoVerticalHeader,
65         ISOWeekNumbers
66     }
67     /+ Q_ENUM(VerticalHeaderFormat) +/
68 
69     enum SelectionMode {
70         NoSelection,
71         SingleSelection
72     }
73     /+ Q_ENUM(SelectionMode) +/
74 
75     /+ explicit +/this(QWidget parent = null);
76     ~this();
77 
78     /+ virtual +/ override QSize sizeHint() const;
79     /+ virtual +/ override QSize minimumSizeHint() const;
80 
81     final QDate selectedDate() const;
82 
83     final int yearShown() const;
84     final int monthShown() const;
85 
86     final QDate minimumDate() const;
87     final void setMinimumDate(QDate date);
88 
89     final QDate maximumDate() const;
90     final void setMaximumDate(QDate date);
91 
92     final /+ Qt:: +/qt.core.namespace.DayOfWeek firstDayOfWeek() const;
93     final void setFirstDayOfWeek(/+ Qt:: +/qt.core.namespace.DayOfWeek dayOfWeek);
94 
95     final bool isNavigationBarVisible() const;
96     final bool isGridVisible() const;
97 
98     final QCalendar calendar() const;
99     final void setCalendar(QCalendar calendar);
100 
101     final SelectionMode selectionMode() const;
102     final void setSelectionMode(SelectionMode mode);
103 
104     final HorizontalHeaderFormat horizontalHeaderFormat() const;
105     final void setHorizontalHeaderFormat(HorizontalHeaderFormat format);
106 
107     final VerticalHeaderFormat verticalHeaderFormat() const;
108     final void setVerticalHeaderFormat(VerticalHeaderFormat format);
109 
110     final QTextCharFormat headerTextFormat() const;
111     final void setHeaderTextFormat(ref const(QTextCharFormat) format);
112 
113     final QTextCharFormat weekdayTextFormat(/+ Qt:: +/qt.core.namespace.DayOfWeek dayOfWeek) const;
114     final void setWeekdayTextFormat(/+ Qt:: +/qt.core.namespace.DayOfWeek dayOfWeek, ref const(QTextCharFormat) format);
115 
116     final QMap!(QDate, QTextCharFormat) dateTextFormat() const;
117     final QTextCharFormat dateTextFormat(QDate date) const;
118     final void setDateTextFormat(QDate date, ref const(QTextCharFormat) format);
119 
120     final bool isDateEditEnabled() const;
121     final void setDateEditEnabled(bool enable);
122 
123     final int dateEditAcceptDelay() const;
124     final void setDateEditAcceptDelay(int delay);
125 
126 protected:
127     override bool event(QEvent event);
128     override bool eventFilter(QObject watched, QEvent event);
129     override void mousePressEvent(QMouseEvent event);
130     override void resizeEvent(QResizeEvent  event);
131     override void keyPressEvent(QKeyEvent  event);
132 
133     /+ virtual +/ void paintCell(QPainter* painter, ref const(QRect) rect, QDate date) const;
134     final void updateCell(QDate date);
135     final void updateCells();
136 
137 public /+ Q_SLOTS +/:
138     @QSlot final void setSelectedDate(QDate date);
139     @QSlot final void setDateRange(QDate min, QDate max);
140     @QSlot final void setCurrentPage(int year, int month);
141     @QSlot final void setGridVisible(bool show);
142     @QSlot final void setNavigationBarVisible(bool visible);
143     @QSlot final void showNextMonth();
144     @QSlot final void showPreviousMonth();
145     @QSlot final void showNextYear();
146     @QSlot final void showPreviousYear();
147     @QSlot final void showSelectedDate();
148     @QSlot final void showToday();
149 
150 /+ Q_SIGNALS +/public:
151     @QSignal final void selectionChanged();
152     @QSignal final void clicked(QDate date);
153     @QSignal final void activated(QDate date);
154     @QSignal final void currentPageChanged(int year, int month);
155 
156 private:
157     /+ Q_DECLARE_PRIVATE(QCalendarWidget) +/
158     /+ Q_DISABLE_COPY(QCalendarWidget) +/
159 
160     /+ Q_PRIVATE_SLOT(d_func(), void _q_slotShowDate(QDate date))
161     Q_PRIVATE_SLOT(d_func(), void _q_slotChangeDate(QDate date))
162     Q_PRIVATE_SLOT(d_func(), void _q_slotChangeDate(QDate date, bool changeMonth))
163     Q_PRIVATE_SLOT(d_func(), void _q_editingFinished())
164     Q_PRIVATE_SLOT(d_func(), void _q_prevMonthClicked())
165     Q_PRIVATE_SLOT(d_func(), void _q_nextMonthClicked())
166     Q_PRIVATE_SLOT(d_func(), void _q_yearEditingFinished())
167     Q_PRIVATE_SLOT(d_func(), void _q_yearClicked())
168     Q_PRIVATE_SLOT(d_func(), void _q_monthChanged(QAction *act)) +/
169 
170     mixin(CREATE_CONVENIENCE_WRAPPERS);
171 }
172