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