# HG changeset patch # User unc0rr # Date 1197749288 0 # Node ID 194dc62d1519adf2e554976a511abccd7760410d # Parent 07fa9a74a0742a962de4edb3c0517654799a733c UDP server list model diff -r 07fa9a74a074 -r 194dc62d1519 QTfrontend/netudpwidget.cpp --- a/QTfrontend/netudpwidget.cpp Sat Dec 15 19:44:05 2007 +0000 +++ b/QTfrontend/netudpwidget.cpp Sat Dec 15 20:08:08 2007 +0000 @@ -1,6 +1,7 @@ /* * Hedgewars, a worms-like game * Copyright (c) 2007 Ulyanov Igor + * Copyright (c) 2007 Andrey Korotaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,36 +18,89 @@ */ #include -#include #include "netudpwidget.h" -/*HWNetUdpWidget::HWNetUdpWidget(QWidget* parent) : - HWNetServersWidget(parent) +HWNetUdpModel::HWNetUdpModel(QObject* parent) : + HWNetServersModel(parent) { - pUdpSocket = new QUdpSocket(this); + pUdpSocket = new QUdpSocket(this); + + pUdpSocket->bind(); + connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead())); +} - pUdpSocket->bind(); - connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead())); +void HWNetUdpModel::updateList() +{ + games.clear(); + + reset(); + + pUdpSocket->writeDatagram("hedgewars client", QHostAddress::Broadcast, 46631); } -void HWNetUdpWidget::updateList() +void HWNetUdpModel::onClientRead() { -// serversList->clear(); - pUdpSocket->writeDatagram("hedgewars client", QHostAddress::Broadcast, 46631); + while (pUdpSocket->hasPendingDatagrams()) { + QByteArray datagram; + datagram.resize(pUdpSocket->pendingDatagramSize()); + QHostAddress clientAddr; + quint16 clientPort; + + pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort); + + if(QString("%1").arg(datagram.data())==QString("hedgewars server")) { + QStringList sl; + sl << "-" << clientAddr.toString() << "46631"; + games.append(sl); + } + } + + reset(); } -void HWNetUdpWidget::onClientRead() +QVariant HWNetUdpModel::data(const QModelIndex &index, + int role) const +{ + if (!index.isValid() || index.row() < 0 + || index.row() >= games.size() + || role != Qt::DisplayRole) + return QVariant(); + + return games[index.row()][index.column()]; +} + +QVariant HWNetUdpModel::headerData(int section, + Qt::Orientation orientation, int role) const { - while (pUdpSocket->hasPendingDatagrams()) { - QByteArray datagram; - datagram.resize(pUdpSocket->pendingDatagramSize()); - QHostAddress clientAddr; - quint16 clientPort; - pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort); - if(QString("%1").arg(datagram.data())==QString("hedgewars server")) { -// serversList->addItem(clientAddr.toString()); - } - } + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + { + switch (section) + { + case 0: return tr("Title"); + case 1: return tr("IP"); + case 2: return tr("Port"); + default: return QVariant(); + } + } else + return QString("%1").arg(section + 1); } -*/ \ No newline at end of file + +int HWNetUdpModel::rowCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return 0; + else + return games.size(); +} + +int HWNetUdpModel::columnCount(const QModelIndex & parent) const +{ + if (parent.isValid()) + return 0; + else + return 3; +} diff -r 07fa9a74a074 -r 194dc62d1519 QTfrontend/netudpwidget.h --- a/QTfrontend/netudpwidget.h Sat Dec 15 19:44:05 2007 +0000 +++ b/QTfrontend/netudpwidget.h Sat Dec 15 20:08:08 2007 +0000 @@ -1,6 +1,7 @@ /* * Hedgewars, a worms-like game * Copyright (c) 2007 Igor Ulyanov + * Copyright (c) 2007 Andrey Korotaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,29 +20,32 @@ #ifndef _NET_UDPWIDGET_INCLUDED #define _NET_UDPWIDGET_INCLUDED -#include -#include - +#include #include "netserverslist.h" -/* + class QUdpSocket; -class QListWidget; -class HWNetUdpWidget : public HWNetServersWidget +class HWNetUdpModel : public HWNetServersModel { Q_OBJECT - public: - HWNetUdpWidget(QWidget *parent = 0); +public: + HWNetUdpModel(QObject *parent = 0); - public slots: - void updateList(); + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + int rowCount(const QModelIndex & parent) const; + int columnCount(const QModelIndex & parent) const; - private slots: - void onClientRead(); +public slots: + void updateList(); + +private slots: + void onClientRead(); - private: - QUdpSocket* pUdpSocket; +private: + QUdpSocket* pUdpSocket; + QList games; }; -*/ + #endif // _NET_UDPWIDGET_INCLUDED diff -r 07fa9a74a074 -r 194dc62d1519 QTfrontend/netwwwwidget.h --- a/QTfrontend/netwwwwidget.h Sat Dec 15 19:44:05 2007 +0000 +++ b/QTfrontend/netwwwwidget.h Sat Dec 15 20:08:08 2007 +0000 @@ -19,7 +19,6 @@ #ifndef _NET_WWWWIDGET_INCLUDED #define _NET_WWWWIDGET_INCLUDED -#include #include #include "netserverslist.h" diff -r 07fa9a74a074 -r 194dc62d1519 QTfrontend/pages.cpp --- a/QTfrontend/pages.cpp Sat Dec 15 19:44:05 2007 +0000 +++ b/QTfrontend/pages.cpp Sat Dec 15 20:08:08 2007 +0000 @@ -485,11 +485,9 @@ void PageNet::updateServersList() { -// if (tvServersList->model()) delete tvServersList->model(); - if (rbLocalGame->isChecked()) -//; netServersWidget = new HWNetUdpWidget(ConnGroupBox); -// else + tvServersList->setModel(new HWNetUdpModel()); + else tvServersList->setModel(new HWNetWwwModel()); static_cast(tvServersList->model())->updateList();