kgamechat.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kgamechat.h"
00022 #include "kgamechat.moc"
00023
00024 #include "kgame.h"
00025 #include "kplayer.h"
00026 #include "kgameproperty.h"
00027 #include "kgamemessage.h"
00028
00029 #include <klocale.h>
00030 #include <kdebug.h>
00031
00032 #include <qmap.h>
00033 #include <qintdict.h>
00034
00035
00036 #define FIRST_ID 2 // first id, that is free of use, aka not defined above
00037
00038 class KGameChatPrivate
00039 {
00040 public:
00041 KGameChatPrivate()
00042 {
00043 mFromPlayer = 0;
00044 mGame = 0;
00045
00046 mToMyGroup = -1;
00047 }
00048
00049 KGame* mGame;
00050 KPlayer* mFromPlayer;
00051 int mMessageId;
00052
00053
00054 QIntDict<KPlayer> mIndex2Player;
00055
00056 QMap<int, int> mSendId2PlayerId;
00057 int mToMyGroup;
00058 };
00059
00060 KGameChat::KGameChat(KGame* g, int msgid, QWidget* parent) : KChatBase(parent)
00061 {
00062 init(g, msgid);
00063 }
00064
00065 KGameChat::KGameChat(KGame* g, int msgid, KPlayer* fromPlayer, QWidget* parent) : KChatBase(parent)
00066 {
00067 init(g, msgid);
00068 setFromPlayer(fromPlayer);
00069 }
00070
00071 KGameChat::KGameChat(QWidget* parent) : KChatBase(parent)
00072 {
00073 init(0, -1);
00074 }
00075
00076 KGameChat::~KGameChat()
00077 {
00078 kdDebug(11001) << k_funcinfo << endl;
00079 delete d;
00080 }
00081
00082 void KGameChat::init(KGame* g, int msgId)
00083 {
00084 kdDebug(11001) << k_funcinfo << endl;
00085 d = new KGameChatPrivate;
00086 setMessageId(msgId);
00087
00088 setKGame(g);
00089 }
00090
00091 void KGameChat::addMessage(int fromId, const QString& text)
00092 {
00093 if (!d->mGame) {
00094 kdWarning(11001) << "no KGame object has been set" << endl;
00095 addMessage(i18n("Player %1").arg(fromId), text);
00096 } else {
00097 KPlayer* p = d->mGame->findPlayer(fromId);
00098 if (p) {
00099 kdDebug(11001) << "adding message of player " << p->name() << "id=" << fromId << endl;
00100 addMessage(p->name(), text);
00101 } else {
00102 kdWarning(11001) << "Could not find player id " << fromId << endl;
00103 addMessage(i18n("Unknown"), text);
00104 }
00105 }
00106 }
00107
00108 void KGameChat::returnPressed(const QString& text)
00109 {
00110 if (!d->mFromPlayer) {
00111 kdWarning(11001) << k_funcinfo << ": You must set a player first!" << endl;
00112 return;
00113 }
00114 if (!d->mGame) {
00115 kdWarning(11001) << k_funcinfo << ": You must set a game first!" << endl;
00116 return;
00117 }
00118
00119 kdDebug(11001) << "from: " << d->mFromPlayer->id() << "==" << d->mFromPlayer->name() << endl;
00120
00121 int id = sendingEntry();
00122
00123 if (isToGroupMessage(id)) {
00124
00125
00126 QString group = d->mFromPlayer->group();
00127 kdDebug(11001) << "send to group " << group << endl;
00128 int sender = d->mFromPlayer->id();
00129 d->mGame->sendGroupMessage(text, messageId(), sender, group);
00130
00131
00132
00133
00134
00135
00136 } else {
00137 int toPlayer = 0;
00138 if (!isSendToAllMessage(id) && isToPlayerMessage(id)) {
00139 toPlayer = playerId(id);
00140 if (toPlayer == -1) {
00141 kdError(11001) << k_funcinfo << ": don't know that player "
00142 << "- internal ERROR" << endl;
00143 }
00144 }
00145 int receiver = toPlayer;
00146 int sender = d->mFromPlayer->id();
00147 d->mGame->sendMessage(text, messageId(), receiver, sender);
00148 }
00149 }
00150
00151 void KGameChat::setMessageId(int msgid)
00152 { d->mMessageId = msgid; }
00153
00154 int KGameChat::messageId() const
00155 { return d->mMessageId; }
00156
00157 bool KGameChat::isSendToAllMessage(int id) const
00158 { return (id == KChatBase::SendToAll); }
00159
00160 bool KGameChat::isToGroupMessage(int id) const
00161 { return (id == d->mToMyGroup); }
00162
00163 bool KGameChat::isToPlayerMessage(int id) const
00164 {
00165 return d->mSendId2PlayerId.contains(id); }
00166
00167 QString KGameChat::sendToPlayerEntry(const QString& name) const
00168 { return i18n("Send to %1").arg(name); }
00169
00170 int KGameChat::playerId(int id) const
00171 {
00172 if (!isToPlayerMessage(id)) {
00173 return -1;
00174 }
00175
00176 return d->mSendId2PlayerId[id];
00177 }
00178
00179 int KGameChat::sendingId(int playerId) const
00180 {
00181 QMap<int, int>::Iterator it;
00182 for (it = d->mSendId2PlayerId.begin(); it != d->mSendId2PlayerId.end(); ++it) {
00183 if (it.data() == playerId) {
00184 return it.key();
00185 }
00186 }
00187 return -1;
00188 }
00189
00190 const QString& KGameChat::fromName() const
00191 { return d->mFromPlayer ? d->mFromPlayer->name() : QString::null; }
00192
00193 bool KGameChat::hasPlayer(int id) const
00194 {
00195 return (sendingId(id) != -1);
00196 }
00197
00198 void KGameChat::setFromPlayer(KPlayer* p)
00199 {
00200 if (!p) {
00201 kdError(11001) << k_funcinfo << ": NULL player" << endl;
00202 removeSendingEntry(d->mToMyGroup);
00203 d->mFromPlayer = 0;
00204 return;
00205 }
00206 if (d->mFromPlayer) {
00207 changeSendingEntry(p->group(), d->mToMyGroup);
00208 } else {
00209 if (d->mToMyGroup != -1) {
00210 kdWarning(11001) << "send to my group exists already - removing" << endl;
00211 removeSendingEntry(d->mToMyGroup);
00212 }
00213 d->mToMyGroup = nextId();
00214 addSendingEntry(i18n("Send to My Group (\"%1\")").arg(p->group()), d->mToMyGroup);
00215 }
00216 d->mFromPlayer = p;
00217 kdDebug(11001) << k_funcinfo << " player=" << p << endl;
00218 }
00219
00220
00221 void KGameChat::setKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame(KGame* gnsetKGame( |