#include #include #include #include #include #include #include #include #include #include #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("") : "
") + "" + sender + ": " + 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); messageInput->setFocus(); 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(); }