From c2a415452b1dc62b68cb3f5cd9ca4214e2299e84 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Thu, 19 Jun 2008 13:54:07 +0000 Subject: enabled qmmp file dialog git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@428 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/CMakeLists.txt | 3 +- src/plugins/FileDialogs/CMakeLists.txt | 5 + src/plugins/FileDialogs/FileDialogs.pro | 2 + .../FileDialogs/QmmpFileDialog/CMakeLists.txt | 61 +++++ .../FileDialogs/QmmpFileDialog/QmmpFileDialog.pro | 31 +++ .../FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp | 44 +++ .../FileDialogs/QmmpFileDialog/qmmpfiledialog.h | 40 +++ .../FileDialogs/QmmpFileDialog/qmmpfiledialog.ui | 262 ++++++++++++++++++ .../QmmpFileDialog/qmmpfiledialogimpl.cpp | 116 ++++++++ .../QmmpFileDialog/qmmpfiledialogimpl.h | 33 +++ .../FileDialogs/QmmpFileDialog/QmmpFileDialog.pro | 28 -- .../FileDialogs/QmmpFileDialog/images/cdup.png | Bin 736 -> 0 bytes .../FileDialogs/QmmpFileDialog/images/detail.png | Bin 551 -> 0 bytes .../FileDialogs/QmmpFileDialog/images/images.qrc | 8 - .../FileDialogs/QmmpFileDialog/images/list.png | Bin 547 -> 0 bytes .../FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp | 44 --- .../FileDialogs/QmmpFileDialog/qmmpfiledialog.h | 40 --- .../FileDialogs/QmmpFileDialog/qmmpfiledialog.ui | 216 --------------- .../QmmpFileDialog/qmmpfiledialogimpl.cpp | 109 -------- .../QmmpFileDialog/qmmpfiledialogimpl.h | 33 --- src/plugins/plugins.pro | 3 +- src/qmmpui/CMakeLists.txt | 2 + src/qmmpui/filedialog.cpp | 297 +++++++++++++++++++++ src/qmmpui/filedialog.h | 125 +++++++++ src/qmmpui/qmmpui.pro | 6 +- src/ui/CMakeLists.txt | 2 - src/ui/configdialog.cpp | 2 +- src/ui/eqwidget.cpp | 2 +- src/ui/filedialog.cpp | 296 -------------------- src/ui/filedialog.h | 109 -------- src/ui/mainwindow.cpp | 8 +- src/ui/ui.pro | 2 - 32 files changed, 1033 insertions(+), 896 deletions(-) create mode 100644 src/plugins/FileDialogs/CMakeLists.txt create mode 100644 src/plugins/FileDialogs/FileDialogs.pro create mode 100644 src/plugins/FileDialogs/QmmpFileDialog/CMakeLists.txt create mode 100644 src/plugins/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro create mode 100644 src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp create mode 100644 src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h create mode 100644 src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui create mode 100644 src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp create mode 100644 src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/images/cdup.png delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/images/detail.png delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/images/images.qrc delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/images/list.png delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.h delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp delete mode 100644 src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h create mode 100644 src/qmmpui/filedialog.cpp create mode 100644 src/qmmpui/filedialog.h delete mode 100644 src/ui/filedialog.cpp delete mode 100644 src/ui/filedialog.h (limited to 'src') diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index a72b8e51b..32dc59f34 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -4,4 +4,5 @@ add_subdirectory(Visual) add_subdirectory(Effect) add_subdirectory(General) add_subdirectory(PlaylistFormats) -add_subdirectory(CommandLineOptions) \ No newline at end of file +add_subdirectory(CommandLineOptions) +add_subdirectory(FileDialogs) diff --git a/src/plugins/FileDialogs/CMakeLists.txt b/src/plugins/FileDialogs/CMakeLists.txt new file mode 100644 index 000000000..8fd39edfd --- /dev/null +++ b/src/plugins/FileDialogs/CMakeLists.txt @@ -0,0 +1,5 @@ +SET(USE_QMMP_DIALOG TRUE CACHE BOOL "enable/disable Qmmp file dialog") + +IF(USE_QMMP_DIALOG) +add_subdirectory(QmmpFileDialog) +ENDIF(USE_QMMP_DIALOG) diff --git a/src/plugins/FileDialogs/FileDialogs.pro b/src/plugins/FileDialogs/FileDialogs.pro new file mode 100644 index 000000000..7893b306e --- /dev/null +++ b/src/plugins/FileDialogs/FileDialogs.pro @@ -0,0 +1,2 @@ +TEMPLATE = subdirs +SUBDIRS += QmmpFileDialog diff --git a/src/plugins/FileDialogs/QmmpFileDialog/CMakeLists.txt b/src/plugins/FileDialogs/QmmpFileDialog/CMakeLists.txt new file mode 100644 index 000000000..e952b1d35 --- /dev/null +++ b/src/plugins/FileDialogs/QmmpFileDialog/CMakeLists.txt @@ -0,0 +1,61 @@ +project(libqmmpfiledialog) + +cmake_minimum_required(VERSION 2.4.0) + +if(COMMAND cmake_policy) +cmake_policy(SET CMP0003 NEW) +endif(COMMAND cmake_policy) + + +# qt plugin +ADD_DEFINITIONS( -Wall ) +ADD_DEFINITIONS(${QT_DEFINITIONS}) +ADD_DEFINITIONS(-DQT_PLUGIN) +ADD_DEFINITIONS(-DQT_NO_DEBUG) +ADD_DEFINITIONS(-DQT_SHARED) +ADD_DEFINITIONS(-DQT_THREAD) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +SET(QT_INCLUDES + ${QT_INCLUDES} + ${CMAKE_CURRENT_BINARY_DIR}/../../../ +) + +# libqmmpui +include_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../) +link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmpui) + +SET(libqmmpfiledialog_SRCS + qmmpfiledialogimpl.cpp + qmmpfiledialog.cpp +) + +SET(libqmmpfiledialog_MOC_HDRS + qmmpfiledialogimpl.h + qmmpfiledialog.h +) + +#SET(libqmmpfiledialog_RCCS +# translations/translations.qrc +# qmmpfiledialog_images.qrc) + +#QT4_ADD_RESOURCES(libqmmpfiledialog_RCC_SRCS ${libqmmpfiledialog_RCCS}) + +QT4_WRAP_CPP(libqmmpfiledialog_MOC_SRCS ${libqmmpfiledialog_MOC_HDRS}) + +# user interface + + +SET(libqmmpfiledialog_UIS + qmmpfiledialog.ui +) + +QT4_WRAP_UI(libqmmpfiledialog_UIS_H ${libqmmpfiledialog_UIS}) +# Don't forget to include output directory, otherwise +# the UI file won't be wrapped! +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +ADD_LIBRARY(qmmpfiledialog SHARED ${libqmmpfiledialog_SRCS} ${libqmmpfiledialog_MOC_SRCS} ${libqmmpfiledialog_UIS_H} ${libqmmpfiledialog_RCC_SRCS}) +target_link_libraries(qmmpfiledialog ${QT_LIBRARIES} -lqmmpui) +install(TARGETS qmmpfiledialog DESTINATION ${LIB_DIR}/qmmp/FileDialogs) diff --git a/src/plugins/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro b/src/plugins/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro new file mode 100644 index 000000000..8722d6f86 --- /dev/null +++ b/src/plugins/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro @@ -0,0 +1,31 @@ +include(../../plugins.pri) + +INCLUDEPATH += ../../../../src + +TARGET =$$PLUGINS_PREFIX/FileDialogs/qmmpfiledialog +QMAKE_CLEAN =$$PLUGINS_PREFIX/FileDialogs/libqmmpfiledialog.so + +HEADERS += qmmpfiledialog.h \ + qmmpfiledialogimpl.h + +SOURCES += qmmpfiledialog.cpp \ + qmmpfiledialogimpl.cpp + + +FORMS += qmmpfiledialog.ui + + +QMAKE_CLEAN += ../libqmmpfiledialog.so + + +CONFIG += release warn_on plugin + +TEMPLATE = lib + +QMAKE_LIBDIR += ../../../../lib + +isEmpty(LIB_DIR){ + LIB_DIR = /lib +} +target.path = $$LIB_DIR/qmmp/FileDialogs +INSTALLS += target diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp new file mode 100644 index 000000000..fce9f6e53 --- /dev/null +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp @@ -0,0 +1,44 @@ +#include + +#include "qmmpfiledialogimpl.h" +#include "qmmpfiledialog.h" + + + +QmmpFileDialog::QmmpFileDialog() +{ + m_dialog = new QmmpFileDialogImpl(); + connect(m_dialog,SIGNAL(filesAdded(const QStringList&)),this,SIGNAL(filesAdded(const QStringList&))); +} + +void QmmpFileDialog::handleSelected(/*const QStringList& s */) +{ +} + +bool QmmpFileDialog::modal()const +{ + return FALSE; +} + +QmmpFileDialog::~QmmpFileDialog() +{ + qWarning("QmmpFileDialog::~QmmpFileDialog()"); + delete m_dialog; +} +void QmmpFileDialog::raise(const QString& d,Mode m,const QStringList& f) +{ + m_dialog->setModeAndMask(d,m,f); + m_dialog->show(); + m_dialog->raise(); +} + + +FileDialog* QmmpFileDialogFactory::create(){ return new QmmpFileDialog();} + +QString QmmpFileDialogFactory::name(){return QmmpFileDialogFactoryName;} + +QString QmmpFileDialogFactory::QmmpFileDialogFactoryName = "Qmmp File Dialog"; + + +Q_EXPORT_PLUGIN(QmmpFileDialogFactory) + diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h new file mode 100644 index 000000000..2b69e06c3 --- /dev/null +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h @@ -0,0 +1,40 @@ +#ifndef QMMPFILEDIALOG_H +#define QMMPFILEDIALOG_H + +#include + +class QmmpFileDialogImpl; + +class QmmpFileDialog : public FileDialog +{ +Q_OBJECT + public: + QmmpFileDialog(); + virtual ~QmmpFileDialog(); + virtual bool modal()const; + virtual void raise(const QString&,Mode = AddFiles,const QStringList& = QStringList()); + public slots: + void handleSelected(); + + private: + QmmpFileDialogImpl * m_dialog; +}; + + + + +class QmmpFileDialogFactory : public QObject, public FileDialogFactory +{ + Q_OBJECT + Q_INTERFACES(FileDialogFactory); + public: + virtual FileDialog* create(); + virtual QString name(); + virtual ~QmmpFileDialogFactory(){;} + static QString QmmpFileDialogFactoryName; +}; + + +#endif + + diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui new file mode 100644 index 000000000..932e0b961 --- /dev/null +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui @@ -0,0 +1,262 @@ + + QmmpFileDialog + + + + 0 + 0 + 517 + 312 + + + + Add Files + + + true + + + + 6 + + + 9 + + + 9 + + + 9 + + + 9 + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Look in: + + + + + + + + 1 + 0 + + + + true + + + + + + + Up + + + true + + + + + + + List view + + + lst + + + true + + + true + + + + + + + Icon view + + + icn + + + + 16 + 16 + + + + true + + + true + + + + + + + + + QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers + + + true + + + QAbstractItemView::DragDrop + + + false + + + QAbstractItemView::ExtendedSelection + + + QAbstractItemView::SelectItems + + + QListView::Free + + + true + + + QListView::Adjust + + + QListView::Batched + + + QListView::ListMode + + + false + + + true + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + File name: + + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Add + + + + + + + Close + + + + + + + + + + + + + closePushButton + clicked() + QmmpFileDialog + reject() + + + 459 + 291 + + + 153 + 289 + + + + + diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp new file mode 100644 index 000000000..cef212d9f --- /dev/null +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp @@ -0,0 +1,116 @@ +#include "qmmpfiledialogimpl.h" + +#include +#include +#include +#include + +QmmpFileDialogImpl::QmmpFileDialogImpl( QWidget * parent, Qt::WindowFlags f) : QDialog(parent,f) +{ + setupUi(this); + setAttribute(Qt::WA_QuitOnClose, FALSE); + m_model = new QDirModel(this); + m_model->setSorting(QDir::Type /*| QDir::Name*/); + fileListView->setModel(m_model); + //fileListView->setViewMode(QListView::IconMode); + listToolButton->setChecked(true); + upToolButton->setIcon(qApp->style()->standardIcon(QStyle::SP_ArrowUp)); + listToolButton->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogListView)); + iconToolButton->setIcon(qApp->style()->standardIcon(QStyle::SP_FileDialogDetailedView)); +} + +QmmpFileDialogImpl::~QmmpFileDialogImpl() +{ +} + +void QmmpFileDialogImpl::on_lookInComboBox_activated(const QString&) +{ + qWarning("TODO: %s %d",__FILE__,__LINE__); +} + +void QmmpFileDialogImpl::on_upToolButton_clicked() +{ + fileListView->setRootIndex(m_model->parent(fileListView->rootIndex())); + lookInComboBox->setEditText(m_model->filePath(fileListView->rootIndex())); +} + +void QmmpFileDialogImpl::on_fileListView_doubleClicked(const QModelIndex& ind) +{ + if (ind.isValid()) + { + QFileInfo info = m_model->fileInfo(ind); + if (info.isDir()) + { + fileListView->setRootIndex(ind); + lookInComboBox->setEditText(m_model->filePath(ind)); + } + else + { + QStringList l; + l << m_model->filePath(ind); + emit filesAdded(l); + } + } + +} + +void QmmpFileDialogImpl::on_fileNameLineEdit_returnPressed() +{ + on_addPushButton_clicked(); +} + +void QmmpFileDialogImpl::on_addPushButton_clicked() +{ + QModelIndexList ml = fileListView->selectionModel()->selectedIndexes(); + QStringList l; + foreach(QModelIndex i,ml) + l << m_model->filePath(i); + qWarning("!!!!!!!!!"); + emit filesAdded(l); +} + +void QmmpFileDialogImpl::setModeAndMask(const QString& d,FileDialog::Mode m, const QStringList & mask) +{ + if (m == FileDialog::AddFiles) + { + setWindowTitle("Add Files"); + m_model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); + } + else if (m == FileDialog::AddDirs) + { + setWindowTitle("Add Dirs"); + m_model->setFilter(QDir::Dirs | QDir::NoDotAndDotDot); + } + else + { + setWindowTitle("Save File"); + m_model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); + qWarning("To be implemented..."); + } + + m_model->setSorting(QDir::Type); + fileListView->setRootIndex(m_model->index(d)); + m_model->sort(0); + lookInComboBox->setEditText(QDir::cleanPath(d)); +} + +void QmmpFileDialogImpl::on_listToolButton_toggled(bool yes) +{ + if (yes) + { + iconToolButton->setChecked(false); + fileListView->setViewMode(QListView::ListMode); + fileListView->setGridSize(QSize(-1, -1)); + } +} + +void QmmpFileDialogImpl::on_iconToolButton_toggled(bool yes) +{ + if (yes) + { + listToolButton->setChecked(false); + fileListView->setViewMode(QListView::IconMode); + fileListView->setGridSize(QSize(80, 80)); + } +} + diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h new file mode 100644 index 000000000..12cd63e21 --- /dev/null +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h @@ -0,0 +1,33 @@ +#ifndef QMMPFILEDIALOGIMPL_H +#define QMMPFILEDIALOGIMPL_H + +#include "ui_qmmpfiledialog.h" +#include + +#include + +class QDirModel; + + +class QmmpFileDialogImpl : public QDialog , private Ui::QmmpFileDialog +{ + Q_OBJECT +public: + QmmpFileDialogImpl( QWidget * parent = 0, Qt::WindowFlags f = 0 ); + ~QmmpFileDialogImpl(); + void setModeAndMask(const QString&,FileDialog::Mode m,const QStringList& mask); +protected slots: + void on_lookInComboBox_activated(const QString&); + void on_upToolButton_clicked(); + void on_fileListView_doubleClicked(const QModelIndex&); + void on_fileNameLineEdit_returnPressed(); + void on_addPushButton_clicked(); + void on_listToolButton_toggled(bool); + void on_iconToolButton_toggled(bool); +signals: + void filesAdded(const QStringList&); +protected: + QDirModel* m_model; + +}; +#endif //QMMPFILEDIALOGIMPL_H diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro b/src/plugins/Misc/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro deleted file mode 100644 index d9b8a96df..000000000 --- a/src/plugins/Misc/FileDialogs/QmmpFileDialog/QmmpFileDialog.pro +++ /dev/null @@ -1,28 +0,0 @@ -QMMPROOT = ../../../qmmp - -INCLUDEPATH += $$QMMPROOT/src -INCLUDEPATH += $$QMMPROOT/lib - -HEADERS += qmmpfiledialog.h \ - qmmpfiledialogimpl.h \ - $$QMMPROOT/src/filedialog.h \ - $$QMMPROOT/src/playlistmodel.h - -SOURCES += qmmpfiledialog.cpp \ - qmmpfiledialogimpl.cpp \ - $$QMMPROOT/src/filedialog.cpp \ - $$QMMPROOT/src/playlistmodel.cpp - - -FORMS += qmmpfiledialog.ui - -RESOURCES += images/images.qrc - -DESTDIR = ../ -QMAKE_CLEAN += ../libqmmpfiledialog.so - - -CONFIG += release warn_on plugin - -TEMPLATE = lib - diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/cdup.png b/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/cdup.png deleted file mode 100644 index 5d966a77b..000000000 Binary files a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/cdup.png and /dev/null differ diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/detail.png b/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/detail.png deleted file mode 100644 index 2e552a425..000000000 Binary files a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/detail.png and /dev/null differ diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/images.qrc b/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/images.qrc deleted file mode 100644 index c194a6b91..000000000 --- a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/images.qrc +++ /dev/null @@ -1,8 +0,0 @@ - - - - cdup.png - detail.png - list.png - - diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/list.png b/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/list.png deleted file mode 100644 index 13b44a620..000000000 Binary files a/src/plugins/Misc/FileDialogs/QmmpFileDialog/images/list.png and /dev/null differ diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp b/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp deleted file mode 100644 index fce9f6e53..000000000 --- a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include - -#include "qmmpfiledialogimpl.h" -#include "qmmpfiledialog.h" - - - -QmmpFileDialog::QmmpFileDialog() -{ - m_dialog = new QmmpFileDialogImpl(); - connect(m_dialog,SIGNAL(filesAdded(const QStringList&)),this,SIGNAL(filesAdded(const QStringList&))); -} - -void QmmpFileDialog::handleSelected(/*const QStringList& s */) -{ -} - -bool QmmpFileDialog::modal()const -{ - return FALSE; -} - -QmmpFileDialog::~QmmpFileDialog() -{ - qWarning("QmmpFileDialog::~QmmpFileDialog()"); - delete m_dialog; -} -void QmmpFileDialog::raise(const QString& d,Mode m,const QStringList& f) -{ - m_dialog->setModeAndMask(d,m,f); - m_dialog->show(); - m_dialog->raise(); -} - - -FileDialog* QmmpFileDialogFactory::create(){ return new QmmpFileDialog();} - -QString QmmpFileDialogFactory::name(){return QmmpFileDialogFactoryName;} - -QString QmmpFileDialogFactory::QmmpFileDialogFactoryName = "Qmmp File Dialog"; - - -Q_EXPORT_PLUGIN(QmmpFileDialogFactory) - diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.h b/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.h deleted file mode 100644 index 30a4fef59..000000000 --- a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef QMMPFILEDIALOG_H -#define QMMPFILEDIALOG_H - -#include - -class QmmpFileDialogImpl; - -class QmmpFileDialog : public FileDialog -{ -Q_OBJECT - public: - QmmpFileDialog(); - virtual ~QmmpFileDialog(); - virtual bool modal()const; - virtual void raise(const QString&,Mode = AddFiles,const QStringList& = QStringList()); - public slots: - void handleSelected(); - - private: - QmmpFileDialogImpl * m_dialog; -}; - - - - -class QmmpFileDialogFactory : public QObject, public FileDialogFactory -{ - Q_OBJECT - Q_INTERFACES(FileDialogFactory); - public: - virtual FileDialog* create(); - virtual QString name(); - virtual ~QmmpFileDialogFactory(){;} - static QString QmmpFileDialogFactoryName; -}; - - -#endif - - diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui b/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui deleted file mode 100644 index dbfb2edc2..000000000 --- a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialog.ui +++ /dev/null @@ -1,216 +0,0 @@ - - QmmpFileDialog - - - - 0 - 0 - 517 - 312 - - - - Add Files - - - - 9 - - - 6 - - - - - 0 - - - 6 - - - - - Look in: - - - - - - - - 5 - 0 - 1 - 0 - - - - true - - - - - - - Up - - - :/cdup.png - - - - - - - List view - - - lst - - - :/list.png - - - true - - - - - - - Icon view - - - icn - - - :/detail.png - - - - 16 - 16 - - - - true - - - - - - - - - QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::NoEditTriggers - - - true - - - QAbstractItemView::NoDragDrop - - - false - - - QAbstractItemView::ExtendedSelection - - - QAbstractItemView::SelectItems - - - QListView::Static - - - QListView::Batched - - - QListView::ListMode - - - true - - - - - - - 0 - - - 6 - - - - - File name: - - - - - - - - - - - - 0 - - - 6 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Add - - - - - - - Close - - - - - - - - - - - - - closePushButton - clicked() - QmmpFileDialog - reject() - - - 459 - 291 - - - 153 - 289 - - - - - diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp b/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp deleted file mode 100644 index 984cc7204..000000000 --- a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.cpp +++ /dev/null @@ -1,109 +0,0 @@ -#include "qmmpfiledialogimpl.h" - -#include -#include - -QmmpFileDialogImpl::QmmpFileDialogImpl( QWidget * parent, Qt::WindowFlags f) : QDialog(parent,f) -{ - setupUi(this); - setAttribute(Qt::WA_QuitOnClose, FALSE); - m_model = new QDirModel(this); - m_model->setSorting(QDir::Type /*| QDir::Name*/); - fileListView->setModel(m_model); - //fileListView->setViewMode(QListView::IconMode); - listToolButton->setChecked(true); -} - -QmmpFileDialogImpl::~QmmpFileDialogImpl() -{ -} - -void QmmpFileDialogImpl::on_lookInComboBox_activated(const QString&) -{ - qWarning("TODO: %s %d",__FILE__,__LINE__); -} - -void QmmpFileDialogImpl::on_upToolButton_clicked() -{ - fileListView->setRootIndex(m_model->parent(fileListView->rootIndex())); - lookInComboBox->setEditText(m_model->filePath(fileListView->rootIndex())); -} - -void QmmpFileDialogImpl::on_fileListView_doubleClicked(const QModelIndex& ind) -{ - if(ind.isValid()) - { - QFileInfo info = m_model->fileInfo(ind); - if(info.isDir()) - { - fileListView->setRootIndex(ind); - lookInComboBox->setEditText(m_model->filePath(ind)); - } - else - { - QStringList l; - l << m_model->filePath(ind); - emit filesAdded(l); - } - } - -} - -void QmmpFileDialogImpl::on_fileNameLineEdit_returnPressed() -{ - on_addPushButton_clicked(); -} - -void QmmpFileDialogImpl::on_addPushButton_clicked() -{ - QModelIndexList ml = fileListView->selectionModel()->selectedIndexes(); - QStringList l; - foreach(QModelIndex i,ml) - l << m_model->filePath(i); - qWarning("!!!!!!!!!"); - emit filesAdded(l); -} - -void QmmpFileDialogImpl::setModeAndMask(const QString& d,FileDialog::Mode m, const QStringList & mask) -{ - if(m == FileDialog::AddFiles) - { - setWindowTitle("Add Files"); - m_model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); - } - else if(m == FileDialog::AddDirs) - { - setWindowTitle("Add Dirs"); - m_model->setFilter(QDir::Dirs | QDir::NoDotAndDotDot); - } - else - { - setWindowTitle("Save File"); - m_model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); - qWarning("To be implemented..."); - } - - m_model->setSorting(QDir::Type); - fileListView->setRootIndex(m_model->index(d)); - m_model->sort(0); - lookInComboBox->setEditText(d); -} - -void QmmpFileDialogImpl::on_listToolButton_toggled(bool yes) -{ - if(yes) - { - iconToolButton->setChecked(false); - fileListView->setViewMode(QListView::ListMode); - } -} - -void QmmpFileDialogImpl::on_iconToolButton_toggled(bool yes) -{ - if(yes) - { - listToolButton->setChecked(false); - fileListView->setViewMode(QListView::IconMode); - } -} - diff --git a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h b/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h deleted file mode 100644 index 2be25bf05..000000000 --- a/src/plugins/Misc/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef QMMPFILEDIALOGIMPL_H -#define QMMPFILEDIALOGIMPL_H - -#include "ui_qmmpfiledialog.h" -#include - -#include "filedialog.h" - -class QDirModel; - - -class QmmpFileDialogImpl : public QDialog , private Ui::QmmpFileDialog -{ -Q_OBJECT -public: - QmmpFileDialogImpl( QWidget * parent = 0, Qt::WindowFlags f = 0 ); - ~QmmpFileDialogImpl(); - void setModeAndMask(const QString&,FileDialog::Mode m,const QStringList& mask); -protected slots: - void on_lookInComboBox_activated(const QString&); - void on_upToolButton_clicked(); - void on_fileListView_doubleClicked(const QModelIndex&); - void on_fileNameLineEdit_returnPressed(); - void on_addPushButton_clicked(); - void on_listToolButton_toggled(bool); - void on_iconToolButton_toggled(bool); -signals: - void filesAdded(const QStringList&); -protected: - QDirModel* m_model; - -}; -#endif //QMMPFILEDIALOGIMPL_H diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index b14a5fc4b..2058ad53a 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -5,5 +5,6 @@ SUBDIRS += Input \ Effect \ General \ PlaylistFormats \ - CommandLineOptions + CommandLineOptions \ + FileDialogs TEMPLATE = subdirs 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 + + +#include +#include + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +//#include "playlistmodel.h" + +FileDialog* FileDialog::_instance = 0; + +QMap FileDialog::factories = QMap(); + +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(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 +#include + +#include +#include + +#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 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 = . diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index d20634781..23da7421a 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -48,7 +48,6 @@ SET(ui_SRCS eqslider.cpp eqtitlebar.cpp eqwidget.cpp - filedialog.cpp fileloader.cpp jumptotrackdialog.cpp keyboardmanager.cpp @@ -102,7 +101,6 @@ SET(ui_MOC_HDRS eqtitlebar.h eqwidget.h fft.h - filedialog.h fileloader.h inlines.h jumptotrackdialog.h diff --git a/src/ui/configdialog.cpp b/src/ui/configdialog.cpp index 9c5566f33..eac2272a6 100644 --- a/src/ui/configdialog.cpp +++ b/src/ui/configdialog.cpp @@ -36,10 +36,10 @@ #include #include #include +#include #include "skin.h" -#include "filedialog.h" #include "pluginitem.h" #include "configdialog.h" #include "skinreader.h" diff --git a/src/ui/eqwidget.cpp b/src/ui/eqwidget.cpp index 7fcabfedd..459d99974 100644 --- a/src/ui/eqwidget.cpp +++ b/src/ui/eqwidget.cpp @@ -22,8 +22,8 @@ #include #include #include +#include -#include "filedialog.h" #include "skin.h" #include "eqslider.h" #include "eqtitlebar.h" diff --git a/src/ui/filedialog.cpp b/src/ui/filedialog.cpp deleted file mode 100644 index 0c844e8db..000000000 --- a/src/ui/filedialog.cpp +++ /dev/null @@ -1,296 +0,0 @@ -#include "filedialog.h" - -#include - - -#include -#include - - -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - -#include "playlistmodel.h" - -FileDialog* FileDialog::_instance = 0; - -QMap FileDialog::factories = QMap(); - -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(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)) - { - 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(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(QObject* o,const QString& d,Mode m,const QStringList& f) -{ - FileDialog* inst = instance(); - inst->init(o); - 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/ui/filedialog.h b/src/ui/filedialog.h deleted file mode 100644 index f8e6c4f93..000000000 --- a/src/ui/filedialog.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef FILEDIALOG_H -#define FILEDIALOG_H - -#include -#include - -#include -#include - -#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(){;} - 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 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/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index e80ea9cd1..14f56ec47 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include "textscroller.h" #include "mainwindow.h" @@ -45,7 +46,6 @@ #include "jumptotrackdialog.h" #include "aboutdialog.h" #include "addurldialog.h" -#include "filedialog.h" #include "listwidget.h" #include "visualmenu.h" #include "builtincommandlineoption.h" @@ -458,7 +458,8 @@ void MainWindow::addDir() m_lastDir = s+"../"; } else - FileDialog::popup(m_playListModel,m_lastDir,FileDialog::AddDirs,Decoder::nameFilters()); + FileDialog::popup(m_lastDir,FileDialog::AddDirs,Decoder::nameFilters(), + m_playListModel, SLOT(addFileList(const QStringList&))); } void MainWindow::addFile() @@ -497,7 +498,8 @@ void MainWindow::addFile() m_lastDir = files.at(0); } else - FileDialog::popup(m_playListModel,m_lastDir,FileDialog::AddFiles,Decoder::nameFilters()); + FileDialog::popup(m_lastDir,FileDialog::AddFiles,Decoder::nameFilters(), + m_playListModel, SLOT(addFileList(const QStringList&))); } diff --git a/src/ui/ui.pro b/src/ui/ui.pro index cd28f33a4..e6ac09941 100644 --- a/src/ui/ui.pro +++ b/src/ui/ui.pro @@ -53,7 +53,6 @@ HEADERS += mainwindow.h \ aboutdialog.h \ timeindicator.h \ keyboardmanager.h \ - filedialog.h \ unixdomainsocket.h \ addurldialog.h \ skinreader.h \ @@ -105,7 +104,6 @@ SOURCES += mainwindow.cpp \ aboutdialog.cpp \ timeindicator.cpp \ keyboardmanager.cpp \ - filedialog.cpp \ unixdomainsocket.cpp \ addurldialog.cpp \ skinreader.cpp \ -- cgit v1.2.3-13-gbd6f