homescreenapp/hsdomainmodel/src/hsdatabase.cpp
changeset 62 341166945d65
parent 55 03646e8da489
child 81 7dd137878ff8
--- a/homescreenapp/hsdomainmodel/src/hsdatabase.cpp	Thu Jun 24 13:11:40 2010 +0100
+++ b/homescreenapp/hsdomainmodel/src/hsdatabase.cpp	Fri Jun 25 19:19:22 2010 +0300
@@ -49,6 +49,13 @@
     }
 }
 
+
+/*!
+    \class HsDatabase
+    \ingroup group_hsdomainmodel
+    \brief 
+*/
+
 /*!
     Constructs a new database with the given \a parent object.
 */
@@ -185,43 +192,15 @@
     QSqlQuery query(QSqlDatabase::database(mConnectionName));
 
     QString statement =
-        "SELECT id, portraitWallpaper, landscapeWallpaper "
+        "SELECT id "
         "FROM Scene";
     
     if (query.prepare(statement) && query.exec() && query.next()) {        
-        data.id                  = query.value(0).toInt();
-        data.portraitWallpaper   = query.value(1).toString();
-        data.landscapeWallpaper  = query.value(2).toString();
+        data.id = query.value(0).toInt();        
         return true;
     }
     
-    return false;
-}
-
-/*!
-
-*/
-bool HsDatabase::updateScene(const HsSceneData &data)
-{
-    if (!checkConnection()) {
-        return false;
-    }
-
-    QSqlQuery query(QSqlDatabase::database(mConnectionName));
-
-    QString statement =
-        "UPDATE Scene "
-        "SET portraitWallpaper = ?, landscapeWallpaper = ? "
-        "WHERE id = ?";
-
-    if (query.prepare(statement)) {
-        query.addBindValue(data.portraitWallpaper);
-        query.addBindValue(data.landscapeWallpaper);    
-        query.addBindValue(data.id);
-        return  query.exec();
-    }
-    
-    return false;
+    return false;    
 }
 
 /*!
@@ -428,6 +407,56 @@
 /*!
 
 */
