#include "autocookselectionwindow.h" #include "ui_autocookselectionwindow.h" #include #include #include #include "autocookconfigwindow.h" #include "soundplayer.h" #include "configwindow.h" #include "washwindow.h" #include "mainwindow.h" #include "manualviewerdlg.h" #define MAX_BUTTONS 30 #define BUTTONS_PER_PAGE 27 AutoCookSelectionWindow::AutoCookSelectionWindow(QWidget *parent, Define::CookType type) : QMainWindow(parent), ui(new Ui::AutoCookSelectionWindow), type(type), autoCookWindowOpened(false) { ui->setupUi(this); ui->clockContainer->setParent(ui->upperStack); setAttribute(Qt::WA_DeleteOnClose); ui->cookTypeIcon->setPixmap(Define::icon(type)); ui->cookTypeLabel->setText(Define::label(type)); book = CookBook(type); QSignalMapper *sm = new QSignalMapper(this); connect(sm, SIGNAL(mapped(int)), SLOT(onCookSelected(int))); QFont font = this->font(); font.setPointSize(12); font.setBold(true); font.setWeight(75); QLatin1String stylesheet("QPushButton {\n" "border-image: url(:/images/button/288.png);\n" "}\n" "QPushButton::pressed, QPushButton:focus {\n" "border-image: url(:/images/button/288_ov.png);\n" "}"); int cnt = book.list.size(); if (cnt > MAX_BUTTONS) cnt = BUTTONS_PER_PAGE; QWidget *last = this; for (int idx = 0; idx < cnt; idx++) { int x = 14 + (idx % 3) * 352; int y = 738 + (idx / 3) * 96; QPushButton *pb = new QPushButton(this); pb->setGeometry(QRect(x, y, 345, 84)); pb->setFont(font); pb->setStyleSheet(stylesheet); pb->setText(book.list.at(idx)); sm->setMapping(pb, idx); connect(pb, SIGNAL(clicked()), sm, SLOT(map())); setTabOrder(last, pb); button.append(pb); last = pb; } if (book.list.size() > MAX_BUTTONS) { ui->bullets->setBulletPixmap(":/images/auto_popup/bullet.png"); ui->bullets->setCurrentBulletPixmap(":/images/auto_popup/bullet_selected.png"); ui->bullets->setMaximum(book.list.size() / BUTTONS_PER_PAGE); } else { ui->bullets->hide(); ui->prev->hide(); ui->next->hide(); } setTabOrder(last, ui->prev); setTabOrder(ui->prev, ui->next); setTabOrder(ui->next, ui->backButton); setTabOrder(ui->backButton, ui->configButton); setTabOrder(ui->configButton, ui->washButton); setTabOrder(ui->washButton, ui->helpButton); foreach (QPushButton *button, findChildren()) connect(button, &QPushButton::pressed, SoundPlayer::playClick); setFocus(); } AutoCookSelectionWindow::~AutoCookSelectionWindow() { delete ui; } void AutoCookSelectionWindow::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case 0x01000032: // Turn left onEncoderLeft(); break; case 0x01000031: // Push pushed = focusWidget(); break; case 0x01000030: // Turn right onEncoderRight(); break; } } void AutoCookSelectionWindow::keyReleaseEvent(QKeyEvent *event) { switch (event->key()) { case 0x01000032: // Turn left onEncoderLeft(); break; case 0x01000031: // Push if (focusWidget() == pushed) onEncoderClicked(pushed); pushed = NULL; break; case 0x01000030: // Turn right onEncoderRight(); break; } } void AutoCookSelectionWindow::onCookSelected(int idx) { setFocus(); idx += ui->bullets->currentIndex() * BUTTONS_PER_PAGE; AutoCookConfigWindow *w = new AutoCookConfigWindow(this, book.get(idx)); w->setWindowModality(Qt::WindowModal); w->showFullScreen(); w->raise(); } void AutoCookSelectionWindow::on_backButton_clicked() { close(); } void AutoCookSelectionWindow::on_configButton_clicked() { ConfigWindow *w = new ConfigWindow(MainWindow::getInstance()); w->setWindowModality(Qt::WindowModal); w->showFullScreen(); w->raise(); MainWindow::jump(w); } void AutoCookSelectionWindow::on_washButton_clicked() { WashWindow *w = new WashWindow(MainWindow::getInstance()); w->setWindowModality(Qt::WindowModal); w->showFullScreen(); w->raise(); MainWindow::jump(w); } void AutoCookSelectionWindow::on_helpButton_clicked() { ManualViewerDlg* dlg = new ManualViewerDlg(this, AUTO_COOK_PAGE); dlg->showFullScreen(); dlg->raise(); } void AutoCookSelectionWindow::onEncoderLeft() { focusPreviousChild(); } void AutoCookSelectionWindow::onEncoderRight() { focusNextChild(); } void AutoCookSelectionWindow::onEncoderClicked(QWidget *clicked) { QPushButton *b = qobject_cast(clicked); if (b) b->click(); } void AutoCookSelectionWindow::list() { int startAt = ui->bullets->currentIndex() * BUTTONS_PER_PAGE; for (int i = 0; i < button.size(); i++) { QPushButton *pb = button.at(i); int cookIdx = startAt + i; if (cookIdx >= book.list.size()) pb->hide(); else { pb->setText(book.list.at(cookIdx)); pb->show(); } } } void AutoCookSelectionWindow::on_prev_clicked() { ui->bullets->setCurrentIndex(ui->bullets->currentIndex() - 1); list(); } void AutoCookSelectionWindow::on_next_clicked() { ui->bullets->setCurrentIndex(ui->bullets->currentIndex() + 1); list(); }