aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-05-09 19:22:00 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2009-05-09 19:22:00 +0000
commit08de867fc96c121b518523fb2e832f9c80539f01 (patch)
tree49b05a4382c610ef1360fab89144cc857e1014a2 /src
parent5c583bfdd4a74273576867191d0145227a5d63d7 (diff)
downloadqmmp-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.cpp12
-rw-r--r--src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialog.h4
-rw-r--r--src/plugins/FileDialogs/QmmpFileDialog/qmmpfiledialogimpl.h2
-rw-r--r--src/plugins/General/fileops/fileops.cpp104
-rw-r--r--src/plugins/General/fileops/fileops.h9
-rw-r--r--src/plugins/General/fileops/settingsdialog.cpp104
-rw-r--r--src/plugins/General/fileops/settingsdialog.h6
-rw-r--r--src/plugins/General/fileops/settingsdialog.ui66
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>