21 #include "kgamedebugdialog.h"
23 #include "kgamemessage.h"
26 #include "kgamepropertyhandler.h"
28 #include <tdelistview.h>
29 #include <tdelistbox.h>
30 #include <tdelocale.h>
32 #include <kpushbutton.h>
33 #include <kstdguiitem.h>
37 #include <tqintdict.h>
39 #include <tqdatetime.h>
44 class KGameDebugDialogPrivate
47 KGameDebugDialogPrivate()
67 mPlayerProperties = 0;
75 mPlayerKGameAddress = 0;
79 mPlayerNetworkPriority = 0;
89 TDEListView* mGameProperties;
90 TQListViewItem* mGameAddress;
91 TQListViewItem* mGameId;
92 TQListViewItem* mGameCookie;
93 TQListViewItem* mGameMaster;
94 TQListViewItem* mGameAdmin;
95 TQListViewItem* mGameOffering;
96 TQListViewItem* mGameStatus;
97 TQListViewItem* mGameRunning;
98 TQListViewItem* mGameMaxPlayers;
99 TQListViewItem* mGameMinPlayers;
100 TQListViewItem* mGamePlayerCount;
102 TQFrame* mPlayerPage;
103 TDEListBox* mPlayerList;
104 TDEListView* mPlayerProperties;
105 TQListViewItem* mPlayerAddress;
106 TQListViewItem* mPlayerId;
107 TQListViewItem* mPlayerName;
108 TQListViewItem* mPlayerGroup;
109 TQListViewItem* mPlayerUserId;
110 TQListViewItem* mPlayerMyTurn;
111 TQListViewItem* mPlayerAsyncInput;
112 TQListViewItem* mPlayerKGameAddress;
113 TQListViewItem* mPlayerVirtual;
114 TQListViewItem* mPlayerActive;
115 TQListViewItem* mPlayerRtti;
116 TQListViewItem* mPlayerNetworkPriority;
118 TQFrame* mMessagePage;
119 TDEListView* mMessageList;
120 TDEListBox* mHideIdList;
123 KGameDebugDialog::KGameDebugDialog(
KGame* g, TQWidget* parent,
bool modal) :
124 KDialogBase(Tabbed, i18n(
"KGame Debug Dialog"), Close, Close,
125 parent, 0, modal, true)
127 d =
new KGameDebugDialogPrivate;
136 KGameDebugDialog::~KGameDebugDialog()
141 void KGameDebugDialog::initGamePage()
143 d->mGamePage = addPage(i18n(
"Debug &KGame"));
144 TQVBoxLayout* topLayout =
new TQVBoxLayout(d->mGamePage, marginHint(), spacingHint());
145 TQHBoxLayout* layout =
new TQHBoxLayout(topLayout);
147 TDEListView* v =
new TDEListView(d->mGamePage);
148 v->addColumn(i18n(
"Data"));
149 v->addColumn(i18n(
"Value"));
150 layout->addWidget(v);
152 d->mGameProperties =
new TDEListView(d->mGamePage);
153 d->mGameProperties->addColumn(i18n(
"Property"));
154 d->mGameProperties->addColumn(i18n(
"Value"));
155 d->mGameProperties->addColumn(i18n(
"Policy"));
156 layout->addWidget(d->mGameProperties);
158 TQPushButton* b =
new TQPushButton(i18n(
"Update"), d->mGamePage);
159 connect(b, TQT_SIGNAL(pressed()),
this, TQT_SLOT(slotUpdateGameData()));
160 topLayout->addWidget(b);
163 d->mGameAddress =
new TQListViewItem(v, i18n(
"KGame Pointer"));
164 d->mGameId =
new TQListViewItem(v, i18n(
"Game ID"));
165 d->mGameCookie =
new TQListViewItem(v, i18n(
"Game Cookie"));
166 d->mGameMaster =
new TQListViewItem(v, i18n(
"Is Master"));
167 d->mGameAdmin =
new TQListViewItem(v, i18n(
"Is Admin"));
168 d->mGameOffering =
new TQListViewItem(v, i18n(
"Is Offering Connections"));
169 d->mGameStatus =
new TQListViewItem(v, i18n(
"Game Status"));
170 d->mGameRunning =
new TQListViewItem(v, i18n(
"Game is Running"));
171 d->mGameMaxPlayers =
new TQListViewItem(v, i18n(
"Maximal Players"));
172 d->mGameMinPlayers =
new TQListViewItem(v, i18n(
"Minimal Players"));
173 d->mGamePlayerCount =
new TQListViewItem(v, i18n(
"Players"));
176 void KGameDebugDialog::initPlayerPage()
178 d->mPlayerPage = addPage(i18n(
"Debug &Players"));
179 TQVBoxLayout* topLayout =
new TQVBoxLayout(d->mPlayerPage, marginHint(), spacingHint());
180 TQHBoxLayout* layout =
new TQHBoxLayout(topLayout);
183 TQVBoxLayout* listLayout =
new TQVBoxLayout(layout);
184 TQLabel* listLabel =
new TQLabel(i18n(
"Available Players"), d->mPlayerPage);
185 listLayout->addWidget(listLabel);
186 d->mPlayerList =
new TDEListBox(d->mPlayerPage);
187 connect(d->mPlayerList, TQT_SIGNAL(executed(TQListBoxItem*)),
this, TQT_SLOT(slotUpdatePlayerData(TQListBoxItem*)));
188 listLayout->addWidget(d->mPlayerList);
189 d->mPlayerList->setSizePolicy(TQSizePolicy(TQSizePolicy::Preferred, TQSizePolicy::Expanding));
191 TDEListView* v =
new TDEListView(d->mPlayerPage);
192 layout->addWidget(v);
193 v->addColumn(i18n(
"Data"));
194 v->addColumn(i18n(
"Value"));
196 d->mPlayerProperties =
new TDEListView(d->mPlayerPage);
197 d->mPlayerProperties->addColumn(i18n(
"Property"));
198 d->mPlayerProperties->addColumn(i18n(
"Value"));
199 d->mPlayerProperties->addColumn(i18n(
"Policy"));
200 layout->addWidget(d->mPlayerProperties);
202 TQPushButton* b =
new TQPushButton(i18n(
"Update"), d->mPlayerPage);
203 connect(b, TQT_SIGNAL(pressed()),
this, TQT_SLOT(slotUpdatePlayerList()));
204 topLayout->addWidget(b);
206 d->mPlayerAddress =
new TQListViewItem(v, i18n(
"Player Pointer"));
207 d->mPlayerId =
new TQListViewItem(v, i18n(
"Player ID"));
208 d->mPlayerName =
new TQListViewItem(v, i18n(
"Player Name"));
209 d->mPlayerGroup =
new TQListViewItem(v, i18n(
"Player Group"));
210 d->mPlayerUserId =
new TQListViewItem(v, i18n(
"Player User ID"));
211 d->mPlayerMyTurn =
new TQListViewItem(v, i18n(
"My Turn"));
212 d->mPlayerAsyncInput =
new TQListViewItem(v, i18n(
"Async Input"));
213 d->mPlayerKGameAddress =
new TQListViewItem(v, i18n(
"KGame Address"));
214 d->mPlayerVirtual =
new TQListViewItem(v, i18n(
"Player is Virtual"));
215 d->mPlayerActive =
new TQListViewItem(v, i18n(
"Player is Active"));
216 d->mPlayerRtti =
new TQListViewItem(v, i18n(
"RTTI"));
217 d->mPlayerNetworkPriority =
new TQListViewItem(v, i18n(
"Network Priority"));
220 void KGameDebugDialog::initMessagePage()
222 d->mMessagePage = addPage(i18n(
"Debug &Messages"));
223 TQGridLayout* layout =
new TQGridLayout(d->mMessagePage, 11, 7, marginHint(), spacingHint());
224 d->mMessageList =
new TDEListView(d->mMessagePage);
225 layout->addMultiCellWidget(d->mMessageList, 0, 9, 0, 3);
226 d->mMessageList->addColumn(i18n(
"Time"));
227 d->mMessageList->addColumn(i18n(
"ID"));
228 d->mMessageList->addColumn(i18n(
"Receiver"));
229 d->mMessageList->addColumn(i18n(
"Sender"));
230 d->mMessageList->addColumn(i18n(
"ID - Text"));
232 TQPushButton* hide =
new TQPushButton(i18n(
"&>>"), d->mMessagePage);
233 connect(hide, TQT_SIGNAL(pressed()),
this, TQT_SLOT(slotHideId()));
234 layout->addWidget(hide, 4, 4);
236 TQPushButton* show =
new TQPushButton(i18n(
"&<<"), d->mMessagePage);
237 connect(show, TQT_SIGNAL(pressed()),
this, TQT_SLOT(slotShowId()));
238 layout->addWidget(show, 6, 4);
240 TQLabel* l =
new TQLabel(i18n(
"Do not show IDs:"), d->mMessagePage);
241 layout->addMultiCellWidget(l, 0, 0, 5, 6);
242 d->mHideIdList =
new TDEListBox(d->mMessagePage);
243 layout->addMultiCellWidget(d->mHideIdList, 1, 8, 5, 6);
245 TQPushButton* clear =
new KPushButton(KStdGuiItem::clear(), d->mMessagePage);
246 connect(clear, TQT_SIGNAL(pressed()),
this, TQT_SLOT(slotClearMessages()));
247 layout->addMultiCellWidget(clear, 10, 10, 0, 6);
251 void KGameDebugDialog::clearPlayerData()
253 d->mPlayerAddress->setText(1,
"");
254 d->mPlayerId->setText(1,
"");
255 d->mPlayerName->setText(1,
"");
256 d->mPlayerGroup->setText(1,
"");
257 d->mPlayerUserId->setText(1,
"");
258 d->mPlayerMyTurn->setText(1,
"");
259 d->mPlayerAsyncInput->setText(1,
"");
260 d->mPlayerKGameAddress->setText(1,
"");
261 d->mPlayerVirtual->setText(1,
"");
262 d->mPlayerActive->setText(1,
"");
263 d->mPlayerRtti->setText(1,
"");
264 d->mPlayerNetworkPriority->setText(1,
"");
266 d->mPlayerProperties->clear();
269 void KGameDebugDialog::clearGameData()
271 d->mGameAddress->setText(1,
"");
272 d->mGameId->setText(1,
"");
273 d->mGameCookie->setText(1,
"");
274 d->mGameMaster->setText(1,
"");
275 d->mGameAdmin->setText(1,
"");
276 d->mGameOffering->setText(1,
"");
277 d->mGameStatus->setText(1,
"");
278 d->mGameRunning->setText(1,
"");
279 d->mGameMaxPlayers->setText(1,
"");
280 d->mGameMinPlayers->setText(1,
"");
282 d->mGameProperties->clear();
285 void KGameDebugDialog::slotUpdatePlayerData()
287 if (!d->mGame || d->mPlayerList->currentItem() == -1) {
290 slotUpdatePlayerData(d->mPlayerList->item(d->mPlayerList->currentItem()));
293 void KGameDebugDialog::slotUpdatePlayerList()
295 TQListBoxItem* i = d->mPlayerList->firstItem();
296 for (; i; i = d->mPlayerList->firstItem()) {
300 TQPtrList<KPlayer> list = *d->mGame->playerList();
301 for (
KPlayer* p = list.first(); p; p = list.next()) {
306 void KGameDebugDialog::slotUpdateGameData()
309 d->mGameAddress->setText(1, i18n(
"NULL pointer"));
316 buf.sprintf(
"%p", d->mGame);
317 d->mGameAddress->setText(1, buf);
318 d->mGameId->setText(1, TQString::number(d->mGame->gameId()));
319 d->mGameCookie->setText(1, TQString::number(d->mGame->cookie()));
320 d->mGameMaster->setText(1, d->mGame->isMaster() ? i18n(
"True") : i18n(
"False"));
321 d->mGameAdmin->setText(1, d->mGame->isAdmin() ? i18n(
"True") : i18n(
"False"));
322 d->mGameOffering->setText(1, d->mGame->isOfferingConnections() ? i18n(
"True") : i18n(
"False"));
323 d->mGameStatus->setText(1, TQString::number(d->mGame->gameStatus()));
324 d->mGameRunning->setText(1, d->mGame->isRunning() ? i18n(
"True") : i18n(
"False"));
325 d->mGameMaxPlayers->setText(1, TQString::number(d->mGame->maxPlayers()));
326 d->mGameMinPlayers->setText(1, TQString::number(d->mGame->minPlayers()));
327 d->mGamePlayerCount->setText(1, TQString::number(d->mGame->playerCount()));
332 TQIntDictIterator<KGamePropertyBase> it(handler->
dict());
333 while (it.current()) {
335 switch (it.current()->policy()) {
336 case KGamePropertyBase::PolicyClean:
337 policy = i18n(
"Clean");
339 case KGamePropertyBase::PolicyDirty:
340 policy = i18n(
"Dirty");
342 case KGamePropertyBase::PolicyLocal:
343 policy = i18n(
"Local");
345 case KGamePropertyBase::PolicyUndefined:
347 policy = i18n(
"Undefined");
350 (void)
new TQListViewItem(d->mGameProperties,
359 void KGameDebugDialog::slotUpdatePlayerData(TQListBoxItem* item)
361 if (!item || !d->mGame) {
368 kdError(11001) << k_funcinfo <<
": cannot find player" << endl;
375 buf.sprintf(
"%p", p);
376 d->mPlayerAddress->setText(1, buf);
377 d->mPlayerId->setText(1, TQString::number(p->
id()));
378 d->mPlayerName->setText(1, p->
name());
379 d->mPlayerGroup->setText(1, p->
group());
380 d->mPlayerUserId->setText(1, TQString::number(p->
userId()));
381 d->mPlayerMyTurn->setText(1, p->
myTurn() ? i18n(
"True") : i18n(
"False"));
382 d->mPlayerAsyncInput->setText(1, p->
asyncInput() ? i18n(
"True") : i18n(
"False"));
383 buf.sprintf(
"%p", p->
game());
384 d->mPlayerKGameAddress->setText(1, buf);
385 d->mPlayerVirtual->setText(1, p->
isVirtual() ? i18n(
"True") : i18n(
"False"));
386 d->mPlayerActive->setText(1, p->
isActive() ? i18n(
"True") : i18n(
"False"));
387 d->mPlayerRtti->setText(1, TQString::number(p->
rtti()));
388 d->mPlayerNetworkPriority->setText(1, TQString::number(p->
networkPriority()));
394 TQIntDictIterator<KGamePropertyBase> it((handler->
dict()));
395 while (it.current()) {
397 switch (it.current()->policy()) {
398 case KGamePropertyBase::PolicyClean:
399 policy = i18n(
"Clean");
401 case KGamePropertyBase::PolicyDirty:
402 policy = i18n(
"Dirty");
404 case KGamePropertyBase::PolicyLocal:
405 policy = i18n(
"Local");
407 case KGamePropertyBase::PolicyUndefined:
409 policy = i18n(
"Undefined");
412 (void)
new TQListViewItem(d->mPlayerProperties,
420 void KGameDebugDialog::clearPages()
424 d->mPlayerList->clear();
428 void KGameDebugDialog::setKGame(
const KGame* g)
434 connect(d->mGame, TQT_SIGNAL(destroyed()),
this, TQT_SLOT(slotUnsetKGame()));
437 TQPtrList<KPlayer> list = *d->mGame->playerList();
438 for (
KPlayer* p = list.first(); p; p = list.next()) {
442 slotUpdateGameData();
444 connect(d->mGame, TQT_SIGNAL(signalMessageUpdate(
int, TQ_UINT32, TQ_UINT32)),
this, TQT_SLOT(slotMessageUpdate(
int, TQ_UINT32, TQ_UINT32)));
448 void KGameDebugDialog::slotUnsetKGame()
451 disconnect(d->mGame, 0,
this, 0);
457 void KGameDebugDialog::addPlayer(
KPlayer* p)
460 kdError(11001) <<
"trying to add NULL player" << endl;
464 (void)
new TQListBoxText(d->mPlayerList, TQString::number(p->
id()));
468 void KGameDebugDialog::removePlayer(TQListBoxItem* i)
470 if (!i || !d->mGame) {
477 disconnect(p, 0,
this, 0);
478 if (i->isSelected()) {
484 void KGameDebugDialog::slotMessageUpdate(
int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
486 if (!showId(msgid)) {
489 TQString msgidText = KGameMessage::messageId2Text(msgid);
490 if (msgidText.isNull()) {
491 if (msgid > KGameMessage::IdUser) {
492 emit signalRequestIdName(msgid-KGameMessage::IdUser,
true, msgidText);
494 emit signalRequestIdName(msgid,
false, msgidText);
496 if (msgidText.isNull()) {
497 msgidText = i18n(
"Unknown");
500 (void)
new TQListViewItem( d->mMessageList, TQTime::currentTime().toString(),
501 TQString::number(msgid), TQString::number(receiver),
502 TQString::number(sender), msgidText);
505 void KGameDebugDialog::slotClearMessages()
507 d->mMessageList->clear();
510 void KGameDebugDialog::slotShowId()
518 if (!d->mHideIdList->currentItem()) {
521 d->mHideIdList->removeItem(d->mHideIdList->currentItem());
524 void KGameDebugDialog::slotHideId()
526 if (!d->mMessageList->currentItem()) {
529 int msgid = d->mMessageList->currentItem()->text(1).toInt();
530 if (!showId(msgid)) {
533 (void)
new TQListBoxText(d->mHideIdList, TQString::number(msgid));
536 bool KGameDebugDialog::showId(
int msgid)
538 TQListBoxItem* i = d->mHideIdList->firstItem();
539 for (; i; i = i->next()) {
540 if (i->text().toInt() == msgid) {
548 #include "kgamedebugdialog.moc"