aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2021-01-25 20:49:44 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2021-01-25 20:49:44 +0000
commit8618c1e26a2cfe7a1c5dddf0fec3bab9311a9b7a (patch)
tree158964d3eba52cd196dd814ce8cd278f9f44f271 /src/plugins/General
parent69fac3438f57abc6da77611f2c42522b5a9abc6d (diff)
downloadqmmp-8618c1e26a2cfe7a1c5dddf0fec3bab9311a9b7a.tar.gz
qmmp-8618c1e26a2cfe7a1c5dddf0fec3bab9311a9b7a.tar.bz2
qmmp-8618c1e26a2cfe7a1c5dddf0fec3bab9311a9b7a.zip
fileops: added feature to execute external command (#1045)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9661 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/General')
-rw-r--r--src/plugins/General/fileops/fileops.cpp125
-rw-r--r--src/plugins/General/fileops/fileops.h14
-rw-r--r--src/plugins/General/fileops/settingsdialog.cpp219
-rw-r--r--src/plugins/General/fileops/settingsdialog.h37
-rw-r--r--src/plugins/General/fileops/settingsdialog.ui15
5 files changed, 216 insertions, 194 deletions
diff --git a/src/plugins/General/fileops/fileops.cpp b/src/plugins/General/fileops/fileops.cpp
index 748ae3193..aa26582c5 100644
--- a/src/plugins/General/fileops/fileops.cpp
+++ b/src/plugins/General/fileops/fileops.cpp
@@ -25,6 +25,7 @@
#include <QMessageBox>
#include <QFile>
#include <QDir>
+#include <QProcess>
#include <qmmp/soundcore.h>
#include <qmmpui/uihelper.h>
#include <qmmpui/playlistmodel.h>
@@ -40,31 +41,39 @@ FileOps::FileOps(QObject *parent) : QObject(parent)
{
//separators
QAction *separator1 = new QAction(this);
- separator1->setSeparator (true);
+ separator1->setSeparator(true);
QAction *separator2 = new QAction(this);
- separator2->setSeparator (true);
+ separator2->setSeparator(true);
//load settings
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("FileOps");
- int count = settings.value("count", 0).toInt();
- if (count > 0)
+ if(!settings.value("name_0").isNull())
UiHelper::instance()->addAction(separator1, UiHelper::PLAYLIST_MENU);
else
return;
- for (int i = 0; i < count; ++i)
+ int i = 0;
+ while(!settings.value(QString("name_%1").arg(i)).isNull())
{
- 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();
- if (settings.value(QString("enabled_%1").arg(i), true).toBool())
+ QString name = settings.value(QString("name_%1").arg(i)).toString();
+ QVariantMap data = {
+ { "action", settings.value(QString("action_%1").arg(i), FileOps::COPY).toInt() },
+ { "pattern", settings.value(QString("pattern_%1").arg(i)).toString() },
+ { "destination", settings.value(QString("destination_%1").arg(i)).toString() },
+ { "command", settings.value(QString("command_%1").arg(i)).toString() },
+
+ };
+
+ if(settings.value(QString("enabled_%1").arg(i), true).toBool())
{
QAction *action = new QAction(name, this);
+ action->setData(data);
action->setShortcut(settings.value(QString("hotkey_%1").arg(i)).toString());
- connect(action, &QAction::triggered, [i,this]{ execAction(i); });
+ connect(action, &QAction::triggered, this, &FileOps::execAction);
UiHelper::instance()->addAction(action, UiHelper::PLAYLIST_MENU);
}
+
+ ++i;
}
settings.endGroup();
UiHelper::instance()->addAction(separator2, UiHelper::PLAYLIST_MENU);
@@ -73,12 +82,17 @@ FileOps::FileOps(QObject *parent) : QObject(parent)
FileOps::~FileOps()
{}
-void FileOps::execAction(int n)
+void FileOps::execAction()
{
- int type = m_types.at(n);
- QString pattern = m_patterns.at(n);
- MetaDataFormatter formatter(pattern);
- QString destination = m_destinations.at(n);
+ QAction *action = qobject_cast<QAction *>(sender());
+ QVariantMap data = action->data().toMap();
+
+ int type = data["action"].toInt();
+ QString pattern = data["pattern"].toString();
+ QString destination = data["destination"].toString();
+ QString command = data["command"].toString();
+
+ MetaDataFormatter formatter(type == EXECUTE ? command : pattern);
PlayListModel *model = MediaPlayer::instance()->playListManager()->selectedPlayList();
const QList<PlayListTrack*> tracks = model->selectedTracks();
@@ -88,7 +102,7 @@ void FileOps::execAction(int n)
case COPY:
{
qDebug("FileOps: copy");
- if (!QDir(destination).exists ())
+ if(!QDir(destination).exists ())
{
QMessageBox::critical (qApp->activeWindow (), tr("Error"),
tr("Destination directory doesn't exist"));
@@ -106,21 +120,21 @@ void FileOps::execAction(int n)
case REMOVE:
{
qDebug("FileOps: remove");
- if (QMessageBox::question (qApp->activeWindow (), tr("Remove Files"),
+ if(QMessageBox::question (qApp->activeWindow (), tr("Remove Files"),
tr("Are you sure you want to remove %n file(s) from disk?",
"",tracks.size()),
QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
break;
- if (PlayListManager::instance()->selectedPlayList() != model)
+ if(PlayListManager::instance()->selectedPlayList() != model)
break;
for(PlayListTrack *track : qAsConst(tracks))
{
- if (PlayListManager::instance()->selectedPlayList() != model)
+ if(PlayListManager::instance()->selectedPlayList() != model)
break;
- if (isValid(track) && QFile::exists(track->path()) && QFile::remove(track->path()))
+ if(isValid(track) && QFile::exists(track->path()) && QFile::remove(track->path()))
model->removeTrack(track);
}
break;
@@ -128,13 +142,13 @@ void FileOps::execAction(int n)
case MOVE:
{
qDebug("FileOps: move");
- if (!QDir(destination).exists ())
+ if(!QDir(destination).exists ())
{
QMessageBox::critical (qApp->activeWindow (), tr("Error"),
tr("Destination directory doesn't exist"));
break;
}
- if (QMessageBox::question (qApp->activeWindow (), tr("Move Files"),
+ if(QMessageBox::question (qApp->activeWindow (), tr("Move Files"),
tr("Are you sure you want to move %n file(s)?",
"",tracks.size()),
QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
@@ -144,6 +158,12 @@ void FileOps::execAction(int n)
move(tracks, destination, &formatter, model);
break;
}
+ case EXECUTE:
+ {
+ qDebug("FileOps: execute");
+ execute(tracks, &formatter, model);
+ break;
+ }
}
}
@@ -154,17 +174,17 @@ void FileOps::copy(const QList<PlayListTrack *> &tracks, const QString &dest, co
progress.setWindowTitle(tr("Copying"));
progress.setCancelButtonText(tr("Stop"));
progress.show();
- progress.setAutoClose (false);
+ progress.setAutoClose(false);
int i = 0;
for(PlayListTrack *track : qAsConst(tracks))
{
- if (!isValid(track) || !QFile::exists(track->path()))
+ if(!isValid(track) || !QFile::exists(track->path()))
continue;
QString fileName = formatter->format(track); //generate file name
QString ext = QString(".") + track->path().section(".", -1).toLower();
- if (!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
+ if(!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
fileName += ext; //append extension
//create destination path
@@ -184,18 +204,18 @@ void FileOps::copy(const QList<PlayListTrack *> &tracks, const QString &dest, co
//copy file
QFile in(track->path());
QFile out(path);
- if (!in.open(QIODevice::ReadOnly))
+ if(!in.open(QIODevice::ReadOnly))
{
qWarning("FileOps: %s", qPrintable(in.errorString ()));
continue;
}
- if (!out.open(QIODevice::WriteOnly))
+ if(!out.open(QIODevice::WriteOnly))
{
qWarning("FileOps: %s", qPrintable(out.errorString ()));
continue;
}
- progress.setMaximum(int(in.size()/COPY_BLOCK_SIZE));
+ progress.setMaximum(int(in.size() / COPY_BLOCK_SIZE));
progress.setValue(0);
progress.setLabelText (QString(tr("Copying file %1/%2")).arg(++i).arg(tracks.size()));
progress.update();
@@ -203,7 +223,7 @@ void FileOps::copy(const QList<PlayListTrack *> &tracks, const QString &dest, co
while (!in.atEnd ())
{
out.write(in.read(COPY_BLOCK_SIZE));
- progress.setValue(int(out.size()/COPY_BLOCK_SIZE));
+ progress.setValue(int(out.size() / COPY_BLOCK_SIZE));
qApp->processEvents();
}
if(progress.wasCanceled ())
@@ -216,21 +236,21 @@ void FileOps::rename(const QList<PlayListTrack *> &tracks, const MetaDataFormatt
{
for(PlayListTrack *track : qAsConst(tracks))
{
- if (!isValid(track) || !QFile::exists(track->path())) //is it file?
+ if(!isValid(track) || !QFile::exists(track->path())) //is it file?
continue;
- if (PlayListManager::instance()->selectedPlayList() != model)
+ if(PlayListManager::instance()->selectedPlayList() != model)
break;
QString fileName = formatter->format(track); //generate file name
QString ext = QString(".") + track->path().section(".", -1).toLower();
- if (!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
+ if(!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
fileName += ext; //append extension
//rename file
QFile file(track->path());
QString dest = QFileInfo(track->path()).absolutePath ();
- if (isValid(track) && file.rename(dest + "/" + fileName) && isValid(track))
+ if(isValid(track) && file.rename(dest + "/" + fileName) && isValid(track))
{
track->setPath(dest + "/" + fileName);
track->updateMetaData();
@@ -252,16 +272,16 @@ void FileOps::move(const QList<PlayListTrack *> &tracks, const QString &dest, co
int i = 0;
for(PlayListTrack *track : qAsConst(tracks))
{
- if (!isValid(track) || !QFile::exists(track->path()))
+ if(!isValid(track) || !QFile::exists(track->path()))
continue;
- if (PlayListManager::instance()->selectedPlayList() != model)
+ if(PlayListManager::instance()->selectedPlayList() != model)
break;
QString fileName = formatter->format(track); //generate file name
QString ext = QString(".") + track->path().section(".", -1).toLower();
- if (!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
+ if(!ext.isEmpty() && !fileName.endsWith(ext, Qt::CaseInsensitive))
fileName += ext; //append extension
//create destination path
QString path = dest + "/" + fileName;
@@ -300,18 +320,18 @@ void FileOps::move(const QList<PlayListTrack *> &tracks, const QString &dest, co
//copy file
QFile in(track->path());
QFile out(path);
- if (!in.open(QIODevice::ReadOnly))
+ if(!in.open(QIODevice::ReadOnly))
{
qWarning("FileOps: %s", qPrintable(in.errorString ()));
continue;
}
- if (!out.open(QIODevice::WriteOnly))
+ if(!out.open(QIODevice::WriteOnly))
{
qWarning("FileOps: %s", qPrintable(out.errorString ()));
continue;
}
- progress.setMaximum(int(in.size()/COPY_BLOCK_SIZE));
+ progress.setMaximum(int(in.size() / COPY_BLOCK_SIZE));
progress.setValue(0);
progress.update();
@@ -319,7 +339,7 @@ void FileOps::move(const QList<PlayListTrack *> &tracks, const QString &dest, co
{
progress.wasCanceled ();
out.write(in.read(COPY_BLOCK_SIZE));
- progress.setValue(int(out.size()/COPY_BLOCK_SIZE));
+ progress.setValue(int(out.size() / COPY_BLOCK_SIZE));
qApp->processEvents();
}
@@ -340,8 +360,29 @@ void FileOps::move(const QList<PlayListTrack *> &tracks, const QString &dest, co
progress.close();
}
+void FileOps::execute(const QList<PlayListTrack *> &tracks, const MetaDataFormatter *formatter, PlayListModel *model)
+{
+ for(PlayListTrack *track : qAsConst(tracks))
+ {
+ if(!isValid(track) || !QFile::exists(track->path())) //is it file?
+ continue;
+
+ if(PlayListManager::instance()->selectedPlayList() != model)
+ break;
+
+ QString command = formatter->format(track); //generate file name
+
+#ifdef Q_OS_WIN
+ QProcess::startDetached(QString("cmd.exe /C %1").arg(command));
+#else
+ QStringList args = { "-c", command };
+ QProcess::startDetached("sh", args);
+#endif
+ }
+}
+
bool FileOps::isValid(PlayListTrack *track) const
{
- QList<PlayListTrack*> tracks = PlayListManager::instance()->selectedPlayList()->selectedTracks();
+ const QList<PlayListTrack*> tracks = PlayListManager::instance()->selectedPlayList()->selectedTracks();
return tracks.contains(track);
}
diff --git a/src/plugins/General/fileops/fileops.h b/src/plugins/General/fileops/fileops.h
index 8940c3f17..1bd112913 100644
--- a/src/plugins/General/fileops/fileops.h
+++ b/src/plugins/General/fileops/fileops.h
@@ -47,22 +47,18 @@ public:
RENAME,
REMOVE,
MOVE,
+ EXECUTE
};
private slots:
- void execAction(int n);
+ void execAction();
private:
void copy(const QList<PlayListTrack*> &tracks, const QString &dest, const MetaDataFormatter *formatter);
- void rename(const QList<PlayListTrack *> &tracks, const MetaDataFormatter *formatter,
- PlayListModel *model);
- void move(const QList<PlayListTrack*> &tracks, const QString &dest, const MetaDataFormatter *formatter,
- PlayListModel *model);
+ void rename(const QList<PlayListTrack *> &tracks, const MetaDataFormatter *formatter, PlayListModel *model);
+ void move(const QList<PlayListTrack*> &tracks, const QString &dest, const MetaDataFormatter *formatter, PlayListModel *model);
+ void execute(const QList<PlayListTrack*> &tracks, const MetaDataFormatter *formatter, PlayListModel *model);
bool isValid(PlayListTrack *track) const;
-
- 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 bb811aeea..6142ec93e 100644
--- a/src/plugins/General/fileops/settingsdialog.cpp
+++ b/src/plugins/General/fileops/settingsdialog.cpp
@@ -1,11 +1,11 @@
/***************************************************************************
- * Copyright (C) 2009-2021 by Ilya Kotov *
+ * Copyright(C) 2009-2021 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
+ * (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
@@ -35,48 +35,41 @@ SettingsDialog::SettingsDialog(QWidget *parent)
{
m_ui.setupUi(this);
m_ui.tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
- m_ui.tableWidget->verticalHeader()->hide();
m_ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("FileOps");
- int count = settings.value("count", 0).toInt();
- for (int i = 0; i < count; ++i)
+ int i = 0;
+ while(!settings.value(QString("name_%1").arg(i)).isNull())
{
- m_ui.tableWidget->insertRow (i);
+ m_ui.tableWidget->insertRow(i);
QCheckBox *checkBox = new QCheckBox;
- checkBox->setFocusPolicy (Qt::NoFocus);
+ checkBox->setFocusPolicy(Qt::NoFocus);
+ checkBox->setChecked(settings.value(QString("enabled_%1").arg(i), true).toBool());
- QComboBox *comboBox = new QComboBox;
- comboBox->addItem (tr("Copy"), FileOps::COPY);
- comboBox->addItem (tr("Rename"), FileOps::RENAME);
- comboBox->addItem (tr("Move"), FileOps::MOVE);
- comboBox->addItem (tr("Remove"), FileOps::REMOVE);
- comboBox->setFocusPolicy (Qt::NoFocus);
+ QComboBox *comboBox = createComboBox();
+ int ci = comboBox->findData(settings.value(QString("action_%1").arg(i), FileOps::COPY).toInt());
+ comboBox->setCurrentIndex(qMax(ci, 0));
+ connect(comboBox, SIGNAL(activated(int)), SLOT(updateLineEdits()));
+ QTableWidgetItem *nameItem = new QTableWidgetItem(settings.value(QString("name_%1").arg(i)).toString());
+ nameItem->setData(PatternRole, settings.value(QString("pattern_%1").arg(i)).toString());
+ nameItem->setData(DestionationRole, settings.value(QString("destination_%1").arg(i)).toString());
+ nameItem->setData(CommandRole, settings.value(QString("command_%1").arg(i)).toString());
- checkBox->setChecked(settings.value(QString("enabled_%1").arg(i), true).toBool());
- int ci = comboBox->findData (settings.value(QString("action_%1").arg(i), FileOps::COPY).toInt());
- if (ci >= 0)
- comboBox->setCurrentIndex(ci);
+ QTableWidgetItem *hotkeyItem = new QTableWidgetItem();
+ hotkeyItem->setText(settings.value(QString("hotkey_%1").arg(i)).toString());
+ hotkeyItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
- connect(comboBox, SIGNAL(activated(int)), SLOT(updateLineEdits()));
+ m_ui.tableWidget->setCellWidget(i, 0, checkBox);
+ m_ui.tableWidget->setCellWidget(i, 1, comboBox);
+ m_ui.tableWidget->setItem(i, 2, nameItem);
+ m_ui.tableWidget->setItem(i, 3, hotkeyItem);
- ActionItem *item = new ActionItem(settings.value(QString("name_%1").arg(i), "Action").toString());
- item->setPattern(settings.value(QString("pattern_%1").arg(i)).toString());
- item->setDestination(settings.value(QString("destination_%1").arg(i)).toString());
-
- m_ui.tableWidget->setCellWidget (i, 0, checkBox);
- m_ui.tableWidget->setCellWidget (i, 1, comboBox);
- m_ui.tableWidget->setItem (i, 2, item);
- QTableWidgetItem *item2 = new QTableWidgetItem();
- item2->setText(settings.value(QString("hotkey_%1").arg(i)).toString());
- m_ui.tableWidget->setItem (i, 3, item2);
- m_ui.tableWidget->item (i, 3)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ ++i;
}
settings.endGroup();
- connect (m_ui.tableWidget, SIGNAL(currentCellChanged(int,int,int,int)),
- SLOT(updateLineEdits()));
+ connect(m_ui.tableWidget, SIGNAL(currentCellChanged(int,int,int,int)), SLOT(updateLineEdits()));
updateLineEdits();
createMenus();
}
@@ -89,31 +82,30 @@ void SettingsDialog::accept()
{
QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
settings.beginGroup("FileOps");
- //remove unused keys
- int count = settings.value("count", 0).toInt();
- for (int i = m_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));
- }
+ //remove all previous keys
+ settings.remove(QString());
//save actions
- settings.setValue("count", m_ui.tableWidget->rowCount());
- for (int i = 0; i < m_ui.tableWidget->rowCount(); ++i)
+ for(int i = 0; i < m_ui.tableWidget->rowCount(); ++i)
{
- QCheckBox *checkBox = qobject_cast<QCheckBox *>(m_ui.tableWidget->cellWidget (i, 0));
- settings.setValue (QString("enabled_%1").arg(i), checkBox->isChecked());
+ QTableWidgetItem *item = m_ui.tableWidget->item(i, 2);
+ if(item->text().isEmpty())
+ continue;
+
+ settings.setValue(QString("name_%1").arg(i), item->text());
+ settings.setValue(QString("destination_%1").arg(i), item->data(DestionationRole).toString());
+
+ QCheckBox *checkBox = qobject_cast<QCheckBox *>(m_ui.tableWidget->cellWidget(i, 0));
+ settings.setValue(QString("enabled_%1").arg(i), checkBox->isChecked());
+
+ QComboBox *comboBox = qobject_cast<QComboBox *>(m_ui.tableWidget->cellWidget(i, 1));
+ settings.setValue(QString("action_%1").arg(i), comboBox->itemData(comboBox->currentIndex()));
- QComboBox *comboBox = qobject_cast<QComboBox *>(m_ui.tableWidget->cellWidget (i, 1));
- settings.setValue (QString("action_%1").arg(i), comboBox->itemData (comboBox->currentIndex()));
+ if(comboBox->itemData(comboBox->currentIndex()) == FileOps::EXECUTE)
+ settings.setValue(QString("command_%1").arg(i), item->data(CommandRole).toString());
+ else
+ settings.setValue(QString("pattern_%1").arg(i), item->data(PatternRole).toString());
- ActionItem *item = dynamic_cast<ActionItem *>(m_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.setValue (QString("hotkey_%1").arg(i), m_ui.tableWidget->item(i,3)->text());
+ settings.setValue(QString("hotkey_%1").arg(i), m_ui.tableWidget->item(i, 3)->text());
}
settings.endGroup();
QDialog::accept();
@@ -121,96 +113,88 @@ void SettingsDialog::accept()
void SettingsDialog::on_newButton_clicked()
{
- int row = m_ui.tableWidget->rowCount ();
- m_ui.tableWidget->insertRow (row);
+ int row = m_ui.tableWidget->rowCount();
+ m_ui.tableWidget->insertRow(row);
QCheckBox *checkBox = new QCheckBox;
- checkBox->setFocusPolicy (Qt::NoFocus);
+ checkBox->setFocusPolicy(Qt::NoFocus);
checkBox->setChecked(true);
- QComboBox *comboBox = new QComboBox;
- comboBox->addItem (tr("Copy"), FileOps::COPY);
- comboBox->addItem (tr("Rename"), FileOps::RENAME);
- comboBox->addItem (tr("Move"), FileOps::MOVE);
- comboBox->addItem (tr("Remove"), FileOps::REMOVE);
- comboBox->setFocusPolicy (Qt::NoFocus);
+ QComboBox *comboBox = createComboBox();
- ActionItem *item = new ActionItem(tr("New action"));
- item->setDestination(QStandardPaths::writableLocation(QStandardPaths::MusicLocation));
- item->setPattern("%p - %t");
+ QTableWidgetItem *nameItem = new QTableWidgetItem(tr("New action"));
+ nameItem->setData(DestionationRole, QStandardPaths::writableLocation(QStandardPaths::MusicLocation));
+ nameItem->setData(PatternRole, "%p - %t");
connect(comboBox, SIGNAL(activated(int)), SLOT(updateLineEdits()));
- m_ui.tableWidget->setCellWidget (row, 0, checkBox);
- m_ui.tableWidget->setCellWidget (row, 1, comboBox);
- m_ui.tableWidget->setItem (row, 2, item);
- QTableWidgetItem *item2 = new QTableWidgetItem();
- m_ui.tableWidget->setItem (row, 3, item2);
- m_ui.tableWidget->item (row, 3)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ m_ui.tableWidget->setCellWidget(row, 0, checkBox);
+ m_ui.tableWidget->setCellWidget(row, 1, comboBox);
+ m_ui.tableWidget->setItem(row, 2, nameItem);
+ QTableWidgetItem *hotkeyItem = new QTableWidgetItem();
+ m_ui.tableWidget->setItem(row, 3, hotkeyItem);
+ m_ui.tableWidget->item(row, 3)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
}
void SettingsDialog::on_deleteButton_clicked()
{
- if (m_ui.tableWidget->currentRow () >= 0)
- m_ui.tableWidget->removeRow (m_ui.tableWidget->currentRow ());
+ if(m_ui.tableWidget->currentRow() >= 0)
+ m_ui.tableWidget->removeRow(m_ui.tableWidget->currentRow());
}
void SettingsDialog::updateLineEdits()
{
- if (m_ui.tableWidget->currentRow () >= 0)
+ m_ui.destinationEdit->setVisible(false);
+ m_ui.destinationLabel->setVisible(false);
+ m_ui.destButton->setVisible(false);
+ m_ui.patternEdit->setVisible(false);
+ m_ui.patternLabel->setVisible(false);
+ m_ui.patternButton->setVisible(false);
+ m_ui.patternLabel->setText(tr("File name pattern:"));
+
+ if(m_ui.tableWidget->currentRow() >= 0)
{
- ActionItem *item = dynamic_cast<ActionItem *>(m_ui.tableWidget->item(m_ui.tableWidget->currentRow (), 2));
- m_ui.destinationEdit->setText(item->destination());
- m_ui.patternEdit->setText(item->pattern());
+ QTableWidgetItem *nameItem = m_ui.tableWidget->item(m_ui.tableWidget->currentRow(), 2);
+ m_ui.destinationEdit->setText(nameItem->data(DestionationRole).toString());
+ m_ui.patternEdit->setText(nameItem->data(PatternRole).toString());
- QComboBox *comboBox = qobject_cast<QComboBox *>
- (m_ui.tableWidget->cellWidget (m_ui.tableWidget->currentRow (), 1));
- int action = comboBox->itemData (comboBox->currentIndex()).toInt();
+ QComboBox *comboBox = qobject_cast<QComboBox *>(m_ui.tableWidget->cellWidget(m_ui.tableWidget->currentRow(), 1));
+ int action = comboBox->itemData(comboBox->currentIndex()).toInt();
if(action == FileOps::COPY || action == FileOps::MOVE)
{
- m_ui.destinationEdit->setEnabled(true);
- m_ui.patternEdit->setEnabled(true);
- m_ui.destButton->setEnabled(true);
- m_ui.patternButton->setEnabled(true);
- }
- else if(action == FileOps::RENAME)
- {
- m_ui.destinationEdit->setEnabled(false);
- m_ui.patternEdit->setEnabled(true);
- m_ui.destButton->setEnabled(false);
- m_ui.patternButton->setEnabled(true);
+ m_ui.destinationEdit->setVisible(true);
+ m_ui.destinationLabel->setVisible(true);
+ m_ui.destButton->setVisible(true);
+ m_ui.patternEdit->setVisible(true);
+ m_ui.patternLabel->setVisible(true);
+ m_ui.patternButton->setVisible(true);
}
- else if(action == FileOps::REMOVE)
+ else if(action == FileOps::RENAME || action == FileOps::EXECUTE)
{
- m_ui.destinationEdit->setEnabled(false);
- m_ui.patternEdit->setEnabled(false);
- m_ui.destButton->setEnabled(false);
- m_ui.patternButton->setEnabled(false);
+ m_ui.patternEdit->setVisible(true);
+ m_ui.patternLabel->setVisible(true);
+ m_ui.patternButton->setVisible(true);
+ if(action == FileOps::EXECUTE)
+ m_ui.patternLabel->setText(tr("Command:"));
}
}
- else
- {
- m_ui.destinationEdit->setEnabled(false);
- m_ui.patternEdit->setEnabled(false);
- m_ui.destButton->setEnabled(false);
- m_ui.patternButton->setEnabled(false);
- }
}
void SettingsDialog::on_destinationEdit_textChanged(QString dest)
{
- if (m_ui.tableWidget->currentRow () >= 0)
+ if(m_ui.tableWidget->currentRow() >= 0)
{
- ActionItem *item = dynamic_cast<ActionItem *>(m_ui.tableWidget->item(m_ui.tableWidget->currentRow (), 2));
- item->setDestination(dest);
+ QTableWidgetItem *item = m_ui.tableWidget->item(m_ui.tableWidget->currentRow(), 2);
+ item->setData(DestionationRole, dest);
}
}
void SettingsDialog::on_patternEdit_textChanged(QString pattern)
{
- if (m_ui.tableWidget->currentRow () >= 0)
+ if(m_ui.tableWidget->currentRow() >= 0)
{
- ActionItem *item = dynamic_cast<ActionItem *>(m_ui.tableWidget->item(m_ui.tableWidget->currentRow (), 2));
- item->setPattern(pattern);
+ QTableWidgetItem *item = m_ui.tableWidget->item(m_ui.tableWidget->currentRow(), 2);
+ item->setData(PatternRole, pattern);
+ item->setData(CommandRole, pattern);
}
}
@@ -222,6 +206,18 @@ void SettingsDialog::createMenus()
connect(menu, SIGNAL(patternSelected(QString)), SLOT(addTitleString(QString)));
}
+QComboBox *SettingsDialog::createComboBox()
+{
+ QComboBox *comboBox = new QComboBox;
+ comboBox->addItem(tr("Copy"), FileOps::COPY);
+ comboBox->addItem(tr("Rename"), FileOps::RENAME);
+ comboBox->addItem(tr("Move"), FileOps::MOVE);
+ comboBox->addItem(tr("Remove"), FileOps::REMOVE);
+ comboBox->addItem(tr("Execute"), FileOps::EXECUTE);
+ comboBox->setFocusPolicy(Qt::NoFocus);
+ return comboBox;
+}
+
void SettingsDialog::addTitleString(const QString &str)
{
m_ui.patternEdit->insert(str);
@@ -229,16 +225,15 @@ void SettingsDialog::addTitleString(const QString &str)
void SettingsDialog::on_destButton_clicked()
{
- QString dir = FileDialog::getExistingDirectory(this, tr("Choose a directory"),
- m_ui.destinationEdit->text());
+ QString dir = FileDialog::getExistingDirectory(this, tr("Choose a directory"), m_ui.destinationEdit->text());
if(!dir.isEmpty())
m_ui.destinationEdit->setText(dir);
}
-void SettingsDialog::on_tableWidget_itemDoubleClicked (QTableWidgetItem *item)
+void SettingsDialog::on_tableWidget_itemDoubleClicked(QTableWidgetItem *item)
{
HotkeyDialog *dialog = new HotkeyDialog(item->text(), this);
- if (m_ui.tableWidget->column (item) == 3 && dialog->exec() == QDialog::Accepted)
+ if(m_ui.tableWidget->column(item) == 3 && dialog->exec() == QDialog::Accepted)
item->setText(dialog->key());
dialog->deleteLater();
}
diff --git a/src/plugins/General/fileops/settingsdialog.h b/src/plugins/General/fileops/settingsdialog.h
index fe53f891d..33c97b9ae 100644
--- a/src/plugins/General/fileops/settingsdialog.h
+++ b/src/plugins/General/fileops/settingsdialog.h
@@ -26,7 +26,7 @@
/**
@author Ilya Kotov <forkotov02@ya.ru>
*/
-class ActionItem;
+class QComboBox;
class SettingsDialog : public QDialog
{
@@ -52,37 +52,16 @@ private slots:
private:
void createMenus();
- Ui::SettingsDialog m_ui;
-};
-
-class ActionItem: public QTableWidgetItem
-{
-public:
- explicit ActionItem (const QString &text): QTableWidgetItem(text){}
-
- inline const QString &pattern() const
- {
- return m_pattern;
- }
+ QComboBox *createComboBox();
- inline const QString &destination() const
- {
- return m_destination;
- }
-
- inline void setPattern(const QString &pattern)
- {
- m_pattern = pattern;
- }
+ Ui::SettingsDialog m_ui;
- inline void setDestination(const QString &dest)
+ enum DataTypeRole
{
- m_destination = dest;
- }
-
-private:
- QString m_pattern, m_destination;
+ PatternRole = Qt::UserRole + 1,
+ DestionationRole,
+ CommandRole
+ };
};
-
#endif
diff --git a/src/plugins/General/fileops/settingsdialog.ui b/src/plugins/General/fileops/settingsdialog.ui
index 86e6245f0..d1bc5c0ff 100644
--- a/src/plugins/General/fileops/settingsdialog.ui
+++ b/src/plugins/General/fileops/settingsdialog.ui
@@ -43,6 +43,9 @@
<property name="cornerButtonEnabled">
<bool>true</bool>
</property>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
<column>
<property name="text">
<string>Enabled</string>
@@ -78,6 +81,10 @@
<property name="text">
<string>Add</string>
</property>
+ <property name="icon">
+ <iconset theme="list-add">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
</widget>
</item>
<item>
@@ -91,6 +98,10 @@
<property name="text">
<string>Remove</string>
</property>
+ <property name="icon">
+ <iconset theme="list-remove">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
</widget>
</item>
<item>
@@ -111,7 +122,7 @@
<item row="2" column="0" colspan="2">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
- <widget class="QLabel" name="label">
+ <widget class="QLabel" name="destinationLabel">
<property name="text">
<string>Destination:</string>
</property>
@@ -128,7 +139,7 @@
</widget>
</item>
<item row="1" column="0">
- <widget class="QLabel" name="label_2">
+ <widget class="QLabel" name="patternLabel">
<property name="text">
<string>File name pattern:</string>
</property>