xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/terminal/mainwindow.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Denis Shienkov <denis.shienkov@gmail.com>
4 ** Copyright (C) 2012 Laszlo Papp <lpapp@kde.org>
5 ** Contact: http://www.qt.io/licensing/
6 **
7 ** This file is part of the QtSerialPort module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL21$
10 ** Commercial License Usage
11 ** Licensees holding valid commercial Qt licenses may use this file in
12 ** accordance with the commercial license agreement provided with the
13 ** Software or, alternatively, in accordance with the terms contained in
14 ** a written agreement between you and The Qt Company. For licensing terms
15 ** and conditions see http://www.qt.io/terms-conditions. For further
16 ** information use the contact form at http://www.qt.io/contact-us.
17 **
18 ** GNU Lesser General Public License Usage
19 ** Alternatively, this file may be used under the terms of the GNU Lesser
20 ** General Public License version 2.1 or version 3 as published by the Free
21 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
22 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
23 ** following information to ensure the GNU Lesser General Public License
24 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
25 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
26 **
27 ** As a special exception, The Qt Company gives you certain additional
28 ** rights. These rights are described in The Qt Company LGPL Exception
29 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
30 **
31 ** $QT_END_LICENSE$
32 **
33 ****************************************************************************/
34 
35 #include "mainwindow.h"
36 #include "ui_mainwindow.h"
37 #include "console.h"
38 #include "settingsdialog.h"
39 
40 #include <QMessageBox>
41 #include <QLabel>
42 #include <QtSerialPort/QSerialPort>
43 
44 //! [0]
TeriminalWidget(QWidget * parent)45 TeriminalWidget::TeriminalWidget(QWidget *parent) :
46     QMainWindow(parent),
47     ui(new Ui::TeriminalWidget)
48 {
49 
50 //! [0]
51     ui->setupUi(this);
52     console = new Console;
53     console->setEnabled(false);
54     setCentralWidget(console);
55 
56     console->installEventFilter(this);
57     console->viewport()->installEventFilter(this);
58 
59 //! [1]
60     serial = new QSerialPort(this);
61 //! [1]
62     settings = new SettingsDialog;
63 
64     ui->actionConnect->setEnabled(true);
65     ui->actionDisconnect->setEnabled(false);
66     ui->actionQuit->setEnabled(true);
67     ui->actionConfigure->setEnabled(true);
68 
69     status = new QLabel("Disconnected");
70     ui->statusBar->addWidget(status);
71 
72     initActionsConnections();
73 
74     connect(serial, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error),
75             this, &TeriminalWidget::handleError);
76 
77 //! [2]
78     connect(serial, &QSerialPort::readyRead, this, &TeriminalWidget::readData);
79 //! [2]
80     connect(console, &Console::getData, this, &TeriminalWidget::writeData);
81 //! [3]
82     ui->menuBar->setVisible(false);
83 
84 }
85 //! [3]
86 
~TeriminalWidget()87 TeriminalWidget::~TeriminalWidget()
88 {
89     delete settings;
90     delete ui;
91 }
92 
93 //! [4]
openSerialPort()94 void TeriminalWidget::openSerialPort()
95 {
96     SettingsDialog::Settings p = settings->settings();
97     serial->setPortName(p.name);
98     serial->setBaudRate(p.baudRate);
99     serial->setDataBits(p.dataBits);
100     serial->setParity(p.parity);
101     serial->setStopBits(p.stopBits);
102     serial->setFlowControl(p.flowControl);
103     if (serial->open(QIODevice::ReadWrite)) {
104         console->setEnabled(true);
105         console->setLocalEchoEnabled(p.localEchoEnabled);
106         ui->actionConnect->setEnabled(false);
107         ui->actionDisconnect->setEnabled(true);
108         ui->actionConfigure->setEnabled(false);
109         showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
110                           .arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
111                           .arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
112     } else {
113         QMessageBox::critical(this, tr("Error"), serial->errorString());
114 
115         showStatusMessage(tr("Open error"));
116     }
117 }
118 //! [4]
119 
120 //! [5]
closeSerialPort()121 void TeriminalWidget::closeSerialPort()
122 {
123     if (serial->isOpen())
124         serial->close();
125     console->setEnabled(false);
126     ui->actionConnect->setEnabled(true);
127     ui->actionDisconnect->setEnabled(false);
128     ui->actionConfigure->setEnabled(true);
129     showStatusMessage(tr("Disconnected"));
130 }
131 //! [5]
132 
about()133 void TeriminalWidget::about()
134 {
135     QMessageBox::about(this, tr("About Simple Terminal"),
136                        tr("The <b>Simple Terminal</b> example demonstrates how to "
137                           "use the Qt Serial Port module in modern GUI applications "
138                           "using Qt, with a menu bar, toolbars, and a status bar."));
139 }
140 
141 //! [6]
writeData(const QByteArray & data)142 void TeriminalWidget::writeData(const QByteArray &data)
143 {
144     serial->write(data);
145 }
146 //! [6]
147 
148 //! [7]
readData()149 void TeriminalWidget::readData()
150 {
151     QByteArray data = serial->readAll();
152     console->putData(data);
153 }
154 //! [7]
155 
156 //! [8]
handleError(QSerialPort::SerialPortError error)157 void TeriminalWidget::handleError(QSerialPort::SerialPortError error)
158 {
159     if (error == QSerialPort::ResourceError) {
160         QMessageBox::critical(this, tr("Critical Error"), serial->errorString());
161         closeSerialPort();
162     }
163 }
164 //! [8]
165 
initActionsConnections()166 void TeriminalWidget::initActionsConnections()
167 {
168     connect(ui->actionConnect, &QAction::triggered, this, &TeriminalWidget::openSerialPort);
169     connect(ui->actionDisconnect, &QAction::triggered, this, &TeriminalWidget::closeSerialPort);
170     connect(ui->actionQuit, &QAction::triggered, this, &TeriminalWidget::close);
171     connect(ui->actionConfigure, &QAction::triggered, settings, &TeriminalWidget::show);
172     connect(ui->actionClear, &QAction::triggered, console, &Console::clear);
173     connect(ui->actionAbout, &QAction::triggered, this, &TeriminalWidget::about);
174     connect(ui->actionAboutQt, &QAction::triggered, qApp, &QApplication::aboutQt);
175 }
176 
showStatusMessage(const QString & message)177 void TeriminalWidget::showStatusMessage(const QString &message)
178 {
179     status->setText(message);
180 }
181