aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui/filedialog.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-05-14 11:57:45 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-05-14 11:57:45 +0000
commitd8073e08b4b58ce02ef94ff124a8724f7d466cae (patch)
treefe7799f3d735bcbf1212c82c30200b3078febb39 /src/qmmpui/filedialog.cpp
parent1826b12a65687057909cc3e3b4836b0f8bcafee6 (diff)
downloadqmmp-d8073e08b4b58ce02ef94ff124a8724f7d466cae.tar.gz
qmmp-d8073e08b4b58ce02ef94ff124a8724f7d466cae.tar.bz2
qmmp-d8073e08b4b58ce02ef94ff124a8724f7d466cae.zip
added file dialog cache
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3467 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/filedialog.cpp')
-rw-r--r--src/qmmpui/filedialog.cpp73
1 files changed, 37 insertions, 36 deletions
diff --git a/src/qmmpui/filedialog.cpp b/src/qmmpui/filedialog.cpp
index 93bfd669a..5219449ed 100644
--- a/src/qmmpui/filedialog.cpp
+++ b/src/qmmpui/filedialog.cpp
@@ -26,64 +26,60 @@
#include <QMetaObject>
#include <QLibrary>
#include <qmmp/qmmp.h>
+#include "qmmpuiplugincache_p.h"
#include "filedialog.h"
#include "qtfiledialog_p.h"
-
//static functions
FileDialog* FileDialog::m_instance = 0;
-QList<FileDialogFactory*> *FileDialog::m_factories = 0;
-QHash <FileDialogFactory*, QString> *FileDialog::m_files = 0;
+QList<QmmpUiPluginCache*> *FileDialog::m_cache = 0;
FileDialogFactory *FileDialog::m_currentFactory = 0;
-void FileDialog::checkFactories()
+void FileDialog::loadPlugins()
{
- if(m_factories)
+ if (m_cache)
return;
- m_factories = new QList<FileDialogFactory *>;
- m_files = new QHash <FileDialogFactory*, QString>;
- m_factories->append(new QtFileDialogFactory);
+ m_cache = new QList<QmmpUiPluginCache*>;
+ m_cache->append(new QmmpUiPluginCache(new QtFileDialogFactory));
+
+ QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
QDir pluginsDir (Qmmp::pluginsPath());
pluginsDir.cd("FileDialogs");
foreach (QString fileName, pluginsDir.entryList(QDir::Files))
{
- QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
- QObject *plugin = loader.instance();
- if (loader.isLoaded())
- qDebug("FileDialog: loaded plugin %s", qPrintable(fileName));
- else
- qWarning("FileDialog: %s",qPrintable(loader.errorString()));
-
- FileDialogFactory *factory = 0;
- if (plugin)
- factory = qobject_cast<FileDialogFactory *>(plugin);
-
- if (factory)
+ QmmpUiPluginCache *item = new QmmpUiPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ if(item->hasError())
{
- m_factories->append(factory);
- m_files->insert(factory, fileName);
- qApp->installTranslator(factory->createTranslator(qApp));
+ delete item;
+ continue;
}
+ m_cache->append(item);
}
}
-QList <FileDialogFactory*> *FileDialog::factories()
+QList<FileDialogFactory *> FileDialog::factories()
{
- checkFactories();
- return m_factories;
+ loadPlugins();
+ QList<FileDialogFactory *> list;
+ foreach (QmmpUiPluginCache *item, *m_cache)
+ {
+ if(item->fileDialogFactory())
+ list.append(item->fileDialogFactory());
+ }
+ return list;
}
void FileDialog::setEnabled(FileDialogFactory *factory)
{
- checkFactories();
+ loadPlugins();
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
settings.setValue("FileDialog", factory->properties().shortName);
}
bool FileDialog::isEnabled(FileDialogFactory *factory)
{
- checkFactories();
+ loadPlugins();
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
QString name = settings.value("FileDialog", "qt_dialog").toString();
return factory->properties().shortName == name;
@@ -91,8 +87,13 @@ bool FileDialog::isEnabled(FileDialogFactory *factory)
QString FileDialog::file(FileDialogFactory *factory)
{
- checkFactories();
- return m_files->value(factory);
+ loadPlugins();
+ foreach(QmmpUiPluginCache *item, *m_cache)
+ {
+ if(item->shortName() == factory->properties().shortName)
+ return item->file();
+ }
+ return QString();
}
QString FileDialog::getExistingDirectory(QWidget *parent,
@@ -161,22 +162,22 @@ void FileDialog::popup(QWidget *parent,
FileDialog* FileDialog::instance()
{
- checkFactories();
+ loadPlugins();
FileDialogFactory *selected = 0;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
QString name = settings.value("FileDialog", "qt_dialog").toString();
- foreach(FileDialogFactory *factory, *m_factories)
+ foreach(QmmpUiPluginCache *item, *m_cache)
{
- if(factory->properties().shortName == name)
+ if(item->shortName() == name)
{
- selected = factory;
+ selected = item->fileDialogFactory();
break;
}
}
if(!selected)
- selected = m_factories->at(0);
+ selected = m_cache->at(0)->fileDialogFactory();
if(selected == m_currentFactory && m_instance)
return m_instance;
@@ -194,7 +195,7 @@ FileDialog* FileDialog::instance()
FileDialog* FileDialog::createDefault()
{
- return m_factories->at(0)->create();
+ return m_cache->at(0)->fileDialogFactory()->create();
}
//base implementation