Implement a dummy SoundVolumeControl for nemo
[harmattan/cameraplus] / src / devicekeys.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 "devicekeys.h"
22 #include <QDebug>
23
24 DeviceKeys::DeviceKeys(QObject *parent) :
25   QObject(parent),
26   m_keys(0),
27   m_repeating(true) {
28
29 }
30
31 DeviceKeys::~DeviceKeys() {
32   setActive(false);
33 }
34
35 bool DeviceKeys::isActive() const {
36   return m_keys != 0;
37 }
38
39 void DeviceKeys::setActive(bool active) {
40   if (active == isActive()) {
41     return;
42   }
43
44   if (!active) {
45     m_keys->deleteLater();
46     m_keys = 0;
47     m_stats.clear();
48   }
49   else {
50     m_keys = new MeeGo::QmKeys(this);
51     QObject::connect(m_keys, SIGNAL(keyEvent(MeeGo::QmKeys::Key, MeeGo::QmKeys::State)),
52                      this, SLOT(keyEvent(MeeGo::QmKeys::Key, MeeGo::QmKeys::State)));
53   }
54
55   emit activeChanged();
56 }
57
58 void DeviceKeys::keyEvent(MeeGo::QmKeys::Key key, MeeGo::QmKeys::State state) {
59   if (!setStats(key, state)) {
60     return;
61   }
62
63   if (key == MeeGo::QmKeys::VolumeUp) {
64     if (state == MeeGo::QmKeys::KeyUp) {
65       emit volumeUpReleased();
66     }
67     else if (state == MeeGo::QmKeys::KeyDown) {
68       emit volumeUpPressed();
69     }
70   }
71   else if (key == MeeGo::QmKeys::VolumeDown) {
72     if (state == MeeGo::QmKeys::KeyUp) {
73       emit volumeDownReleased();
74     }
75     else if (state == MeeGo::QmKeys::KeyDown) {
76       emit volumeDownPressed();
77     }
78   }
79 }
80
81 bool DeviceKeys::setStats(MeeGo::QmKeys::Key key, MeeGo::QmKeys::State state) {
82   if (m_repeating) {
83     return true;
84   }
85
86   if (!m_stats.contains(key)) {
87     m_stats.insert(key, state);
88     return true;
89   }
90
91   if (m_stats[key] != state) {
92     m_stats[key] = state;
93     return true;
94   }
95
96   return false;
97 }
98
99 bool DeviceKeys::isRepeating() {
100   return m_repeating;
101 }
102
103 void DeviceKeys::doRepeat(bool repeat) {
104   if (repeat != m_repeating) {
105     m_repeating = repeat;
106     emit repeatChanged();
107   }
108 }