Added qmafw-gst-subtitles-renderer-0.0.55 for Meego Harmattan 1.2
[mafwsubrenderer] / qmafw-gst-subtitles-renderer / inc / MafwGstRendererVolume.h
diff --git a/qmafw-gst-subtitles-renderer/inc/MafwGstRendererVolume.h b/qmafw-gst-subtitles-renderer/inc/MafwGstRendererVolume.h
new file mode 100644 (file)
index 0000000..47d415d
--- /dev/null
@@ -0,0 +1,97 @@
+#ifndef MAFWGSTRENDERERVOLUME_H
+#define MAFWGSTRENDERERVOLUME_H
+
+#include <QObject>
+
+class DBusConnection;
+class DBusMessage;
+class DBusPendingCall;
+class DBusMessageIter;
+class DBusPendingCall;
+
+/**
+ * Provides volume setting, getting and listening functionality using
+ * PulseAudioMainVolume DBus API.
+ */
+class MafwGstRendererVolume : public QObject
+{
+    Q_OBJECT
+public:
+    /**
+     * Constructor
+     */
+    MafwGstRendererVolume();
+    ~MafwGstRendererVolume();
+
+    /**
+     * Get the volume level. Initial volume level is always got via volumeChanged signal.
+     * Before that signal returns always 0.
+     * @return The current volume level. Value is between 0 to 99.
+     */
+    uint getVolume();
+
+    /**
+     * Set the volume level to pulse audio.
+     * @note Volume setting happens asynchronously
+     *       and may wait until dbus connection to pulse audio is ready.
+     * @param The volume level to be set. Valid value range is between 0 to 99.
+     * @return true on success.
+     */
+    bool setVolume (uint value);
+
+Q_SIGNALS:
+    /**
+     * Signal telling that volume level has been changed.
+     */
+    void volumeChanged(uint newLevel);
+
+private Q_SLOTS:
+    /** Makes p2p dbus connection to pulse audio. */
+    void connectToPulseAudio();
+
+private:
+    /**
+     * Starts to listen signal from  PulseAudioMainVolume DBus API
+     */
+    void listenVolumeSignals();
+
+    /**
+     * Get the step configuration asynchronously from PulseAudioMainVolume
+     */
+    void getRestoreEntryForMediaRole();
+
+    /**
+     * Catch signals from PulseAudioMainVolume telling that volume step configuration has been changed
+     */
+    static void handleIncomingMessages( DBusConnection* conn,
+                                        DBusMessage* message,
+                                        MafwGstRendererVolume* self);
+
+    /**
+     * Catch reply callback for step configuration request from PulseAudioMainVolume.
+     */
+    static void getEntryReply(DBusPendingCall *pending, MafwGstRendererVolume *self);
+
+    static void volumeReply(DBusPendingCall *pending, MafwGstRendererVolume *self);
+
+    bool readVolumeFromStruct(DBusMessageIter *iterator);
+
+private:
+    /** The current volume step, values are between 0, used maximum volume level */
+    uint m_currentVolume;
+
+    /** The volume step which is pending to be set. */
+    uint m_pendingVolumeValue;
+
+    /** The dbus connection object */
+    DBusConnection* m_dbusConnection;
+
+    QString m_objectPath;
+
+    /** The pending call. */
+    DBusPendingCall* m_pendingCall;
+
+
+};
+
+#endif // MAFWGSTRENDERERVOLUME_H