aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-06-19 13:54:07 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2008-06-19 13:54:07 +0000
commitc2a415452b1dc62b68cb3f5cd9ca4214e2299e84 (patch)
tree95b8e4df59e5678992e4f13cbeb331feb57bf2d2 /src/qmmpui
parent41f4d6994cff2aa55638b5b4f47146d82ebf185d (diff)
downloadqmmp-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.txt2
-rw-r--r--src/qmmpui/filedialog.cpp297
-rw-r--r--src/qmmpui/filedialog.h125
-rw-r--r--src/qmmpui/qmmpui.pro6
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 = .