diff --git a/src/port.h b/src/port.h --- a/src/port.h +++ b/src/port.h @@ -23,34 +23,55 @@ #include "profile.h" +#include + namespace QPulseAudio { class Q_DECL_EXPORT Port : public Profile { Q_OBJECT - Q_PROPERTY(bool available READ isAvailable NOTIFY availableChanged) + Q_PROPERTY(Availability availability READ availability NOTIFY availabilityChanged) public: + enum Availability { + Unknown, + Available, + Unavailable + }; + Q_ENUM(Availability) + Port(QObject *parent); virtual ~Port(); template void setInfo(const PAInfo *info) { Profile::setInfo(info); - if (m_isAvailable != info->available) { - m_isAvailable = info->available; - emit availableChanged(); + + Availability newAvailability; + switch (info->available) { + case PA_PORT_AVAILABLE_NO: + newAvailability = Unavailable; + break; + case PA_PORT_AVAILABLE_YES: + newAvailability = Available; + break; + default: + newAvailability = Unknown; + } + if (m_availability != newAvailability) { + m_availability = newAvailability; + emit availabilityChanged(); } } - bool isAvailable() const; + Availability availability() const; signals: - void availableChanged(); + void availabilityChanged(); private: - bool m_isAvailable; + Availability m_availability; }; } // QPulseAudio diff --git a/src/port.cpp b/src/port.cpp --- a/src/port.cpp +++ b/src/port.cpp @@ -25,17 +25,17 @@ Port::Port(QObject *parent) : Profile(parent) - , m_isAvailable(false) + , m_availability(Unknown) { } Port::~Port() { } -bool Port::isAvailable() const +Port::Availability Port::availability() const { - return m_isAvailable; + return m_availability; } } // QPulseAudio diff --git a/src/qml/plugin.cpp b/src/qml/plugin.cpp --- a/src/qml/plugin.cpp +++ b/src/qml/plugin.cpp @@ -28,6 +28,7 @@ #include "source.h" #include "context.h" #include "modulemanager.h" +#include "port.h" #include "globalactioncollection.h" #include "volumeosd.h" @@ -53,6 +54,7 @@ qmlRegisterType(uri, 0, 1, "ModuleManager"); qmlRegisterType(uri, 0, 1, "SourceOutputModel"); qmlRegisterType(uri, 0, 1, "StreamRestoreModel"); + qmlRegisterUncreatableType(uri, 0, 1, "Port", QString()); qmlRegisterType(uri, 0, 1, "GlobalAction"); qmlRegisterType(uri, 0, 1, "GlobalActionCollection"); qmlRegisterType(uri, 0, 1, "VolumeOSD");