+ clearSelection();
+ if (selection.isEmpty()) {
+ return;
+ }
+ const KUrl& baseUrl = url();
+ KUrl url;
+ QItemSelection new_selection;
+ foreach(const KFileItem& item, selection) {
+ url = item.url().upUrl();
+ if (baseUrl.equals(url, KUrl::CompareWithoutTrailingSlash)) {
+ QModelIndex index = m_proxyModel->mapFromSource(m_dolphinModel->indexForItem(item));
+ new_selection.select(index, index);
+ }
+ }
+ itemView()->selectionModel()->select(new_selection,
+ QItemSelectionModel::ClearAndSelect
+ | QItemSelectionModel::Current);
+}
+
+void DolphinView::renameSelectedItems()
+{
+ KFileItemList items = selectedItems();
+ const int itemCount = items.count();
+ if (itemCount < 1) {
+ return;
+ }
+
+ if (itemCount > 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 KIO::FileUndoManager/KonqOperations
+ // as one operation instead of n rename operations like it is done now...
+ Q_ASSERT(newName.contains('#'));
+
+ // currently the items are sorted by the selection order, resort
+ // them by the file name
+ qSort(items.begin(), items.end(), lessThan);
+
+ // iterate through all selected items and rename them...
+ int index = 1;
+ foreach (const KFileItem& item, items) {
+ const KUrl& oldUrl = item.url();
+ QString number;
+ number.setNum(index++);
+
+ QString name = newName;
+ name.replace('#', number);
+
+ if (oldUrl.fileName() != name) {
+ KUrl newUrl = oldUrl;
+ newUrl.setFileName(name);
+ KonqOperations::rename(this, oldUrl, newUrl);
+ }
+ }
+ }
+ } else if (DolphinSettings::instance().generalSettings()->renameInline()) {
+ Q_ASSERT(itemCount == 1);
+
+ if (isColumnViewActive()) {
+ m_columnView->editItem(items.first());
+ } else {
+ const QModelIndex dirIndex = m_dolphinModel->indexForItem(items.first());
+ const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex);
+ itemView()->edit(proxyIndex);
+ }
+ } else {
+ Q_ASSERT(itemCount == 1);
+
+ 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);
+ }
+ }