chat code

This commit is contained in:
Max-Wilhelm Bruker 2009-08-23 16:25:10 +02:00
parent 8daa81e462
commit 5d32bb8bc4
14 changed files with 85 additions and 28 deletions

View file

@ -62,6 +62,7 @@ CardInfoWidget::CardInfoWidget(CardDatabase *_db, QWidget *parent)
retranslateUi();
setFrameStyle(QFrame::Panel | QFrame::Raised);
textLabel->setFixedHeight(130);
setFixedSize(sizeHint());
}

View file

@ -2,23 +2,27 @@
#include "chatwidget.h"
#include "client.h"
ChannelWidget::ChannelWidget(Client *_client, const QString &_name, QWidget *parent)
ChannelWidget::ChannelWidget(Client *_client, const QString &_name, bool readOnly, QWidget *parent)
: QWidget(parent), client(_client), name(_name)
{
playerList = new QListWidget;
textEdit = new QTextEdit;
textEdit->setReadOnly(true);
sayEdit = new QLineEdit;
connect(sayEdit, SIGNAL(returnPressed()), this, SLOT(sendMessage()));
if (!readOnly) {
sayEdit = new QLineEdit;
connect(sayEdit, SIGNAL(returnPressed()), this, SLOT(sendMessage()));
}
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(textEdit);
vbox->addWidget(sayEdit);
if (!readOnly)
vbox->addWidget(sayEdit);
QHBoxLayout *hbox = new QHBoxLayout;
hbox->addLayout(vbox, 1);
hbox->addLayout(vbox);
hbox->addWidget(playerList);
playerList->setFixedWidth(100);
setLayout(hbox);
}
@ -57,6 +61,11 @@ void ChannelWidget::sayEvent(const QString &playerName, const QString &s)
textEdit->append(QString("<font color=\"red\">%1:</font> %2").arg(playerName).arg(s));
}
void ChannelWidget::serverMessageEvent(const QString &s)
{
textEdit->append(QString("<font color=\"blue\">%1</font>").arg(s));
}
ChatWidget::ChatWidget(Client *_client, QWidget *parent)
: QWidget(parent), client(_client)
{
@ -110,7 +119,7 @@ void ChatWidget::chatEvent(const ChatEventData &data)
const QStringList &msg = data.getEventData();
switch (data.getEventType()) {
case eventChatListChannels: {
if (msg.size() != 3)
if (msg.size() != 4)
break;
for (int i = 0; i < channelList->topLevelItemCount(); ++i) {
QTreeWidgetItem *twi = channelList->topLevelItem(i);
@ -121,6 +130,8 @@ void ChatWidget::chatEvent(const ChatEventData &data)
}
}
channelList->addTopLevelItem(new QTreeWidgetItem(QStringList() << msg[0] << msg[1] << msg[2]));
if (msg[3] == "1")
joinChannel(msg[0]);
break;
}
case eventChatJoinChannel: {
@ -159,11 +170,33 @@ void ChatWidget::chatEvent(const ChatEventData &data)
w->sayEvent(msg[1], msg[2]);
break;
}
case eventChatServerMessage: {
if (msg.size() != 2)
break;
ChannelWidget *w;
if (msg[0].isEmpty()) {
w = getChannel("Server");
if (!w) {
w = new ChannelWidget(client, "Server", true);
tab->addTab(w, "Server");
}
} else
w = getChannel(msg[0]);
w->serverMessageEvent(msg[1]);
break;
}
default: {
}
}
}
void ChatWidget::joinChannel(const QString &channelName)
{
PendingCommand *pc = client->chatJoinChannel(channelName);
pc->setExtraData(channelName);
connect(pc, SIGNAL(finished(ServerResponse)), this, SLOT(joinFinished(ServerResponse)));
}
void ChatWidget::joinClicked()
{
QTreeWidgetItem *twi = channelList->currentItem();
@ -173,9 +206,7 @@ void ChatWidget::joinClicked()
if (getChannel(channelName))
return;
PendingCommand *pc = client->chatJoinChannel(channelName);
pc->setExtraData(channelName);
connect(pc, SIGNAL(finished(ServerResponse)), this, SLOT(joinFinished(ServerResponse)));
joinChannel(channelName);
}
void ChatWidget::joinFinished(ServerResponse resp)

View file

@ -23,13 +23,14 @@ private:
private slots:
void sendMessage();
public:
ChannelWidget(Client *_client, const QString &_name, QWidget *parent = 0);
ChannelWidget(Client *_client, const QString &_name, bool readOnly = false, QWidget *parent = 0);
const QString &getName() const { return name; }
void joinEvent(const QString &playerName);
void listPlayersEvent(const QString &playerName);
void leaveEvent(const QString &playerName);
void sayEvent(const QString &playerName, const QString &s);
void serverMessageEvent(const QString &s);
};
class ChatWidget : public QWidget {
@ -41,6 +42,7 @@ private:
Client *client;
ChannelWidget *getChannel(const QString &name);
void joinChannel(const QString &channelName);
private slots:
void chatEvent(const ChatEventData &data);
void joinClicked();

View file

@ -42,12 +42,6 @@ void GameSelector::actRefresh()
client->listGames();
}
void GameSelector::statusChanged(ProtocolStatus status)
{
if (status == StatusDisconnected)
disableGameList();
}
void GameSelector::checkResponse(ServerResponse response)
{
createButton->setEnabled(true);
@ -84,7 +78,6 @@ void GameSelector::actJoin()
void GameSelector::enableGameList()
{
connect(client, SIGNAL(gameListEvent(ServerGame *)), gameListModel, SLOT(updateGameList(ServerGame *)));
connect(client, SIGNAL(statusChanged(ProtocolStatus)), this, SLOT(statusChanged(ProtocolStatus)));
client->listGames();
show();
}

View file

@ -21,7 +21,6 @@ private slots:
void actRefresh();
void actJoin();
void checkResponse(ServerResponse response);
void statusChanged(ProtocolStatus status);
private:
Client *client;

View file

@ -50,6 +50,7 @@ ChatEventData::ChatEventData(const QString &line)
eventHash.insert("list_players", eventChatListPlayers);
eventHash.insert("leave_channel", eventChatLeaveChannel);
eventHash.insert("say", eventChatSay);
eventHash.insert("server_message", eventChatServerMessage);
}
QStringList values = line.split('|');

View file

@ -53,7 +53,8 @@ enum ChatEventType {
eventChatJoinChannel,
eventChatListPlayers,
eventChatLeaveChannel,
eventChatSay
eventChatSay,
eventChatServerMessage
};
class ChatEventData {

View file

@ -71,6 +71,8 @@ void MainWindow::statusChanged(ProtocolStatus _status)
aLeaveGame->setEnabled(false);
phasesToolbar->setActivePhase(-1);
phasesToolbar->hide();
gameSelector->disableGameList();
chatWidget->disableChat();
emit logDisconnected();
break;
case StatusLoggingIn: