camerauis/cameraxui/cxengine/inc/api/cxesettings.h
author hgs
Fri, 06 Aug 2010 10:03:37 +0300
changeset 46 c826656d6714
parent 19 d9aefe59d544
permissions -rw-r--r--
201031
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
46
hgs
parents: 19
diff changeset
     2
* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
* All rights reserved.
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
* This component and the accompanying materials are made available
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
* which accompanies this distribution, and is available
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
* Initial Contributors:
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
* Contributors:
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
* Description:
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
*/
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
/*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
 * cxesettings.h
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
 *
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
 *  Created on: Dec 30, 2008
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    21
 *      
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    22
 */
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    23
#ifndef CXESETTINGS_H_
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
#define CXESETTINGS_H_
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    25
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    26
#include <QObject>
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    27
#include <QString>
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    28
#include <QVariant>
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    29
46
hgs
parents: 19
diff changeset
    30
#include "cxeerror.h"
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    31
#include "cxenamespace.h"
46
hgs
parents: 19
diff changeset
    32
#include "cxeexception.h"
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    33
46
hgs
parents: 19
diff changeset
    34
/*!
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    35
* Class to access all kind of Camera Settings
46
hgs
parents: 19
diff changeset
    36
*
hgs
parents: 19
diff changeset
    37
* There are templated get() and set() methods for accessing and modifying settings.
hgs
parents: 19
diff changeset
    38
* Supported types are int, qreal, QString, QVariantMap and enums.
hgs
parents: 19
diff changeset
    39
*
hgs
parents: 19
diff changeset
    40
* It is possible to monitor changes in settings, either by connecting to settingValueChanged() signal
hgs
parents: 19
diff changeset
    41
* or registering a slot as listener to a specific setting using listenForSetting(). With the latter
hgs
parents: 19
diff changeset
    42
* method you will only be notified of the change in the requested setting, as opposed to the settingValueChanged()
hgs
parents: 19
diff changeset
    43
* which will be emitted for any setting change.
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
*/
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
class CxeSettings : public QObject
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    46
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
    
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
    Q_OBJECT
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    49
46
hgs
parents: 19
diff changeset
    50
public:
hgs
parents: 19
diff changeset
    51
hgs
parents: 19
diff changeset
    52
hgs
parents: 19
diff changeset
    53
    /*!
hgs
parents: 19
diff changeset
    54
    * Returns value of external setting item which is not owned by camera
hgs
parents: 19
diff changeset
    55
    */
hgs
parents: 19
diff changeset
    56
    virtual void get(long int uid,
hgs
parents: 19
diff changeset
    57
                     unsigned long int key,
hgs
parents: 19
diff changeset
    58
                     Cxe::SettingKeyType type,
hgs
parents: 19
diff changeset
    59
                     QVariant &value) const = 0;
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    60
46
hgs
parents: 19
diff changeset
    61
    /*!
hgs
parents: 19
diff changeset
    62
     * Get a value of a certain setting. Template method that can be used
hgs
parents: 19
diff changeset
    63
     * with any enumeration (well actually, anything that can be cast to from int),
hgs
parents: 19
diff changeset
    64
     * int, QString and QVariantMap. Will throw CxeException in case of error.
hgs
parents: 19
diff changeset
    65
     *
hgs
parents: 19
diff changeset
    66
     * An example:
hgs
parents: 19
diff changeset
    67
     * \code
hgs
parents: 19
diff changeset
    68
     *  try {
hgs
parents: 19
diff changeset
    69
     *      Cxe::Whitebalance wb = settings.get<Cxe::Whitebalance>(CxeSettingIds::WHITE_BALANCE);
hgs
parents: 19
diff changeset
    70
     *  catch (CxeException &e) {
hgs
parents: 19
diff changeset
    71
     *      CX_DEBUG(("Error getting white balance"));
hgs
parents: 19
diff changeset
    72
     *  }
hgs
parents: 19
diff changeset
    73
     * \endcode
hgs
parents: 19
diff changeset
    74
     * @param settingId  Setting key
hgs
parents: 19
diff changeset
    75
     * @return           Setting value
hgs
parents: 19
diff changeset
    76
     */
