#include "dolphinview.h"
-#include <assert.h>
-
#include <QApplication>
#include <QClipboard>
#include <QDropEvent>
void DolphinView::renameSelectedItems()
{
+ DolphinView* view = mainWindow()->activeView();
const KUrl::List urls = selectedUrls();
if (urls.count() > 1) {
// More than one item has been selected for renaming. Open
return;
}
- DolphinView* view = mainWindow()->activeView();
const QString& newName = dialog.newName();
if (newName.isEmpty()) {
- view->statusBar()->setMessage(i18n("The new item name is invalid."),
+ view->statusBar()->setMessage(dialog.errorString(),
DolphinStatusBar::Error);
}
else {
// TODO: check how this can be integrated into KonqUndoManager/KonqOperations
-
- //UndoManager& undoMan = UndoManager::instance();
- //undoMan.beginMacro();
-
- assert(newName.contains('#'));
-
- const int urlsCount = urls.count();
+ // 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('#');
- assert(replaceIndex >= 0);
- for (int i = 0; i < urlsCount; ++i) {
- const KUrl& source = urls[i];
+ Q_ASSERT(replaceIndex >= 0);
+ int index = 1;
+
+ KUrl::List::const_iterator it = urls.begin();
+ KUrl::List::const_iterator end = urls.end();
+ while (it != end) {
+ const KUrl& oldUrl = *it;
QString number;
- number.setNum(i + 1);
+ number.setNum(index++);
QString name(newName);
name.replace(replaceIndex, 1, number);
- if (source.fileName() != name) {
- KUrl dest(source.upUrl());
- dest.addPath(name);
-
- const bool destExists = KIO::NetAccess::exists(dest, false, view);
- if (destExists) {
- view->statusBar()->setMessage(i18n("Renaming failed (item '%1' already exists).",name),
- DolphinStatusBar::Error);
- break;
- }
- else if (KIO::NetAccess::file_move(source, dest)) {
- // TODO: From the users point of view he executed one 'rename n files' operation,
- // but internally we store it as n 'rename 1 file' operations for the undo mechanism.
- //DolphinCommand command(DolphinCommand::Rename, source, dest);
- //undoMan.addCommand(command);
- }
+ if (oldUrl.fileName() != name) {
+ KUrl newUrl(oldUrl.upUrl());
+ newUrl.addPath(name);
+ m_mainWindow->rename(oldUrl, newUrl);
}
+ ++it;
}
-
- //undoMan.endMacro();
}
}
else {
// Only one item has been selected for renaming. Use the custom
// renaming mechanism from the views.
- assert(urls.count() == 1);
- // TODO:
- /*if (m_mode == DetailsView) {
- Q3ListViewItem* item = m_iconsView->firstChild();
- while (item != 0) {
- if (item->isSelected()) {
- m_iconsView->rename(item, DolphinDetailsView::NameColumn);
- break;
- }
- item = item->nextSibling();
- }
+ Q_ASSERT(urls.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(urls);
+ if (dialog.exec() == QDialog::Rejected) {
+ return;
+ }
+
+ const QString& newName = dialog.newName();
+ if (newName.isEmpty()) {
+ view->statusBar()->setMessage(dialog.errorString(),
+ DolphinStatusBar::Error);
}
else {
- KFileIconViewItem* item = static_cast<KFileIconViewItem*>(m_iconsView->firstItem());
- while (item != 0) {
- if (item->isSelected()) {
- item->rename();
- break;
- }
- item = static_cast<KFileIconViewItem*>(item->nextItem());
- }
- }*/
+ const KUrl& oldUrl = urls.first();
+ KUrl newUrl = oldUrl.upUrl();
+ newUrl.addPath(newName);
+ m_mainWindow->rename(oldUrl, newUrl);
+ }
}
}
void DolphinView::showFilterBar(bool show)
{
- assert(m_filterBar != 0);
+ Q_ASSERT(m_filterBar != 0);
if (show) {
m_filterBar->show();
}
KFileItem* directory = 0;
if (isValidNameIndex(index)) {
KFileItem* item = fileItem(index);
- assert(item != 0);
+ Q_ASSERT(item != 0);
if (item->isDir()) {
// the URLs are dropped above a directory
directory = item;
m_topLayout->removeWidget(view);
view->close();
view->deleteLater();
+ view = 0;
m_iconsView = 0;
m_detailsView = 0;
m_fileItemDelegate = 0;
}
- assert(m_iconsView == 0);
- assert(m_detailsView == 0);
+ Q_ASSERT(m_iconsView == 0);
+ Q_ASSERT(m_detailsView == 0);
// ... and recreate it representing the current mode
switch (m_mode) {
break;
}
+ Q_ASSERT(view != 0);
m_fileItemDelegate = new KFileItemDelegate(view);
view->setItemDelegate(m_fileItemDelegate);