]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
Implement renaming in dolphinpart.
[dolphin.git] / src / dolphinview.cpp
index fabda169e252f7b8a283426102d5dbcb93ba7c7c..590a813a87d0e3ff7d111e08ca66204cf52b4085 100644 (file)
@@ -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"