diff options
Diffstat (limited to 'src/plugins/General/fileops/settingsdialog.cpp')
| -rw-r--r-- | src/plugins/General/fileops/settingsdialog.cpp | 219 |
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(); } |
