--- 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);