#include "reservetimepopup.h" #include "ui_reservetimepopup.h" #include #include #include #include "reservedtimepopup.h" #include "formatterspinbox.h" ReserveTimePopup::ReserveTimePopup(QWidget *parent) : QWidget(parent), ui(new Ui::ReserveTimePopup) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); QDateTime dt = QDateTime::currentDateTime(); ui->month->setValue(dt.date().month()); ui->day->setValue(dt.date().day()); ui->hour->setValue(dt.time().hour()); ui->min->setValue(dt.time().minute()); connect(ui->keyboard, SIGNAL(onOkKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), ui->keyboard, SLOT(focusOutKeyboard())); connect(ui->keyboard, SIGNAL(onCancelKeyClicked()), SLOT(revert())); foreach (FormatterSpinBox *b, findChildren()) b->installEventFilter(this); ui->min->setFocus(); ui->min->selectAll(); } ReserveTimePopup::~ReserveTimePopup() { delete ui; } bool ReserveTimePopup::eventFilter(QObject *watched, QEvent *event) { FormatterSpinBox *e = qobject_cast(watched); if (e) { switch (event->type()) { case QEvent::FocusIn: lastValue = e->value(); break; default: break; } } return false; } void ReserveTimePopup::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case 0x01000030: // Turn left onEncoderLeft(); break; case 0x01000031: // Push pushed = focusWidget(); break; case 0x01000032: // Turn right onEncoderRight(); break; } } void ReserveTimePopup::keyReleaseEvent(QKeyEvent *event) { switch (event->key()) { case 0x01000030: // Turn left onEncoderLeft(); break; case 0x01000031: // Push if (focusWidget() == pushed) onEncoderClicked(pushed); pushed = NULL; break; case 0x01000032: // Turn right onEncoderRight(); break; } } void ReserveTimePopup::revert() { FormatterSpinBox *b = qobject_cast(focusWidget()); if (b) b->setValue(lastValue); qDebug() << lastValue; } void ReserveTimePopup::on_okButton_clicked() { QDateTime current = QDateTime::currentDateTime(); QDateTime target; target.setDate(QDate(current.date().year(), ui->month->value(), ui->day->value())); target.setTime(QTime(ui->hour->value(), ui->min->value())); if (current >= target) target = target.addYears(1); ReservedTimePopup *p = new ReservedTimePopup(parentWidget(), target); connect(p, SIGNAL(timeout()), SIGNAL(timeout())); connect(p, SIGNAL(canceled()), SIGNAL(canceled())); connect(p, SIGNAL(destroyed(QObject*)), SLOT(deleteLater())); p->showFullScreen(); hide(); } void ReserveTimePopup::on_cancelButton_clicked() { emit canceled(); close(); } void ReserveTimePopup::onEncoderLeft() { if (focusWidget() == ui->month) ui->cancelButton->setFocus(); else focusPreviousChild(); } void ReserveTimePopup::onEncoderRight() { if (focusWidget() == ui->cancelButton) { ui->month->setFocus(); ui->month->selectAll(); } else focusNextChild(); } void ReserveTimePopup::onEncoderClicked(QWidget *clicked) { QPushButton *b = qobject_cast(clicked); if (b) b->click(); else { FormatterSpinBox *e = qobject_cast(clicked); if (e) { qDebug() << "focusinkeyboard"; ui->keyboard->focusInKeyboard(); } } }