21#include "kgamedebugdialog.h"
23#include "kgamemessage.h"
26#include "kgamepropertyhandler.h"
28#include <tdelistview.h>
29#include <tdelistbox.h>
32#include <kpushbutton.h>
33#include <kstdguiitem.h>
39#include <tqdatetime.h>
44class 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;
123KGameDebugDialog::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;
136KGameDebugDialog::~KGameDebugDialog()
141void 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, TQ_SIGNAL(pressed()),
this, TQ_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"));
176void 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, TQ_SIGNAL(executed(TQListBoxItem*)),
this, TQ_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, TQ_SIGNAL(pressed()),
this, TQ_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"));
220void 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, TQ_SIGNAL(pressed()),
this, TQ_SLOT(slotHideId()));
234 layout->addWidget(hide, 4, 4);
236 TQPushButton* show =
new TQPushButton(i18n(
"&<<"), d->mMessagePage);
237 connect(show, TQ_SIGNAL(pressed()),
this, TQ_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, TQ_SIGNAL(pressed()),
this, TQ_SLOT(slotClearMessages()));
247 layout->addMultiCellWidget(clear, 10, 10, 0, 6);
251void 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();
269void 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();
285void KGameDebugDialog::slotUpdatePlayerData()
287 if (!d->mGame || d->mPlayerList->currentItem() == -1) {
290 slotUpdatePlayerData(d->mPlayerList->item(d->mPlayerList->currentItem()));
293void 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()) {
306void 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,
359void 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,
420void KGameDebugDialog::clearPages()
424 d->mPlayerList->clear();
428void KGameDebugDialog::setKGame(
const KGame* g)
434 connect(d->mGame, TQ_SIGNAL(destroyed()),
this, TQ_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, TQ_SIGNAL(signalMessageUpdate(
int, TQ_UINT32, TQ_UINT32)),
this, TQ_SLOT(slotMessageUpdate(
int, TQ_UINT32, TQ_UINT32)));
448void KGameDebugDialog::slotUnsetKGame()
451 disconnect(d->mGame, 0,
this, 0);
457void KGameDebugDialog::addPlayer(
KPlayer* p)
460 kdError(11001) <<
"trying to add NULL player" << endl;
464 (void)
new TQListBoxText(d->mPlayerList, TQString::number(p->
id()));
468void KGameDebugDialog::removePlayer(TQListBoxItem* i)
470 if (!i || !d->mGame) {
477 disconnect(p, 0,
this, 0);
478 if (i->isSelected()) {
484void 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);
505void KGameDebugDialog::slotClearMessages()
507 d->mMessageList->clear();
510void KGameDebugDialog::slotShowId()
518 if (!d->mHideIdList->currentItem()) {
521 d->mHideIdList->removeItem(d->mHideIdList->currentItem());
524void 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));
536bool 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"
A collection class for KGameProperty objects.
TQString propertyValue(KGamePropertyBase *property)
In several situations you just want to have a TQString of a KGameProperty object.
TQIntDict< KGamePropertyBase > & dict() const
Reference to the internal dictionary.
TQString propertyName(int id) const
The main KDE game object.
KPlayer * findPlayer(TQ_UINT32 id) const
Returns the player object for a given player id.
Base class for a game player.
bool isVirtual() const
Is this player a virtual player, ie is it created by mirroring a real player from another network gam...
virtual int rtti() const
The idendification of the player.
virtual const TQString & name() const
bool myTurn() const
is it my turn to go
KGame * game() const
Query to which game the player belongs to.
TQ_UINT32 id() const
Returns the id of the player.
bool asyncInput() const
Query whether this player does asynchronous input.
int userId() const
Returns the user defined id of the player This value can be used arbitrary by you to have some user i...
virtual const TQString & group() const
Query the group the player belongs to.
bool isActive() const
Is this player an active player.
int networkPriority() const
Returns whether this player can be replaced by a network connection player.
KGamePropertyHandler * dataHandler()