1
#include <QtGui>
2
#include <webclient.h>
3
#include <ui_chat.h>
4
5
WebClient *webClient;
6
7
class QRcui : public QWidget, public Ui_Form
8
{
9
Q_OBJECT
10
public:
11
    QRcui();
12
};
13
14
QRcui::QRcui()
15
{
16
    setupUi(this);
17
}
18
19
20
class QRcServer : public QObject
21
{
22
Q_OBJECT
23
public slots:
24
    void instantiateUi(QWidget **root, Session *session)
25
    {
26
        Q_UNUSED(session);
27
28
        QRcui *ui = new QRcui();
29
        webClient->setWidgetHint(ui, WebClient::StaticWidget);
30
31
        QMdiArea *mdiArea = new QMdiArea;
32
        QMdiSubWindow *mdiSub = mdiArea->addSubWindow(ui);
33
        webClient->setWidgetHint(mdiSub, WebClient::StaticWidget);
34
35
        mdiArea->resize(500, 350);
36
        webClient->setWidgetHint(mdiArea->viewport(), WebClient::StaticWidget);
37
38
        *root = mdiArea;
39
        uis.append(ui);
40
41
        // Populate the textedit with the current text.
42
        QString text;
43
        foreach (const QString &line, textLines) {
44
            text += line + "\n";
45
        }
46
        ui->textBrowser_chat->setText(text);
47
48
        connect(ui->lineEdit_message, SIGNAL(returnPressed()), SLOT(addTextLine()));
49
        connect(ui->pushButton_send, SIGNAL(clicked()), SLOT(addTextLine()));
50
        ui->lineEdit_nick->setText(session->address.toString());
51
    }
52
53
    void addTextLine()
54
    {
55
        QRcui *ui = reinterpret_cast<QRcui * >(sender()->parent());
56
        QString message = ui->lineEdit_message->text();
57
        if (message.isEmpty())
58
            return;
59
        textLines.append(ui->lineEdit_nick->text() + ": " + message);
60
        ui->lineEdit_message->clear();
61
        while (textLines.count() > 10) {
62
            textLines.takeFirst();
63
        }
64
        updateTextDisplays();
65
    }
66
67
    void updateTextDisplays()
68
    {
69
        QString text;
70
71
        foreach (const QString &line, textLines) {
72
            text += line + "\n";
73
        }
74
75
        foreach (QRcui *ui, uis) {
76
            ui->textBrowser_chat->setText(text);
77
        }
78
    }
79
private:
80
    QList<QString> textLines;
81
    QList<QRcui *> uis;
82
};
83
int main(int argc, char **argv)
84
{
85
    QApplication app(argc, argv);
86
87
88
    webClient = new WebClient;
89
//    webClient.setActiveSessionLimit(100);
90
91
    QRcServer qrcServer;
92
93
    QRcServer object;
94
    QObject::connect(webClient, SIGNAL(newSession(QWidget **, Session *)),
95
                     &qrcServer, SLOT(instantiateUi(QWidget **, Session *)));
96
97
    return app.exec();
98
}
99
100
#include "main.moc"