diff options
| author | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-07-24 16:05:25 +0000 |
|---|---|---|
| committer | vovanec <vovanec@90c681e8-e032-0410-971d-27865f9a5e38> | 2007-07-24 16:05:25 +0000 |
| commit | 6f1f9ca43a8773cdfb5e3a7d72fda79c4a442016 (patch) | |
| tree | e48d4fc57cf018e8f33442521a3f08682ff3437e /src | |
| parent | e838956a1dee86e490701e72c1f04ced7a4fdda6 (diff) | |
| download | qmmp-6f1f9ca43a8773cdfb5e3a7d72fda79c4a442016.tar.gz qmmp-6f1f9ca43a8773cdfb5e3a7d72fda79c4a442016.tar.bz2 qmmp-6f1f9ca43a8773cdfb5e3a7d72fda79c4a442016.zip | |
added filedialog interface, fixed plugin paths
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@38 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/configdialog.cpp | 12 | ||||
| -rw-r--r-- | src/configdialog.ui | 52 | ||||
| -rw-r--r-- | src/eqwidget.cpp | 9 | ||||
| -rw-r--r-- | src/filedialog.cpp | 297 | ||||
| -rw-r--r-- | src/filedialog.h | 109 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 107 | ||||
| -rw-r--r-- | src/playlistmodel.cpp | 25 | ||||
| -rw-r--r-- | src/playlistmodel.h | 63 | ||||
| -rw-r--r-- | src/src.pro | 14 |
9 files changed, 631 insertions, 57 deletions
diff --git a/src/configdialog.cpp b/src/configdialog.cpp index e91139efc..bc62a2508 100644 --- a/src/configdialog.cpp +++ b/src/configdialog.cpp @@ -32,6 +32,7 @@ #include <outputfactory.h> #include "skin.h" +#include "filedialog.h" #include "pluginitem.h" #include "configdialog.h" @@ -49,6 +50,7 @@ ConfigDialog::ConfigDialog ( QWidget *parent ) connect ( this, SIGNAL(accepted()),SLOT(saveSettings())); ui.listWidget->setIconSize ( QSize ( 69,29 ) ); m_skin = Skin::getPointer(); + ui.fileDialogComboBox->insertItems(0,FileDialog::registeredFactories()); readSettings(); loadSkins(); loadPluginsInfo(); @@ -86,6 +88,15 @@ void ConfigDialog::readSettings() ui.hideToTrayRadioButton->setChecked(settings.value("Tray/hide_on_close", FALSE).toBool()); ui.closeGroupBox->setEnabled(ui.trayCheckBox->isChecked()); + + QString f_dialogName = + settings.value("FileDialog",QtFileDialogFactory::QtFileDialogFactoryName).toString(); + + int ind = FileDialog::registeredFactories().indexOf(f_dialogName); + if(ind != -1) + ui.fileDialogComboBox->setCurrentIndex(ind); + else + ui.fileDialogComboBox->setCurrentIndex(0); } void ConfigDialog::changePage ( QListWidgetItem *current, QListWidgetItem *previous ) @@ -329,6 +340,7 @@ void ConfigDialog::saveSettings() settings.setValue ("Tray/message_delay", ui.messageDelaySpinBox->value()); settings.setValue ("Tray/show_tooltip", ui.toolTipCheckBox->isChecked()); settings.setValue ("Tray/hide_on_close",ui.hideToTrayRadioButton->isChecked()); + settings.setValue ("FileDialog", ui.fileDialogComboBox->currentText()); } diff --git a/src/configdialog.ui b/src/configdialog.ui index 65e92eabe..6da70260e 100644 --- a/src/configdialog.ui +++ b/src/configdialog.ui @@ -426,6 +426,58 @@ </item> </layout> </widget> + <widget class="QWidget" name="fileDialogTab" > + <attribute name="title" > + <string>File Dialog</string> + </attribute> + <layout class="QVBoxLayout" > + <property name="margin" > + <number>9</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <layout class="QHBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <widget class="QComboBox" name="fileDialogComboBox" /> + </item> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" > + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" > + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> </widget> </item> </layout> diff --git a/src/eqwidget.cpp b/src/eqwidget.cpp index 627958dfd..7594bc345 100644 --- a/src/eqwidget.cpp +++ b/src/eqwidget.cpp @@ -21,8 +21,8 @@ #include <QEvent> #include <QMenu> #include <QInputDialog> -#include <QFileDialog> +#include "filedialog.h" #include "skin.h" #include "eqslider.h" #include "eqtitlebar.h" @@ -377,9 +377,10 @@ void EqWidget::importWinampEQF() char header[31]; char name[257]; char bands[11]; - QString path = QFileDialog::getOpenFileName(this, tr("Import Preset"), - "/home", - "Winamp EQF (*.q1)"); + QString path = FileDialog::getOpenFileName(this, tr("Import Preset"), + "/home", + QString("Winamp EQF (*.q1)"),NULL,true); + QFile file(path); file.open(QIODevice::ReadOnly); file.read ( header, 31); diff --git a/src/filedialog.cpp b/src/filedialog.cpp new file mode 100644 index 000000000..744f4726b --- /dev/null +++ b/src/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* o) +{ + if(!m_initialized && !instance()->modal()) + { + PlayListModel* model = NULL; + if( ( model = qobject_cast<PlayListModel*>(o)) ) + { + connect(this,SIGNAL(filesAdded(const QStringList&)),model,SLOT(addFileList(const QStringList&))); + 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 (QDir::homePath()+"/.qmmp/plugins/FileDialogs"); + + foreach (QString fileName, pluginsDir.entryList(QDir::Files)) + { + //qWarning("file dialog path: %s",qPrintable(fileName)); + 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() +{ + //qWarning("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; + + qWarning("%s\t%s",qPrintable(m_current_factory),qPrintable(f_dialogName)); + foreach(QString name,names) + { + if(name == f_dialogName) + { + _instance = factories[name]->create(); + m_current_factory = f_dialogName; + } + } + + 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(QObject* o,const QString& d,Mode m,const QStringList& f) +{ + instance()->init(o); + instance()->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,selectedFilter); +} + +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/filedialog.h b/src/filedialog.h new file mode 100644 index 000000000..8e82e98b7 --- /dev/null +++ b/src/filedialog.h @@ -0,0 +1,109 @@ +#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(QObject* ,const QString& = QString(),Mode = AddFiles,const QStringList& nameFilters = QStringList()); + 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(){;} + virtual void init(QObject*); + 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/mainwindow.cpp b/src/mainwindow.cpp index 4f2174646..b6243fb71 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -43,6 +43,7 @@ #include "jumptotrackdialog.h" #include "aboutdialog.h" #include <addurldialog.h> +#include "filedialog.h" MainWindow::MainWindow(const QStringList& args, QWidget *parent) : QMainWindow(parent) @@ -135,6 +136,9 @@ MainWindow::MainWindow(const QStringList& args, QWidget *parent) new TcpServer(this); + FileDialog::registerBuiltinFactories(); + FileDialog::registerExternalFactories(); + m_playListModel->readSettings(); char buf[PATH_MAX + 1]; QString cwd = QString::fromLocal8Bit(getcwd(buf,PATH_MAX)); @@ -337,6 +341,7 @@ void MainWindow::closeEvent ( QCloseEvent *) void MainWindow::addDir() { + /* QString s = QFileDialog::getExistingDirectory( this, tr("Choose a directory"), @@ -347,10 +352,24 @@ void MainWindow::addDir() return; m_playListModel->addDirectory(s); m_lastDir = s+"../"; +*/ + if(FileDialog::isModal()) + { + qWarning("void MainWindow::addDir()"); + QString s = FileDialog::getExistingDirectory(this,tr("Choose a directory"),m_lastDir); + + if (s.isEmpty()) + return; + m_playListModel->addDirectory(s); + m_lastDir = s+"../"; + } + else + FileDialog::popup(m_playListModel,m_lastDir,FileDialog::AddDirs,Decoder::nameFilters()); } void MainWindow::addFile() { + /* QStringList files = QFileDialog::getOpenFileNames( this, tr("Select one or more files to open"), @@ -358,12 +377,34 @@ void MainWindow::addFile() Decoder::filter()); if (files.isEmpty ()) return; - /* - foreach(QString s, files) - m_playListModel->load(new MediaFile(s)); - */ + + // foreach(QString s, files) + // m_playListModel->load(new MediaFile(s)); + m_playListModel->addFiles(files); m_lastDir = files.at(0); +*/ + + + if(FileDialog::isModal()) + { + QStringList files = FileDialog::getOpenFileNames( + this, + tr("Select one or more files to open"), + m_lastDir, + Decoder::filter()); + if (files.isEmpty ()) + return; + /* + foreach(QString s, files) + m_playListModel->load(new MediaFile(s)); + */ + m_playListModel->addFiles(files); + m_lastDir = files.at(0); + } + else + FileDialog::popup(m_playListModel,m_lastDir,FileDialog::AddFiles,Decoder::nameFilters()); + } void MainWindow::clear() @@ -565,16 +606,36 @@ void MainWindow::loadPlaylist() l << fmt->getExtensions(); QString mask = tr("Playlist Files")+" (" + l.join(" *.").prepend("*.") + ")"; - QString f_name = QFileDialog::getOpenFileName(this,tr("Open Playlist"),m_lastDir,mask); - if (!f_name.isEmpty()) + if(FileDialog::isModal()) { - m_playListModel->loadPlaylist(f_name); - m_playlistName = QFileInfo(f_name).baseName(); + //qWarning("Modal"); + QString f_name = FileDialog::getOpenFileName(this,tr("Open Playlist"),m_lastDir,mask); + if (!f_name.isEmpty()) + { + m_playListModel->loadPlaylist(f_name); + m_playlistName = QFileInfo(f_name).baseName(); + } + m_lastDir = QFileInfo(f_name).absoluteDir().path(); + } + else //FileDialog::popup(m_playListModel,m_lastDir,FileDialog::AddFiles,Decoder::nameFilters()); + // TODO: implement playlist loading with nonmodal dialogs + // For now we'll use default dialog + { + //qWarning("Modal"); + QString f_name = FileDialog::getOpenFileName(this,tr("Open Playlist"),m_lastDir,mask,0,true); + if (!f_name.isEmpty()) + { + m_playListModel->loadPlaylist(f_name); + m_playlistName = QFileInfo(f_name).baseName(); + } + m_lastDir = QFileInfo(f_name).absoluteDir().path(); } - m_lastDir = QFileInfo(f_name).absoluteDir().path(); } else + { + //qWarning("Non Modal"); qWarning("Error: There is no registered playlist parsers"); + } } void MainWindow::savePlaylist() @@ -587,15 +648,31 @@ void MainWindow::savePlaylist() l << fmt->getExtensions(); QString mask = tr("Playlist Files")+" (" + l.join(" *.").prepend("*.") + ")"; - QString f_name = QFileDialog::getSaveFileName(this, tr("Save Playlist"),m_lastDir + "/" + - m_playlistName + "." + l[0],mask); + if(FileDialog::isModal()) + { + QString f_name = FileDialog::getSaveFileName(this, tr("Save Playlist"),m_lastDir + "/" + + m_playlistName + "." + l[0],mask); - if (!f_name.isEmpty()) + if (!f_name.isEmpty()) + { + m_playListModel->savePlaylist(f_name); + m_playlistName = QFileInfo(f_name).baseName(); + } + m_lastDir = QFileInfo(f_name).absoluteDir().path(); + } + else // TODO: implement saving playlists with nonmodal dialogs + // For now we'll use default dialog { - m_playListModel->savePlaylist(f_name); - m_playlistName = QFileInfo(f_name).baseName(); + QString f_name = FileDialog::getSaveFileName(this, tr("Save Playlist"),m_lastDir + "/" + + m_playlistName + "." + l[0],mask,0,true); + + if (!f_name.isEmpty()) + { + m_playListModel->savePlaylist(f_name); + m_playlistName = QFileInfo(f_name).baseName(); + } + m_lastDir = QFileInfo(f_name).absoluteDir().path(); } - m_lastDir = QFileInfo(f_name).absoluteDir().path(); } else qWarning("Error: There is no registered playlist parsers"); diff --git a/src/playlistmodel.cpp b/src/playlistmodel.cpp index 7a61563b0..06915daf1 100644 --- a/src/playlistmodel.cpp +++ b/src/playlistmodel.cpp @@ -361,6 +361,23 @@ void PlayListModel::addDirectory(const QString& s) f_loader->start(QThread::IdlePriority); } +void PlayListModel::addFileList(const QStringList &l) +{ + foreach(QString str,l) + { + QFileInfo f_info(str); + if (f_info.exists()) + { + if (f_info.isDir()) + addDirectory(str); + else + addFile(str); + } + // Do processing the rest of events to avoid GUI freezing + QApplication::processEvents(QEventLoop::AllEvents,10); + } +} + bool PlayListModel::setFileList(const QStringList & l) { bool model_cleared = FALSE; @@ -379,7 +396,7 @@ bool PlayListModel::setFileList(const QStringList & l) else addFile(str); } - // Do the processing the rest of events to avoid GUI freezing + // Do processing the rest of events to avoid GUI freezing QApplication::processEvents(QEventLoop::AllEvents,10); } @@ -763,9 +780,9 @@ void PlayListModel::savePlaylist(const QString & f_name) void PlayListModel::loadExternalPlaylistFormats() { - QDir pluginsDir (qApp->applicationDirPath()); - pluginsDir.cdUp(); - pluginsDir.cd("Plugins/PlaylistFormats"); + QDir pluginsDir (QDir::homePath()+"/.qmmp/plugins/PlaylistFormats"); + //pluginsDir.cdUp(); + //pluginsDir.cd("plugins/PlaylistFormats"); foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); diff --git a/src/playlistmodel.h b/src/playlistmodel.h index 10285ba30..1a14bd723 100644 --- a/src/playlistmodel.h +++ b/src/playlistmodel.h @@ -92,25 +92,6 @@ public: QList <QString> getTitles(int,int); QList <QString> getTimes(int,int); - void addFile(const QString&); - - /*! - * Adds the list \b l of files to the model. - */ - void addFiles(const QStringList& l); - - /*! - * Adds \b dir to the model. - */ - void addDirectory(const QString& dir); - - /*! - * Loads list of files (regular files or directories), - * returns \b TRUE if at least one file has been successfully loaded, - * otherwise \b FALSE - */ - bool setFileList(const QStringList&); - void moveItems(int from,int to); /*! @@ -174,7 +155,7 @@ public: * Registers playlist format parser. */ bool registerPlaylistFormat(PlaylistFormat* p); - + /*! * Checks and loads external playlist format plugins */ @@ -184,7 +165,7 @@ public: * Returns vector of reistered format parsers. */ const QList<PlaylistFormat*> registeredPlaylistFormats()const{return m_registered_pl_formats.values();} - + const QStringList registeredPlaylistFormatNames()const{return m_registered_pl_formats.keys();} /*! @@ -217,6 +198,26 @@ public slots: void showDetails(); void doCurrentVisibleRequest(); + void addFile(const QString&); + + /*! + * Adds the list \b l of files to the model. + */ + void addFiles(const QStringList& l); + + /*! + * Adds \b dir to the model. + */ + void addDirectory(const QString& dir); + + /*! + * Loads list of files (regular files or directories), + * returns \b TRUE if at least one file has been successfully loaded, + * otherwise \b FALSE + */ + bool setFileList(const QStringList&); + + void addFileList(const QStringList &l); void randomizeList(); void reverseList(); @@ -245,12 +246,12 @@ public slots: * Adds selected items to play queue. */ void addToQueue(); - + /*! * Sets \b f media file to queue. */ void setQueued(MediaFile* f); - + void preparePlayState(); private: @@ -268,20 +269,20 @@ private: * Returns bottommost row in current selection */ int bottommostInSelection(int); - + /*! * Creates and initializes file loader object. */ FileLoader* createFileLoader(); - - + + /*! * Is someone of file loaders is running? */ bool isFileLoaderRunning()const; - + /*! - * Removes items from model. If \b inverted is \b false - + * Removes items from model. If \b inverted is \b false - * selected items will be removed, else - unselected. */ void removeSelection(bool inverted = false); @@ -321,15 +322,15 @@ private: bool m_block_update_signals; int m_total_length; - + typedef QPointer<FileLoader> GuardedFileLoader; - + /*! Vector of currently running file loaders. * All loaders are automatically sheduled for deletion * when finished. */ QVector<GuardedFileLoader> m_running_loaders; - + friend class MainWindow; }; diff --git a/src/src.pro b/src/src.pro index 9db9ac694..0e8baefe0 100644 --- a/src/src.pro +++ b/src/src.pro @@ -8,7 +8,8 @@ include(../qmmp.pri) FORMS += configdialog.ui \ preseteditor.ui \ jumptotrackdialog.ui \ - aboutdialog.ui + aboutdialog.ui + HEADERS += mainwindow.h \ fileloader.h \ button.h \ @@ -54,7 +55,10 @@ HEADERS += mainwindow.h \ jumptotrackdialog.h \ aboutdialog.h \ timeindicator.h \ - keyboardmanager.h + keyboardmanager.h \ + filedialog.h + + SOURCES += mainwindow.cpp \ mp3player.cpp \ fileloader.cpp \ @@ -99,7 +103,11 @@ SOURCES += mainwindow.cpp \ jumptotrackdialog.cpp \ aboutdialog.cpp \ timeindicator.cpp \ - keyboardmanager.cpp + keyboardmanager.cpp \ + filedialog.cpp + + + contains(CONFIG,XSPF_PLUGIN){ message(*********************************************) message(* XSPF support will be compiled as plugin *) |
