diff options
| author | Frank Reininghaus <[email protected]> | 2013-06-20 19:37:53 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2013-06-20 19:37:53 +0200 |
| commit | e8c4d19b7c8d1881dae2a28b1ff7202683648ceb (patch) | |
| tree | d7a6a0eb75d639cee820c9895c5e1c05f65bd67c /src/views | |
| parent | 584574e07d17b6ec2b82882c8c9869f5e8597e4e (diff) | |
Allow renaming multiple files without number if extensions are different
Normally, we only allow renaming multiple files if the new file name
contains a contiguous sequence of '#' placeholders, which are then
replaced by numbers.
However, if all extensions are different, we can also rename the files
without such a placeholder because the original extension is preserved
when renaming.
This had been possible some time ago already. That this "accidental
feature" was lost was a side effect of the fix for bug 318942.
BUG: 321234
FIXED-IN: 4.10.5
REVIEW: 111079
Diffstat (limited to 'src/views')
| -rw-r--r-- | src/views/renamedialog.cpp | 26 | ||||
| -rw-r--r-- | src/views/renamedialog.h | 1 |
2 files changed, 23 insertions, 4 deletions
diff --git a/src/views/renamedialog.cpp b/src/views/renamedialog.cpp index a16bb953c..abb37b897 100644 --- a/src/views/renamedialog.cpp +++ b/src/views/renamedialog.cpp @@ -45,6 +45,7 @@ RenameDialog::RenameDialog(QWidget *parent, const KFileItemList& items) : m_newName(), m_lineEdit(0), m_items(items), + m_allExtensionsDifferent(true), m_spinBox(0) { const QSize minSize = minimumSize(); @@ -107,6 +108,18 @@ RenameDialog::RenameDialog(QWidget *parent, const KFileItemList& items) : topLayout->addWidget(m_lineEdit); if (!m_renameOneItem) { + QSet<QString> extensions; + foreach (const KFileItem& item, m_items) { + const QString extension = KMimeType::extractKnownExtension(item.url().prettyUrl().toLower()); + + if (extensions.contains(extension)) { + m_allExtensionsDifferent = false; + break; + } + + extensions.insert(extension); + } + QLabel* infoLabel = new QLabel(i18nc("@info", "# will be replaced by ascending numbers starting with:"), page); m_spinBox = new KIntSpinBox(0, 10000, 1, 1, page, 10); @@ -146,11 +159,16 @@ void RenameDialog::slotTextChanged(const QString& newName) { bool enable = !newName.isEmpty() && (newName != QLatin1String("..")) && (newName != QLatin1String(".")); if (enable && !m_renameOneItem) { - // Assure that the new name contains exactly one # (or a connected sequence of #'s) const int count = newName.count(QLatin1Char('#')); - const int first = newName.indexOf(QLatin1Char('#')); - const int last = newName.lastIndexOf(QLatin1Char('#')); - enable = (last - first + 1 == count); + if (count == 0) { + // Renaming multiple files without '#' will only work if all extensions are different. + enable = m_allExtensionsDifferent; + } else { + // Assure that the new name contains exactly one # (or a connected sequence of #'s) + const int first = newName.indexOf(QLatin1Char('#')); + const int last = newName.lastIndexOf(QLatin1Char('#')); + enable = (last - first + 1 == count); + } } enableButtonOk(enable); } diff --git a/src/views/renamedialog.h b/src/views/renamedialog.h index 18dca3617..29ef8bdf1 100644 --- a/src/views/renamedialog.h +++ b/src/views/renamedialog.h @@ -64,6 +64,7 @@ private: QString m_newName; KLineEdit* m_lineEdit; KFileItemList m_items; + bool m_allExtensionsDifferent; KIntSpinBox* m_spinBox; }; |
