diff --git a/app/gui/oven_control/config.cpp b/app/gui/oven_control/config.cpp index 5600490..4177ca1 100644 --- a/app/gui/oven_control/config.cpp +++ b/app/gui/oven_control/config.cpp @@ -18,6 +18,7 @@ #include "confighalfenergydlg.h" #include "config1digitsetdlg.h" #include "configdutywashdlg.h" +#include "fileprocessor.h" using namespace Define; @@ -325,6 +326,7 @@ QString Config::getTempString(int cel_temp){ void Config::execConfigWindow(QWidget *parent, Define::ConfigType idx){ QDialog *dlg; bool bUsbDetect = false; + QString usbPath = ""; switch(idx){ case config_language: dlg = new ConfigLanguageDlg(parent); @@ -362,21 +364,26 @@ void Config::execConfigWindow(QWidget *parent, Define::ConfigType idx){ case config_service_data_download: case config_program_download: case config_set_download: - if(!bUsbDetect){ + if(!FileProcessor::detectUSB(usbPath)){ dlg = new UsbCheckPopupDlg(parent); dlg->exec(); } - dlg = new ConfigFileProcessDlg(parent,idx); - dlg->exec(); + if(FileProcessor::detectUSB(usbPath)){ + dlg = new ConfigFileProcessDlg(parent,idx); + dlg->exec(); + } return; case config_set_upload: case config_program_upload: - if(!bUsbDetect){ + + if(!FileProcessor::detectUSB(usbPath)){ dlg = new UsbCheckPopupDlg(parent); dlg->exec(); } - dlg = new ConfigFileProcessDlg(parent,idx,false); - dlg->exec(); + if(FileProcessor::detectUSB(usbPath)){ + dlg = new ConfigFileProcessDlg(parent,idx,false); + dlg->exec(); + } return; case config_set_half_energy: dlg = new ConfigHalfEnergyDlg(parent); diff --git a/app/gui/oven_control/configfileprocessdlg.cpp b/app/gui/oven_control/configfileprocessdlg.cpp index addab20..f044ab8 100644 --- a/app/gui/oven_control/configfileprocessdlg.cpp +++ b/app/gui/oven_control/configfileprocessdlg.cpp @@ -1,6 +1,7 @@ #include "configfileprocessdlg.h" #include "ui_configfileprocessdlg.h" #include "config.h" +#include "fileprocessdlg.h" ConfigFileProcessDlg::ConfigFileProcessDlg(QWidget *parent, ConfigType type, bool isDown) : QDialog(parent), @@ -12,6 +13,7 @@ ConfigFileProcessDlg::ConfigFileProcessDlg(QWidget *parent, ConfigType type, boo setAttribute(Qt::WA_NoSystemBackground); setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_DeleteOnClose); + m_bIsDown = isDown; if(type < config_invalid) { m_nCfgtype = type; @@ -26,6 +28,7 @@ ConfigFileProcessDlg::ConfigFileProcessDlg(QWidget *parent, ConfigType type, boo } } + } ConfigFileProcessDlg::~ConfigFileProcessDlg() @@ -35,11 +38,9 @@ ConfigFileProcessDlg::~ConfigFileProcessDlg() void ConfigFileProcessDlg::on_ctrBtnOk_clicked() { - switch(m_nCfgtype){ - default: - break; - } - + QDialog *dg; + dg = new FileProcessDlg(parentWidget(),m_nCfgtype, m_bIsDown); + dg->exec(); deleteLater(); } diff --git a/app/gui/oven_control/configfileprocessdlg.h b/app/gui/oven_control/configfileprocessdlg.h index a661a7e..27a1110 100644 --- a/app/gui/oven_control/configfileprocessdlg.h +++ b/app/gui/oven_control/configfileprocessdlg.h @@ -26,6 +26,7 @@ private slots: private: Ui::ConfigFileProcessDlg *ui; ConfigType m_nCfgtype; + bool m_bIsDown; }; #endif // CONFIGFILEPROCESSDLG_H diff --git a/app/gui/oven_control/configwindow.cpp b/app/gui/oven_control/configwindow.cpp index 64766d9..f11f959 100644 --- a/app/gui/oven_control/configwindow.cpp +++ b/app/gui/oven_control/configwindow.cpp @@ -9,7 +9,7 @@ #include "yesnopopupdlg.h" #include "configdatetimedlg.h" #include "servicepassinputdlg.h" - +#include "fileprocessor.h" ConfigWindow::ConfigWindow(QWidget *parent) : diff --git a/app/gui/oven_control/fileprocessdlg.cpp b/app/gui/oven_control/fileprocessdlg.cpp new file mode 100644 index 0000000..616bd4d --- /dev/null +++ b/app/gui/oven_control/fileprocessdlg.cpp @@ -0,0 +1,123 @@ +#include <QTimer> +#include <QFile> +#include "fileprocessdlg.h" +#include "ui_fileprocessdlg.h" +#include "fileprocessor.h" +#include "ovenstatics.h" +#include <QDebug> +FileProcessDlg::FileProcessDlg(QWidget *parent, ConfigType type, bool isDown) : + QDialog(parent), + ui(new Ui::FileProcessDlg) +{ + ui->setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + setAttribute(Qt::WA_TranslucentBackground); + setWindowFlags(Qt::FramelessWindowHint); + + ui->ctrWjProcess->setMinimum(0); + ui->ctrWjProcess->setMaximum(100); + + if(isDown){ + QPixmap pxmap; + pxmap.load(":/images/config/102_usb_upload_icon.png"); + ui->label_2->setPixmap(pxmap); + } + + switch(type){ + case config_info_data_download: + QTimer::singleShot(100,this,SLOT(infodataDownload())); + break; + case config_service_data_download: + QTimer::singleShot(100,this,SLOT(servicedataDownload())); + break; + case config_program_download: + QTimer::singleShot(100,this,SLOT(programDownload())); + break; + case config_program_upload: + QTimer::singleShot(100,this,SLOT(programUpload())); + break; + case config_set_download: + QTimer::singleShot(100,this,SLOT(configDownload())); + break; + case config_set_upload: + QTimer::singleShot(100,this,SLOT(configUpload())); + break; + default: + QTimer::singleShot(200,this,SLOT(deleteLater())); + break; + } +} + +FileProcessDlg::~FileProcessDlg() +{ + delete ui; +} + +void FileProcessDlg::on_ctrBtnCancel_clicked() +{ + close(); +} + +void FileProcessDlg::infodataDownload(){ + +} + +void FileProcessDlg::servicedataDownload(){ + + +} + +void FileProcessDlg::programDownload(){ + +} + +void FileProcessDlg::programUpload(){ + +} + +void FileProcessDlg::configDownload(){ + QString strUsbPath; + if(FileProcessor::detectUSB(strUsbPath)){ + strUsbPath.append("/config.ini"); + qDebug() << strUsbPath; + if(QFile::copy("/prime/config/config.ini", strUsbPath)){ + ui->ctrWjProcess->setValue(100); + ui->ctrLbRemainTime->setText("남은 예상 시간 : 0초"); + ui->ctrLbRemainTime->setText(tr("남은 예상 시간 : 완료")); + QTimer::singleShot(1000,this,SLOT(close())); + } + else{ + ui->ctrLbRemainTime->setText(tr("다운로드에 실패하였습니다.")); + QTimer::singleShot(1000,this,SLOT(close())); + } + } + else{ + ui->ctrLbRemainTime->setText(tr("다운로드에 실패하였습니다.")); + QTimer::singleShot(1000,this,SLOT(close())); + } +} + +void FileProcessDlg::configUpload(){ + QString strUsbPath; + if(FileProcessor::detectUSB(strUsbPath)){ + strUsbPath.append("/config.ini"); + qDebug() << strUsbPath; + QFile file("/prime/config/config.ini"); + file.remove(); + if(QFile::copy( strUsbPath , "/prime/config/config.ini")){ + OvenStatistics* ovs = OvenStatistics::getInstance(); + ovs->srvdata->loadServiceData(); + ui->ctrWjProcess->setValue(100); + ui->ctrLbRemainTime->setText(tr("남은 예상 시간 : 완료")); + QTimer::singleShot(1000,this,SLOT(close())); + } + else{ + ui->ctrLbRemainTime->setText(tr("업로드에 실패하였습니다.")); + QTimer::singleShot(1000,this,SLOT(close())); + } + } + else{ + ui->ctrLbRemainTime->setText(tr("업로드에 실패하였습니다.")); + QTimer::singleShot(1000,this,SLOT(close())); + } +} diff --git a/app/gui/oven_control/fileprocessdlg.h b/app/gui/oven_control/fileprocessdlg.h new file mode 100644 index 0000000..66d6619 --- /dev/null +++ b/app/gui/oven_control/fileprocessdlg.h @@ -0,0 +1,48 @@ +#ifndef FILEPROCESSDLG_H +#define FILEPROCESSDLG_H + +#include <QDialog> +#include "config.h" +#include "servicedata.h" + +using namespace Define; + +namespace Ui { +class FileProcessDlg; +} + +class FileProcessDlg : public QDialog +{ + Q_OBJECT + + const uint8_t m_arrErrorMaxIdx[4] = {3,4,3,11}; + + const char m_strInfoName[4][64] = {"Top Ignition Box\0", + "Steam Ignition Box\0","Bottom Ignition Box\0","Service Total\0"}; + const uint16_t m_arrErrorIdxs[3][20] = { //서비스 에러 기록 종합은 합산 + {ERROR_IDX_upper_fire_fail,ERROR_IDX_upper_pan_fail,ERROR_IDX_upper_motor_fail}, + {ERROR_IDX_steam_fire_fail,ERROR_IDX_steam_pan_fail,ERROR_IDX_water_level_sensor_fail,ERROR_IDX_steam_gen_temp_high_alram}, + {ERROR_IDX_lower_fire_fail,ERROR_IDX_lower_pan_fail,ERROR_IDX_lower_motor_fail} + }; + + + +public: + explicit FileProcessDlg(QWidget *parent = 0, ConfigType type = config_invalid, bool isDown = true); + ~FileProcessDlg(); + +private slots: + void on_ctrBtnCancel_clicked(); + void infodataDownload(); + void servicedataDownload(); + void programDownload(); + void programUpload(); + void configDownload(); + void configUpload(); + +private: + Ui::FileProcessDlg *ui; + ConfigType m_nCfgtype; +}; + +#endif // FILEPROCESSDLG_H diff --git a/app/gui/oven_control/fileprocessdlg.ui b/app/gui/oven_control/fileprocessdlg.ui new file mode 100644 index 0000000..9016434 --- /dev/null +++ b/app/gui/oven_control/fileprocessdlg.ui @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>FileProcessDlg</class> + <widget class="QDialog" name="FileProcessDlg"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>900</width> + <height>1600</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dialog</string> + </property> + <property name="windowOpacity"> + <double>1.000000000000000</double> + </property> + <property name="styleSheet"> + <string notr="true">#centralWidget { background-image: url(:/images/background/popup/503.png); +} +</string> + </property> + <property name="modal"> + <bool>true</bool> + </property> + <widget class="QWidget" name="centralWidget" native="true"> + <property name="geometry"> + <rect> + <x>0</x> + <y>430</y> + <width>900</width> + <height>503</height> + </rect> + </property> + <property name="styleSheet"> + <string notr="true"/> + </property> + <widget class="QWidget" name="verticalLayoutWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>901</width> + <height>520</height> + </rect> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="topMargin"> + <number>30</number> + </property> + <property name="bottomMargin"> + <number>30</number> + </property> + <item> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string/> + </property> + <property name="pixmap"> + <pixmap resource="resources.qrc">:/images/config/102_usb_download_icon.png</pixmap> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item alignment="Qt::AlignHCenter"> + <widget class="FileProcessGauge" name="ctrWjProcess" native="true"> + <property name="minimumSize"> + <size> + <width>820</width> + <height>120</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>820</width> + <height>120</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="ctrLbRemainTime"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>30</height> + </size> + </property> + <property name="font"> + <font> + <family>나눔바른고딕</family> + <pointsize>14</pointsize> + </font> + </property> + <property name="styleSheet"> + <string notr="true">color : white; +padding-left : 65px;</string> + </property> + <property name="text"> + <string>남은 예상 시간 : 1초</string> + </property> + <property name="alignment"> + <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + </property> + </widget> + </item> + <item alignment="Qt::AlignRight"> + <widget class="QPushButton" name="ctrBtnCancel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>220</width> + <height>100</height> + </size> + </property> + <property name="font"> + <font> + <family>나눔바른고딕</family> + <pointsize>17</pointsize> + <weight>75</weight> + <bold>true</bold> + <underline>true</underline> + </font> + </property> + <property name="styleSheet"> + <string notr="true">QPushButton{ + border : none; + color : white; +} + +QPushButton::pressed, QPushButton::focus{ + color : yellow; +}</string> + </property> + <property name="text"> + <string>취소</string> + </property> + </widget> + </item> + </layout> + </widget> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>FileProcessGauge</class> + <extends>QWidget</extends> + <header>fileprocessgauge.h</header> + <container>1</container> + </customwidget> + </customwidgets> + <resources> + <include location="resources.qrc"/> + </resources> + <connections/> +</ui> diff --git a/app/gui/oven_control/fileprocessgauge.cpp b/app/gui/oven_control/fileprocessgauge.cpp new file mode 100644 index 0000000..85de2fb --- /dev/null +++ b/app/gui/oven_control/fileprocessgauge.cpp @@ -0,0 +1,40 @@ +#include "fileprocessgauge.h" +#include <QPainter> +#include <QDebug> + +FileProcessGauge::FileProcessGauge(QWidget *parent) : PreheatTempGauge(parent) +{ + border.load(":/images/gauge/103_usb_graph_01.png"); + indicator.load(":/images/gauge/103_usb_graph_02.png"); + body.load(":/images/gauge/103_usb_graph_03.png"); + min = 0; + max = 100; + val = 30; +} + +void FileProcessGauge::paintEvent(QPaintEvent *event){ + QPainter painter(this); + painter.setBrush(Qt::NoBrush); + painter.setPen(Qt::NoPen); + QRect textRect(0,0,72,40); + + qreal percentage = (qreal) (val - min) / qMax(max - min, 1); + percentage = qBound((qreal) 0.0, percentage, (qreal) 1.0); + + QRect targetRect( + (border.size().width() - body.size().width()) / 2 + textRect.width()/2, + (border.size().height() - body.size().height()) / 2 + indicator.size().height()+textRect.height(), + body.size().width() * percentage, body.height()); + + QRect sourceRect(0, 0, body.size().width() * percentage, body.height()); + QFont font; + font.setFamily("나눔맑은고딕"); + font.setPixelSize(30); + painter.setFont(font); + painter.setPen(Qt::white); + painter.drawPixmap(targetRect, body, sourceRect); + painter.drawPixmap(textRect.width()/ 2, textRect.height()+indicator.size().height(), border); + painter.drawPixmap(targetRect.right() - indicator.size().width() / 2, textRect.height(), indicator); + textRect.setRect(targetRect.right() - textRect.size().width()/2, textRect.top(),72,40); + painter.drawText(textRect,Qt::AlignCenter, QString("%1%").arg(val)); +} diff --git a/app/gui/oven_control/fileprocessgauge.h b/app/gui/oven_control/fileprocessgauge.h new file mode 100644 index 0000000..dec70d1 --- /dev/null +++ b/app/gui/oven_control/fileprocessgauge.h @@ -0,0 +1,16 @@ +#ifndef FILEPROCESSGAUGE_H +#define FILEPROCESSGAUGE_H + +#include "preheattempgauge.h" + +class FileProcessGauge : public PreheatTempGauge +{ +public: + FileProcessGauge(QWidget *parent=0); + +protected: + void paintEvent(QPaintEvent *event); + +}; + +#endif // FILEPROCESSGAUGE_H diff --git a/app/gui/oven_control/fileprocessor.cpp b/app/gui/oven_control/fileprocessor.cpp new file mode 100644 index 0000000..51ab451 --- /dev/null +++ b/app/gui/oven_control/fileprocessor.cpp @@ -0,0 +1,41 @@ +#include <QDebug> +#include "fileprocessor.h" + +FileProcessor::FileProcessor() +{ + +} + +bool FileProcessor::folderExist(const QString &path){ + QDir qdir(path); + qDebug() << "check path" << path; + return qdir.exists(); +} + +bool FileProcessor::fileExist(const QString &path_file){ + QFile qfile(path_file); + return qfile.exists(); +} + +bool FileProcessor::detectUSB(QString &usbPath){ + int curUsbNum=0xff; + bool usbMountErr = false; + QString checkUsbName[3] = { + "sda", + "sdb", + "sdc" + }; + + for(int i =2;i >=0 ; i--){ + + if(folderExist(QString("/sys/block/").append(checkUsbName[i]))){ + if(folderExist(QString("/mnt/%111").arg(checkUsbName[i]))){ + usbPath = QString("/mnt/%111").arg(checkUsbName[i]); + return true; + } + break; + } + } + qDebug() << "usb detect fail"; + return false; +} diff --git a/app/gui/oven_control/fileprocessor.h b/app/gui/oven_control/fileprocessor.h new file mode 100644 index 0000000..f275fdd --- /dev/null +++ b/app/gui/oven_control/fileprocessor.h @@ -0,0 +1,16 @@ +#ifndef FILEPROCESSOR_H +#define FILEPROCESSOR_H + +#include <QtCore> + +class FileProcessor +{ +public: + FileProcessor(); +static bool folderExist(const QString &path); +static bool fileExist(const QString &path_file); +static bool detectUSB(QString &usbpath); + +}; + +#endif // FILEPROCESSOR_H diff --git a/app/gui/oven_control/images/config/102_usb_download_icon.png b/app/gui/oven_control/images/config/102_usb_download_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a482fb5a0ad50cbf41ff3e252895889788347397 GIT binary patch literal 3237 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 Xl@Q<b?3B$H00000NkvXXu0mjf1}!FR literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/images/config/102_usb_upload_icon.png b/app/gui/oven_control/images/config/102_usb_upload_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9e32db9df2dce48e3d19fd097f70bcd0a33b51 GIT binary patch literal 3191 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 literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/images/gauge/103_usb_graph_01.png b/app/gui/oven_control/images/gauge/103_usb_graph_01.png new file mode 100644 index 0000000000000000000000000000000000000000..b117b1cdc3a8c87dceacb416f243b82fd0248c9c GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0y~yVEP4QJ94l9Nv@U?2Z5AAvPY0F14ET614BbI1H;e% zK>8&EL#Y7+!>a@a2CEqi4C48d;*Yuk)iNb{ySp&_Z|^^|AIRe@@Q5sCVBi)8VMc~o zb0mO*>?NMQuIvw4_?Yz6?#aGB&A`C8+|$J|q~g}w8ykI{5+zz6@;g6d`qDO!MXZ3C zD_VWSl0trO^$lu;%;E*i;tL9!&oc?R{PEsmasKk1C;#qLuekTfZx?riK=}W^><mAw z7x4?ERPCs{^7`c8(zCCZmNhSzTlK24z-;yJ&D&+yzS?&0Rc%4m)m5RZ!}K@rT2~nw z`t{zoFP-<wz88Ji_3HdTnR&YB?|*w+a{2D;hbw`K)<*3;k(K{_<M&E-g^m}@EP}NS z3P3AdzA!d**f|JXWam)&#o*{7Ka?bwwZC38-|wCNs#hD!o0qR!UH9i-#<$bA`@%v? yubVdqgFL;pYUb6W|BPPhF*yC$!wmLr4dW!$J<F?i-%tj|B7>)^pUXO@geCx;;NKts literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/images/gauge/103_usb_graph_02.png b/app/gui/oven_control/images/gauge/103_usb_graph_02.png new file mode 100644 index 0000000000000000000000000000000000000000..30013074f944f95ef263a8a385cd820605798933 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^{2(?53y{1c{^t~sQb_g)@?~JCQe|LhXl7ve`5#EX zWMC*YU|@Kaz`$TNgMmRje^UHWH=tUkByV>YhX3vTXZ8bmoCO|{#S9GG!XV7ZFl&wk zP>{XE)7O>#AqyXqp4vUx*QbF(ZJsWUArhBMFDw*1<RH-caJqC-r?Sv=F$t3{GYKh$ z(j{$68qc@{vM`<G(VcK`j_Z?t%R-gy{_oVky-lmgO?~?M%E@yITyB>>zELSO+%Zk% zVTH;EU%9Y?gs6{}uN-zC_#N-+Rnua>>L~9WrMxipO%FvsI8Xe+xcor)W6v)KgwsFH eo0x1fld)vRCYROHTHk;!V(@hJb6Mw<&;$TddSu%G literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/images/gauge/103_usb_graph_03.png b/app/gui/oven_control/images/gauge/103_usb_graph_03.png new file mode 100644 index 0000000000000000000000000000000000000000..caf9a4b288ae3a16b10626cc2047253a37588e62 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0y~yVEPJVTXO&jhI=7edw>*ElDE4H!~gdFGy8!&&H|6f zVg?3oVGw3ym^DWND9B#o>Fdh=kX4*p-Z;yaX$MfK+tbA{q~g}wOOApJ3>=3I4(#8h zd5BeBh;wfl*E~ti0^1#OG5qV;uQ$Iw`1L^*8W*<=NFjDTP$Q0`n^us*=(&l}<J;8l RYk<yT@O1TaS?83{1OSSfUt0hG literal 0 HcmV?d00001 diff --git a/app/gui/oven_control/oven_control.pro b/app/gui/oven_control/oven_control.pro index 30087d8..e007093 100644 --- a/app/gui/oven_control/oven_control.pro +++ b/app/gui/oven_control/oven_control.pro @@ -103,7 +103,10 @@ SOURCES += main.cpp\ backlight.cpp \ dirtylevel.cpp \ washwarnicon.cpp \ - coretempsettingpopup.cpp + coretempsettingpopup.cpp \ + fileprocessor.cpp \ + fileprocessgauge.cpp \ + fileprocessdlg.cpp HEADERS += mainwindow.h \ cook.h \ @@ -196,7 +199,10 @@ HEADERS += mainwindow.h \ backlight.h \ dirtylevel.h \ washwarnicon.h \ - coretempsettingpopup.h + coretempsettingpopup.h \ + fileprocessor.h \ + fileprocessgauge.h \ + fileprocessdlg.h FORMS += mainwindow.ui \ manualcookwindow.ui \ @@ -259,7 +265,8 @@ FORMS += mainwindow.ui \ gasmodelsettingwindow.ui \ electricmodelsettingwindow.ui \ servicepassinputdlg.ui \ - coretempsettingpopup.ui + coretempsettingpopup.ui \ + fileprocessdlg.ui RESOURCES += \ resources.qrc diff --git a/app/gui/oven_control/resources.qrc b/app/gui/oven_control/resources.qrc index 0fab1d0..6abd0b8 100644 --- a/app/gui/oven_control/resources.qrc +++ b/app/gui/oven_control/resources.qrc @@ -557,5 +557,10 @@ <file>images/cook_type/meat_hide.png</file> <file>images/cook_type/poultry_hide.png</file> <file>images/cook_type/vegetable_hide.png</file> + <file>images/gauge/103_usb_graph_01.png</file> + <file>images/gauge/103_usb_graph_02.png</file> + <file>images/gauge/103_usb_graph_03.png</file> + <file>images/config/102_usb_upload_icon.png</file> + <file>images/config/102_usb_download_icon.png</file> </qresource> </RCC> diff --git a/app/gui/oven_control/servicepassinputdlg.cpp b/app/gui/oven_control/servicepassinputdlg.cpp index 0e63d3d..9154dc4 100644 --- a/app/gui/oven_control/servicepassinputdlg.cpp +++ b/app/gui/oven_control/servicepassinputdlg.cpp @@ -30,6 +30,7 @@ void ServicePassInputDlg::on_ctrBtnOk_clicked() connect(w,SIGNAL(destroyed(QObject*)),this,SLOT(close())); w->setWindowModality(Qt::WindowModal); w->show(); + this->hide(); } else { qDebug()<< "pass incorrect " << ui->lineEdit->text(); diff --git a/app/gui/oven_control/usbcheckpopupdlg.cpp b/app/gui/oven_control/usbcheckpopupdlg.cpp index 4331e7a..95b9a54 100644 --- a/app/gui/oven_control/usbcheckpopupdlg.cpp +++ b/app/gui/oven_control/usbcheckpopupdlg.cpp @@ -1,6 +1,7 @@ #include <QTimer> #include "usbcheckpopupdlg.h" #include "ui_usbcheckpopupdlg.h" +#include "fileprocessor.h" UsbCheckPopupDlg::UsbCheckPopupDlg(QWidget *parent) : QDialog(parent), @@ -29,7 +30,8 @@ void UsbCheckPopupDlg::on_ctrBtnYes_clicked() } void UsbCheckPopupDlg::usbCheckTimerFired(){ - bool usbDetect = false; + QString strTemp; + bool usbDetect = FileProcessor::detectUSB(strTemp); if(usbDetect){ accept(); }