From 097e5e14a0305b3201feafe4c1e372360c4637d9 Mon Sep 17 00:00:00 2001 From: victor Date: Mon, 19 Jun 2017 17:12:03 +0900 Subject: [PATCH] =?UTF-8?q?=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98=EB=B0=8D?= =?UTF-8?q?=20=EB=AA=A8=EB=93=9C=20=EC=84=B8=EB=B6=80=20=EC=82=AC=ED=95=AD?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84=20-=20=EC=84=A0=ED=83=9D=ED=95=9C=20?= =?UTF-8?q?=EC=9A=94=EB=A6=AC=EA=B0=80=20=EB=81=9D=EB=82=98=EB=A9=B4=20?= =?UTF-8?q?=EB=8B=A4=EC=9D=8C=20=EC=9A=94=EB=A6=AC=20=EC=8B=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/gui/oven_control/autocookwindow.cpp | 3 + app/gui/oven_control/autocookwindow.h | 1 + app/gui/oven_control/cookhistory.cpp | 8 +- app/gui/oven_control/cookhistory.h | 3 +- app/gui/oven_control/cookpanelbutton.cpp | 24 ++- app/gui/oven_control/cookpanelbutton.h | 1 + app/gui/oven_control/manualcookwindow.cpp | 33 ++-- app/gui/oven_control/manualcookwindow.h | 2 + app/gui/oven_control/oven_control.pro | 9 +- app/gui/oven_control/programmedcookpanelbutton.cpp | 175 +++++++++++++++++++++ app/gui/oven_control/programmedcookpanelbutton.h | 74 +++++++++ app/gui/oven_control/programmedcookpanelbutton.ui | 118 ++++++++++++++ app/gui/oven_control/programmingwindow.cpp | 7 + 13 files changed, 429 insertions(+), 29 deletions(-) create mode 100644 app/gui/oven_control/programmedcookpanelbutton.cpp create mode 100644 app/gui/oven_control/programmedcookpanelbutton.h create mode 100644 app/gui/oven_control/programmedcookpanelbutton.ui diff --git a/app/gui/oven_control/autocookwindow.cpp b/app/gui/oven_control/autocookwindow.cpp index ae1322b..837c83c 100644 --- a/app/gui/oven_control/autocookwindow.cpp +++ b/app/gui/oven_control/autocookwindow.cpp @@ -644,7 +644,10 @@ void AutoCookWindow::checkCook() selectedStepIndex = autocook.currentStepIndex; if (autocook.done()) + { checkCookTimer.stop(); + emit done(); + } } updateView(); diff --git a/app/gui/oven_control/autocookwindow.h b/app/gui/oven_control/autocookwindow.h index 96a8c34..9d803c3 100644 --- a/app/gui/oven_control/autocookwindow.h +++ b/app/gui/oven_control/autocookwindow.h @@ -122,6 +122,7 @@ private slots: signals: void back(); void newWindow(AutoCookWindow *); + void done(); }; #endif // AUTOCOOKWINDOW_H diff --git a/app/gui/oven_control/cookhistory.cpp b/app/gui/oven_control/cookhistory.cpp index 604689b..5013f87 100644 --- a/app/gui/oven_control/cookhistory.cpp +++ b/app/gui/oven_control/cookhistory.cpp @@ -1294,7 +1294,7 @@ QPixmap CookHistory::render(CookRecord record) return QPixmap(); } -void CookHistory::start(CookRecord record, QWidget *parent) +QMainWindow *CookHistory::start(CookRecord record, QWidget *parent) { if (record.type == CookRecord::Manual) { @@ -1302,6 +1302,8 @@ void CookHistory::start(CookRecord record, QWidget *parent) w->setWindowModality(Qt::WindowModal); w->showFullScreen(); w->raise(); + + return w; } else if (record.type == CookRecord::Auto) { @@ -1317,7 +1319,11 @@ void CookHistory::start(CookRecord record, QWidget *parent) w->setWindowModality(Qt::WindowModal); w->showFullScreen(); w->raise(); + + return w; } + + return NULL; } void CookHistory::removeMostCooked(CookRecord record) diff --git a/app/gui/oven_control/cookhistory.h b/app/gui/oven_control/cookhistory.h index c1cc552..c38c83a 100644 --- a/app/gui/oven_control/cookhistory.h +++ b/app/gui/oven_control/cookhistory.h @@ -3,6 +3,7 @@ #include +#include #include "cook.h" @@ -62,7 +63,7 @@ QList listRecents(); QList listFavorites(); QPixmap render(CookRecord record); -void start(CookRecord record, QWidget *parent = 0); +QMainWindow *start(CookRecord record, QWidget *parent = 0); } #endif // COOKHISTORY_H diff --git a/app/gui/oven_control/cookpanelbutton.cpp b/app/gui/oven_control/cookpanelbutton.cpp index bfb6a66a..d6282c6 100644 --- a/app/gui/oven_control/cookpanelbutton.cpp +++ b/app/gui/oven_control/cookpanelbutton.cpp @@ -5,13 +5,16 @@ #include "soundplayer.h" #include "manualcooksettingwidget.h" +#include "autocookwindow.h" +#include "manualcookwindow.h" CookPanelButton::CookPanelButton(CookRecord record, QWidget *parent) : QWidget(parent), record(record), ui(new Ui::CookPanelButton), rendered(false), - longPressEnabled(false) + longPressEnabled(false), + emitted(false) { ui->setupUi(this); @@ -155,7 +158,24 @@ void CookPanelButton::on_pushButton_clicked() if (longPressEnabled && emitted) return; - CookHistory::start(record, parentWidget()); + QMainWindow *w = CookHistory::start(record, parentWidget()); + + if (next == NULL) + return; + + AutoCookWindow *a = qobject_cast(w); + if (a) + { + connect(a, SIGNAL(done()), next, SLOT(on_pushButton_clicked())); + connect(a, SIGNAL(done()), a, SLOT(deleteLater())); + } + + ManualCookWindow *m = qobject_cast(w); + if (m) + { + connect(m, SIGNAL(done()), next, SLOT(on_pushButton_clicked())); + connect(m, SIGNAL(done()), m, SLOT(deleteLater())); + } } void CookPanelButton::on_deleteButton_clicked() diff --git a/app/gui/oven_control/cookpanelbutton.h b/app/gui/oven_control/cookpanelbutton.h index 3990a3b..51ee6b1 100644 --- a/app/gui/oven_control/cookpanelbutton.h +++ b/app/gui/oven_control/cookpanelbutton.h @@ -43,6 +43,7 @@ public: QPushButton *deleteButton(); CookRecord record; + CookPanelButton *next = NULL; public slots: void setEnabled(bool enabled = true); diff --git a/app/gui/oven_control/manualcookwindow.cpp b/app/gui/oven_control/manualcookwindow.cpp index 87a3c50..fa45360 100644 --- a/app/gui/oven_control/manualcookwindow.cpp +++ b/app/gui/oven_control/manualcookwindow.cpp @@ -82,6 +82,7 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : lastViewDamper = false; lastViewHumidification = false; lastViewFan = -1; + lastCheckedCooking = false; Config *config = Config::getInstance(); config_item item = config->getConfigValue(Define::config_cooking_door_monitoring); @@ -421,31 +422,9 @@ void ManualCookWindow::updateView() bool damper = oven->damper(); ui->damperButton->setChecked(damper); -// if (damper != lastViewDamper) -// { -// lastViewDamper = damper; - -// if (damper) -// ui->damperButton->setStyleSheet( -// "background-image: url(:/images/manual_button/damper_open.png)"); -// else -// ui->damperButton->setStyleSheet( -// "background-image: url(:/images/manual_button/damper_close.png)"); -// } bool humidification = oven->humidification(); ui->humidificationButton->setChecked(humidification); -// if (humidification != lastViewHumidification) -// { -// lastViewHumidification = humidification; - -// if (humidification) -// ui->humidificationButton->setStyleSheet( -// "background-image: url(:/images/manual_button/side_nozzle_open.png)"); -// else -// ui->humidificationButton->setStyleSheet( -// "background-image: url(:/images/manual_button/side_nozzle_close.png)"); -// } int fan = oven->fan(); if (fan != lastViewFan) @@ -533,6 +512,16 @@ QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png oven->setInterTempEnabled(repeatSetting.coreTempEnabled); oven->setInterTemp(repeatSetting.coreTemp); } + else if (lastCheckedCooking && !oven->cooking()){ + if ((oven->interTempEnabled() && oven->currentInterTemp() >= oven->interTemp()) + || oven->time() == 0) + { + lastCheckedCooking = oven->cooking(); + emit done(); + } + } + + lastCheckedCooking = oven->cooking(); if (oven->paused() && oven->door()) { diff --git a/app/gui/oven_control/manualcookwindow.h b/app/gui/oven_control/manualcookwindow.h index a7f9230..8f26b21 100644 --- a/app/gui/oven_control/manualcookwindow.h +++ b/app/gui/oven_control/manualcookwindow.h @@ -27,6 +27,7 @@ protected: signals: void cookStopRequested(); + void done(); public slots: @@ -111,6 +112,7 @@ private: int temp; int time; int interTemp; + bool lastCheckedCooking = false; bool showCurrentHumidity_ = false; bool showCurrentTemp_ = false; diff --git a/app/gui/oven_control/oven_control.pro b/app/gui/oven_control/oven_control.pro index 45c57ca..0c17355 100644 --- a/app/gui/oven_control/oven_control.pro +++ b/app/gui/oven_control/oven_control.pro @@ -121,7 +121,8 @@ SOURCES += main.cpp\ slider.cpp \ autocookselectionpopup.cpp \ autocookcheckwindow.cpp \ - autocookcheckconfigwindow.cpp + autocookcheckconfigwindow.cpp \ + programmedcookpanelbutton.cpp HEADERS += mainwindow.h \ cook.h \ @@ -232,7 +233,8 @@ HEADERS += mainwindow.h \ slider.h \ autocookselectionpopup.h \ autocookcheckwindow.h \ - autocookcheckconfigwindow.h + autocookcheckconfigwindow.h \ + programmedcookpanelbutton.h FORMS += mainwindow.ui \ manualcookwindow.ui \ @@ -309,7 +311,8 @@ FORMS += mainwindow.ui \ config1digitsetandenablesetdlg.ui \ autocookselectionpopup.ui \ autocookcheckwindow.ui \ - autocookcheckconfigwindow.ui + autocookcheckconfigwindow.ui \ + programmedcookpanelbutton.ui RESOURCES += \ resources.qrc diff --git a/app/gui/oven_control/programmedcookpanelbutton.cpp b/app/gui/oven_control/programmedcookpanelbutton.cpp new file mode 100644 index 0000000..b519821 --- /dev/null +++ b/app/gui/oven_control/programmedcookpanelbutton.cpp @@ -0,0 +1,175 @@ +#include "programmedcookpanelbutton.h" +#include "ui_programmedcookpanelbutton.h" + +#include + +#include "soundplayer.h" + +ProgrammedCookPanelButton::ProgrammedCookPanelButton(CookRecord record, QWidget *parent) : + QWidget(parent), + record(record), + ui(new Ui::ProgrammedCookPanelButton), + rendered(false), + longPressEnabled(false) +{ + ui->setupUi(this); + + setText(record.name); + + foreach (QPushButton *button, findChildren()) + connect(button, &QPushButton::pressed, SoundPlayer::playClick); + + longPressedTimer.setSingleShot(true); + longPressedTimer.setInterval(3000); + connect(&longPressedTimer, SIGNAL(timeout()), SLOT(emitLongPressed())); +} + +ProgrammedCookPanelButton::~ProgrammedCookPanelButton() +{ + delete ui; +} + +void ProgrammedCookPanelButton::setText(QString text) +{ + ui->pushButton->setText(text); +} + +void ProgrammedCookPanelButton::showInfo() +{ + if (!rendered) + { + QPixmap p = CookHistory::render(record); + + label = new QLabel(this); + label->setPixmap(p); + label->setGeometry((width() - p.width()) / 2, 65, p.width(), p.height()); + } + + label->show(); + setMinimumHeight(ui->pushButton->height() + label->height()); +} + +void ProgrammedCookPanelButton::hideInfo() +{ + label->hide(); + setMinimumHeight(ui->pushButton->height()); +} + +void ProgrammedCookPanelButton::setLongPressEnabled(bool enabled) +{ + longPressEnabled = enabled; +} + +QPushButton *ProgrammedCookPanelButton::bar() +{ + return ui->pushButton; +} + +QPushButton *ProgrammedCookPanelButton::infoButton() +{ + return ui->showInfoButton; +} + +QPushButton *ProgrammedCookPanelButton::deleteButton() +{ + return ui->deleteButton; +} + +void ProgrammedCookPanelButton::setEnabled(bool enabled) +{ + ui->pushButton->setEnabled(enabled); + ui->showInfoButton->setEnabled(enabled); + ui->deleteButton->setEnabled(enabled); +} + +void ProgrammedCookPanelButton::keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case 0x01000030: // Turn left + event->ignore(); + break; + case 0x01000031: // Push + pushed = focusWidget(); + if (pushed == ui->pushButton) + on_pushButton_pressed(); + break; + case 0x01000032: // Turn right + event->ignore(); + break; + } +} + +void ProgrammedCookPanelButton::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case 0x01000030: // Turn left + event->ignore(); + break; + case 0x01000031: // Push + if (pushed == ui->pushButton) + on_pushButton_released(); + + if (focusWidget() == pushed) + onEncoderClicked(pushed); + + pushed = NULL; + break; + case 0x01000032: // Turn right + event->ignore(); + break; + } +} + +void ProgrammedCookPanelButton::onEncoderLeft() +{ + +} + +void ProgrammedCookPanelButton::onEncoderRight() +{ + +} + +void ProgrammedCookPanelButton::onEncoderClicked(QWidget *clicked) +{ + QPushButton *b = qobject_cast(clicked); + if (b) + b->click(); +} + +void ProgrammedCookPanelButton::emitLongPressed() +{ + emitted = true; + emit longPressed(this); +} + +void ProgrammedCookPanelButton::on_pushButton_pressed() +{ + longPressedTimer.start(); + emitted = false; +} + +void ProgrammedCookPanelButton::on_pushButton_released() +{ + longPressedTimer.stop(); +} + +void ProgrammedCookPanelButton::on_pushButton_clicked() +{ + if (longPressEnabled && emitted) + return; + + emit clicked(this); +} + +void ProgrammedCookPanelButton::on_showInfoButton_clicked() +{ + emit infoClicked(this); +} + +void ProgrammedCookPanelButton::on_deleteButton_clicked() +{ + emit deleteClicked(this); +} diff --git a/app/gui/oven_control/programmedcookpanelbutton.h b/app/gui/oven_control/programmedcookpanelbutton.h new file mode 100644 index 0000000..4027338 --- /dev/null +++ b/app/gui/oven_control/programmedcookpanelbutton.h @@ -0,0 +1,74 @@ +#ifndef PROGRAMMEDCOOKPANELBUTTON_H +#define PROGRAMMEDCOOKPANELBUTTON_H + +#include +#include +#include +#include +#include + +#include "cookhistory.h" + +namespace Ui { +class ProgrammedCookPanelButton; +} + +class ProgrammedCookPanelButton : public QWidget +{ + Q_OBJECT + +public: + explicit ProgrammedCookPanelButton(CookRecord record, QWidget *parent = 0); + ~ProgrammedCookPanelButton(); + + void setText(QString text); + void showInfo(); + void hideInfo(); + + void setLongPressEnabled(bool enabled); + + QPushButton *bar(); + QPushButton *infoButton(); + QPushButton *deleteButton(); + + CookRecord record; + +public slots: + void setEnabled(bool enabled = true); + +protected: + void keyPressEvent(QKeyEvent *event); + void keyReleaseEvent(QKeyEvent *event); + +private: + Ui::ProgrammedCookPanelButton *ui; + + QTimer longPressedTimer; + bool rendered; + QLabel *label; + bool emitted; + bool longPressEnabled; + + QWidget *pushed = NULL; + + void onEncoderLeft(); + void onEncoderRight(); + void onEncoderClicked(QWidget *clicked); + +private slots: + void emitLongPressed(); + + void on_pushButton_pressed(); + void on_pushButton_released(); + void on_pushButton_clicked(); + void on_showInfoButton_clicked(); + void on_deleteButton_clicked(); + +signals: + void clicked(ProgrammedCookPanelButton *); + void infoClicked(ProgrammedCookPanelButton *); + void deleteClicked(ProgrammedCookPanelButton *); + void longPressed(ProgrammedCookPanelButton *); +}; + +#endif // PROGRAMMEDCOOKPANELBUTTON_H diff --git a/app/gui/oven_control/programmedcookpanelbutton.ui b/app/gui/oven_control/programmedcookpanelbutton.ui new file mode 100644 index 0000000..fd5408f --- /dev/null +++ b/app/gui/oven_control/programmedcookpanelbutton.ui @@ -0,0 +1,118 @@ + + + ProgrammedCookPanelButton + + + + 0 + 0 + 821 + 65 + + + + Form + + + QPushButton { +background-position: center; +background-repeat: no-repeat; +border: none; +} + + + + + 670 + 0 + 70 + 65 + + + + QPushButton { background-image: url(:/images/etc/bar_icon_01.png); } +QPushButton:pressed { background-image: url(:/images/etc/bar_icon_01_ov.png); } +QPushButton:focus { background-image: url(:/images/etc/bar_icon_01_ov.png); } + + + + + + true + + + true + + + + + + 750 + 0 + 60 + 65 + + + + QPushButton { background-image: url(:/images/etc/bar_icon_02.png); } +QPushButton:pressed { background-image: url(:/images/etc/bar_icon_02_ov.png); } +QPushButton:focus { background-image: url(:/images/etc/bar_icon_02_ov.png); } + + + + + + + + + 0 + 0 + 821 + 65 + + + + + 0 + 0 + + + + + 821 + 65 + + + + + 821 + 65 + + + + + Roboto + 11 + + + + QPushButton { +background-image: url(:/images/etc/bar_03.png); +color: white; +text-align: left; +padding: 0px 40px; +} +QPushButton:pressed { background-image: url(:/images/etc/bar_02.png); } +QPushButton:focus { background-image: url(:/images/etc/bar_02.png); } + + + + + + pushButton + showInfoButton + deleteButton + + + + diff --git a/app/gui/oven_control/programmingwindow.cpp b/app/gui/oven_control/programmingwindow.cpp index 9c74767..a32e559 100644 --- a/app/gui/oven_control/programmingwindow.cpp +++ b/app/gui/oven_control/programmingwindow.cpp @@ -147,6 +147,7 @@ void ProgrammingWindow::listButtons(QList record) setTabOrder(ui->manualButton, ui->addButton); QWidget *last = ui->addButton; + CookPanelButton *prev = NULL; foreach (CookRecord r, record) { CookPanelButton *b = newButton(r); @@ -154,6 +155,12 @@ void ProgrammingWindow::listButtons(QList record) setTabOrder(b->bar(), b->infoButton()); setTabOrder(b->infoButton(), b->deleteButton()); last = b->deleteButton(); + + CookPanelButton *p = qobject_cast(prev); + if (p) + p->next = b; + + prev = b; } setTabOrder(last, ui->backButton); -- 2.1.4