diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-06-19 13:54:07 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2008-06-19 13:54:07 +0000 |
| commit | c2a415452b1dc62b68cb3f5cd9ca4214e2299e84 (patch) | |
| tree | 95b8e4df59e5678992e4f13cbeb331feb57bf2d2 /src/qmmpui | |
| parent | 41f4d6994cff2aa55638b5b4f47146d82ebf185d (diff) | |
| download | qmmp-c2a415452b1dc62b68cb3f5cd9ca4214e2299e84.tar.gz qmmp-c2a415452b1dc62b68cb3f5cd9ca4214e2299e84.tar.bz2 qmmp-c2a415452b1dc62b68cb3f5cd9ca4214e2299e84.zip | |
enabled qmmp file dialog
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@428 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui')
| -rw-r--r-- | src/qmmpui/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/qmmpui/filedialog.cpp | 297 | ||||
| -rw-r--r-- | src/qmmpui/filedialog.h | 125 | ||||
| -rw-r--r-- | src/qmmpui/qmmpui.pro | 6 |
4 files changed, 428 insertions, 2 deletions
diff --git a/src/qmmpui/CMakeLists.txt b/src/qmmpui/CMakeLists.txt index 6d98e5e56..a7d0f5a0f 100644 --- a/src/qmmpui/CMakeLists.txt +++ b/src/qmmpui/CMakeLists.txt @@ -29,6 +29,7 @@ SET(libqmmpui_SRCS control.cpp playlistparser.cpp commandlinemanager.cpp + filedialog.cpp ) SET(libqmmpui_MOC_HDRS @@ -41,6 +42,7 @@ SET(libqmmpui_MOC_HDRS playlistformat.h commandlinemanager.h commandlineoption.h + filedialog.h ) QT4_WRAP_CPP(libqmmpui_MOC_SRCS ${libqmmpui_MOC_HDRS}) diff --git a/src/qmmpui/filedialog.cpp b/src/qmmpui/filedialog.cpp new file mode 100644 index 000000000..f9202d886 --- /dev/null +++ b/src/qmmpui/filedialog.cpp @@ -0,0 +1,297 @@ +#include "filedialog.h" + +#include <QSettings> + + +#include <QApplication> +#include <QPluginLoader> + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +//#include "playlistmodel.h" + +FileDialog* FileDialog::_instance = 0; + +QMap<QString,FileDialogFactory*> FileDialog::factories = QMap<QString,FileDialogFactory*>(); + +FileDialog::FileDialog() : QObject(), m_initialized(false) +{ +} + + +bool FileDialog::isModal() +{ + return instance()->modal(); +} + + +void FileDialog::init(QObject* receiver, const char* member) +{ + if (!m_initialized && !instance()->modal()) + { + if (receiver && member) + { + connect(this,SIGNAL(filesAdded(const QStringList&)), receiver, member); + m_initialized = true; + } + } +} + + + +QString FileDialog::getExistingDirectory( QWidget * parent, const QString & caption, const QString & dir,bool def) +{ + QString s; + if (def) + s = defaultInstance()->existingDirectory(parent,caption,dir); + else + s = instance()->existingDirectory(parent,caption,dir); + delete _instance; + _instance = 0; + return s; +} + +QString FileDialog::getOpenFileName(QWidget * parent, + const QString & caption, + const QString & dir, + const QString & filter, + QString * selectedFilter,bool def) +{ + QString s; + if (def) + s = defaultInstance()->openFileName(parent,caption,dir,filter,selectedFilter); + else + s = instance()->openFileName(parent,caption,dir,filter,selectedFilter); + delete _instance; + _instance = 0; + return s; +} + +QStringList FileDialog::getOpenFileNames(QWidget * parent, const QString & caption , const QString & dir , + const QString & filter, QString * selectedFilter,bool def) +{ + QStringList sl; + if (def) + sl = defaultInstance()->openFileNames(parent,caption ,dir ,filter, selectedFilter); + else + sl = instance()->openFileNames(parent,caption,dir,filter,selectedFilter); + delete _instance; + _instance = 0; + return sl; +} + +QString FileDialog::getSaveFileName ( QWidget * parent, const QString & caption, + const QString & dir, const QString & filter, QString * selectedFilter,bool def) +{ + QString s; + if (def) + s = defaultInstance()->saveFileName(parent,caption,dir,filter,selectedFilter); + else + s = instance()->saveFileName(parent,caption,dir,filter,selectedFilter); + delete _instance; + _instance = 0; + return s; +} + + +QString FileDialog::existingDirectory(QWidget *, const QString &, const QString &) +{ + return QString(); +} + +QString FileDialog::openFileName(QWidget *, const QString &, const QString &, const QString &, QString *) +{ + return QString(); +} + +QStringList FileDialog::openFileNames(QWidget *, const QString &, const QString &, const QString &, QString *) +{ + return QStringList(); +} + +QString FileDialog::saveFileName(QWidget *, const QString &, const QString &, const QString &, QString *) +{ + return QString(); +} + + +void FileDialog::registerBuiltinFactories() +{ + registerFactory(new QtFileDialogFactory()); + //registerFactory(new QmmpFileDialogFactory()); +} + +void FileDialog::registerExternalFactories() +{ + QDir pluginsDir (qApp->applicationDirPath()); + pluginsDir.cdUp(); + pluginsDir.cd("./"LIB_DIR"/qmmp/FileDialogs"); + + foreach (QString fileName, pluginsDir.entryList(QDir::Files)) + { + QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = loader.instance(); + if (loader.isLoaded()) + qDebug("FileDialog: plugin loaded - %s", qPrintable(fileName)); + else + qDebug("FileDialog: %s",qPrintable(loader.errorString())); + + FileDialogFactory *fct = 0; + if (plugin) + fct = qobject_cast<FileDialogFactory *>(plugin); + + if (fct) + if (!registerFactory(fct)) + qDebug("Warning: Plugin with name %s is already registered...", + qPrintable(fct->name())); + } +} + +bool FileDialog::registerFactory(FileDialogFactory *f) +{ + QString name = f->name(); + if (!factories.contains(name)) + { + factories.insert(name,f); + return true; + } + return false; +} + +QString FileDialog::m_current_factory = QString(); + +FileDialog* FileDialog::instance() +{ + if (_instance && _instance->modal()) + { + delete _instance; + _instance = 0; + } + + if (factories.isEmpty()) + { + registerBuiltinFactories(); + registerExternalFactories(); + } + + QSettings settings ( QDir::homePath() +"/.qmmp/qmmprc", QSettings::IniFormat ); + QString f_dialogName = + settings.value("FileDialog",QtFileDialogFactory::QtFileDialogFactoryName).toString(); + + QStringList names = factories.keys(); + + if (m_current_factory != f_dialogName || !_instance) + { + if (_instance) + delete _instance; + + foreach(QString name,names) + { + if (name == f_dialogName) + { + _instance = factories[name]->create(); + m_current_factory = f_dialogName; + break; + } + } + + if (!_instance) + _instance = factories[QtFileDialogFactory::QtFileDialogFactoryName]->create(); + } + //else if(!_instance->modal()) + //return _instance; + // _instance->raise(); + return _instance; + +} + +FileDialog* FileDialog::defaultInstance() +{ + if (_instance) + { + delete _instance; + _instance = 0; + } + + if (factories.isEmpty()) + { + registerBuiltinFactories(); + registerExternalFactories(); + } + + _instance = factories[QtFileDialogFactory::QtFileDialogFactoryName]->create(); + + return _instance; +} + +QStringList FileDialog::registeredFactories() +{ + if (factories.isEmpty()) + { + registerBuiltinFactories(); + registerExternalFactories(); + } + return factories.keys(); +} + + +void FileDialog::popup(const QString& d,Mode m,const QStringList& f, QObject* receiver, const char* member) +{ + FileDialog* inst = instance(); + inst->init(receiver, member); + inst->raise(d,m,f); +} + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +QtFileDialog::~QtFileDialog() +{ + qWarning("QtFileDialog::~QtFileDialog()"); +} + +QString QtFileDialog::existingDirectory(QWidget * parent, const QString & caption, const QString & dir) +{ + return QFileDialog::getExistingDirectory(parent,caption,dir,QFileDialog::DontResolveSymlinks | QFileDialog::ShowDirsOnly); +} + +QString QtFileDialog::openFileName(QWidget * parent,const QString & caption,const QString & dir,const QString & filter, + QString * selectedFilter) +{ + return QFileDialog::getOpenFileName(parent,caption,dir,filter); +} + +QStringList QtFileDialog::openFileNames(QWidget * parent, const QString & caption , const QString & dir , + const QString & filter, QString * selectedFilter) +{ + return QFileDialog::getOpenFileNames(parent,caption,dir,filter,selectedFilter); +} + +QString QtFileDialog::saveFileName ( QWidget * parent, const QString & caption, + const QString & dir, const QString & filter, QString * selectedFilter) +{ + return QFileDialog::getSaveFileName(parent,caption,dir,filter,selectedFilter); +} + + + + + + +FileDialog* QtFileDialogFactory::create() +{ + return new QtFileDialog(); +} + +QString QtFileDialogFactory::name() +{ + return QtFileDialogFactoryName; +} + +QString QtFileDialogFactory::QtFileDialogFactoryName = "Qt File Dialog"; + + diff --git a/src/qmmpui/filedialog.h b/src/qmmpui/filedialog.h new file mode 100644 index 000000000..cbf9af07b --- /dev/null +++ b/src/qmmpui/filedialog.h @@ -0,0 +1,125 @@ +#ifndef FILEDIALOG_H +#define FILEDIALOG_H + +#include <QString> +#include <QStringList> + +#include <QFileDialog> +#include <QMap> + +#define interface struct + +interface FileDialogFactory; + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////// FILE DIALOG ////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +class FileDialog : public QObject +{ + Q_OBJECT +public: + enum Mode{AddFiles,AddDirs,SaveFiles}; + static QString getExistingDirectory( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(),bool = FALSE); + static QString getOpenFileName(QWidget * parent = 0,const QString & caption = QString(),const QString & dir = QString(),const QString & filter = QString(), + QString * selectedFilter = 0,bool = FALSE); + static QStringList getOpenFileNames( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), + const QString & filter = QString(), QString * selectedFilter = 0,bool = FALSE); + static QString getSaveFileName ( QWidget * parent = 0, const QString & caption = QString(), + const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0,bool = FALSE); + static QStringList registeredFactories(); + + static bool isModal(); + static void popup(const QString& = QString(),Mode = AddFiles,const QStringList& nameFilters = QStringList(), + QObject* receiver = 0, const char* member = 0); +signals: + void filesAdded(const QStringList&); +protected: + FileDialog(); + virtual QString existingDirectory( QWidget* , const QString& , const QString& ); + virtual QString openFileName( QWidget* ,const QString& ,const QString& ,const QString& , QString* ); + virtual QStringList openFileNames( QWidget* , const QString& , const QString& ,const QString& , QString* ); + virtual QString saveFileName ( QWidget* , const QString& ,const QString& , const QString& , QString* ); + virtual bool modal()const + { + return TRUE; + } + virtual ~FileDialog() + { + ; + } + void init(QObject* receiver, const char* member); + virtual void raise(const QString& = QString(),Mode = AddFiles,const QStringList& = QStringList()) + { + ; + } + + static bool registerFactory(FileDialogFactory*); +public: + static void registerBuiltinFactories(); + static void registerExternalFactories(); +protected: + static FileDialog* instance(); + static FileDialog* defaultInstance(); +private: + static QMap <QString,FileDialogFactory*> factories; + static FileDialog* _instance; + static QString m_current_factory; + bool m_initialized; +}; + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + +interface FileDialogFactory +{ + virtual FileDialog* create() = 0; + virtual QString name() = 0; + virtual ~FileDialogFactory() + { + ; + } +}; + +Q_DECLARE_INTERFACE(FileDialogFactory, "FileDialogFactory/1.0"); + + +//////////////////////////////////////////// QT FILE DIALOG //////////////////////////////////////////////////////////////////// + +class QtFileDialog : public FileDialog +{ +public: + virtual ~QtFileDialog(); + virtual QString existingDirectory(QWidget * parent , const QString & , const QString & dir); + virtual QString openFileName(QWidget * parent,const QString & caption,const QString & dir,const QString & filter, + QString * selectedFilter); + virtual QStringList openFileNames(QWidget * parent, const QString & caption , const QString & dir , + const QString & filter, QString * selectedFilter); + virtual QString saveFileName ( QWidget * parent, const QString & caption, + const QString & dir, const QString & filter, QString * selectedFilter); +}; + + +class QtFileDialogFactory : public QObject, public FileDialogFactory +{ + Q_OBJECT + Q_INTERFACES(FileDialogFactory); +public: + virtual FileDialog* create(); + virtual QString name(); + virtual ~QtFileDialogFactory() + { + ; + } + static QString QtFileDialogFactoryName; +}; + + +#endif + + diff --git a/src/qmmpui/qmmpui.pro b/src/qmmpui/qmmpui.pro index 5e6bbde87..dde39a474 100644 --- a/src/qmmpui/qmmpui.pro +++ b/src/qmmpui/qmmpui.pro @@ -33,13 +33,15 @@ HEADERS += general.h \ playlistformat.h \ playlistparser.h \ commandlinemanager.h \ - commandlineoption.h + commandlineoption.h \ + filedialog.h SOURCES += general.cpp \ generalhandler.cpp \ songinfo.cpp \ control.cpp \ playlistparser.cpp \ - commandlinemanager.cpp + commandlinemanager.cpp \ + filedialog.cpp DESTDIR = . |
