#include "programmingnamepopup.h" #include "ui_programmingnamepopup.h" #include #include "soundplayer.h" ProgrammingNamePopup::ProgrammingNamePopup(QWidget *parent, CookRecord record) : QWidget(parent), ui(new Ui::ProgrammingNamePopup), record(record) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); 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())); ui->lineEdit->installEventFilter(this); ui->lineEdit->setText(record.name); ui->lineEdit->setFocus(); ui->lineEdit->selectAll(); connect(ui->okButton, &QPushButton::pressed, SoundPlayer::playClick); connect(ui->cancelButton, &QPushButton::pressed, SoundPlayer::playClick); } ProgrammingNamePopup::~ProgrammingNamePopup() { delete ui; } bool ProgrammingNamePopup::eventFilter(QObject */*watched*/, QEvent *event) { switch (event->type()) { case QEvent::FocusIn: lastLine = ui->lineEdit->text(); break; default: break; } return false; } void ProgrammingNamePopup::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 ProgrammingNamePopup::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 ProgrammingNamePopup::revert() { ui->lineEdit->setText(lastLine); if (focusWidget() == ui->lineEdit) ui->lineEdit->selectAll(); } void ProgrammingNamePopup::on_okButton_clicked() { CookProgram::rename(record, ui->lineEdit->text()); emit changed(); close(); } void ProgrammingNamePopup::on_cancelButton_clicked() { close(); } void ProgrammingNamePopup::onEncoderLeft() { if (focusWidget() == ui->lineEdit) ui->cancelButton->setFocus(); else focusPreviousChild(); } void ProgrammingNamePopup::onEncoderRight() { if (focusWidget() == ui->cancelButton) { ui->lineEdit->setFocus(); ui->lineEdit->selectAll(); } else focusNextChild(); } void ProgrammingNamePopup::onEncoderClicked(QWidget *clicked) { QPushButton *b = qobject_cast(clicked); if (b) b->click(); else { QLineEdit *e = qobject_cast(clicked); if (e) ui->keyboard->focusInKeyboard(); } }