hgs
parents: 19
diff changeset
    77
    template<typename T>
hgs
parents: 19
diff changeset
    78
    inline T get(const QString &key) const {
hgs
parents: 19
diff changeset
    79
        QVariant v;
hgs
parents: 19
diff changeset
    80
        getValue(key, v);
hgs
parents: 19
diff changeset
    81
        return (T)v.value<int>();
hgs
parents: 19
diff changeset
    82
    }
hgs
parents: 19
diff changeset
    83
hgs
parents: 19
diff changeset
    84
    /*!
hgs
parents: 19
diff changeset
    85
     * Same as above but with default value in case of error. No exceptions are thrown.
hgs
parents: 19
diff changeset
    86
     *
hgs
parents: 19
diff changeset
    87
     *An example:
hgs
parents: 19
diff changeset
    88
     * \code
hgs
parents: 19
diff changeset
    89
     *
hgs
parents: 19
diff changeset
    90
     *  Cxe::Whitebalance wb = settings.get<Cxe::Whitebalance>(CxeSettingIds::WHITE_BALANCE, Cxe::WhitebalanceAutomatic);
hgs
parents: 19
diff changeset
    91
     *
hgs
parents: 19
diff changeset
    92
     * \endcode
hgs
parents: 19
diff changeset
    93
     * @param key           Setting key
hgs
parents: 19
diff changeset
    94
     * @param defaultValue  Default value returned in case of error
hgs
parents: 19
diff changeset
    95
     * @return              Value of the setting
hgs
parents: 19
diff changeset
    96
     */
hgs
parents: 19
diff changeset
    97
    template<typename T>
hgs
parents: 19
diff changeset
    98
    inline T get(const QString &key, const T &defaultValue) const {
hgs
parents: 19
diff changeset
    99
        try {
hgs
parents: 19
diff changeset
   100
            return get<T>(key);
hgs
parents: 19
diff changeset
   101
        } catch (CxeException &e) {
hgs
parents: 19
diff changeset
   102
            return defaultValue;
hgs
parents: 19
diff changeset
   103
        }
hgs
parents: 19
diff changeset
   104
    }
hgs
parents: 19
diff changeset
   105
hgs
parents: 19
diff changeset
   106
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   107
46
hgs
parents: 19
diff changeset
   108
    /*!
hgs
parents: 19
diff changeset
   109
    * Set a value of a certain setting. Template method that can be used
hgs
parents: 19
diff changeset
   110
    * with any enumeration (well actually, anything that can be cast to from int),
hgs
parents: 19
diff changeset
   111
    * int, QString and QVariantMap.
hgs
parents: 19
diff changeset
   112
    *
hgs
parents: 19
diff changeset
   113
    * An example:
hgs
parents: 19
diff changeset
   114
    * \code
hgs
parents: 19
diff changeset
   115
    *  try {
hgs
parents: 19
diff changeset
   116
    *      Cxe::Whitebalance wb = Cxe::WhiteBalanceAutomatic;
hgs
parents: 19
diff changeset
   117
    *      settings.get<Cxe::Whitebalance>(CxeSettingIds::WHITE_BALANCE, wb);
hgs
parents: 19
diff changeset
   118
    *  catch (CxeException &e) {
hgs
parents: 19
diff changeset
   119
    *      CX_DEBUG(("Error setting white balance"));
hgs
parents: 19
diff changeset
   120
    *  }
hgs
parents: 19
diff changeset
   121
    * \endcode
hgs
parents: 19
diff changeset
   122
    * @param settingId  Setting key
hgs
parents: 19
diff changeset
   123
    * @param value     Setting value
hgs
parents: 19
diff changeset
   124
    */
hgs
parents: 19
diff changeset
   125
    template<typename T>
hgs
parents: 19
diff changeset
   126
    inline void set(const QString &key, const T &value) {
hgs
parents: 19
diff changeset
   127
       QVariant v;
hgs
parents: 19
diff changeset
   128
       v.setValue((int)value);
hgs
parents: 19
diff changeset
   129
       setValue(key, v);
hgs
parents: 19
diff changeset
   130
    }
