75 lines
2.4 KiB
C++
75 lines
2.4 KiB
C++
#pragma once
|
|
|
|
// system includes
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
// Qt includes
|
|
#include <QAbstractItemModel>
|
|
#include <QTimer>
|
|
#include <QVariant>
|
|
#include <QBluetoothDeviceDiscoveryAgent>
|
|
#include <QBluetoothDeviceInfo>
|
|
#include <QtQml/qqml.h>
|
|
|
|
// forward declares
|
|
class DeviceHandler;
|
|
|
|
class DeviceFinder : public QAbstractItemModel
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(bool scanning READ scanning NOTIFY scanningChanged)
|
|
Q_PROPERTY(DeviceHandler* handler READ handler WRITE setHandler NOTIFY handlerChanged)
|
|
Q_PROPERTY(QString error READ error WRITE setError NOTIFY errorChanged)
|
|
Q_PROPERTY(QString info READ info WRITE setInfo NOTIFY infoChanged)
|
|
QML_ELEMENT
|
|
|
|
public:
|
|
DeviceFinder(QObject *parent = nullptr);
|
|
|
|
bool scanning() const { return m_deviceDiscoveryAgent.isActive(); }
|
|
|
|
DeviceHandler* handler() { return m_handler; }
|
|
const DeviceHandler* handler() const { return m_handler; }
|
|
void setHandler(DeviceHandler* handler) { if (m_handler == handler) return; m_handler = handler; emit handlerChanged(); }
|
|
|
|
QString error() const { return m_error; }
|
|
void setError(const QString& error) { if (m_error == error) return; m_error = error; emit errorChanged(); }
|
|
|
|
QString info() const { return m_info; }
|
|
void setInfo(const QString& info) { if (m_info == info) return; m_info = info; emit infoChanged(); }
|
|
|
|
void clearMessages() { setInfo(""); setError(""); }
|
|
|
|
// QAbstractItemModel interface
|
|
QModelIndex index(int row, int column, const QModelIndex &parent) const override;
|
|
QModelIndex parent(const QModelIndex &child) const override;
|
|
int rowCount(const QModelIndex &parent) const override;
|
|
int columnCount(const QModelIndex &parent) const override;
|
|
QVariant data(const QModelIndex &index, int role) const override;
|
|
QMap<int, QVariant> itemData(const QModelIndex &index) const override;
|
|
QHash<int, QByteArray> roleNames() const override;
|
|
|
|
signals:
|
|
void scanningChanged();
|
|
void handlerChanged();
|
|
void errorChanged();
|
|
void infoChanged();
|
|
|
|
public slots:
|
|
void startSearch();
|
|
void connectToService(const QString &address);
|
|
|
|
private slots:
|
|
void addDevice(const QBluetoothDeviceInfo &);
|
|
void scanError(QBluetoothDeviceDiscoveryAgent::Error error);
|
|
void scanFinished();
|
|
|
|
private:
|
|
DeviceHandler *m_handler{};
|
|
QBluetoothDeviceDiscoveryAgent m_deviceDiscoveryAgent;
|
|
std::vector<QBluetoothDeviceInfo> m_devices;
|
|
QString m_error;
|
|
QString m_info;
|
|
};
|