1/*
2 This file is part of the KDE project
3
4 SPDX-FileCopyrightText: 2008 Jakub Stachowski <qbast@go2.pl>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7*/
8
9#include "servicemodel.h"
10#include "servicebrowser.h"
11
12namespace KDNSSD
13{
14struct ServiceModelPrivate {
15 ServiceBrowser *m_browser;
16};
17
18ServiceModel::ServiceModel(ServiceBrowser *browser, QObject *parent)
19 : QAbstractItemModel(parent)
20 , d(new ServiceModelPrivate)
21{
22 d->m_browser = browser;
23 browser->setParent(this);
24 connect(sender: browser, SIGNAL(serviceAdded(KDNSSD::RemoteService::Ptr)), receiver: this, SIGNAL(layoutChanged()));
25 connect(sender: browser, SIGNAL(serviceRemoved(KDNSSD::RemoteService::Ptr)), receiver: this, SIGNAL(layoutChanged()));
26 browser->startBrowse();
27}
28
29ServiceModel::~ServiceModel() = default;
30
31int ServiceModel::columnCount(const QModelIndex &) const
32{
33 return d->m_browser->isAutoResolving() ? 3 : 1;
34}
35int ServiceModel::rowCount(const QModelIndex &parent) const
36{
37 return (parent.isValid()) ? 0 : d->m_browser->services().size();
38}
39
40QModelIndex ServiceModel::parent(const QModelIndex &) const
41{
42 return QModelIndex();
43}
44
45QModelIndex ServiceModel::index(int row, int column, const QModelIndex &parent) const
46{
47 return hasIndex(row, column, parent) ? createIndex(arow: row, acolumn: column) : QModelIndex();
48}
49
50bool ServiceModel::hasIndex(int row, int column, const QModelIndex &parent) const
51{
52 if (parent.isValid()) {
53 return false;
54 }
55 if (column < 0 || column >= columnCount()) {
56 return false;
57 }
58 if (row < 0 || row >= rowCount(parent)) {
59 return false;
60 }
61 return true;
62}
63
64QVariant ServiceModel::data(const QModelIndex &index, int role) const
65{
66 if (!index.isValid()) {
67 return QVariant();
68 }
69 if (!hasIndex(row: index.row(), column: index.column(), parent: index.parent())) {
70 return QVariant();
71 }
72 const QList<RemoteService::Ptr> srv = d->m_browser->services();
73 switch ((uint)role) {
74 case Qt::DisplayRole:
75 switch (index.column()) {
76 case ServiceName:
77 return srv[index.row()]->serviceName();
78 case Host:
79 return srv[index.row()]->hostName();
80 case Port:
81 return srv[index.row()]->port();
82 }
83 break;
84 case ServicePtrRole:
85 QVariant ret;
86 ret.setValue(srv[index.row()]);
87 return ret;
88 }
89 return QVariant();
90}
91
92QVariant ServiceModel::headerData(int section, Qt::Orientation orientation, int role) const
93{
94 if (orientation != Qt::Horizontal || role != Qt::DisplayRole) {
95 return QVariant();
96 }
97 switch (section) {
98 case ServiceName:
99 return tr(s: "Name");
100 case Host:
101 return tr(s: "Host");
102 case Port:
103 return tr(s: "Port");
104 }
105 return QVariant();
106}
107
108}
109
110#include "moc_servicemodel.cpp"
111

source code of kdnssd/src/servicemodel.cpp