From 53d65e6392d3b03d7709385df5006d5d34c22852 Mon Sep 17 00:00:00 2001 From: David Faure Date: Thu, 15 Nov 2007 14:59:02 +0000 Subject: Implement renaming in dolphinpart. No more rename action provided by konqueror, the part provides it now. Had to move a bit of code around in dolphin, as discussed with Peter. svn path=/trunk/KDE/kdebase/apps/; revision=737121 --- src/dolphinview.cpp | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'src/dolphinview.cpp') 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 #include #include -#include #include #include #include @@ -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" -- cgit v1.3