aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui/filedialog.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-09-03 19:09:07 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2012-09-03 19:09:07 +0000
commitc88e5e9cf4c7526609834993e4f5dd9f5ae2c931 (patch)
tree2d6fc5edf75542dc31be580fdec1966311a9404b /src/qmmpui/filedialog.cpp
parent37b7bcea340dcde81e95fb55a99d9e89967ebafb (diff)
downloadqmmp-c88e5e9cf4c7526609834993e4f5dd9f5ae2c931.tar.gz
qmmp-c88e5e9cf4c7526609834993e4f5dd9f5ae2c931.tar.bz2
qmmp-c88e5e9cf4c7526609834993e4f5dd9f5ae2c931.zip
added file dialog plugin path; file dialog api cleanup
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@2929 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/filedialog.cpp')
-rw-r--r--src/qmmpui/filedialog.cpp347
1 files changed, 160 insertions, 187 deletions
diff --git a/src/qmmpui/filedialog.cpp b/src/qmmpui/filedialog.cpp
index 9408ab881..75befcd7e 100644
--- a/src/qmmpui/filedialog.cpp
+++ b/src/qmmpui/filedialog.cpp
@@ -30,132 +30,20 @@
#include "qtfiledialog_p.h"
-FileDialog* FileDialog::_instance = 0;
+//static functions
+FileDialog* FileDialog::m_instance = 0;
+QList<FileDialogFactory*> *FileDialog::m_factories = 0;
+QHash <FileDialogFactory*, QString> *FileDialog::m_files = 0;
+FileDialogFactory *FileDialog::m_currentFactory = 0;
-QMap<QString,FileDialogFactory*> FileDialog::factories = QMap<QString,FileDialogFactory*>();
-
-FileDialog::FileDialog() : QObject(), m_initialized(false)
-{
- m_lastDir = 0;
-}
-
-bool FileDialog::isModal()
-{
- return instance()->modal();
-}
-
-void FileDialog::setEnabled(FileDialogFactory *factory)
-{
- if (factories.isEmpty())
- {
- registerBuiltinFactories();
- registerExternalFactories();
- }
- QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- settings.setValue("FileDialog", factories.key(factory));
-}
-
-bool FileDialog::isEnabled(FileDialogFactory *factory)
-{
- if (factories.isEmpty())
- {
- registerBuiltinFactories();
- registerExternalFactories();
- }
- QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QString f_dialogName = settings.value("FileDialog", "qt_dialog").toString();
- return factories.value(f_dialogName) == factory;
-}
-
-void FileDialog::init(QObject* receiver, const char* member, QString *dir)
-{
- m_lastDir = dir;
- if (m_initialized)
- disconnect();
- if (receiver && member)
- {
- connect(this,SIGNAL(filesAdded(const QStringList&)), receiver, member);
- connect(this,SIGNAL(filesAdded(const QStringList&)), SLOT(updateLastDir(const QStringList&)));
- m_initialized = true;
- }
-}
-
-QString FileDialog::getExistingDirectory(QWidget *parent,
- const QString &caption,
- const QString &dir)
-{
- return instance()->existingDirectory(parent,caption,dir);
-}
-
-QString FileDialog::getOpenFileName(QWidget *parent,
- const QString &caption,
- const QString &dir,
- const QString &filter,
- QString *selectedFilter)
-{
- return instance()->openFileName(parent,caption,dir,filter,selectedFilter);
-}
-
-QStringList FileDialog::getOpenFileNames(QWidget *parent, const QString &caption,
- const QString &dir,const QString &filter,
- QString *selectedFilter)
+void FileDialog::checkFactories()
{
- return instance()->openFileNames(parent,caption,dir,filter,selectedFilter);
-}
-
-QString FileDialog::getSaveFileName (QWidget *parent, const QString &caption,
- const QString& dir, const QString &filter,
- QString *selectedFilter)
-{
- return instance()->saveFileName(parent,caption,dir,filter,selectedFilter);
-}
-
-//virtual
-QString FileDialog::existingDirectory(QWidget *parent, const QString &caption, const QString &dir)
-{
- FileDialog *instance = FileDialog::defaultInstance();
- QString dir_path = instance->existingDirectory(parent, caption, dir);
- delete instance;
- return dir_path;
-}
-
-QString FileDialog::openFileName(QWidget *parent, const QString &caption, const QString &dir,
- const QString &filter, QString *selectedFilter)
-{
- FileDialog *instance = FileDialog::defaultInstance();
- QString file_path = instance->openFileName(parent, caption, dir, filter, selectedFilter);
- delete instance;
- return file_path;
-}
+ if(m_factories)
+ return;
-QStringList FileDialog::openFileNames(QWidget *parent, const QString &caption, const QString &dir,
- const QString &filter, QString *selectedFilter)
-{
- FileDialog *instance = FileDialog::defaultInstance();
- QStringList list = instance->openFileNames(parent, caption, dir, filter, selectedFilter);
- delete instance;
- return list;
-}
-
-QString FileDialog::saveFileName(QWidget *parent, const QString &caption, const QString &dir,
- const QString &filter, QString *selectedFilter)
-{
- FileDialog *instance = FileDialog::defaultInstance();
- QString file_path = instance->saveFileName(parent, caption, dir, filter, selectedFilter);
- delete instance;
- return file_path;
-}
-
-
-void FileDialog::registerBuiltinFactories()
-{
- FileDialogFactory *fct = new QtFileDialogFactory();
- qApp->installTranslator(fct->createTranslator(qApp));
- registerFactory(fct);
-}
-
-void FileDialog::registerExternalFactories()
-{
+ m_factories = new QList<FileDialogFactory *>;
+ m_files = new QHash <FileDialogFactory*, QString>;
+ m_factories->append(new QtFileDialogFactory);
QDir pluginsDir (Qmmp::pluginsPath());
pluginsDir.cd("FileDialogs");
foreach (QString fileName, pluginsDir.entryList(QDir::Files))
@@ -165,18 +53,17 @@ void FileDialog::registerExternalFactories()
if (loader.isLoaded())
qDebug("FileDialog: loaded plugin %s", qPrintable(fileName));
else
- qDebug("FileDialog: %s",qPrintable(loader.errorString()));
+ qWarning("FileDialog: %s",qPrintable(loader.errorString()));
- FileDialogFactory *fct = 0;
+ FileDialogFactory *factory = 0;
if (plugin)
- fct = qobject_cast<FileDialogFactory *>(plugin);
+ factory = qobject_cast<FileDialogFactory *>(plugin);
- if (fct)
+ if (factory)
{
- if (!registerFactory(fct))
- qDebug("Warning: Plugin with name %s is already registered...",
- qPrintable(fileName));
- qApp->installTranslator(fct->createTranslator(qApp));
+ m_factories->append(factory);
+ m_files->insert(factory, fileName);
+ qApp->installTranslator(factory->createTranslator(qApp));
}
}
#ifndef Q_OS_WIN32
@@ -199,76 +86,61 @@ void FileDialog::registerExternalFactories()
#endif
}
-bool FileDialog::registerFactory(FileDialogFactory *factory)
+QList <FileDialogFactory*> *FileDialog::factories()
{
- if (!factories.contains(factory->properties().shortName))
- {
- factories.insert(factory->properties().shortName, factory);
- return true;
- }
- return false;
+ checkFactories();
+ return m_factories;
}
-QString FileDialog::m_current_factory = QString();
-
-FileDialog* FileDialog::instance()
+void FileDialog::setEnabled(FileDialogFactory *factory)
{
- if (factories.isEmpty())
- {
- registerBuiltinFactories();
- registerExternalFactories();
- }
-
+ checkFactories();
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QString f_dialogName = settings.value("FileDialog", "qt_dialog").toString();
-
- QStringList names = factories.keys();
+ settings.setValue("FileDialog", factory->properties().shortName);
+}
- if (!names.contains(f_dialogName))
- f_dialogName = "qt_dialog";
+bool FileDialog::isEnabled(FileDialogFactory *factory)
+{
+ checkFactories();
+ QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
+ QString name = settings.value("FileDialog", "qt_dialog").toString();
+ return factory->properties().shortName == name;
+}
- if (m_current_factory != f_dialogName || !_instance)
- {
- if (_instance)
- {
- delete _instance;
- _instance = 0;
- }
+QString FileDialog::file(FileDialogFactory *factory)
+{
+ checkFactories();
+ return m_files->value(factory);
+}
- foreach(QString name,names)
- {
- if (name == f_dialogName)
- {
- _instance = factories[name]->create();
- m_current_factory = f_dialogName;
- break;
- }
- }
+QString FileDialog::getExistingDirectory(QWidget *parent,
+ const QString &caption,
+ const QString &dir)
+{
+ return instance()->existingDirectory(parent,caption,dir);
+}
- if (!_instance)
- _instance = factories["qt_dialog"]->create();
- }
- return _instance;
+QString FileDialog::getOpenFileName(QWidget *parent,
+ const QString &caption,
+ const QString &dir,
+ const QString &filter,
+ QString *selectedFilter)
+{
+ return instance()->openFileName(parent,caption,dir,filter,selectedFilter);
}
-FileDialog* FileDialog::defaultInstance()
+QStringList FileDialog::getOpenFileNames(QWidget *parent, const QString &caption,
+ const QString &dir,const QString &filter,
+ QString *selectedFilter)
{
- if (factories.isEmpty())
- {
- registerBuiltinFactories();
- registerExternalFactories();
- }
- return factories["qt_dialog"]->create();
+ return instance()->openFileNames(parent,caption,dir,filter,selectedFilter);
}
-QList <FileDialogFactory*> FileDialog::registeredFactories()
+QString FileDialog::getSaveFileName (QWidget *parent, const QString &caption,
+ const QString& dir, const QString &filter,
+ QString *selectedFilter)
{
- if (factories.isEmpty())
- {
- registerBuiltinFactories();
- registerExternalFactories();
- }
- return factories.values();
+ return instance()->saveFileName(parent,caption,dir,filter,selectedFilter);
}
void FileDialog::popup(QWidget *parent,
@@ -285,7 +157,7 @@ void FileDialog::popup(QWidget *parent,
FileDialog* inst = instance();
inst->setParent(parent);
inst->init(receiver, member, dir);
- if (!inst->modal())
+ if (!m_currentFactory->properties().modal)
inst->raise(*dir, m, caption, filters.split(";;"));
else
{
@@ -305,6 +177,107 @@ void FileDialog::popup(QWidget *parent,
}
}
+FileDialog* FileDialog::instance()
+{
+ checkFactories();
+ FileDialogFactory *selected = 0;
+
+ QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
+ QString name = settings.value("FileDialog", "qt_dialog").toString();
+ foreach(FileDialogFactory *factory, *m_factories)
+ {
+ if(factory->properties().shortName == name)
+ {
+ selected = factory;
+ break;
+ }
+ }
+
+ if(!selected)
+ selected = m_factories->at(0);
+
+ if(selected == m_currentFactory && m_instance)
+ return m_instance;
+
+ if(m_instance)
+ {
+ delete m_instance;
+ m_instance = 0;
+ }
+
+ m_currentFactory = selected;
+ m_instance = m_currentFactory->create();
+ return m_instance;
+}
+
+FileDialog* FileDialog::createDefault()
+{
+ return m_factories->at(0)->create();
+}
+
+//base implementation
+FileDialog::FileDialog() : QObject(), m_initialized(false)
+{
+ m_lastDir = 0;
+}
+
+FileDialog::~FileDialog() {}
+
+void FileDialog::raise(const QString &dir, Mode mode, const QString &caption, const QStringList &mask)
+{
+ Q_UNUSED(dir);
+ Q_UNUSED(mode);
+ Q_UNUSED(caption);
+ Q_UNUSED(mask);
+}
+
+QString FileDialog::existingDirectory(QWidget *parent, const QString &caption, const QString &dir)
+{
+ FileDialog *instance = FileDialog::createDefault();
+ QString dir_path = instance->existingDirectory(parent, caption, dir);
+ delete instance;
+ return dir_path;
+}
+
+QString FileDialog::openFileName(QWidget *parent, const QString &caption, const QString &dir,
+ const QString &filter, QString *selectedFilter)
+{
+ FileDialog *instance = FileDialog::createDefault();
+ QString file_path = instance->openFileName(parent, caption, dir, filter, selectedFilter);
+ delete instance;
+ return file_path;
+}
+
+QStringList FileDialog::openFileNames(QWidget *parent, const QString &caption, const QString &dir,
+ const QString &filter, QString *selectedFilter)
+{
+ FileDialog *instance = FileDialog::createDefault();
+ QStringList list = instance->openFileNames(parent, caption, dir, filter, selectedFilter);
+ delete instance;
+ return list;
+}
+
+QString FileDialog::saveFileName(QWidget *parent, const QString &caption, const QString &dir,
+ const QString &filter, QString *selectedFilter)
+{
+ FileDialog *instance = FileDialog::createDefault();
+ QString file_path = instance->saveFileName(parent, caption, dir, filter, selectedFilter);
+ delete instance;
+ return file_path;
+}
+
+void FileDialog::init(QObject* receiver, const char* member, QString *dir)
+{
+ m_lastDir = dir;
+ if (m_initialized)
+ disconnect();
+ if (receiver && member)
+ {
+ connect(this,SIGNAL(filesAdded(const QStringList&)), receiver, member);
+ connect(this,SIGNAL(filesAdded(const QStringList&)), SLOT(updateLastDir(const QStringList&)));
+ m_initialized = true;
+ }
+}
void FileDialog::updateLastDir(const QStringList& list)
{