aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/fileops/settingsdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/General/fileops/settingsdialog.cpp')
-rw-r--r--src/plugins/General/fileops/settingsdialog.cpp219
1 files changed, 107 insertions, 112 deletions
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();
}