servicepassinputdlg.cpp 4.12 KB
#include "servicepassinputdlg.h"
#include "ui_servicepassinputdlg.h"
#include "engineermenuwindow.h"
#include <QDebug>
#include "soundplayer.h"
#include "udphandler.h"


ServicePassInputDlg::ServicePassInputDlg(QWidget *parent, service_pass_type mode,  bool sendClrCmd) :
    QDialog(parent),
    ui(new Ui::ServicePassInputDlg)
{
    ui->setupUi(this);
    setWindowFlags(Qt::FramelessWindowHint);
    setAttribute(Qt::WA_NoSystemBackground);
    setAttribute(Qt::WA_TranslucentBackground);
    setAttribute(Qt::WA_DeleteOnClose);
    qApp->setActiveWindow(this);
    ui->ctrProgressBar->setFocus();

    this->setResult(QDialog::Accepted);
    foreach (QPushButton *button, findChildren<QPushButton *>())
        connect(button, &QPushButton::pressed, SoundPlayer::playClick);
    ui->ctrProgressBar->setMaxProgress(0,MAX_PASSWORD);
    m_nCurInputCount = 0;
    memset(m_strInputPass, 0x00, MAX_PASSWORD+1);
    connect(ui->keyboardwidget,SIGNAL(onBackspaceKeyClicked()), SLOT(backspaceKeyPressEvent()));
    connect(ui->keyboardwidget, SIGNAL(onOkKeyClicked()), SLOT(keyEnter_clicked()));
    connect(ui->keyboardwidget, SIGNAL(onCancelKeyClicked()),SLOT(keyCancel_clicked()));
    connect(ui->keyboardwidget,SIGNAL(onKeyboardClickSignal(QString)),SLOT(keyboardInputEvent(QString)));
    ui->keyboardwidget->focusInKeyboard();
    m_nMode = mode;
    m_bSendClrCmd = sendClrCmd;
}

ServicePassInputDlg::~ServicePassInputDlg()
{
    delete ui;
}

void ServicePassInputDlg::on_ctrBtnOk_clicked()
{

    if( QString(m_strInputPass) == QString(NORMAL_PASS_WORD) && m_nMode == NORMAL_SERVICE_PASS_MODE){
        qDebug() << this->parentWidget() <<this->parent();
        if(m_bSendClrCmd) UdpHandler::getInstance()->set(TG_ERROR_CLEAR,0xCECE);
        EngineerMenuWindow *w = new EngineerMenuWindow(this->parentWidget());
        connect(w,SIGNAL(destroyed(QObject*)),this,SLOT(close()));
        w->setWindowModality(Qt::WindowModal);
        w->showFullScreen();
        w->raise();
        this->hide();
    }
    else if(QString(m_strInputPass) == QString(DEMO_PASS_WORD) && m_nMode == DEMO_SERVICE_PASS_MODE){
        accept();
    }
    else {
        reject();
    }
}

void ServicePassInputDlg::on_ctrBtnCancel_clicked()
{
    reject();
}

void ServicePassInputDlg::backspaceKeyPressEvent(){
    if(m_nCurInputCount>0) m_nCurInputCount--;
    m_strInputPass[m_nCurInputCount] = 0;
    qDebug() <<"back space input" << QString(m_strInputPass);
     ui->ctrProgressBar->setCurrentProgress(m_nCurInputCount);
}

void ServicePassInputDlg::keyboardInputEvent(QString strIn){
    if(m_nCurInputCount < MAX_PASSWORD){
            const QChar* in = strIn.constData();
            m_strInputPass[m_nCurInputCount++] = in[0];
            qDebug() <<"input event" << QString(m_strInputPass);
            ui->ctrProgressBar->setCurrentProgress(m_nCurInputCount);
    }
}

void ServicePassInputDlg::keyPressEvent(QKeyEvent *event){
    int i = 0;
    switch (event->key())
    {
    case 0x01000032:    // Turn left
        if(focusWidget() == ui->ctrProgressBar) ui->ctrBtnCancel->setFocus();
        else focusPreviousChild();
        break;
    case 0x01000031:    // Push

        break;
    case 0x01000030:    // Turn right
        if(focusWidget() == ui->ctrBtnCancel) ui->ctrProgressBar->setFocus();
        else focusNextChild();

        break;
    }
}

void ServicePassInputDlg::keyReleaseEvent(QKeyEvent *event){
    int i = 0;
    switch (event->key())
    {
    case 0x01000032:    // Turn left
        if(focusWidget() == ui->ctrProgressBar) ui->ctrBtnCancel->setFocus();
        else focusPreviousChild();
        break;
    case 0x01000031:    // Push
    {
        QPushButton *btn = qobject_cast<QPushButton*>(focusWidget());
        if(btn != NULL){
            btn->click();
        }
        else{
            ui->keyboardwidget->focusInKeyboard();
        }
        break;
    }
    case 0x01000030:    // Turn right
        if(focusWidget() == ui->ctrBtnCancel) ui->ctrProgressBar->setFocus();
        else focusNextChild();
        break;
    }
}

void ServicePassInputDlg::keyCancel_clicked(){
    ui->ctrBtnCancel->click();
}

void ServicePassInputDlg::keyEnter_clicked(){
    ui->ctrBtnOk->click();
}