1 #include "timepicker.h"
2
3 #include <QHBoxLayout>
4 #include <QGridLayout>
5 #include <QStyle>
6 #include <QToolButton>
7 #include <QGroupBox>
8 #include <QDialog>
9
10
11 namespace QSint
12 {
13
14
TimePicker(QWidget * parent)15 TimePicker::TimePicker(QWidget *parent) :
16 QWidget(parent)
17 {
18 QHBoxLayout *hbl = new QHBoxLayout();
19 setLayout(hbl);
20
21 QGroupBox *hourBox = new QGroupBox(this);
22 hourBox->setTitle(tr("Hours"));
23 QGridLayout *hourGrid = new QGridLayout();
24 hourGrid->setSpacing(0);
25 hourGrid->setMargin(1);
26 hourBox->setLayout(hourGrid);
27 hbl->addWidget(hourBox);
28
29 int hour = 0;
30 for (int r = 0; r < 6; r++)
31 {
32 for (int c = 0; c < 4; c++)
33 {
34 QToolButton *hourButton = new QToolButton(this);
35 hourButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
36 hourButton->setText(QString::number(hour));
37 hourGrid->addWidget(hourButton, r, c);
38 m_hourButtons.addButton(hourButton, hour);
39
40 hour++;
41 }
42 }
43
44 QGroupBox *minuteBox = new QGroupBox(this);
45 minuteBox->setTitle(tr("Minutes"));
46 QGridLayout *minuteGrid = new QGridLayout();
47 minuteGrid->setSpacing(0);
48 minuteGrid->setMargin(1);
49 minuteBox->setLayout(minuteGrid);
50 hbl->addWidget(minuteBox);
51
52 int minute = 0;
53 for (int r = 0; r < 6; r++)
54 {
55 for (int c = 0; c < 10; c++)
56 {
57 QToolButton *minuteButton = new QToolButton(this);
58 minuteButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
59 minuteButton->setText(QString::number(minute));
60 minuteGrid->addWidget(minuteButton, r, c);
61 m_minuteButtons.addButton(minuteButton, minute);
62
63 minute++;
64 }
65 }
66
67 m_time = QTime::currentTime();
68
69 connect(&m_hourButtons, SIGNAL(buttonClicked(int)), this, SLOT(hourClicked(int)));
70 connect(&m_minuteButtons, SIGNAL(buttonClicked(int)), this, SLOT(minuteClicked(int)));
71 }
72
73
setTime(const QTime & time)74 void TimePicker::setTime(const QTime& time)
75 {
76 m_time = time;
77 }
78
79
hourClicked(int hour)80 void TimePicker::hourClicked(int hour)
81 {
82 m_time.setHMS(hour, m_time.minute(), 0, 0);
83
84 Q_EMIT timePicked(m_time);
85 }
86
87
minuteClicked(int minute)88 void TimePicker::minuteClicked(int minute)
89 {
90 m_time.setHMS(m_time.hour(), minute, 0, 0);
91
92 Q_EMIT timePicked(m_time);
93 }
94
95
96 // picker button
97
TimePickerButton(QWidget * parent)98 TimePickerButton::TimePickerButton(QWidget *parent) : QToolButton(parent), m_editor(NULL)
99 {
100 QFrame *frame = new QFrame();
101 frame->setLayout(new QVBoxLayout());
102 frame->layout()->addWidget(&m_timePicker);
103 frame->layout()->setMargin(0);
104 frame->setFrameShape(QFrame::Box);
105
106 m_dialog = new QDialog(this, Qt::Popup);
107 m_dialog->setLayout(new QVBoxLayout());
108 m_dialog->layout()->addWidget(frame);
109 m_dialog->layout()->setMargin(0);
110
111 connect(this, SIGNAL(clicked()), this, SLOT(OnButtonClicked()));
112 }
113
114
OnButtonClicked()115 void TimePickerButton::OnButtonClicked()
116 {
117 if (m_editor)
118 {
119 m_timePicker.setTime(m_editor->time());
120 connect(&m_timePicker, SIGNAL(timePicked(QTime)), m_editor, SLOT(setTime(QTime)));
121 }
122
123 m_dialog->move(parentWidget()->mapToGlobal(pos() + QPoint(-m_dialog->width() / 2, height())));
124 m_dialog->exec();
125
126 if (m_editor)
127 {
128 m_timePicker.disconnect(m_editor);
129 }
130 }
131
132
133 }
134
135