Add missing capability.cpp
[harmattan/cameraplus] / src / cameraresources.h
1 // -*- c++ -*-
2
3 /*!
4  * This file is part of CameraPlus.
5  *
6  * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21  */
22
23 #ifndef CAMERA_RESOURCES_H
24 #define CAMERA_RESOURCES_H
25
26 #include <QObject>
27 #include <QThread>
28 #include <policy/resource-set.h>
29
30 class CameraResourcesWorker;
31
32 class CameraResources : public QObject {
33   Q_OBJECT
34
35   Q_PROPERTY(bool acquired READ acquired NOTIFY acquiredChanged);
36   Q_PROPERTY(bool hijacked READ hijacked NOTIFY hijackedChanged);
37   Q_PROPERTY(bool scaleAcquired READ isScaleAcquired NOTIFY scaleAcquisitionChanged);
38
39   Q_ENUMS(Mode);
40   Q_ENUMS(ResourceType);
41
42 public:
43   typedef enum {
44     None,
45     Image,
46     Video,
47     Recording,
48     Player,
49   } Mode;
50
51   CameraResources(QObject *parent = 0);
52   ~CameraResources();
53
54   Q_INVOKABLE bool acquire(const Mode& mode);
55
56   bool acquired() const;
57   bool hijacked() const;
58   bool isScaleAcquired() const;
59
60 signals:
61   void acquiredChanged();
62   void hijackedChanged();
63   void updated();
64   void scaleAcquisitionChanged();
65
66 private:
67   bool isResourceGranted(const ResourcePolicy::ResourceType& resource) const;
68
69   CameraResourcesWorker *m_worker;
70   QThread m_thread;
71 };
72
73 class CameraResourcesWorker : public QObject {
74   Q_OBJECT
75
76 public:
77   CameraResourcesWorker(QObject *parent = 0);
78   ~CameraResourcesWorker();
79
80 public slots:
81   void acquire(bool *ok, const CameraResources::Mode& mode);
82   void acquired(bool *ok);
83   void hijacked(bool *ok);
84   void isResourceGranted(bool *ok, int resource);
85
86 signals:
87   void acquiredChanged();
88   void hijackedChanged();
89   void updated();
90
91 private slots:
92   void init();
93
94   void resourcesReleased();
95   void lostResources();
96   void resourcesGranted(const QList<ResourcePolicy::ResourceType>& optional);
97   void resourcesDenied();
98
99 private:
100   bool release();
101
102   bool updateSet(const QList<ResourcePolicy::ResourceType>& required,
103                  const QList<ResourcePolicy::ResourceType>& optional =
104                  QList<ResourcePolicy::ResourceType>());
105
106   QList<ResourcePolicy::ResourceType> listSet();
107
108   void setAcquired(bool acquired);
109   void setHijacked(bool hijacked);
110
111   ResourcePolicy::ResourceSet *m_set;
112
113   CameraResources::Mode m_mode;
114   bool m_acquired;
115   bool m_acquiring;
116   bool m_hijacked;
117 };
118
119 #endif /* CAMERA_RESOURCES_H */