UDP server list model
authorunc0rr
Sat, 15 Dec 2007 20:08:08 +0000
changeset 667 194dc62d1519
parent 666 07fa9a74a074
child 668 0d7683a66d61
UDP server list model
QTfrontend/netudpwidget.cpp
QTfrontend/netudpwidget.h
QTfrontend/netwwwwidget.h
QTfrontend/pages.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 <iulyanov@gmail.com>
+ * Copyright (c) 2007 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * 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 <QUdpSocket>
-#include <QListWidget>
 
 #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;
+}
--- 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 <iulyanov@gmail.com>
+ * Copyright (c) 2007 Andrey Korotaev <unC0Rr@gmail.com>
  *
  * 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 <QWidget>
-#include <QVBoxLayout>
-
+#include <QStringList>
 #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<QStringList> games;
 };
-*/
+
 #endif // _NET_UDPWIDGET_INCLUDED
--- 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 <QAbstractTableModel>
 #include <QStringList>
 #include "netserverslist.h"
 
--- 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<HWNetServersModel *>(tvServersList->model())->updateList();