diff options
Diffstat (limited to 'examples/dbus/chat/chat.cpp')
-rw-r--r-- | examples/dbus/chat/chat.cpp | 119 |
1 files changed, 42 insertions, 77 deletions
diff --git a/examples/dbus/chat/chat.cpp b/examples/dbus/chat/chat.cpp index 41a9f55120..cced911955 100644 --- a/examples/dbus/chat/chat.cpp +++ b/examples/dbus/chat/chat.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include <QApplication> +#include <QInputDialog> #include <QMessageBox> #include "chat.h" @@ -9,105 +10,69 @@ #include "chat_interface.h" ChatMainWindow::ChatMainWindow() - : m_nickname(QLatin1String("nickname")) { setupUi(this); - sendButton->setEnabled(false); - connect(messageLineEdit, SIGNAL(textChanged(QString)), - this, SLOT(textChangedSlot(QString))); - connect(sendButton, SIGNAL(clicked(bool)), this, SLOT(sendClickedSlot())); - connect(actionChangeNickname, SIGNAL(triggered(bool)), this, SLOT(changeNickname())); - connect(actionAboutQt, SIGNAL(triggered(bool)), this, SLOT(aboutQt())); - connect(qApp, SIGNAL(lastWindowClosed()), this, SLOT(exiting())); + connect(messageLineEdit, &QLineEdit::textChanged, this, + [this](const QString &newText) { sendButton->setEnabled(!newText.isEmpty()); }); + connect(sendButton, &QPushButton::clicked, this, [this]() { + emit message(m_nickname, messageLineEdit->text()); + messageLineEdit->clear(); + }); + connect(actionChangeNickname, &QAction::triggered, + this, &ChatMainWindow::changeNickname); + connect(actionAboutQt, &QAction::triggered, this, [this]() { QMessageBox::aboutQt(this); }); + connect(qApp, &QApplication::lastWindowClosed, this, + [this]() { emit action(m_nickname, tr("leaves the chat")); }); // add our D-Bus interface and connect to D-Bus new ChatAdaptor(this); - QDBusConnection::sessionBus().registerObject("/", this); - - org::example::chat *iface; - iface = new org::example::chat(QString(), QString(), QDBusConnection::sessionBus(), this); - //connect(iface, SIGNAL(message(QString,QString)), this, SLOT(messageSlot(QString,QString))); - QDBusConnection::sessionBus().connect(QString(), QString(), "org.example.chat", "message", this, SLOT(messageSlot(QString,QString))); - connect(iface, SIGNAL(action(QString,QString)), this, SLOT(actionSlot(QString,QString))); - - NicknameDialog dialog; - dialog.cancelButton->setVisible(false); - dialog.exec(); - m_nickname = dialog.nickname->text().trimmed(); - emit action(m_nickname, QLatin1String("joins the chat")); -} -ChatMainWindow::~ChatMainWindow() -{ -} + auto connection = QDBusConnection::sessionBus(); + connection.registerObject("/", this); -void ChatMainWindow::rebuildHistory() -{ - QString history = m_messages.join( QLatin1String("\n" ) ); - chatHistory->setPlainText(history); -} + using org::example::chat; -void ChatMainWindow::messageSlot(const QString &nickname, const QString &text) -{ - QString msg( QLatin1String("<%1> %2") ); - msg = msg.arg(nickname, text); - m_messages.append(msg); + auto *iface = new chat({}, {}, connection, this); + connect(iface, &chat::message, this, [this](const QString &nickname, const QString &text) { + displayMessage(tr("<%1> %2").arg(nickname, text)); + }); + connect(iface, &chat::action, this, [this](const QString &nickname, const QString &text) { + displayMessage(tr("* %1 %2").arg(nickname, text)); + }); - if (m_messages.count() > 100) - m_messages.removeFirst(); - rebuildHistory(); + if (!changeNickname(true)) + QMetaObject::invokeMethod(qApp, &QApplication::quit, Qt::QueuedConnection); } -void ChatMainWindow::actionSlot(const QString &nickname, const QString &text) +void ChatMainWindow::displayMessage(const QString &message) { - QString msg( QLatin1String("* %1 %2") ); - msg = msg.arg(nickname, text); - m_messages.append(msg); + m_messages.append(message); if (m_messages.count() > 100) m_messages.removeFirst(); - rebuildHistory(); -} - -void ChatMainWindow::textChangedSlot(const QString &newText) -{ - sendButton->setEnabled(!newText.isEmpty()); -} -void ChatMainWindow::sendClickedSlot() -{ - //emit message(m_nickname, messageLineEdit->text()); - QDBusMessage msg = QDBusMessage::createSignal("/", "org.example.chat", "message"); - msg << m_nickname << messageLineEdit->text(); - QDBusConnection::sessionBus().send(msg); - messageLineEdit->setText(QString()); + auto history = m_messages.join(QLatin1String("\n")); + chatHistory->setPlainText(history); } -void ChatMainWindow::changeNickname() +bool ChatMainWindow::changeNickname(bool initial) { - NicknameDialog dialog(this); - if (dialog.exec() == QDialog::Accepted) { - QString old = m_nickname; - m_nickname = dialog.nickname->text().trimmed(); - emit action(old, QString("is now known as %1").arg(m_nickname)); + auto newNickname = QInputDialog::getText(this, tr("Set nickname"), tr("New nickname:")); + newNickname = newNickname.trimmed(); + + if (!newNickname.isEmpty()) { + auto old = m_nickname; + m_nickname = newNickname; + + if (initial) + emit action(m_nickname, tr("joins the chat")); + else + emit action(old, tr("is now known as %1").arg(m_nickname)); + return true; } -} - -void ChatMainWindow::aboutQt() -{ - QMessageBox::aboutQt(this); -} - -void ChatMainWindow::exiting() -{ - emit action(m_nickname, QLatin1String("leaves the chat")); -} -NicknameDialog::NicknameDialog(QWidget *parent) - : QDialog(parent) -{ - setupUi(this); + return false; } int main(int argc, char **argv) |