hgs
parents: 19
diff changeset
   131
hgs
parents: 19
diff changeset
   132
    /*!
hgs
parents: 19
diff changeset
   133
    * Resets settings to default values.
hgs
parents: 19
diff changeset
   134
    */
hgs
parents: 19
diff changeset
   135
    virtual void reset() = 0;
hgs
parents: 19
diff changeset
   136
hgs
parents: 19
diff changeset
   137
    /*!
hgs
parents: 19
diff changeset
   138
     * Get value of variation setting.
hgs
parents: 19
diff changeset
   139
     */
hgs
parents: 19
diff changeset
   140
    virtual CxeError::Id getVariationValue(const QString &key, QVariant &value) = 0;
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   141
46
hgs
parents: 19
diff changeset
   142
    /*!
hgs
parents: 19
diff changeset
   143
     * Add listener for changes in one setting. When the value of the setting changes, the given
hgs
parents: 19
diff changeset
   144
     * slot is invoked on given object.
hgs
parents: 19
diff changeset
   145
     *
hgs
parents: 19
diff changeset
   146
     * @param settingKey Setting to listen to
hgs
parents: 19
diff changeset
   147
     * @param target Object that the slot will be invoked for
hgs
parents: 19
diff changeset
   148
     * @param slot Slot that will be invoked. The slot can have either of these two signatures:
hgs
parents: 19
diff changeset
   149
     *   slotName(const QVariant&)    only new value of setting is passed as parameter
hgs
parents: 19
diff changeset
   150
     *   slotName(const QString&, const QVariant&) both setting key and new value are passed as parameter
hgs
parents: 19
diff changeset
   151
     * @return boolean to indicate success
hgs
parents: 19
diff changeset
   152
     */
hgs
parents: 19
diff changeset
   153
    virtual bool listenForSetting(const QString &settingKey, QObject *target, const char *slot) = 0;
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
46
hgs
parents: 19
diff changeset
   155
protected:
hgs
parents: 19
diff changeset
   156
    /*!
hgs
parents: 19
diff changeset
   157
     * returns the setting as QVariant
hgs
parents: 19
diff changeset
   158
     */
hgs
parents: 19
diff changeset
   159
    virtual void getValue(const QString &key, QVariant &value) const = 0;
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   160
46
hgs
parents: 19
diff changeset
   161
    /*!
hgs
parents: 19
diff changeset
   162
    * Set new value for the given key
hgs
parents: 19
diff changeset
   163
    */
hgs
parents: 19
diff changeset
   164
    virtual void setValue(const QString &key, const QVariant &newValue) = 0;
hgs
parents: 19
diff changeset
   165
hgs
parents: 19
diff changeset
   166
signals:
hgs
parents: 19
diff changeset
   167
hgs
parents: 19
diff changeset
   168
    /*!
hgs
parents: 19
diff changeset
   169
    * to notify engine and ui components for a change in a setting value
hgs
parents: 19
diff changeset
   170
    */
hgs
parents: 19
diff changeset
   171
    void settingValueChanged(const QString &key, QVariant newValue);
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
46
hgs
parents: 19
diff changeset
   173
    /*!
hgs
parents: 19
diff changeset
   174
    * to notify engine and ui components for a change in a setting value
hgs
parents: 19
diff changeset
   175
    */
hgs
parents: 19
diff changeset
   176
    void settingValueChanged(long int uid, unsigned long int key, QVariant value);
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   177
46
hgs
parents: 19
diff changeset
   178
protected:
hgs
parents: 19
diff changeset
   179
    CxeSettings() {}
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   180
46
hgs
parents: 19
diff changeset
   181
private:
hgs
parents: 19
diff changeset
   182
    Q_DISABLE_COPY( CxeSettings )
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   183
};
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   184
46
hgs
parents: 19
diff changeset
   185
// include set/get function specializations
hgs
parents: 19
diff changeset
   186
#include "cxesettings.inl"
hgs
parents: 19
diff changeset
   187
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   188
#endif /*CXESETTINGS_H_*/
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   189
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   190
// end  of file