diff options
author | Jerome Pasion <jerome.pasion@digia.com> | 2012-09-25 15:20:41 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-27 14:43:52 +0200 |
commit | d8a179128c0fa8e9cc482df58b9334c696602be6 (patch) | |
tree | dd5032440aa87dfd63c973265adc9947db0918f6 /examples/bluetooth/btchat/chat.cpp | |
parent | 9d89c661395347bdda9362a77d38c86ad60f486b (diff) |
Qt Bluetooth: Modularized documentation
-moved documentation to src/bluetooth/doc
-added a qdocconf file for Qt Bluetooth
-fixed relative paths for snippets
-moved examples to examples/bluetooth
Change-Id: Id41bac50dca628400568d191f1c3ccfbaac790a1
Reviewed-by: Alex <ablasche@gmail.com>
Diffstat (limited to 'examples/bluetooth/btchat/chat.cpp')
-rw-r--r-- | examples/bluetooth/btchat/chat.cpp | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/examples/bluetooth/btchat/chat.cpp b/examples/bluetooth/btchat/chat.cpp new file mode 100644 index 00000000..7047cbdd --- /dev/null +++ b/examples/bluetooth/btchat/chat.cpp @@ -0,0 +1,179 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtBluetooth module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "chat.h" +#include "remoteselector.h" +#include "chatserver.h" +#include "chatclient.h" + +#include <qbluetoothuuid.h> +#include <qrfcommserver.h> +#include <qbluetoothservicediscoveryagent.h> +#include <qbluetoothdeviceinfo.h> +#include <qbluetoothlocaldevice.h> + +#include <QTimer> + +#include <QDebug> + +static const QLatin1String serviceUuid("e8e10f95-1a70-4b27-9ccf-02010264e9c8"); + +Chat::Chat(QWidget *parent) +: QDialog(parent), ui(new Ui_Chat) +{ + //! [Construct UI] + ui->setupUi(this); + +#if defined(Q_OS_WINCE) || defined(Q_WS_MAEMO_6) + setWindowState(Qt::WindowFullScreen); +#endif + + connect(ui->quitButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(ui->connectButton, SIGNAL(clicked()), this, SLOT(connectClicked())); + connect(ui->sendButton, SIGNAL(clicked()), this, SLOT(sendClicked())); + //! [Construct UI] + + //! [Create Chat Server] + server = new ChatServer(this); + connect(server, SIGNAL(clientConnected(QString)), this, SLOT(clientConnected(QString))); + connect(server, SIGNAL(clientDisconnected(QString)), this, SLOT(clientDisconnected(QString))); + connect(server, SIGNAL(messageReceived(QString,QString)), + this, SLOT(showMessage(QString,QString))); + connect(this, SIGNAL(sendMessage(QString)), server, SLOT(sendMessage(QString))); + server->startServer(); + //! [Create Chat Server] + + //! [Get local device name] + localName = QBluetoothLocalDevice().name(); + //! [Get local device name] +} + +Chat::~Chat() +{ + qDeleteAll(clients); + delete server; +} + +//! [clientConnected clientDisconnected] +void Chat::clientConnected(const QString &name) +{ + ui->chat->insertPlainText(QString::fromLatin1("%1 has joined chat.\n").arg(name)); +} + +void Chat::clientDisconnected(const QString &name) +{ + ui->chat->insertPlainText(QString::fromLatin1("%1 has left.\n").arg(name)); +} +//! [clientConnected clientDisconnected] + +//! [connected] +void Chat::connected(const QString &name) +{ + ui->chat->insertPlainText(QString::fromLatin1("Joined chat with %1.\n").arg(name)); +} +//! [connected] + +//! [clientDisconnected] +void Chat::clientDisconnected() +{ + ChatClient *client = qobject_cast<ChatClient *>(sender()); + if (client) { + clients.removeOne(client); + client->deleteLater(); + } +} +//! [clientDisconnected] + +//! [Connect to remote service] +void Chat::connectClicked() +{ + ui->connectButton->setEnabled(false); + + // scan for services + RemoteSelector remoteSelector; + remoteSelector.startDiscovery(QBluetoothUuid(serviceUuid)); + if (remoteSelector.exec() == QDialog::Accepted) { + QBluetoothServiceInfo service = remoteSelector.service(); + + qDebug() << "Connecting to service 2" << service.serviceName() + << "on" << service.device().name(); + + // Create client + qDebug() << "Going to create client"; + ChatClient *client = new ChatClient(this); +qDebug() << "Connecting..."; + + connect(client, SIGNAL(messageReceived(QString,QString)), + this, SLOT(showMessage(QString,QString))); + connect(client, SIGNAL(disconnected()), this, SLOT(clientDisconnected())); + connect(client, SIGNAL(connected(QString)), this, SLOT(connected(QString))); + connect(this, SIGNAL(sendMessage(QString)), client, SLOT(sendMessage(QString))); +qDebug() << "Start client"; + client->startClient(service); + + clients.append(client); + } + + ui->connectButton->setEnabled(true); +} +//! [Connect to remote service] + +//! [sendClicked] +void Chat::sendClicked() +{ + ui->sendButton->setEnabled(false); + ui->sendText->setEnabled(false); + + showMessage(localName, ui->sendText->text()); + emit sendMessage(ui->sendText->text()); + + ui->sendText->clear(); + + ui->sendText->setEnabled(true); + ui->sendButton->setEnabled(true); +} +//! [sendClicked] + +//! [showMessage] +void Chat::showMessage(const QString &sender, const QString &message) +{ + ui->chat->insertPlainText(QString::fromLatin1("%1: %2\n").arg(sender, message)); +} +//! [showMessage] |