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, 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"));
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, 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"));
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, 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);
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) {
365 KPlayer* p = d->mGame->findPlayer(item->text().toInt());
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, 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)));
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) {
473 KPlayer* p = d->mGame->findPlayer(i->text().toInt());
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" TQIntDict< KGamePropertyBase > & dict() const
Reference to the internal dictionary.
KGame * game() const
Query to which game the player belongs to.
virtual int rtti() const
The idendification of the player.
A collection class for KGameProperty objects.
TQString propertyName(int id) const
virtual const TQString & group() const
Query the group the player belongs to.
virtual const TQString & name() const
TQ_UINT32 id() const
Returns the id of the player.
bool isVirtual() const
Is this player a virtual player, ie is it created by mirroring a real player from another network gam...
bool asyncInput() const
Query whether this player does asynchronous input.
Base class for a game player.
int userId() const
Returns the user defined id of the player This value can be used arbitrary by you to have some user i...
bool isActive() const
Is this player an active player.
The main KDE game object.
KGamePropertyHandler * dataHandler()
TQString propertyValue(KGamePropertyBase *property)
In several situations you just want to have a TQString of a KGameProperty object. ...
int networkPriority() const
Returns whether this player can be replaced by a network connection player.
bool myTurn() const
is it my turn to go