• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

libkdegames/kgame

kgameconnectdialog.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of the KDE games library
00003     Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
00004     Copyright (C) 2001 Martin Heni (kde at heni-online.de)
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License version 2 as published by the Free Software Foundation.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018     Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #include "kgameconnectdialog.h"
00022 
00023 #include <knuminput.h>
00024 #include <klocale.h>
00025 #include <kdebug.h>
00026 
00027 #include <QLineEdit>
00028 #include <QComboBox>
00029 #include <QLayout>
00030 #include <qradiobutton.h>
00031 #include <QLabel>
00032 #include <QVBoxLayout>
00033 #include <QList>
00034 #include <QButtonGroup>
00035 #include <dnssd/servicebrowser.h>
00036 #include <QPushButton>
00037 #include <QGroupBox>
00038 
00039 class KGameConnectWidgetPrivate
00040 {
00041  public:
00042     KGameConnectWidgetPrivate()
00043     {
00044         mPort = 0;
00045         mHost = 0;
00046         mButtonGroup = 0;
00047         mBrowser = 0;
00048     }
00049 
00050     KIntNumInput* mPort;
00051     QLineEdit* mHost; //KLineEdit?
00052     QButtonGroup* mButtonGroup;
00053     QComboBox *mClientName;
00054     QLabel *mClientNameLabel;
00055     DNSSD::ServiceBrowser *mBrowser;
00056     QLabel *mServerNameLabel;
00057     QLineEdit *mServerName;
00058     QString mType;
00059 };
00060 
00061 KGameConnectWidget::KGameConnectWidget(QWidget* parent) : QWidget(parent)
00062 {
00063  d = new KGameConnectWidgetPrivate;
00064 
00065  QVBoxLayout* vb = new QVBoxLayout(this);
00066  vb->setMargin(0);
00067  QGroupBox* box = new QGroupBox(this);
00068  QVBoxLayout* boxlay = new QVBoxLayout(box);
00069  d->mButtonGroup = new QButtonGroup(this);
00070  d->mButtonGroup->setExclusive(true);
00071  vb->addWidget(box);
00072  connect(d->mButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(slotTypeChanged(int)));
00073  QRadioButton* buttonCreate = new QRadioButton(i18n("Create a network game"), box);
00074  boxlay->addWidget(buttonCreate);
00075  d->mButtonGroup->addButton(buttonCreate,0);
00076  QRadioButton* buttonJoin = new QRadioButton(i18n("Join a network game"), box);
00077  boxlay->addWidget(buttonJoin);
00078  d->mButtonGroup->addButton(buttonJoin,1);
00079 
00080  QWidget *g = new QWidget(this);
00081  vb->addWidget(g);
00082  d->mServerNameLabel = new QLabel(i18n("Game name:"), g);
00083  d->mServerName = new QLineEdit(g);
00084  d->mClientNameLabel = new QLabel(i18n("Network games:"), g);
00085  d->mClientName = new QComboBox(g);
00086 
00087  QGridLayout* layout = new QGridLayout(g);
00088  layout->setMargin(0);
00089  layout->addWidget(d->mServerNameLabel, 0, 0);
00090  layout->addWidget(d->mServerName, 0, 1);
00091  layout->addWidget(d->mClientNameLabel, 1, 0);
00092  layout->addWidget(d->mClientName, 1, 1);
00093  connect(d->mClientName,SIGNAL(activated(int)),SLOT(slotGameSelected(int)));
00094  QLabel* label = new QLabel(i18n("Port to connect to:"), g);
00095  d->mPort = new KIntNumInput(g);
00096  layout->addWidget(label, 2, 0);
00097  layout->addWidget(d->mPort, 2, 1);
00098  label = new QLabel(i18n("Host to connect to:"), g);
00099  d->mHost = new QLineEdit(g); 
00100  layout->addWidget(label, 3, 0);
00101  layout->addWidget(d->mHost, 3, 1);
00102 
00103  QPushButton *button=new QPushButton(i18n("&Start Network"), this);
00104  connect(button, SIGNAL(clicked()), this, SIGNAL(signalNetworkSetup()));
00105  vb->addWidget(button);
00106  // Hide until type is set
00107  d->mClientName->hide();
00108  d->mClientNameLabel->hide();
00109  d->mServerName->hide();
00110  d->mServerNameLabel->hide();
00111 }
00112 
00113 void KGameConnectWidget::showDnssdControls() 
00114 {
00115  if (!d->mBrowser) return;
00116  if (d->mHost->isEnabled()) {      // client    
00117   d->mClientName->show();
00118   d->mClientNameLabel->show();
00119   d->mServerName->hide();
00120   d->mServerNameLabel->hide();
00121   slotGameSelected(d->mClientName->currentIndex());
00122  } else {
00123   d->mClientName->hide();
00124   d->mClientNameLabel->hide();
00125   d->mServerName->show();
00126   d->mServerNameLabel->show();
00127  }
00128 }
00129 
00130 void KGameConnectWidget::setType(const QString& type) 
00131 {
00132  d->mType = type;
00133  delete d->mBrowser;
00134  d->mBrowser = new DNSSD::ServiceBrowser(type);
00135  connect(d->mBrowser,SIGNAL(finished()),SLOT(slotGamesFound()));
00136  d->mBrowser->startBrowse();
00137  showDnssdControls();
00138 }
00139 
00140 void KGameConnectWidget::slotGamesFound()
00141 {
00142  bool autoselect=false;
00143  if (!d->mClientName->count()) autoselect=true;
00144  d->mClientName->clear();
00145  QStringList names;
00146  
00147  QListIterator<DNSSD::RemoteService::Ptr> it(d->mBrowser->services());
00148  while (it.hasNext())
00149   names << it.next()->serviceName();
00150  d->mClientName->addItems(names);
00151  if (autoselect && d->mClientName->count()) slotGameSelected(0);
00152 }
00153 
00154 void KGameConnectWidget::setName(const QString& name) 
00155 {
00156  d->mServerName->setText(name);
00157 }
00158 
00159 QString KGameConnectWidget::gameName() const
00160 {
00161  return d->mServerName->text();
00162 }
00163 
00164 QString KGameConnectWidget::type() const
00165 {
00166  return d->mType;
00167 }
00168 
00169 void KGameConnectWidget::slotGameSelected(int nr)
00170 {
00171  if (nr>=(d->mBrowser->services().count()) || nr<0) return;
00172  if (!d->mHost->isEnabled()) return; // this is server mode, do not overwrite host and port controls
00173  DNSSD::RemoteService::Ptr srv = d->mBrowser->services()[nr];
00174  if (!srv->isResolved() && !srv->resolve()) return;
00175  d->mHost->setText(srv->hostName());
00176  d->mPort->setValue(srv->port());
00177 }
00178 KGameConnectWidget::~KGameConnectWidget()
00179 {
00180  delete d->mBrowser;
00181  delete d;
00182 }
00183 
00184 QString KGameConnectWidget::host() const
00185 { 
00186  if (d->mHost->isEnabled()) {
00187     return d->mHost->text();
00188  } else {
00189     return QString();
00190  }
00191 }
00192 
00193 unsigned short int KGameConnectWidget::port() const
00194 {
00195  return d->mPort->value(); 
00196 }
00197 
00198 void KGameConnectWidget::setHost(const QString& host)
00199 { 
00200  d->mHost->setText(host); 
00201 }
00202 
00203 void KGameConnectWidget::setPort(unsigned short int port)
00204 {
00205  d->mPort->setValue(port); 
00206 }
00207 
00208 void KGameConnectWidget::setDefault(int state)
00209 {
00210  if (d->mButtonGroup->button(state) == 0) {
00211   kError(11001) << "KGameConnectWidget::setDefault" << state;
00212   return;
00213  } 
00214  d->mButtonGroup->button(state)->setChecked(true);
00215  slotTypeChanged(state); 
00216 }
00217 
00218 void KGameConnectWidget::slotTypeChanged(int t)
00219 {
00220  if (t == 0) {
00221     d->mHost->setEnabled(false);
00222  } else if (t == 1) {
00223     d->mHost->setEnabled(true);
00224  }
00225  showDnssdControls();
00226  emit signalServerTypeChanged(t);
00227 }
00228 
00229 class KGameConnectDialogPrivate
00230 {
00231  public:
00232     KGameConnectDialogPrivate()
00233     {
00234         mConnect = 0;
00235     }
00236 
00237     KGameConnectWidget* mConnect;
00238 };
00239 
00240 // buttonmask =Ok|Cancel
00241 KGameConnectDialog::KGameConnectDialog(QWidget* parent, ButtonCodes buttonmask) : 
00242         KDialog(parent)
00243         //KDialog(Plain,
00244         //i18n("Network Game"),buttonmask , Ok, parent, 0, true, buttonmask!=0)
00245 {
00246  setCaption(i18n("Network Game"));
00247  setButtons(buttonmask);
00248  setModal(true);
00249  d = new KGameConnectDialogPrivate;
00250  QFrame *frame = new QFrame(this);
00251  setMainWidget(frame);
00252  QVBoxLayout* vb = new QVBoxLayout(frame);
00253  vb->setSpacing( spacingHint() );
00254  d->mConnect = new KGameConnectWidget(frame);
00255  vb->addWidget(d->mConnect);
00256 }
00257 
00258 KGameConnectDialog::~KGameConnectDialog()
00259 {
00260  delete d;
00261 }
00262 
00263 int KGameConnectDialog::initConnection( unsigned short int& port,
00264         QString& host, QWidget* parent, bool server)
00265 {
00266  KGameConnectDialog d(parent);
00267  d.setHost(host);
00268  d.setPort(port);
00269  if (server) {
00270     d.setDefault(0);
00271  } else {
00272     d.setDefault(1);
00273  }
00274 
00275  int result = d.exec();
00276  if (result == QDialog::Accepted) {
00277     host = d.host();
00278     port = d.port();
00279  }
00280  return result;
00281 }
00282 
00283 QString KGameConnectDialog::host() const
00284 {
00285  return d->mConnect->host();
00286 }
00287 
00288 unsigned short int KGameConnectDialog::port() const
00289 {
00290  return d->mConnect->port();
00291 }
00292 
00293 void KGameConnectDialog::setHost(const QString& host)
00294 {
00295  d->mConnect->setHost(host);
00296 }
00297 
00298 void KGameConnectDialog::setPort(unsigned short int port)
00299 {
00300  d->mConnect->setPort(port);
00301 }
00302 
00303 void KGameConnectDialog::setDefault(int state)
00304 {
00305  d->mConnect->setDefault(state);
00306 }
00307 
00308 
00309 
00310 #include "kgameconnectdialog.moc"
00311 

libkdegames/kgame

Skip menu "libkdegames/kgame"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • kblackbox
  • kgoldrunner
  • kmahjongg
  • ksquares
  • libkdegames
  •   highscore
  •   kgame
  •   kggzgames
  •   kggzmod
  •   kggznet
  • libkmahjongg
Generated for API Reference by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal