diff options
| author | David Faure <[email protected]> | 2007-11-15 14:59:02 +0000 |
|---|---|---|
| committer | David Faure <[email protected]> | 2007-11-15 14:59:02 +0000 |
| commit | 53d65e6392d3b03d7709385df5006d5d34c22852 (patch) | |
| tree | 8835b13baca4e53540c3f94cc1f4472c77c4567c /src/dolphinview.cpp | |
| parent | 205bf2035d30517e781271bbcae8e4c102d71871 (diff) | |
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
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" |
