diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-05-09 19:22:00 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2009-05-09 19:22:00 +0000 |
| commit | 08de867fc96c121b518523fb2e832f9c80539f01 (patch) | |
| tree | 49b05a4382c610ef1360fab89144cc857e1014a2 /src | |
| parent | 5c583bfdd4a74273576867191d0145227a5d63d7 (diff) | |
| download | qmmp-08de867fc96c121b518523fb2e832f9c80539f01.tar.gz qmmp-08de867fc96c121b518523fb2e832f9c80539f01.tar.bz2 qmmp-08de867fc96c121b518523fb2e832f9c80539f01.zip | |
updated fileops plugin, fixed file dialog bugs
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@934 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp | 12 | ||||
| -rw-r--r-- | src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h | 4 | ||||
| -rw-r--r-- | src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h | 2 | ||||
| -rw-r--r-- | src/plugins/General/fileops/fileops.cpp | 104 | ||||
| -rw-r--r-- | src/plugins/General/fileops/fileops.h | 9 | ||||
| -rw-r--r-- | src/plugins/General/fileops/settingsdialog.cpp | 104 | ||||
| -rw-r--r-- | src/plugins/General/fileops/settingsdialog.h | 6 | ||||
| -rw-r--r-- | src/plugins/General/fileops/settingsdialog.ui | 66 |
8 files changed, 275 insertions, 32 deletions
diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp index 871337e8f..dce394398 100644 --- a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.cpp @@ -56,6 +56,18 @@ void QmmpFileDialog::raise(const QString &dir, Mode mode, const QString &caption m_dialog->raise(); } +QString QmmpFileDialog::existingDirectory(QWidget *parent, const QString &caption, const QString &dir) +{ + QmmpFileDialogImpl *dialog = new QmmpFileDialogImpl(parent); + dialog->setWindowTitle(caption); + dialog->setModeAndMask(dir, FileDialog::AddDir); + QStringList l; + if (dialog->exec() == QDialog::Accepted) + l = dialog->selectedFiles(); + dialog->deleteLater(); + return l.isEmpty() ? QString() : l.at(0); +} + QString QmmpFileDialog::openFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString*) { diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h index d05cdb609..6fdc9f28b 100644 --- a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h @@ -39,6 +39,10 @@ public: const QString &caption = QString(), const QStringList &mask = QStringList()); + QString existingDirectory(QWidget *parent = 0, + const QString &caption = QString(), + const QString &dir = QString()); + QString openFileName(QWidget *parent = 0, const QString &caption = QString(), const QString &dir = QString(), diff --git a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h index 443e54c5a..76eb1f4e0 100644 --- a/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h +++ b/src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h @@ -42,7 +42,7 @@ public: ~QmmpFileDialogImpl(); - void setModeAndMask(const QString&,FileDialog::Mode m, const QStringList& mask); + void setModeAndMask(const QString&,FileDialog::Mode m, const QStringList& mask = QStringList()); QStringList selectedFiles (); protected slots: diff --git a/src/plugins/General/fileops/fileops.cpp b/src/plugins/General/fileops/fileops.cpp index 86122b127..3bb32b1e4 100644 --- a/src/plugins/General/fileops/fileops.cpp +++ b/src/plugins/General/fileops/fileops.cpp @@ -19,7 +19,12 @@ ***************************************************************************/ #include <QAction> +#include <QSettings> #include <QApplication> +#include <QSignalMapper> +#include <QProgressDialog> +#include <QMessageBox> +#include <QFile> #include <qmmp/soundcore.h> #include <qmmpui/generalhandler.h> @@ -28,25 +33,110 @@ #include <qmmpui/mediaplayer.h> #include "fileops.h" +#define COPY_BLOCK_SIZE 102400 + FileOps::FileOps(QObject *parent) : General(parent) { - m_copyAction = new QAction(tr("Copy"), this); - m_moveAction = new QAction(tr("Move"), this); - m_removeAction = new QAction(tr("Remove"), this); //separators QAction *separator1 = new QAction(this); separator1->setSeparator (TRUE); QAction *separator2 = new QAction(this); separator2->setSeparator (TRUE); + //load settings + QSignalMapper *mapper = new QSignalMapper(this); + QSettings settings(Qmmp::configFile(), QSettings::IniFormat); + settings.beginGroup("FileOps"); + int count = settings.value("count", 0).toInt(); + if (count > 0) + GeneralHandler::instance()->addAction(separator1, GeneralHandler::PLAYLIST_MENU); + else + return; + + for (int i = 0; i < count; ++i) + { - GeneralHandler::instance()->addAction(separator1, GeneralHandler::PLAYLIST_MENU); - GeneralHandler::instance()->addAction(m_copyAction, GeneralHandler::PLAYLIST_MENU); - GeneralHandler::instance()->addAction(m_moveAction, GeneralHandler::PLAYLIST_MENU); - GeneralHandler::instance()->addAction(m_removeAction, GeneralHandler::PLAYLIST_MENU); + if (settings.value(QString("enabled_%1").arg(i), TRUE).toBool()) + { + m_types << settings.value(QString("action_%1").arg(i), FileOps::COPY).toInt(); + QString name = settings.value(QString("name_%1").arg(i), "Action").toString(); + m_patterns << settings.value(QString("pattern_%1").arg(i)).toString(); + m_destinations << settings.value(QString("destination_%1").arg(i)).toString(); + QAction *action = new QAction(name, this); + connect (action, SIGNAL (triggered (bool)), mapper, SLOT (map())); + mapper->setMapping(action, i); + GeneralHandler::instance()->addAction(action, GeneralHandler::PLAYLIST_MENU); + } + } + settings.endGroup(); + connect(mapper, SIGNAL(mapped(int)), SLOT(execAction(int))); GeneralHandler::instance()->addAction(separator2, GeneralHandler::PLAYLIST_MENU); } FileOps::~FileOps() {} +void FileOps::execAction(int n) +{ + int type = m_types.at(n); + QString pattern = m_patterns.at(n); + QString destination = m_destinations.at(n); + + PlayListModel *model = MediaPlayer::instance()->playListModel(); + QList<PlayListItem*> items = model->getSelectedItems(); + + switch (type) + { + case COPY: + { + QProgressDialog progress(qApp->activeWindow ()); + progress.setWindowModality(Qt::WindowModal); + progress.setWindowTitle(tr("Copying")); + progress.setCancelButtonText(tr("Stop")); + progress.show(); + progress.setAutoClose (FALSE); + int i = 0; + foreach(PlayListItem *item, items) + { + if (!QFile::exists(item->url())) + continue; + + QFile in(item->url()); + QFile out(destination + "/" + pattern); + in.open(QIODevice::ReadOnly); + out.open(QIODevice::WriteOnly); + + progress.setMaximum(int(in.size()/COPY_BLOCK_SIZE)); + progress.setValue(0); + progress.setLabelText (QString(tr("Copying file %1/%2")).arg(++i).arg(items.size())); + progress.update(); + + while (!in.atEnd ()) + { + progress.wasCanceled (); + out.write(in.read(COPY_BLOCK_SIZE)); + progress.setValue(int(out.size()/COPY_BLOCK_SIZE)); + qApp->processEvents(); + } + } + progress.close(); + break; + } + case RENAME: + break; + case MOVE: + break; + case REMOVE: + if (QMessageBox::question (qApp->activeWindow (), tr("Remove files"), + QString(tr("Are you sure you want to remove %1 file(s) from disk")) + .arg(items.size()), + QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) + break; + + foreach(PlayListItem *item, items) + { + if (QFile::exists(item->url()) && QFile::remove(item->url())) + model->removeAt (model->row(item)); + } + } +} diff --git a/src/plugins/General/fileops/fileops.h b/src/plugins/General/fileops/fileops.h index 7ff3d570f..946071e47 100644 --- a/src/plugins/General/fileops/fileops.h +++ b/src/plugins/General/fileops/fileops.h @@ -46,12 +46,13 @@ public: REMOVE }; +private slots: + void execAction(int n); private: - QAction *m_copyAction; - QAction *m_moveAction; - QAction *m_removeAction; - QString m_copyDestination; + QList <int> m_types; + QStringList m_patterns; + QStringList m_destinations; }; #endif diff --git a/src/plugins/General/fileops/settingsdialog.cpp b/src/plugins/General/fileops/settingsdialog.cpp index 57872e7b7..92c221497 100644 --- a/src/plugins/General/fileops/settingsdialog.cpp +++ b/src/plugins/General/fileops/settingsdialog.cpp @@ -21,8 +21,10 @@ #include <QSettings> #include <QCheckBox> #include <QComboBox> +#include <QMenu> #include <qmmp/qmmp.h> +#include <qmmpui/filedialog.h> #include "fileops.h" #include "settingsdialog.h" @@ -64,6 +66,13 @@ SettingsDialog::SettingsDialog(QWidget *parent) ui.tableWidget->setItem (i, 2, item); } settings.endGroup(); + connect (ui.tableWidget, SIGNAL(currentItemChanged (QTableWidgetItem *, QTableWidgetItem *)), + SLOT(updateLineEdits())); + updateLineEdits(); + connect (ui.destinationEdit, SIGNAL(textChanged (const QString&)), SLOT(changeDestination(const QString&))); + connect (ui.patternEdit, SIGNAL(textChanged (const QString&)), SLOT(changePattern(const QString&))); + connect (ui.destButton, SIGNAL(clicked()), SLOT(selectDirectory())); + createMenus(); } @@ -73,8 +82,32 @@ SettingsDialog::~SettingsDialog() void SettingsDialog::accept() { QSettings settings(Qmmp::configFile(), QSettings::IniFormat); - //settings.beginGroup("CUE"); - //settings.setValue("encoding", ui.cueEncComboBox->currentText()); + settings.beginGroup("FileOps"); + //remove unused keys + int count = settings.value("count", 0).toInt(); + for (int i = ui.tableWidget->rowCount() - 1; i < count; ++i) + { + settings.remove (QString("enabled_%1").arg(i)); + settings.remove (QString("action_%1").arg(i)); + settings.remove (QString("name_%1").arg(i)); + settings.remove (QString("pattern_%1").arg(i)); + settings.remove (QString("destination_%1").arg(i)); + } + //save actions + settings.setValue("count", ui.tableWidget->rowCount()); + for (int i = 0; i < ui.tableWidget->rowCount(); ++i) + { + QCheckBox *checkBox = qobject_cast<QCheckBox *>(ui.tableWidget->cellWidget (i, 0)); + settings.setValue (QString("enabled_%1").arg(i), checkBox->isChecked()); + + QComboBox *comboBox = qobject_cast<QComboBox *>(ui.tableWidget->cellWidget (i, 1)); + settings.setValue (QString("action_%1").arg(i), comboBox->itemData (comboBox->currentIndex())); + + ActionItem *item = (ActionItem *) ui.tableWidget->item(i,2); + settings.setValue (QString("name_%1").arg(i), item->text()); + settings.setValue (QString("pattern_%1").arg(i), item->pattern()); + settings.setValue (QString("destination_%1").arg(i), item->destination()); + } settings.endGroup(); QDialog::accept(); } @@ -108,3 +141,70 @@ void SettingsDialog::deleteAction() if (ui.tableWidget->currentRow () >= 0) ui.tableWidget->removeRow (ui.tableWidget->currentRow ()); } + +void SettingsDialog::updateLineEdits() +{ + if (ui.tableWidget->currentRow () >= 0) + { + ActionItem *item = (ActionItem *) ui.tableWidget->item(ui.tableWidget->currentRow (), 2); + ui.destinationEdit->setText(item->destination()); + ui.patternEdit->setText(item->pattern()); + } + else + { + ui.destinationEdit->clear(); + ui.patternEdit->clear(); + } +} + +void SettingsDialog::changeDestination(const QString &dest) +{ + if (ui.tableWidget->currentRow () >= 0) + { + ActionItem *item = (ActionItem *) ui.tableWidget->item(ui.tableWidget->currentRow (), 2); + item->setDestination(dest); + } +} + +void SettingsDialog::changePattern(const QString &pattern) +{ + if (ui.tableWidget->currentRow () >= 0) + { + ActionItem *item = (ActionItem *) ui.tableWidget->item(ui.tableWidget->currentRow (), 2); + item->setPattern(pattern); + } +} + +void SettingsDialog::createMenus() +{ + QMenu *menu = new QMenu(this); + menu->addAction(tr("Artist"))->setData("%p"); + menu->addAction(tr("Album"))->setData("%a"); + menu->addAction(tr("Title"))->setData("%t"); + menu->addAction(tr("Tracknumber"))->setData("%n"); + menu->addAction(tr("Genre"))->setData("%g"); + menu->addAction(tr("Filename"))->setData("%f"); + menu->addAction(tr("Filepath"))->setData("%F"); + menu->addAction(tr("Date"))->setData("%d"); + menu->addAction(tr("Year"))->setData("%y"); + menu->addAction(tr("Comment"))->setData("%c"); + ui.patternButton->setMenu(menu); + ui.patternButton->setPopupMode(QToolButton::InstantPopup); + connect(menu, SIGNAL(triggered (QAction *)), SLOT(addTitleString( QAction *))); +} + +void SettingsDialog::addTitleString(QAction *a) +{ + if (ui.patternEdit->cursorPosition () < 1) + ui.patternEdit->insert(a->data().toString()); + else + ui.patternEdit->insert("_"+a->data().toString()); +} + +void SettingsDialog::selectDirectory() +{ + QString dir = FileDialog::getExistingDirectory(this, tr("Choose a directory"), + ui.destinationEdit->text()); + if(!dir.isEmpty()) + ui.destinationEdit->setText(dir); +} diff --git a/src/plugins/General/fileops/settingsdialog.h b/src/plugins/General/fileops/settingsdialog.h index 1920739c4..f6e4d0def 100644 --- a/src/plugins/General/fileops/settingsdialog.h +++ b/src/plugins/General/fileops/settingsdialog.h @@ -44,8 +44,14 @@ public slots: private slots: void createAction(); void deleteAction(); + void updateLineEdits(); + void changeDestination(const QString &dest); + void changePattern(const QString &pattern); + void addTitleString(QAction *action); + void selectDirectory(); private: + void createMenus(); Ui::SettingsDialog ui; }; diff --git a/src/plugins/General/fileops/settingsdialog.ui b/src/plugins/General/fileops/settingsdialog.ui index 237068aef..2e43334f5 100644 --- a/src/plugins/General/fileops/settingsdialog.ui +++ b/src/plugins/General/fileops/settingsdialog.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>389</width> - <height>293</height> + <height>287</height> </rect> </property> <property name="windowTitle"> @@ -17,6 +17,9 @@ <property name="leftMargin"> <number>6</number> </property> + <property name="topMargin"> + <number>9</number> + </property> <property name="rightMargin"> <number>6</number> </property> @@ -59,34 +62,61 @@ </item> <item row="1" column="0" colspan="2"> <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>6</number> - </property> <item> - <widget class="QPushButton" name="newButton"> + <widget class="QToolButton" name="newButton"> + <property name="minimumSize"> + <size> + <width>26</width> + <height>0</height> + </size> + </property> <property name="text"> - <string>New</string> + <string>+</string> </property> </widget> </item> <item> - <widget class="QPushButton" name="deleteButton"> + <widget class="QToolButton" name="deleteButton"> + <property name="minimumSize"> + <size> + <width>26</width> + <height>0</height> + </size> + </property> <property name="text"> - <string>Delete</string> + <string>-</string> </property> </widget> </item> <item> - <widget class="QPushButton" name="pushButton_2"> + <widget class="QToolButton" name="toolButton"> + <property name="minimumSize"> + <size> + <width>26</width> + <height>0</height> + </size> + </property> <property name="text"> - <string>Move up</string> + <string>...</string> + </property> + <property name="arrowType"> + <enum>Qt::UpArrow</enum> </property> </widget> </item> <item> - <widget class="QPushButton" name="pushButton_3"> + <widget class="QToolButton" name="toolButton_3"> + <property name="minimumSize"> + <size> + <width>26</width> + <height>0</height> + </size> + </property> <property name="text"> - <string>Move down</string> + <string>...</string> + </property> + <property name="arrowType"> + <enum>Qt::DownArrow</enum> </property> </widget> </item> @@ -97,8 +127,8 @@ </property> <property name="sizeHint" stdset="0"> <size> - <width>198</width> - <height>20</height> + <width>178</width> + <height>23</height> </size> </property> </spacer> @@ -115,10 +145,10 @@ </widget> </item> <item row="0" column="1"> - <widget class="QLineEdit" name="lineEdit_2"/> + <widget class="QLineEdit" name="destinationEdit"/> </item> <item row="0" column="2"> - <widget class="QToolButton" name="toolButton_2"> + <widget class="QToolButton" name="destButton"> <property name="text"> <string>...</string> </property> @@ -132,10 +162,10 @@ </widget> </item> <item row="1" column="1"> - <widget class="QLineEdit" name="lineEdit"/> + <widget class="QLineEdit" name="patternEdit"/> </item> <item row="1" column="2"> - <widget class="QToolButton" name="toolButton"> + <widget class="QToolButton" name="patternButton"> <property name="text"> <string>...</string> </property> |
