summaryrefslogtreecommitdiffstats
path: root/MessageForm.cpp
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2009-05-02 01:21:51 -0400
committerJason A. Donenfeld <Jason@zx2c4.com>2009-05-02 01:21:51 -0400
commitfb8677daa2658e52511317511d497dfc456e4dc8 (patch)
tree5cbeb07a8dbea9674d19ce1edb3d040ef175ea03 /MessageForm.cpp
downloadMessagePopper-fb8677daa2658e52511317511d497dfc456e4dc8.tar.xz
MessagePopper-fb8677daa2658e52511317511d497dfc456e4dc8.zip
Initial commit.
Diffstat (limited to 'MessageForm.cpp')
-rw-r--r--MessageForm.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/MessageForm.cpp b/MessageForm.cpp
new file mode 100644
index 0000000..9156b35
--- /dev/null
+++ b/MessageForm.cpp
@@ -0,0 +1,117 @@
+#include <QMainWindow>
+#include <QLineEdit>
+#include <QTextBrowser>
+#include <QStatusBar>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QTextBrowser>
+#include <QPushButton>
+#include <QLabel>
+#include <QGroupBox>
+#include "MessageListener.h"
+#include "MessageForm.h"
+
+MessageForm::MessageForm(QWidget *parent)
+ : QMainWindow(parent)
+{
+ listener = new MessageListener(this);
+ connect(listener, SIGNAL(receivedMessage(QString)), this, SLOT(receivedMessage(QString)));
+ connect(listener, SIGNAL(connected()), this, SLOT(connected()));
+ connect(listener, SIGNAL(disconnected()), this, SLOT(disconnected()));
+ connect(listener, SIGNAL(connectionFailed()), this, SLOT(connectionFailed()));
+
+ messageInput = new QLineEdit;
+ messageDisplay = new QTextBrowser;
+ statusInfo = new QLabel;
+ statusBar()->addWidget(statusInfo, 1);
+ connectServer = new QLineEdit;
+ QPushButton *connectButton = new QPushButton("&Connect");
+ QPushButton *sendButton = new QPushButton("&Send");
+ QLabel *connectLabel = new QLabel("Server");
+ connectLabel->setBuddy(connectServer);
+
+ connect(connectServer, SIGNAL(returnPressed()), connectButton, SIGNAL(clicked()));
+ connect(messageInput, SIGNAL(returnPressed()), sendButton, SIGNAL(clicked()));
+ connect(connectButton, SIGNAL(clicked()), this, SLOT(connectToServer()));
+ connect(sendButton, SIGNAL(clicked()), this, SLOT(sendMessage()));
+
+
+ QHBoxLayout *connectLayout = new QHBoxLayout;
+ connectLayout->addWidget(connectLabel);
+ connectLayout->addWidget(connectServer);
+ connectLayout->addWidget(connectButton);
+ QVBoxLayout *messageLayout = new QVBoxLayout;
+ QHBoxLayout *sendLayout = new QHBoxLayout;
+ sendLayout->addWidget(messageInput);
+ sendLayout->addWidget(sendButton);
+ messageLayout->addWidget(messageDisplay);
+ messageLayout->addLayout(sendLayout);
+
+ connectGroup = new QGroupBox("Connect to Server");
+ connectGroup->setLayout(connectLayout);
+ messageGroup = new QGroupBox("Network Chat");
+ messageGroup->setLayout(messageLayout);
+
+ QVBoxLayout *allLayout = new QVBoxLayout;
+ allLayout->addWidget(connectGroup);
+ allLayout->addWidget(messageGroup);
+ QWidget *centralWidget = new QWidget;
+ centralWidget->setLayout(allLayout);
+ setCentralWidget(centralWidget);
+ setWindowTitle("ZX2C4 Message Popper");
+
+ listenForConnection();
+}
+void MessageForm::appendMessage(QString sender, const QString &message)
+{
+ static bool firstMessage = true;
+ messageDisplay->moveCursor(QTextCursor::End);
+ messageDisplay->insertHtml((firstMessage ? QString("") : "<br>") + "<b>" + sender + ": </b>" + message);
+ messageDisplay->moveCursor(QTextCursor::End);
+ firstMessage = false;
+}
+void MessageForm::receivedMessage(const QString text)
+{
+ appendMessage(QString("Stranger"), text);
+}
+void MessageForm::connected()
+{
+ messageGroup->setVisible(true);
+ connectGroup->setVisible(false);
+ statusInfo->setText(QString("Connected to %1.").arg(listener->remoteHost()));
+ statusBar()->clearMessage();
+}
+void MessageForm::disconnected()
+{
+ statusBar()->showMessage("Disconnected!", 2000);
+ listenForConnection();
+}
+void MessageForm::connectionFailed()
+{
+ statusBar()->showMessage("Connection failed!", 2000);
+ connectGroup->setEnabled(true);
+}
+void MessageForm::sendMessage()
+{
+ QString text = messageInput->text();
+ messageInput->clear();
+ listener->writeMessage(text);
+ appendMessage(QString("Me"), text);
+}
+void MessageForm::connectToServer()
+{
+ connectGroup->setEnabled(false);
+ listener->connectToHost(connectServer->text());
+ statusBar()->showMessage("Connecting...");
+}
+void MessageForm::listenForConnection()
+{
+ messageGroup->setVisible(false);
+ connectGroup->setVisible(true);
+ connectGroup->setEnabled(true);
+ if(listener->startListener())
+ statusInfo->setText("Listening for connection...");
+ else
+ statusInfo->setText("Listener failed to start.");
+ statusBar()->clearMessage();
+}