QTfrontend/netudpwidget.cpp
changeset 667 194dc62d1519
parent 665 5c7bfc8bac6a
child 668 0d7683a66d61
--- 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;
+}