KDNSSD

servicemodel.h
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#ifndef KDNSSDSERVICEMODEL_H
10#define KDNSSDSERVICEMODEL_H
11
12#include "kdnssd_export.h"
13#include "remoteservice.h"
14#include <QAbstractItemModel>
15#include <memory>
16
17namespace KDNSSD
18{
19struct ServiceModelPrivate;
20class ServiceBrowser;
21
22/**
23 * @class ServiceModel servicemodel.h KDNSSD/ServiceModel
24 * @short Model for list of Zeroconf services
25 *
26 * This class provides a Qt Model for ServiceBrowser to allow easy
27 * integration of service discovery into a GUI. For example, to
28 * show the HTTP servers published on the local network, you can do:
29 * @code
30 * KDNSSD::ServiceModel *serviceModel = new ServiceModel(
31 * new KDNSSD::ServiceBrowser("_http._tcp")
32 * );
33 * QComboBox *serviceCombo = new QComboBox();
34 * serviceCombo->setModel(serviceModel);
35 * @endcode
36 *
37 * After the user makes a selection, the application typically needs
38 * to get a pointer to the selected service in order to get the host
39 * name and port. A RemoteService::Ptr can be obtained from
40 * a QModelIndex using:
41 * @code
42 * void onSelected(const QModelIndex &selection) {
43 * KDNSSD::RemoteService::Ptr service =
44 * selection.data(KDNSSD::ServiceModel::ServicePtrRole)
45 * .value<KDNSSD::RemoteService::Ptr>();
46 * }
47 * @endcode
48 *
49 * @since 4.1
50 * @author Jakub Stachowski
51 */
52
53class KDNSSD_EXPORT ServiceModel : public QAbstractItemModel
54{
55 Q_OBJECT
56
57public:
58 /** The additional data roles provided by this model */
60 ServicePtrRole = 0x7E6519DE, ///< gets a RemoteService::Ptr for the service
61 };
62
63 /**
64 * The default columns for this model.
65 *
66 * If service browser is not set to resolve automatically,
67 * then the model will only ever have one column (the service name).
68 */
70 ServiceName = 0,
71 Host = 1,
72 Port = 2,
73 };
74
75 /**
76 * Creates a model for the given service browser and starts browsing
77 * for services.
78 *
79 * The model takes ownership of the browser,
80 * so there is no need to delete it afterwards.
81 *
82 * You should @b not call ServiceBrowser::startBrowse() on @p browser
83 * before passing it to ServiceModel.
84 */
85 explicit ServiceModel(ServiceBrowser *browser, QObject *parent = nullptr);
86
87 ~ServiceModel() override;
88
89 /** @reimp */
90 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
91 /** @reimp */
92 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
93 /** @reimp */
94 QModelIndex parent(const QModelIndex &index) const override;
95 /** @reimp */
96 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
97 /** @reimp */
98 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
99 /** @reimp */
100 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
101 /** @reimp */
102 virtual bool hasIndex(int row, int column, const QModelIndex &parent) const;
103
104private:
105 std::unique_ptr<ServiceModelPrivate> const d;
106 friend struct ServiceModelPrivate;
107};
108
109}
110
111#endif
Browses for network services advertised over DNS-SD.
Model for list of Zeroconf services.
AdditionalRoles
The additional data roles provided by this model.
ModelColumns
The default columns for this model.
DisplayRole
Orientation
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:17:48 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.