diff options
Diffstat (limited to 'src/dolphinview.cpp')
| -rw-r--r-- | src/dolphinview.cpp | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index fabda169e..590a813a8 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -36,7 +36,6 @@ #include <klocale.h> #include <kiconeffect.h> #include <kio/netaccess.h> -#include <kio/renamedialog.h> #include <kio/previewjob.h> #include <kmimetyperesolver.h> #include <konqmimedata.h> @@ -998,4 +997,73 @@ QString DolphinView::currentViewModeActionName() const return QString(); // can't happen } +void DolphinView::renameSelectedItems() +{ + const KFileItemList items = selectedItems(); + if (items.count() > 1) { + // More than one item has been selected for renaming. Open + // a rename dialog and rename all items afterwards. + RenameDialog dialog(this, items); + if (dialog.exec() == QDialog::Rejected) { + return; + } + + const QString newName = dialog.newName(); + if (newName.isEmpty()) { + emit errorMessage(dialog.errorString()); + } else { + // TODO: check how this can be integrated into KonqFileUndoManager/KonqOperations + // as one operation instead of n rename operations like it is done now... + Q_ASSERT(newName.contains('#')); + + // iterate through all selected items and rename them... + const int replaceIndex = newName.indexOf('#'); + Q_ASSERT(replaceIndex >= 0); + int index = 1; + + KFileItemList::const_iterator it = items.begin(); + const KFileItemList::const_iterator end = items.end(); + while (it != end) { + const KUrl& oldUrl = (*it).url(); + QString number; + number.setNum(index++); + + QString name(newName); + name.replace(replaceIndex, 1, number); + + if (oldUrl.fileName() != name) { + KUrl newUrl = oldUrl; + newUrl.setFileName(name); + KonqOperations::rename(this, oldUrl, newUrl); + emit renaming(); + } + ++it; + } + } + } else { + // Only one item has been selected for renaming. Use the custom + // renaming mechanism from the views. + Q_ASSERT(items.count() == 1); + + // TODO: Think about using KFileItemDelegate as soon as it supports editing. + // Currently the RenameDialog is used, but I'm not sure whether inline renaming + // is a benefit for the user at all -> let's wait for some input first... + RenameDialog dialog(this, items); + if (dialog.exec() == QDialog::Rejected) { + return; + } + + const QString& newName = dialog.newName(); + if (newName.isEmpty()) { + emit errorMessage(dialog.errorString()); + } else { + const KUrl& oldUrl = items.first().url(); + KUrl newUrl = oldUrl; + newUrl.setFileName(newName); + KonqOperations::rename(this, oldUrl, newUrl); + emit renaming(); + } + } +} + #include "dolphinview.moc" |