+bool HsDatabase::widgets(const QString &uri, const QVariantHash &preferences, int &count)
+{
+    if (!checkConnection()) {
+        return false;
+    }
+    QSqlQuery query(QSqlDatabase::database(mConnectionName));
+    if ( preferences.size() == 0 ) {
+        // return widget count of the given uri
+        QString statement =
+            "SELECT COUNT(id) "
+            "FROM Widgets "
+            "WHERE uri = ?";
+
+        if (query.prepare(statement)) {
+            query.addBindValue(uri);
+            if (query.exec() && query.next()) {
+                count = query.value(0).toInt();
+                return true;
+            }
+        }
+    } else {
+
+        QString statement =
+            "SELECT key, value, widgetId "
+            "FROM widgetPreferences "
+            "WHERE widgetId IN"
+            "(SELECT id FROM widgets WHERE uri = ?)";
+            
+        if (query.prepare(statement)) {
+            query.addBindValue(uri);
+            if (query.exec()) {
+                count = 0;
+                QMultiMap<QString, QString> foundPreferences;
+                while (query.next()) {
+                    foundPreferences.insert(query.value(0).toString(), query.value(1).toString());
+                }
+                if ( matchWidgetPreferences(preferences, foundPreferences) ) {
+                    ++count;
+                }
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+/*!
+
+*/
 bool HsDatabase::widget(HsWidgetData &data)
 {
     if (!checkConnection()) {
@@ -760,10 +789,7 @@
     return true;
 }
 
-/*!
-
-*/
-bool HsDatabase::generalConfiguration(HsGeneralConfiguration &data)
+bool HsDatabase::configuration(QVariantHash &configuration)
 {
     if (!checkConnection()) {
         return false;
@@ -772,101 +798,18 @@
     QSqlQuery query(QSqlDatabase::database(mConnectionName));
 
     QString statement =
-        "SELECT bounceEffect, tapAndHoldDistance, widgetTapAndHoldTimeout, sceneTapAndHoldTimeout, "
-        "pageChangeZoneWidth, "
-        "pageIndicatorSpacing, pageChangeAnimationDuration, pageChangeZoneAnimationDuration, "
-        "pageChangeZoneReverseAnimationDuration, "
-        "pageRemovedAnimationDuration, newPageAddedAnimationDuration, widgetDragEffectDuration, "
-        "widgetDropEffectDuration, boundaryFeedbackEffectDistance, "
-        "defaultPageId, maximumPageCount, maximumWidgetHeight, maximumWidgetWidth, "
-        "minimumWidgetHeight, minimumWidgetWidth, shortcutLabelsVisible,  "
-        "pageChangePanDistance "
-        "FROM GeneralConfiguration";
+        "SELECT key, value "
+        "FROM Configuration";
 
-    if (query.prepare(statement) && query.exec() && query.next()) {        
-        data.bounceEffect                           = query.value(0).toInt();
-        data.tapAndHoldDistance                     = query.value(1).toReal();
-        data.widgetTapAndHoldTimeout                = query.value(2).toInt();
-        data.sceneTapAndHoldTimeout                 = query.value(3).toInt();
-        data.pageChangeZoneWidth                    = query.value(4).toReal();
-        data.pageIndicatorSpacing                   = query.value(5).toReal();
-        data.pageChangeAnimationDuration            = query.value(6).toInt();
-        data.pageChangeZoneAnimationDuration        = query.value(7).toInt();
-        data.pageChangeZoneReverseAnimationDuration = query.value(8).toInt();
-        data.pageRemovedAnimationDuration           = query.value(9).toInt();
-        data.newPageAddedAnimationDuration          = query.value(10).toInt();
-        data.widgetDragEffectDuration               = query.value(11).toInt();
-        data.widgetDropEffectDuration               = query.value(12).toInt();
-        data.boundaryFeedbackEffectDistance         = query.value(13).toInt();
-        data.defaultPageId                          = query.value(14).toInt();
-        data.maximumPageCount                       = query.value(15).toInt();
-        data.maximumWidgetHeight                    = query.value(16).toReal();
-        data.maximumWidgetWidth                     = query.value(17).toReal();
-        data.minimumWidgetHeight                    = query.value(18).toReal();
-        data.minimumWidgetWidth                     = query.value(19).toReal();
-        data.shortcutLabelsVisible                  = query.value(20).toBool();
-        data.pageChangePanDistance                  = query.value(21).toReal();
+    if (query.prepare(statement) && query.exec()) {
+        configuration.clear();
+        while (query.next()) {
+            configuration.insert(query.value(0).toString(), 
+                                 query.value(1));
+        }
         return true;
     }
-    
-    return false;
-}
 
-/*!
-
-*/
-bool HsDatabase::feedbackConfiguration(HsFeedbackConfiguration &data)
-{
-    if (!checkConnection()) {
-        return false;
-    }
-
-    QSqlQuery query(QSqlDatabase::database(mConnectionName));
-
-    QString statement =
-        "SELECT pageChangeFeedbackType, widgetPickFeedbackType, widgetDropFeedbackType,  "
-        "widgetRepositionFeedbackType, widgetOverTrashbinFeedbackType, widgetDropToTrashbinFeedbackType,  "
-        "shortcutWidgetTapFeedbackType, widgetMoveBlockedFeedbackType, clockWidgetTapFeedbackType, "
-        "widgetSnappingFeedbackType "
-        "FROM FeedbackConfiguration";
-
-    if (query.prepare(statement) && query.exec() && query.next()) {        
-        data.pageChangeFeedbackType           = data.feedbackFromString(query.value(0).toString());
-        data.widgetPickFeedbackType           = data.feedbackFromString(query.value(1).toString());
-        data.widgetDropFeedbackType           = data.feedbackFromString(query.value(2).toString());
-        data.widgetRepositionFeedbackType     = data.feedbackFromString(query.value(3).toString());
-        data.widgetOverTrashbinFeedbackType   = data.feedbackFromString(query.value(4).toString());
-        data.widgetDropToTrashbinFeedbackType = data.feedbackFromString(query.value(5).toString());
-        data.shortcutWidgetTapFeedbackType    = data.feedbackFromString(query.value(6).toString());
-        data.widgetMoveBlockedFeedbackType    = data.feedbackFromString(query.value(7).toString());
-        data.clockWidgetTapFeedbackType       = data.feedbackFromString(query.value(8).toString());
-        data.widgetSnappingFeedbackType       = data.feedbackFromString(query.value(9).toString());
-        return true;
-    }
-    
-    return false;
-}
-
-bool HsDatabase::snapConfiguration(HsSnapConfiguration &data)
-{   
-    if (!checkConnection()) {
-        return false;
-    }
-
-    QSqlQuery query(QSqlDatabase::database(mConnectionName));
-
-    QString statement =
-        "SELECT snappingEnabled, snapForce, snapGap, borderGap, timeout "
-        "FROM SnapConfiguration";
-
-    if (query.prepare(statement) && query.exec() && query.next()) {
-        data.snappingEnabled = query.value(0).toBool();
-        data.snapForce = query.value(1).toReal();
-        data.snapGap   = query.value(2).toReal();
-        data.borderGap = query.value(3).toReal();
-        data.timeout   = query.value(4).toInt();
-        return true;
-    }
     return false;
 }
 
@@ -913,6 +856,21 @@
 }
 
 /*!
+    Returns true if \a preferences are found from \a storedPreferences multimap. 
+    If preferences is empty, returns true.
+    
+*/
+bool HsDatabase::matchWidgetPreferences(const QVariantHash &preferences, const QMultiMap<QString, QString>& storedPreferences)
+{
+    bool contains = true;
+    QList<QString> preferenceKeys = preferences.keys();
+    for (int i=0; i<preferenceKeys.count() && contains; ++i) {
+        contains = storedPreferences.contains(preferenceKeys[i], preferences[preferenceKeys[i]].toString());
+    }
+    return contains;
+}
+
+/*!
     Points to the database instance.
 */
 HsDatabase *HsDatabase::mInstance(0);