00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <ImageLoaderManager.h>
00021 #include <Exceptions.h>
00022
00023 #define tr(arg) QObject::tr(arg)
00024
00037 ImageLoaderPtr ImageLoaderManager::getLoader(const QString &fileName)
00038 {
00039 int dotPos = fileName.lastIndexOf('.');
00040 if (dotPos == -1)
00041 throw Exception(tr("Error while loading %1 : No extension found.").arg(QDir(fileName).dirName()));
00042
00043 QString ext = fileName.right(fileName.size() - (dotPos+1)).toLower();
00044
00045 if(!loaders.contains(ext))
00046 throw Exception(tr("Error while loading %1 : No suitable loader found.").arg(QDir(fileName).dirName()));
00047
00048 return loaders[ext]->createLoader(fileName);
00049 }
00050
00054 void ImageLoaderManager::registerLoaders(const QString& directory)
00055 {
00056 QDir loadersDir(qApp->applicationDirPath());
00057 loadersDir.cd(directory);
00058 if (loadersDir.exists())
00059 foreach (QString fileName, loadersDir.entryList(QDir::Files))
00060 {
00061 qDebug("Opening %s...", fileName.toStdString().c_str());
00062 QObject *plugin = QPluginLoader(loadersDir.absoluteFilePath(fileName)).instance();
00063 ImageLoaderFactory *loaderFactory = qobject_cast<ImageLoaderFactory *>(plugin);
00064 if (loaderFactory)
00065 {
00066 foreach(QString ext, loaderFactory->extensions())
00067 {
00068 loaders.insert(ext.toLower(), loaderFactory);
00069 qDebug("\tAdding support for .%s", ext.toStdString().c_str());
00070 }
00071 }
00072 }
00073 }
00074
00078 bool ImageLoaderManager::empty()
00079 {
00080 return loaders.empty();
00081 }
00082
00083