dialog.cpp Example File

examples/blockingslave/dialog.cpp
    /****************************************************************************
    **
    ** Copyright (C) 2012 Denis Shienkov <scapig@yandex.ru>
    ** Contact: http://www.qt-project.org/
    **
    ** This file is part of the QtSerialPort module of the Qt Toolkit.
    **
    ** $QT_BEGIN_LICENSE:LGPL$
    ** GNU Lesser General Public License Usage
    ** This file may be used under the terms of the GNU Lesser General Public
    ** License version 2.1 as published by the Free Software Foundation and
    ** appearing in the file LICENSE.LGPL included in the packaging of this
    ** file. Please review the following information to ensure the GNU Lesser
    ** General Public License version 2.1 requirements will be met:
    ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    **
    ** In addition, as a special exception, Nokia gives you certain additional
    ** rights. These rights are described in the Nokia Qt LGPL Exception
    ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    **
    ** GNU General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU General
    ** Public License version 3.0 as published by the Free Software Foundation
    ** and appearing in the file LICENSE.GPL included in the packaging of this
    ** file. Please review the following information to ensure the GNU General
    ** Public License version 3.0 requirements will be met:
    ** http://www.gnu.org/copyleft/gpl.html.
    **
    ** Other Usage
    ** Alternatively, this file may be used in accordance with the terms and
    ** conditions contained in a signed written agreement between you and Nokia.
    **
    **
    **
    **
    **
    **
    ** $QT_END_LICENSE$
    **
    ****************************************************************************/

    #include "dialog.h"

    #include <QLabel>
    #include <QLineEdit>
    #include <QComboBox>
    #include <QSpinBox>
    #include <QPushButton>
    #include <QGridLayout>

    #include <QtAddOnSerialPort/serialportinfo.h>

    QT_USE_NAMESPACE_SERIALPORT

    Dialog::Dialog(QWidget *parent)
        : QDialog(parent)
        , transactionCount(0)
        , serialPortLabel(new QLabel(tr("Serial port:")))
        , serialPortComboBox(new QComboBox())
        , waitRequestLabel(new QLabel(tr("Wait request, msec:")))
        , waitRequestSpinBox(new QSpinBox())
        , responseLabel(new QLabel(tr("Response:")))
        , responseLineEdit(new QLineEdit(tr("Hello, I'm Slave.")))
        , trafficLabel(new QLabel(tr("No traffic.")))
        , statusLabel(new QLabel(tr("Status: Not running.")))
        , runButton(new QPushButton(tr("Start")))
    {
        waitRequestSpinBox->setRange(0, 10000);
        waitRequestSpinBox->setValue(10000);

        foreach (const SerialPortInfo &info, SerialPortInfo::availablePorts())
            serialPortComboBox->addItem(info.portName());

        QGridLayout *mainLayout = new QGridLayout;
        mainLayout->addWidget(serialPortLabel, 0, 0);
        mainLayout->addWidget(serialPortComboBox, 0, 1);
        mainLayout->addWidget(waitRequestLabel, 1, 0);
        mainLayout->addWidget(waitRequestSpinBox, 1, 1);
        mainLayout->addWidget(runButton, 0, 2, 2, 1);
        mainLayout->addWidget(responseLabel, 2, 0);
        mainLayout->addWidget(responseLineEdit, 2, 1, 1, 3);
        mainLayout->addWidget(trafficLabel, 3, 0, 1, 4);
        mainLayout->addWidget(statusLabel, 4, 0, 1, 5);
        setLayout(mainLayout);

        setWindowTitle(tr("Blocking Slave"));
        serialPortComboBox->setFocus();

        connect(runButton, SIGNAL(clicked()),
                this, SLOT(startSlave()));
        connect(&thread, SIGNAL(request(QString)),
                this, SLOT(showRequest(QString)));
        connect(&thread, SIGNAL(error(QString)),
                this, SLOT(processError(QString)));
        connect(&thread, SIGNAL(timeout(QString)),
                this, SLOT(processTimeout(QString)));

        connect(serialPortComboBox, SIGNAL(currentIndexChanged(QString)),
                this, SLOT(activateRunButton()));
        connect(waitRequestSpinBox, SIGNAL(valueChanged(int)),
                this, SLOT(activateRunButton()));
        connect(responseLineEdit, SIGNAL(textChanged(QString)),
                this, SLOT(activateRunButton()));
    }

    void Dialog::startSlave()
    {
        runButton->setEnabled(false);
        statusLabel->setText(tr("Status: Running, connected to port %1.")
                             .arg(serialPortComboBox->currentText()));
        thread.startSlave(serialPortComboBox->currentText(),
                          waitRequestSpinBox->value(),
                          responseLineEdit->text());
    }

    void Dialog::showRequest(const QString &s)
    {
        trafficLabel->setText(tr("Traffic, transaction #%1:"
                                 "\n\r-request: %2"
                                 "\n\r-response: %3")
                              .arg(++transactionCount).arg(s).arg(responseLineEdit->text()));
    }

    void Dialog::processError(const QString &s)
    {
        activateRunButton();
        statusLabel->setText(tr("Status: Not running, %1.").arg(s));
        trafficLabel->setText(tr("No traffic."));
    }

    void Dialog::processTimeout(const QString &s)
    {
        statusLabel->setText(tr("Status: Running, %1.").arg(s));
        trafficLabel->setText(tr("No traffic."));
    }
    void Dialog::activateRunButton()
    {
        runButton->setEnabled(true);
    }