summaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorSebastien Braun2010-10-04 00:11:13 +0200
committerSebastien Braun2010-10-05 22:12:26 +0200
commitb003c313227e330c3ba92714655a4fc0f408f9fa (patch)
tree6c671fb9ca811dab632418f38bf5334d562a7d29 /src/net
parentImplement Network-wide Configuration Interface for Multicast File Transfer (diff)
downloadpvs-b003c313227e330c3ba92714655a4fc0f408f9fa.tar.gz
pvs-b003c313227e330c3ba92714655a4fc0f408f9fa.tar.xz
pvs-b003c313227e330c3ba92714655a4fc0f408f9fa.zip
Remove system-dependent interface enumeration code and introduce proper
Model-View portable code in its stead.
Diffstat (limited to 'src/net')
-rw-r--r--src/net/pvsNetworkInterfaceListModel.cpp81
-rw-r--r--src/net/pvsNetworkInterfaceListModel.h35
2 files changed, 116 insertions, 0 deletions
diff --git a/src/net/pvsNetworkInterfaceListModel.cpp b/src/net/pvsNetworkInterfaceListModel.cpp
new file mode 100644
index 0000000..67d0c0a
--- /dev/null
+++ b/src/net/pvsNetworkInterfaceListModel.cpp
@@ -0,0 +1,81 @@
+/*
+ * pvsNetworkInterfaceListModel.cpp
+ *
+ * Created on: 04.08.2010
+ * Author: brs
+ */
+
+#include "pvsNetworkInterfaceListModel.h"
+#include <QStringList>
+
+PVSNetworkInterfaceListModel::PVSNetworkInterfaceListModel(QObject* parent) :
+ QAbstractListModel(parent)
+{
+ reloadInterfaceList();
+}
+
+PVSNetworkInterfaceListModel::~PVSNetworkInterfaceListModel()
+{
+}
+
+void PVSNetworkInterfaceListModel::reloadInterfaceList()
+{
+ _interfaces = QNetworkInterface::allInterfaces();
+ reset();
+}
+
+QVariant PVSNetworkInterfaceListModel::data(QModelIndex const& index, int role) const
+{
+ int i = index.row();
+ if(0 > i || i >= _interfaces.size())
+ {
+ return QVariant();
+ }
+ QNetworkInterface intf = _interfaces.at(i);
+
+ switch(role)
+ {
+ case Qt::DisplayRole:
+ {
+ QString name = intf.humanReadableName();
+ QList<QNetworkAddressEntry> addresses = intf.addressEntries();
+ QStringList l;
+
+ foreach(QNetworkAddressEntry addr, addresses)
+ {
+ l.append(addr.ip().toString());
+ }
+
+ return QString("%1 (%2)").arg(name).arg(l.join(", "));
+ }
+ case Qt::EditRole:
+ case Qt::UserRole:
+ return intf.name();
+ default:
+ return QVariant();
+ }
+}
+
+QVariant PVSNetworkInterfaceListModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if(section == 0 && orientation == Qt::Vertical && role == Qt::DisplayRole)
+ {
+ return tr("Interface");
+ }
+ else
+ {
+ return QVariant();
+ }
+}
+
+int PVSNetworkInterfaceListModel::rowCount(QModelIndex const& parent) const
+{
+ if(parent.isValid())
+ {
+ return 0;
+ }
+ else
+ {
+ return _interfaces.size();
+ }
+}
diff --git a/src/net/pvsNetworkInterfaceListModel.h b/src/net/pvsNetworkInterfaceListModel.h
new file mode 100644
index 0000000..3a9b95d
--- /dev/null
+++ b/src/net/pvsNetworkInterfaceListModel.h
@@ -0,0 +1,35 @@
+/*
+ * pvsNetworkInterfaceListModel.h
+ *
+ * Created on: 04.08.2010
+ * Author: brs
+ */
+
+#ifndef PVSNETWORKINTERFACELISTMODEL_H_
+#define PVSNETWORKINTERFACELISTMODEL_H_
+
+#include <QAbstractListModel>
+#include <QList>
+#include <QNetworkInterface>
+#include <QVariant>
+
+class PVSNetworkInterfaceListModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ PVSNetworkInterfaceListModel(QObject* parent = 0);
+ virtual ~PVSNetworkInterfaceListModel();
+
+ QVariant data(QModelIndex const& index, int role = Qt::DisplayRole) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ int rowCount(QModelIndex const&) const;
+
+private:
+ QList<QNetworkInterface> _interfaces;
+
+public slots:
+ void reloadInterfaceList();
+};
+
+#endif /* PVSNETWORKINTERFACELISTMODEL_H_ */