diff --git a/sources/elementscollectioncache.cpp b/sources/elementscollectioncache.cpp index afc56c719..4a7e70536 100644 --- a/sources/elementscollectioncache.cpp +++ b/sources/elementscollectioncache.cpp @@ -21,9 +21,12 @@ #include "elementdefinition.h" #include "factory/elementfactory.h" #include "element.h" -#include #include "qet.h" +#include +#include +#include + /** Construct a cache for elements collections. @param database_path Path of the SQLite database to open. @@ -215,12 +218,21 @@ bool ElementsCollectionCache::fetchElement(ElementDefinition *element) } } +/** + * @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()); @@ -263,6 +275,30 @@ bool ElementsCollectionCache::fetchData(const ElementsLocation &location) { return(!state); } +/** + * @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 diff --git a/sources/elementscollectioncache.h b/sources/elementscollectioncache.h index 4e4bb6121..1df07a950 100644 --- a/sources/elementscollectioncache.h +++ b/sources/elementscollectioncache.h @@ -17,10 +17,11 @@ */ #ifndef ELEMENTS_COLLECTION_CACHE_H #define ELEMENTS_COLLECTION_CACHE_H -#include -#include + +#include #include "elementslocation.h" #include "elementlocation.h" + class ElementsCollection; class ElementsCategory; class ElementDefinition; @@ -50,6 +51,7 @@ class ElementsCollectionCache : public QObject 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());