@@ -16,6 +16,23 @@ namespace qs::network {
1616
1717// -- Device --
1818
19+ class DeviceState : public QObject {
20+ Q_OBJECT;
21+ QML_ELEMENT;
22+ QML_SINGLETON;
23+
24+ public:
25+ enum Enum : quint8 {
26+ Unknown = 0 ,
27+ Disconnected = 10 ,
28+ Connecting = 20 ,
29+ Connected = 30 ,
30+ Disconnecting = 40 ,
31+ };
32+ Q_ENUM (Enum);
33+ Q_INVOKABLE static QString toString (DeviceState::Enum state);
34+ };
35+
1936class Device : public QObject {
2037 Q_OBJECT;
2138 QML_ELEMENT;
@@ -24,79 +41,57 @@ class Device: public QObject {
2441 // clang-format off
2542 Q_PROPERTY (QString name READ default NOTIFY nameChanged BINDABLE bindableName);
2643 Q_PROPERTY (QString address READ default NOTIFY addressChanged BINDABLE bindableAddress);
44+ Q_PROPERTY (DeviceState::Enum state READ default NOTIFY stateChanged BINDABLE bindableState);
2745 // clang-format on
2846
2947signals:
3048 void nameChanged ();
3149 void addressChanged ();
50+ void stateChanged ();
3251
3352public slots:
3453 void setName (const QString& name);
3554 void setAddress (const QString& address);
55+ void setState (DeviceState::Enum state);
3656
3757public:
3858 explicit Device (QObject* parent = nullptr );
3959 [[nodiscard]] QBindable<QString> bindableName () const { return &this ->bName ; };
4060 [[nodiscard]] QBindable<QString> bindableAddress () const { return &this ->bAddress ; };
61+ [[nodiscard]] QBindable<DeviceState::Enum> bindableState () const { return &this ->bState ; };
4162
4263private:
4364 Q_OBJECT_BINDABLE_PROPERTY (Device, QString, bName, &Device::nameChanged);
4465 Q_OBJECT_BINDABLE_PROPERTY (Device, QString, bAddress, &Device::addressChanged);
66+ Q_OBJECT_BINDABLE_PROPERTY (Device, DeviceState::Enum, bState, &Device::stateChanged);
4567};
4668
4769// -- Wireless Device --
48-
49- class WirelessState : public QObject {
50- Q_OBJECT;
51- QML_ELEMENT;
52- QML_SINGLETON;
53-
54- public:
55- enum Enum : quint8 {
56- Unknown = 0 ,
57- Disconnected = 10 ,
58- Connecting = 20 ,
59- Connected = 30 ,
60- Disconnecting = 40 ,
61- };
62- Q_ENUM (Enum);
63- };
64-
6570class WirelessDevice : public Device {
6671 Q_OBJECT;
6772
6873 // clang-format off
69- Q_PROPERTY (bool powered READ powered WRITE setPowered NOTIFY poweredChanged);
70- Q_PROPERTY (WirelessState::Enum state READ default NOTIFY stateChanged BINDABLE bindableState);
74+ Q_PROPERTY (qint64 lastScan READ default NOTIFY lastScanChanged BINDABLE bindableLastScan);
7175 // clang-format on
7276
7377signals:
74- void poweredChanged ();
75- void stateChanged ();
78+ void lastScanChanged ();
7679
77- private slots:
78- void setState (WirelessState::Enum state );
80+ public slots:
81+ void setLastScan (qint64 lastScan );
7982
8083public:
8184 explicit WirelessDevice (QObject* parent = nullptr );
8285
83- Q_INVOKABLE virtual void disconnect () = 0 ;
84- Q_INVOKABLE virtual void scan () = 0 ;
86+ // Q_INVOKABLE void disconnect();
87+ // Q_INVOKABLE void scan();
8588
86- [[nodiscard]] bool powered () const { return this ->bPowered ; };
87- virtual void setPowered (bool powered) = 0;
88-
89- [[nodiscard]] QBindable<bool > bindablePowered () { return &this ->bPowered ; };
90- [[nodiscard]] QBindable<WirelessState::Enum> bindableState () const { return &this ->bState ; };
89+ [[nodiscard]] QBindable<qint64> bindableLastScan () { return &this ->bLastScan ; };
9190
9291private:
93- Q_OBJECT_BINDABLE_PROPERTY (WirelessDevice, bool , bPowered, &WirelessDevice::poweredChanged);
94- Q_OBJECT_BINDABLE_PROPERTY (
95- WirelessDevice,
96- WirelessState::Enum,
97- bState,
98- &WirelessDevice::stateChanged
99- );
92+ // clang-format off
93+ Q_OBJECT_BINDABLE_PROPERTY (WirelessDevice, qint64, bLastScan, &WirelessDevice::lastScanChanged);
94+ // clang-format on
10095};
10196
10297// -- Network --
@@ -106,8 +101,8 @@ class NetworkBackend: public QObject {
106101
107102public:
108103 [[nodiscard]] virtual bool isAvailable () const = 0;
109- // virtual WirelessDevice* wifiDevice() = 0;
110104 virtual UntypedObjectModel* devices () = 0;
105+ virtual WirelessDevice* defaultWifiDevice () = 0;
111106
112107protected:
113108 explicit NetworkBackend (QObject* parent = nullptr ): QObject(parent) {};
@@ -118,13 +113,15 @@ class Network: public QObject {
118113 QML_NAMED_ELEMENT (Network);
119114 QML_SINGLETON;
120115
121- // Q_PROPERTY(WirelessDevice* wifi READ wifiDevice CONSTANT);
116+ Q_PROPERTY (WirelessDevice* defaultWifiDevice READ defaultWifiDevice CONSTANT);
122117 Q_PROPERTY (UntypedObjectModel* devices READ devices CONSTANT);
123118
124119public:
125120 explicit Network (QObject* parent = nullptr );
126- // [[nodiscard]] WirelessDevice* wifi() { return backend ? backend->wifiDevice() : nullptr; }
127- [[nodiscard]] UntypedObjectModel* devices () { return backend ? backend->devices () : nullptr ; }
121+ [[nodiscard]] UntypedObjectModel* devices () { return backend ? backend->devices () : nullptr ; };
122+ [[nodiscard]] WirelessDevice* defaultWifiDevice () {
123+ return backend ? backend->defaultWifiDevice () : nullptr ;
124+ };
128125
129126private:
130127 class NetworkBackend * backend = nullptr ;
0 commit comments