replacedialog.cpp (krename-4.0.9) | : | replacedialog.cpp (krename-4.90.90) | ||
---|---|---|---|---|
skipping to change at line 20 | skipping to change at line 20 | |||
* * | * * | |||
* This program is free software; you can redistribute it and/or modify * | * 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 * | * it under the terms of the GNU General Public License as published by * | |||
* the Free Software Foundation; either version 2 of the License, or * | * the Free Software Foundation; either version 2 of the License, or * | |||
* (at your option) any later version. * | * (at your option) any later version. * | |||
* * | * * | |||
***************************************************************************/ | ***************************************************************************/ | |||
#include "replacedialog.h" | #include "replacedialog.h" | |||
#include <QFileDialog> | ||||
#include <QTextStream> | ||||
#include <QMessageBox> | ||||
#include <QDomDocument> | ||||
#include <QDomElement> | ||||
#include <KLocalizedString> | ||||
#include <KMessageBox> | ||||
#include <iostream> | ||||
#include "ui_replaceitemdlg.h" | #include "ui_replaceitemdlg.h" | |||
#include "batchrenamer.h" | #include "batchrenamer.h" | |||
ReplaceDialog::ReplaceDialog( const QList<TReplaceItem> & items, QWidget* parent | ReplaceDialog::ReplaceDialog(const QList<TReplaceItem> &items, QWidget *parent) | |||
) | : QDialog(parent) | |||
: QDialog( parent ) | ||||
{ | { | |||
m_widget.setupUi( this ); | m_widget.setupUi(this); | |||
connect(m_widget.buttonBox, SIGNAL(accepted()), this, SLOT(accept())); | connect(m_widget.buttonBox, &QDialogButtonBox::accepted, | |||
connect(m_widget.buttonBox, SIGNAL(rejected()), this, SLOT(reject())); | this, &ReplaceDialog::accept); | |||
connect(m_widget.buttonBox, &QDialogButtonBox::rejected, | ||||
this, &ReplaceDialog::reject); | ||||
connect(m_widget.buttonAdd, &QPushButton::clicked, | ||||
this, &ReplaceDialog::slotAdd); | ||||
connect(m_widget.buttonRemove, &QPushButton::clicked, | ||||
this, &ReplaceDialog::slotRemove); | ||||
connect(m_widget.buttonEdit, &QPushButton::clicked, | ||||
this, &ReplaceDialog::slotEdit); | ||||
connect(m_widget.buttonLoadList, &QPushButton::clicked, | ||||
this, &ReplaceDialog::slotLoadList); | ||||
connect(m_widget.buttonSaveList, &QPushButton::clicked, | ||||
this, &ReplaceDialog::slotSaveList); | ||||
connect(m_widget.buttonAdd, SIGNAL(clicked(bool)), SLOT(slotAdd( | connect(m_widget.list, &QTableWidget::itemSelectionChanged, | |||
))); | this, &ReplaceDialog::slotEnableControls); | |||
connect(m_widget.buttonRemove, SIGNAL(clicked(bool)), SLOT(slotRemo | ||||
ve())); | ||||
connect(m_widget.buttonEdit, SIGNAL(clicked(bool)), SLOT(slotEdit | ||||
())); | ||||
connect(m_widget.list, SIGNAL(itemSelectionChanged()), SLOT(slotEnab | ||||
leControls())); | ||||
this->slotEnableControls(); | this->slotEnableControls(); | |||
QList<TReplaceItem>::const_iterator it = items.begin(); | QList<TReplaceItem>::const_iterator it = items.begin(); | |||
while( it != items.end() ) | while (it != items.end()) { | |||
{ | ||||
int row = m_widget.list->rowCount(); | int row = m_widget.list->rowCount(); | |||
m_widget.list->setRowCount( row + 1 ); | m_widget.list->setRowCount(row + 1); | |||
m_widget.list->setItem( row, 0, this->createTableItem( "", true ) ); | m_widget.list->setItem(row, 0, this->createTableItem("", true)); | |||
m_widget.list->item( row, 0 )->setCheckState( (*it).reg ? Qt::Checked : | m_widget.list->item(row, 0)->setCheckState((*it).reg ? Qt::Checked : Qt: | |||
Qt::Unchecked ); | :Unchecked); | |||
m_widget.list->setItem( row, 1, this->createTableItem( (*it).find ) ); | m_widget.list->setItem(row, 1, this->createTableItem((*it).find)); | |||
m_widget.list->setItem( row, 2, this->createTableItem( (*it).replace ) ) | m_widget.list->setItem(row, 2, this->createTableItem((*it).replace)); | |||
; | m_widget.list->setItem(row, 3, this->createTableItem("", true)); | |||
m_widget.list->setItem( row, 3, this->createTableItem( "", true ) ); | m_widget.list->item(row, 3)->setCheckState((*it).doProcessTokens ? Qt::C | |||
m_widget.list->item( row, 3 )->setCheckState( (*it).doProcessTokens ? Qt | hecked : Qt::Unchecked); | |||
::Checked : Qt::Unchecked ); | ||||
++it; | ++it; | |||
} | } | |||
} | } | |||
void ReplaceDialog::slotSaveList() | ||||
{ | ||||
QTableWidget *table = m_widget.list; | ||||
QString fileName = QFileDialog::getSaveFileName(this, i18n("Save Find & Repl | ||||
ace Settings as:"), | ||||
QDir::currentPath(), i18n("KRename Find & Replace Setting | ||||
s XML (*.xml)")); | ||||
if (fileName.isEmpty()) { | ||||
return; | ||||
} | ||||
QFile f(fileName); | ||||
if (!f.open(QIODevice::WriteOnly | QIODevice::Text)) { | ||||
KMessageBox::sorry(this, i18n("Failed to save the Find & Replace Setting | ||||
s File.")); | ||||
return; | ||||
} | ||||
QTextStream data(&f); | ||||
QDomDocument xmlDocument("KRename"); | ||||
QDomElement root = xmlDocument.createElement("KRename"); | ||||
root.setAttribute("version", "1.0"); | ||||
QDomElement frElement = xmlDocument.createElement("FindReplaceList"); | ||||
frElement.setAttribute("rows", table->rowCount()); | ||||
root.appendChild(frElement); | ||||
for (int r = 0; r < table->rowCount(); ++r) { | ||||
QDomElement RegExpElement = xmlDocument.createElement("RegularExpression | ||||
"); | ||||
QDomElement FindElement = xmlDocument.createElement("Find"); | ||||
QDomElement ReplaceWithElement = xmlDocument.createElement("ReplaceWith" | ||||
); | ||||
QDomElement ProcessTokensElement = xmlDocument.createElement("ProcessTok | ||||
ens"); | ||||
QDomElement RowElement = xmlDocument.createElement("Row"); | ||||
RowElement.setAttribute("num", r); | ||||
int RegExpCheck = static_cast<int>(table->item(r, 0)->checkState()); | ||||
QString RegExpCheckStr = QString::number(RegExpCheck, 10); | ||||
RegExpElement.appendChild(xmlDocument.createTextNode(RegExpCheckStr)); | ||||
RowElement.appendChild(RegExpElement); | ||||
FindElement.appendChild(xmlDocument.createTextNode(table->item(r, 1)->da | ||||
ta(Qt::EditRole).toString())); | ||||
RowElement.appendChild(FindElement); | ||||
ReplaceWithElement.appendChild(xmlDocument.createTextNode(table->item(r, | ||||
2)->data(Qt::EditRole).toString())); | ||||
RowElement.appendChild(ReplaceWithElement); | ||||
int ProcessTokensCheck = static_cast<int>(table->item(r, 3)->checkState( | ||||
)); | ||||
QString ProcessTokensCheckStr = QString::number(ProcessTokensCheck, 10); | ||||
ProcessTokensElement.appendChild(xmlDocument.createTextNode(ProcessToken | ||||
sCheckStr)); | ||||
RowElement.appendChild(ProcessTokensElement); | ||||
frElement.appendChild(RowElement); | ||||
} | ||||
xmlDocument.appendChild(root); | ||||
data << xmlDocument.toString(-1); | ||||
f.close(); | ||||
} | ||||
void ReplaceDialog::slotLoadList() | ||||
{ | ||||
QTableWidget *table = m_widget.list; | ||||
QString fileName = QFileDialog::getOpenFileName(this, i18n("Save Find and R | ||||
eplace Settings File"), | ||||
QDir::currentPath(), | ||||
i18n("KRename Find and Replace Settings XML (*.xml)")); | ||||
if (fileName.isEmpty()) { | ||||
return; | ||||
} | ||||
//open file | ||||
QFile f(fileName); | ||||
if (!f.open(QFile::ReadOnly | QFile::Text)) { | ||||
KMessageBox::sorry(this, | ||||
i18n("Failed to open the Find and Replace Settings Fi | ||||
le. Cannot read file %1:\n%2.", fileName, f.errorString())); | ||||
return; | ||||
} | ||||
//load XML | ||||
QIODevice *device = &f; | ||||
QDomDocument xmlDocument; | ||||
QString errorStr; | ||||
int errorLine; | ||||
int errorColumn; | ||||
if (!xmlDocument.setContent(device, true, &errorStr, &errorLine, &errorColum | ||||
n)) { | ||||
KMessageBox::information(window(), i18n("KRename Find and Replace Settin | ||||
gs XML File"), | ||||
i18n("Parse error at line %1, column %2:\n%3", | ||||
errorLine, errorColumn, errorStr)); | ||||
return; | ||||
} | ||||
QDomElement root = xmlDocument.documentElement(); | ||||
// check if valid | ||||
if (root.tagName() != "KRename") { | ||||
KMessageBox::information(window(), | ||||
i18n("The file is not a KRename XML file."), | ||||
i18n("KRename Find and Replace Settings XML Fil | ||||
e")); | ||||
return; | ||||
} else if (root.hasAttribute("version") && root.attribute("version") != "1.0 | ||||
") { | ||||
KMessageBox::information(window(), | ||||
i18n("The file is not an KRename XML version 1. | ||||
0 file."), | ||||
i18n("KRename Find and Replace Settings XML Fil | ||||
e")); | ||||
return; | ||||
} | ||||
//parse XML file | ||||
QDomElement frElement = root.firstChild().toElement(); | ||||
int Rows; | ||||
bool ok; | ||||
Rows = frElement.attribute("rows").toInt(&ok, 10); | ||||
table->setRowCount(Rows); | ||||
int rc; | ||||
rc = 0; | ||||
QDomElement RowElement = frElement.firstChildElement("Row"); | ||||
while (!RowElement.isNull()) { | ||||
QString RegExpCheckStr = RowElement.firstChildElement("RegularExpression | ||||
").text(); | ||||
int RegExpCheck = RegExpCheckStr.toInt(); | ||||
switch (RegExpCheck) { | ||||
case 0 : | ||||
table->setItem(rc, 0, this->createTableItem("", true)); | ||||
table->item(rc, 0)->setCheckState(Qt::Unchecked); | ||||
break; | ||||
case 1 : | ||||
table->setItem(rc, 0, this->createTableItem("", true)); | ||||
table->item(rc, 0)->setCheckState(Qt::PartiallyChecked); | ||||
break; | ||||
case 2 : | ||||
table->setItem(rc, 0, this->createTableItem("", true)); | ||||
table->item(rc, 0)->setCheckState(Qt::Checked); | ||||
break; | ||||
default : | ||||
break; | ||||
} | ||||
table->setItem(rc, 1, this->createTableItem(RowElement.firstChildElement | ||||
("Find").text())); | ||||
table->setItem(rc, 2, this->createTableItem(RowElement.firstChildElement | ||||
("ReplaceWith").text())); | ||||
QString ProcessTokensCheckStr = RowElement.firstChildElement("ProcessTok | ||||
ens").text(); | ||||
int ProcessTokensCheck = ProcessTokensCheckStr.toInt(); | ||||
switch (ProcessTokensCheck) { | ||||
case 0 : | ||||
table->setItem(rc, 3, this->createTableItem("", true)); | ||||
table->item(rc, 3)->setCheckState(Qt::Unchecked); | ||||
break; | ||||
case 1 : | ||||
table->setItem(rc, 3, this->createTableItem("", true)); | ||||
table->item(rc, 3)->setCheckState(Qt::PartiallyChecked); | ||||
break; | ||||
case 2 : | ||||
table->setItem(rc, 3, this->createTableItem("", true)); | ||||
table->item(rc, 3)->setCheckState(Qt::Checked); | ||||
break; | ||||
default : | ||||
break; | ||||
} | ||||
RowElement = RowElement.nextSiblingElement("Row"); | ||||
rc = rc + 1; | ||||
} | ||||
if (rc != Rows) { | ||||
KMessageBox::information(window(), | ||||
i18n("Problem with loading KRename XML file."), | ||||
i18n("KRename Find and Replace Settings XML Fil | ||||
e")); | ||||
return; | ||||
} | ||||
} | ||||
void ReplaceDialog::slotAdd() | void ReplaceDialog::slotAdd() | |||
{ | { | |||
QDialog dlg; | QDialog dlg; | |||
Ui::ReplaceItemDlg replace; | Ui::ReplaceItemDlg replace; | |||
replace.setupUi( &dlg ); | replace.setupUi(&dlg); | |||
if( dlg.exec() == QDialog::Accepted ) | if (dlg.exec() == QDialog::Accepted) { | |||
{ | ||||
int row = m_widget.list->rowCount(); | int row = m_widget.list->rowCount(); | |||
m_widget.list->setRowCount( row + 1 ); | m_widget.list->setRowCount(row + 1); | |||
m_widget.list->setItem( row, 0, this->createTableItem( "", true ) ); | m_widget.list->setItem(row, 0, this->createTableItem("", true)); | |||
m_widget.list->item( row, 0 )->setCheckState( replace.checkRegular->isCh | m_widget.list->item(row, 0)->setCheckState(replace.checkRegular->isCheck | |||
ecked() ? Qt::Checked : Qt::Unchecked ); | ed() ? Qt::Checked : Qt::Unchecked); | |||
m_widget.list->setItem( row, 1, this->createTableItem( replace.lineFind- | m_widget.list->setItem(row, 1, this->createTableItem(replace.lineFind->t | |||
>text() ) ); | ext())); | |||
m_widget.list->setItem( row, 2, this->createTableItem( replace.lineRepla | m_widget.list->setItem(row, 2, this->createTableItem(replace.lineReplace | |||
ce->text() ) ); | ->text())); | |||
m_widget.list->setItem( row, 3, this->createTableItem( "", true ) ); | m_widget.list->setItem(row, 3, this->createTableItem("", true)); | |||
m_widget.list->item( row, 3 )->setCheckState( replace.checkProcess->isCh | m_widget.list->item(row, 3)->setCheckState(replace.checkProcess->isCheck | |||
ecked() ? Qt::Checked : Qt::Unchecked ); | ed() ? Qt::Checked : Qt::Unchecked); | |||
} | } | |||
int row = m_widget.list->rowCount(); | ||||
m_widget.buttonSaveList->setEnabled(row); | ||||
} | } | |||
void ReplaceDialog::slotEdit() | void ReplaceDialog::slotEdit() | |||
{ | { | |||
QDialog dlg; | QDialog dlg; | |||
Ui::ReplaceItemDlg replace; | Ui::ReplaceItemDlg replace; | |||
replace.setupUi( &dlg ); | replace.setupUi(&dlg); | |||
int row = m_widget.list->currentRow(); | int row = m_widget.list->currentRow(); | |||
replace.checkRegular->setChecked( m_widget.list->item( row, 0 )->checkState( | replace.checkRegular->setChecked(m_widget.list->item(row, 0)->checkState() = | |||
) == Qt::Checked ); | = Qt::Checked); | |||
replace.lineFind->setText( m_widget.list->item( row, 1 )->text() ); | replace.lineFind->setText(m_widget.list->item(row, 1)->text()); | |||
replace.lineReplace->setText( m_widget.list->item( row, 2 )->text() ); | replace.lineReplace->setText(m_widget.list->item(row, 2)->text()); | |||
replace.checkProcess->setChecked( m_widget.list->item( row, 3 )->checkState( | replace.checkProcess->setChecked(m_widget.list->item(row, 3)->checkState() = | |||
) == Qt::Checked ); | = Qt::Checked); | |||
if( dlg.exec() == QDialog::Accepted ) | if (dlg.exec() == QDialog::Accepted) { | |||
{ | m_widget.list->setItem(row, 0, this->createTableItem("", true)); | |||
m_widget.list->setItem( row, 0, this->createTableItem( "", true ) ); | m_widget.list->item(row, 0)->setCheckState(replace.checkRegular->isCheck | |||
m_widget.list->item( row, 0 )->setCheckState( replace.checkRegular->isCh | ed() ? Qt::Checked : Qt::Unchecked); | |||
ecked() ? Qt::Checked : Qt::Unchecked ); | m_widget.list->setItem(row, 1, this->createTableItem(replace.lineFind->t | |||
m_widget.list->setItem( row, 1, this->createTableItem( replace.lineFind- | ext())); | |||
>text() ) ); | m_widget.list->setItem(row, 2, this->createTableItem(replace.lineReplace | |||
m_widget.list->setItem( row, 2, this->createTableItem( replace.lineRepla | ->text())); | |||
ce->text() ) ); | m_widget.list->setItem(row, 3, this->createTableItem("", true)); | |||
m_widget.list->setItem( row, 3, this->createTableItem( "", true ) ); | m_widget.list->item(row, 3)->setCheckState(replace.checkProcess->isCheck | |||
m_widget.list->item( row, 3 )->setCheckState( replace.checkProcess->isCh | ed() ? Qt::Checked : Qt::Unchecked); | |||
ecked() ? Qt::Checked : Qt::Unchecked ); | ||||
} | } | |||
} | } | |||
void ReplaceDialog::slotRemove() | void ReplaceDialog::slotRemove() | |||
{ | { | |||
m_widget.list->removeRow( m_widget.list->currentRow() ); | m_widget.list->removeRow(m_widget.list->currentRow()); | |||
int row = m_widget.list->rowCount(); | ||||
m_widget.buttonSaveList->setEnabled(row); | ||||
} | } | |||
void ReplaceDialog::slotEnableControls() | void ReplaceDialog::slotEnableControls() | |||
{ | { | |||
QList<QTableWidgetItem*> selected = m_widget.list->selectedItems(); | QList<QTableWidgetItem *> selected = m_widget.list->selectedItems(); | |||
m_widget.buttonEdit->setEnabled( selected.count() ); | m_widget.buttonEdit->setEnabled(selected.count()); | |||
m_widget.buttonRemove->setEnabled( selected.count() ); | m_widget.buttonRemove->setEnabled(selected.count()); | |||
m_widget.buttonLoadList->setEnabled(true); | ||||
int row = m_widget.list->rowCount(); | ||||
m_widget.buttonSaveList->setEnabled(row); | ||||
} | } | |||
QTableWidgetItem* ReplaceDialog::createTableItem( const QString & text, bool isC heckable ) | QTableWidgetItem *ReplaceDialog::createTableItem(const QString &text, bool isChe ckable) | |||
{ | { | |||
// TODO: Enclose text in quotes, but remove them before the item is edited b y the user directly in the table | // TODO: Enclose text in quotes, but remove them before the item is edited b y the user directly in the table | |||
// and add them again if the user presses enter. | // and add them again if the user presses enter. | |||
QString t = text; // text.isEmpty() ? QString::null : "\"" + text + "\""; | QString t = text; // text.isEmpty() ? QString::null : "\"" + text + "\""; | |||
QTableWidgetItem* item = new QTableWidgetItem( t ); | QTableWidgetItem *item = new QTableWidgetItem(t); | |||
if( isCheckable ) | if (isCheckable) { | |||
item->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUse | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUser | |||
rCheckable ); | Checkable); | |||
else | } else { | |||
item->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEn | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEna | |||
abled ); | bled); | |||
} | ||||
return item; | return item; | |||
} | } | |||
QList<TReplaceItem> ReplaceDialog::replaceList() const | QList<TReplaceItem> ReplaceDialog::replaceList() const | |||
{ | { | |||
QList<TReplaceItem> items; | QList<TReplaceItem> items; | |||
for( int i=0;i<m_widget.list->rowCount(); i++ ) | for (int i = 0; i < m_widget.list->rowCount(); i++) { | |||
{ | ||||
TReplaceItem item; | TReplaceItem item; | |||
item.reg = m_widget.list->item( i, 0 )->checkState() == Qt::Checked; | item.reg = m_widget.list->item(i, 0)->checkState() == Qt::Checked; | |||
item.find = m_widget.list->item( i, 1 )->text(); | item.find = m_widget.list->item(i, 1)->text(); | |||
item.replace = m_widget.list->item( i, 2 )->text(); | item.replace = m_widget.list->item(i, 2)->text(); | |||
item.doProcessTokens = m_widget.list->item( i, 3 )->checkState() == Qt:: | item.doProcessTokens = m_widget.list->item(i, 3)->checkState() == Qt::Ch | |||
Checked; | ecked; | |||
items.append( item ); | items.append(item); | |||
} | } | |||
return items; | return items; | |||
} | } | |||
#include "replacedialog.moc" | ||||
End of changes. 24 change blocks. | ||||
81 lines changed or deleted | 300 lines changed or added |