22#include "kgameconnectdialog.h"
27#include <tqlineedit.h>
28#include <tqcombobox.h>
29#include <tqvbuttongroup.h>
31#include <tqradiobutton.h>
33#include <dnssd/servicebrowser.h>
34#include <tqpushbutton.h>
37class KGameConnectWidgetPrivate
40 KGameConnectWidgetPrivate()
50 TQVButtonGroup* mButtonGroup;
51 TQComboBox *mClientName;
52 TQLabel *mClientNameLabel;
53 DNSSD::ServiceBrowser *mBrowser;
54 TQLabel *mServerNameLabel;
55 TQLineEdit *mServerName;
59KGameConnectWidget::KGameConnectWidget(TQWidget* parent) : TQWidget(parent)
61 d =
new KGameConnectWidgetPrivate;
63 TQVBoxLayout* vb =
new TQVBoxLayout(
this, KDialog::spacingHint());
64 d->mButtonGroup =
new TQVButtonGroup(
this);
65 vb->addWidget(d->mButtonGroup);
66 connect(d->mButtonGroup, TQ_SIGNAL(clicked(
int)),
this, TQ_SLOT(slotTypeChanged(
int)));
67 (void)
new TQRadioButton(i18n(
"Create a network game"), d->mButtonGroup);
68 (void)
new TQRadioButton(i18n(
"Join a network game"), d->mButtonGroup);
70 TQGrid* g =
new TQGrid(2,
this);
72 g->setSpacing(KDialog::spacingHint());
73 d->mServerNameLabel =
new TQLabel(i18n(
"Game name:"), g);
74 d->mServerName =
new TQLineEdit(g);
75 d->mClientNameLabel =
new TQLabel(i18n(
"Network games:"), g);
76 d->mClientName =
new TQComboBox(g);
77 connect(d->mClientName,TQ_SIGNAL(activated(
int)),TQ_SLOT(slotGameSelected(
int)));
78 (void)
new TQLabel(i18n(
"Port to connect to:"), g);
79 d->mPort =
new KIntNumInput(g);
80 (void)
new TQLabel(i18n(
"Host to connect to:"), g);
81 d->mHost =
new TQLineEdit(g);
83 TQPushButton *button=
new TQPushButton(i18n(
"&Start Network"),
this);
84 connect(button, TQ_SIGNAL(clicked()),
this, TQ_SIGNAL(signalNetworkSetup()));
85 vb->addWidget(button);
87 d->mClientName->hide();
88 d->mClientNameLabel->hide();
89 d->mServerName->hide();
90 d->mServerNameLabel->hide();
93void KGameConnectWidget::showDnssdControls()
95 if (!d->mBrowser)
return;
96 if (d->mHost->isEnabled()) {
97 d->mClientName->show();
98 d->mClientNameLabel->show();
99 d->mServerName->hide();
100 d->mServerNameLabel->hide();
101 slotGameSelected(d->mClientName->currentItem());
103 d->mClientName->hide();
104 d->mClientNameLabel->hide();
105 d->mServerName->show();
106 d->mServerNameLabel->show();
110void KGameConnectWidget::setType(
const TQString& type)
114 d->mBrowser =
new DNSSD::ServiceBrowser(type);
115 connect(d->mBrowser,TQ_SIGNAL(finished()),TQ_SLOT(slotGamesFound()));
116 d->mBrowser->startBrowse();
120void KGameConnectWidget::slotGamesFound()
122 bool autoselect=
false;
123 if (!d->mClientName->count()) autoselect=
true;
124 d->mClientName->clear();
126 TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator itEnd = d->mBrowser->services().end();
127 for (TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator it = d->mBrowser->services().begin();
128 it!=itEnd; ++it) names << (*it)->serviceName();
129 d->mClientName->insertStringList(names);
130 if (autoselect && d->mClientName->count()) slotGameSelected(0);
133void KGameConnectWidget::setName(
const TQString& name)
135 d->mServerName->setText(name);
138TQString KGameConnectWidget::gameName()
const
140 return d->mServerName->text();
143TQString KGameConnectWidget::type()
const
148void KGameConnectWidget::slotGameSelected(
int nr)
150 if (nr>=(d->mBrowser->services().count()) || nr<0)
return;
151 if (!d->mHost->isEnabled())
return;
152 DNSSD::RemoteService::Ptr srv = d->mBrowser->services()[nr];
153 if (!srv->isResolved() && !srv->resolve())
return;
154 d->mHost->setText(srv->hostName());
155 d->mPort->setValue(srv->port());
157KGameConnectWidget::~KGameConnectWidget()
163TQString KGameConnectWidget::host()
const
165 if (d->mHost->isEnabled()) {
166 return d->mHost->text();
172unsigned short int KGameConnectWidget::port()
const
174 return d->mPort->value();
177void KGameConnectWidget::setHost(
const TQString& host)
179 d->mHost->setText(host);
182void KGameConnectWidget::setPort(
unsigned short int port)
184 d->mPort->setValue(port);
187void KGameConnectWidget::setDefault(
int state)
189 d->mButtonGroup->setButton(state);
190 slotTypeChanged(state);
193void KGameConnectWidget::slotTypeChanged(
int t)
196 d->mHost->setEnabled(
false);
198 d->mHost->setEnabled(
true);
201 emit signalServerTypeChanged(t);
204class KGameConnectDialogPrivate
207 KGameConnectDialogPrivate()
212 KGameConnectWidget* mConnect;
216KGameConnectDialog::KGameConnectDialog(TQWidget* parent,
int buttonmask) : KDialogBase(Plain,
217 i18n(
"Network Game"),buttonmask , Ok, parent, 0, true, buttonmask!=0)
219 d =
new KGameConnectDialogPrivate;
220 TQVBoxLayout* vb =
new TQVBoxLayout(plainPage(), spacingHint());
221 d->mConnect =
new KGameConnectWidget(plainPage());
222 vb->addWidget(d->mConnect);
225KGameConnectDialog::~KGameConnectDialog()
231 TQString& host, TQWidget* parent,
bool server)
242 int result = d.exec();
243 if (result == TQDialog::Accepted) {
252 return d->mConnect->host();
257 return d->mConnect->port();
262 d->mConnect->setHost(
host);
267 d->mConnect->setPort(
port);
272 d->mConnect->setDefault(state);
277#include "kgameconnectdialog.moc"
Dialog to ask for host and port.
static int initConnection(unsigned short int &port, TQString &host, TQWidget *parent, bool server=false)
Shows a dialog to either connect to an existing game or to create a server game, depending on user's ...
void setHost(const TQString &host)
unsigned short int port() const
void setDefault(int state)
Specifies which state is the default (0 = server game; 1 = join game)
void setPort(unsigned short int port)