summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Menard <alexis.menard@openbossa.org>2011-08-11 12:20:10 -0300
committerAlexis Menard <alexis.menard@openbossa.org>2011-08-11 14:02:54 -0300
commite87edef6ea9d1f541e08073796e33359cea1c0a9 (patch)
tree8edd7d5655b0a91d46bde23028948ebcacb81c2a
parentf445a6209d37222e0a68e0973a292c9aca79c20f (diff)
downloadsnowshoe-e87edef6ea9d1f541e08073796e33359cea1c0a9.tar.gz
Make the databasemanager a singleton.
It is easier to use as we just instanciate it in the main.cpp and we can use it no matter which window, no matter which popup. I believe it is easier than passing pointers around. I also don't see the benefit of multiple database manager as we will be probably have one model per information we have, e.g. the bookmark model is sharable around. Reviewed-by: Ademar Reis
-rw-r--r--src/DatabaseManager.cpp19
-rw-r--r--src/DatabaseManager.h9
-rw-r--r--tests/database/tst_database.cpp11
3 files changed, 29 insertions, 10 deletions
diff --git a/src/DatabaseManager.cpp b/src/DatabaseManager.cpp
index 0362eaf..bd993eb 100644
--- a/src/DatabaseManager.cpp
+++ b/src/DatabaseManager.cpp
@@ -22,6 +22,23 @@
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>
+DatabaseManager* DatabaseManager::m_instance = 0;
+
+DatabaseManager* DatabaseManager::instance()
+{
+ if (!m_instance)
+ m_instance = new DatabaseManager;
+ return m_instance;
+}
+
+void DatabaseManager::destroy()
+{
+ if (m_instance) {
+ delete m_instance;
+ m_instance = 0;
+ }
+}
+
DatabaseManager::DatabaseManager()
{
const QString storagePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
@@ -60,6 +77,8 @@ bool DatabaseManager::initialize()
return false;
m_bookmarkModel->generateRoleNames();
+ // Populate the model.
+ m_bookmarkModel->select();
return createdTables;
}
diff --git a/src/DatabaseManager.h b/src/DatabaseManager.h
index 6eef142..42887fd 100644
--- a/src/DatabaseManager.h
+++ b/src/DatabaseManager.h
@@ -27,9 +27,8 @@ class DatabaseManager
{
public:
- DatabaseManager();
- ~DatabaseManager();
-
+ static DatabaseManager* instance();
+ static void destroy();
bool initialize();
BookmarkModel* bookmarkDataBaseModel() const;
@@ -38,6 +37,10 @@ protected:
bool createTables();
private:
+ DatabaseManager();
+ ~DatabaseManager();
+
+ static DatabaseManager* m_instance;
QSqlDatabase m_database;
BookmarkModel* m_bookmarkModel;
};
diff --git a/tests/database/tst_database.cpp b/tests/database/tst_database.cpp
index ff6ea40..932c4a8 100644
--- a/tests/database/tst_database.cpp
+++ b/tests/database/tst_database.cpp
@@ -44,7 +44,6 @@ private slots:
void update();
private:
- DatabaseManager* m_manager;
QByteArray m_XdgDataHome;
};
@@ -62,8 +61,6 @@ void tst_DataBase::initTestCase()
m_XdgDataHome = qgetenv("XDG_DATA_HOME");
setenv("XDG_DATA_HOME", QDir::tempPath().toLatin1().data(), 1);
-
- m_manager = new DatabaseManager();
}
void tst_DataBase::cleanupTestCase()
@@ -72,7 +69,6 @@ void tst_DataBase::cleanupTestCase()
databaseDir.remove(QSqlDatabase::database().databaseName());
setenv("XDG_DATA_HOME", m_XdgDataHome.data(), 1);
- delete m_manager;
}
void tst_DataBase::cleanup()
@@ -83,12 +79,13 @@ void tst_DataBase::cleanup()
void tst_DataBase::initialization()
{
- QCOMPARE(m_manager->initialize(), true);
+ QCOMPARE(DatabaseManager::instance(), DatabaseManager::instance());
+ QCOMPARE(DatabaseManager::instance()->initialize(), true);
}
void tst_DataBase::insert()
{
- BookmarkModel* bookmarkModel = m_manager->bookmarkDataBaseModel();
+ BookmarkModel* bookmarkModel = DatabaseManager::instance()->bookmarkDataBaseModel();
QSqlRecord record;
{
@@ -109,7 +106,7 @@ void tst_DataBase::insert()
void tst_DataBase::update()
{
- BookmarkModel* bookmarkModel = m_manager->bookmarkDataBaseModel();
+ BookmarkModel* bookmarkModel = DatabaseManager::instance()->bookmarkDataBaseModel();
QSqlRecord record;
bookmarkModel->insert("Google", "http://www.google.com");