[qet] [4323] Elements collection cache can fully fetch and cache element data from elementLocation |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 4323
Author: blacksun
Date: 2016-01-14 17:09:28 +0100 (Thu, 14 Jan 2016)
Log Message:
-----------
Elements collection cache can fully fetch and cache element data from elementLocation
Modified Paths:
--------------
trunk/sources/elementscollectioncache.cpp
trunk/sources/elementscollectioncache.h
Modified: trunk/sources/elementscollectioncache.cpp
===================================================================
--- trunk/sources/elementscollectioncache.cpp 2016-01-14 12:25:54 UTC (rev 4322)
+++ trunk/sources/elementscollectioncache.cpp 2016-01-14 16:09:28 UTC (rev 4323)
@@ -21,9 +21,12 @@
#include "elementdefinition.h"
#include "factory/elementfactory.h"
#include "element.h"
-#include <QImageWriter>
#include "qet.h"
+#include <QImageWriter>
+#include <QSqlQuery>
+#include <QSqlError>
+
/**
Construct a cache for elements collections.
@param database_path Path of the SQLite database to open.
@@ -215,12 +218,21 @@
}
}
+/**
+ * @brief ElementsCollectionCache::fetchElement
+ * Retrieve the data for a given element, using the cache if available,
+ * filling it otherwise. Data are then available through pixmap() and name() methods
+ * @param location The definition of an element
+ * @see pixmap()
+ * @see name()
+ * @return True if the retrieval succeeded, false otherwise
+ */
bool ElementsCollectionCache::fetchElement(ElementLocation location)
{
if (fetchNameFromCache(location.collectionPath(), location.uuid()) &&
fetchPixmapFromCache(location.collectionPath(), location.uuid()))
return true;
- else if (fetchData(ElementsLocation(location.collectionPath())))
+ else if (fetchData(location))
{
cacheName(location.collectionPath(), location.uuid());
cachePixmap(location.collectionPath(), location.uuid());
@@ -264,6 +276,30 @@
}
/**
+ * @brief ElementsCollectionCache::fetchData
+ * Retrieve the data by building the full CustomElement object matching the given location,
+ * without using the cache. Data are then available through pixmap() and name() methods
+ * @param location : location of a given element
+ * @return True if the retrieval succeeded, false otherwise
+ */
+bool ElementsCollectionCache::fetchData(ElementLocation &location)
+{
+ int state;
+ Element *element = ElementFactory::Instance()->createElement(location, 0, &state);
+
+ if(state)
+ qDebug() << "ElementsCollectionCache::fetchData() 2: Le chargement du composant" << qPrintable(location.fileSystemPath()) << "a echoue avec le code d'erreur" << state;
+ else
+ {
+ current_name_ = element->name();
+ current_pixmap_ = element->pixmap();
+ }
+
+ delete element;
+ return (!state);
+}
+
+/**
* @brief ElementsCollectionCache::fetchNameFromCache
* Retrieve the name for an element, given its path and uuid
* The value is then available through the name() method.
Modified: trunk/sources/elementscollectioncache.h
===================================================================
--- trunk/sources/elementscollectioncache.h 2016-01-14 12:25:54 UTC (rev 4322)
+++ trunk/sources/elementscollectioncache.h 2016-01-14 16:09:28 UTC (rev 4323)
@@ -17,10 +17,11 @@
*/
#ifndef ELEMENTS_COLLECTION_CACHE_H
#define ELEMENTS_COLLECTION_CACHE_H
-#include <QtCore>
-#include <QtSql>
+
+#include <QSqlDatabase>
#include "elementslocation.h"
#include "elementlocation.h"
+
class ElementsCollection;
class ElementsCategory;
class ElementDefinition;
@@ -50,6 +51,7 @@
QString name() const;
QPixmap pixmap() const;
bool fetchData(const ElementsLocation &);
+ bool fetchData(ElementLocation &location);
bool fetchNameFromCache(const QString &path, const QUuid &uuid);
bool fetchPixmapFromCache(const QString &path, const QUuid &uuid);
bool cacheName(const QString &path, const QUuid &uuid = QUuid::createUuid());