Updated copyright year
[harmattan/cameraplus] / lib / qtcamvideotorch.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 "qtcamvideotorch.h"
22 #include "qtcamdevice.h"
23 #include "qtcamdevice_p.h"
24 #include <QPointer>
25
26 class QtCamVideoTorchPrivate {
27 public:
28   static void torch_notify(GObject *gobject, GParamSpec *pspec, QtCamVideoTorch *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 QtCamVideoTorch::QtCamVideoTorch(QtCamDevice *dev, QObject *parent) :
40   QObject(parent), d_ptr(new QtCamVideoTorchPrivate) {
41
42   d_ptr->dev = dev;
43   d_ptr->handler = 0;
44
45   if (d_ptr->dev->d_ptr->videoSource) {
46     d_ptr->handler = g_signal_connect(d_ptr->dev->d_ptr->videoSource,
47                                       "notify::video-torch",
48                                       G_CALLBACK(QtCamVideoTorchPrivate::torch_notify), this);
49   }
50 }
51
52 QtCamVideoTorch::~QtCamVideoTorch() {
53   if (d_ptr->dev && d_ptr->handler) {
54     g_signal_handler_disconnect(d_ptr->dev->d_ptr->videoSource, d_ptr->handler);
55   }
56
57   delete d_ptr; d_ptr = 0;
58 }
59
60 void QtCamVideoTorch::setOn(bool on) {
61   gboolean val = on ? TRUE : FALSE;
62
63   if (d_ptr->dev->d_ptr->videoSource) {
64     g_object_set(d_ptr->dev->d_ptr->videoSource, "video-torch", val, NULL);
65   }
66 }
67
68 bool QtCamVideoTorch::isOn() const {
69   gboolean val = FALSE;
70
71   if (d_ptr->dev->d_ptr->videoSource) {
72     g_object_get(d_ptr->dev->d_ptr->videoSource, "video-torch", &val, NULL);
73   }
74
75   return (val == TRUE);
76 }