Kill CameraButtonRow and use the QtQuick Row component
[harmattan/cameraplus] / lib / qtcamvideomute.cpp
1 /*!
2  * This file is part of CameraPlus.
3  *
4  * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  */
20
21 #include "qtcamvideomute.h"
22 #include "qtcamdevice.h"
23 #include "qtcamdevice_p.h"
24 #include <QPointer>
25
26 class QtCamVideoMutePrivate {
27 public:
28   static void mute_notify(GObject *gobject, GParamSpec *pspec, QtCamVideoMute *q) {
29     Q_UNUSED(gobject);
30     Q_UNUSED(pspec);
31
32     QMetaObject::invokeMethod(q, "stateChanged", Qt::QueuedConnection);
33   }
34
35   QPointer<QtCamDevice> dev;
36   gulong handler;
37 };
38
39 QtCamVideoMute::QtCamVideoMute(QtCamDevice *dev, QObject *parent) :
40   QObject(parent), d_ptr(new QtCamVideoMutePrivate) {
41
42   d_ptr->dev = dev;
43   d_ptr->handler = 0;
44
45   if (d_ptr->dev->d_ptr->cameraBin) {
46     d_ptr->handler = g_signal_connect(d_ptr->dev->d_ptr->cameraBin,
47                                       "notify::mute",
48                                       G_CALLBACK(QtCamVideoMutePrivate::mute_notify), this);
49   }
50 }
51
52 QtCamVideoMute::~QtCamVideoMute() {
53   if (d_ptr->dev && d_ptr->handler) {
54     g_signal_handler_disconnect(d_ptr->dev->d_ptr->cameraBin, d_ptr->handler);
55   }
56
57   delete d_ptr; d_ptr = 0;
58 }
59
60 void QtCamVideoMute::setEnabled(bool enabled) {
61   gboolean val = enabled ? TRUE : FALSE;
62
63   if (d_ptr->dev->d_ptr->cameraBin) {
64     g_object_set(d_ptr->dev->d_ptr->cameraBin, "mute", val, NULL);
65   }
66 }
67
68 bool QtCamVideoMute::isEnabled() const {
69   gboolean val = FALSE;
70
71   if (d_ptr->dev->d_ptr->cameraBin) {
72     g_object_get(d_ptr->dev->d_ptr->cameraBin, "mute", &val, NULL);
73   }
74
75   return (val == TRUE);
76 }