diff options
| author | Peter Penz <[email protected]> | 2007-03-13 17:31:54 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2007-03-13 17:31:54 +0000 |
| commit | d9ac44e08f8d2abe7104c20e308d05038e1896da (patch) | |
| tree | d3c900322778ec3bab372855d391f19d739563df | |
| parent | 75da26f8b0ad0835768c2d16fb7047e99f6b9705 (diff) | |
Allow renaming of items (note that currently the "rename multiple files" dialog is temporary used for this until KFileItemDelegate offers editing functionality).
svn path=/trunk/KDE/kdebase/apps/; revision=642219
| -rw-r--r-- | src/dolphinmainwindow.cpp | 65 | ||||
| -rw-r--r-- | src/dolphinmainwindow.h | 29 | ||||
| -rw-r--r-- | src/dolphinview.cpp | 58 | ||||
| -rw-r--r-- | src/renamedialog.cpp | 33 | ||||
| -rw-r--r-- | src/renamedialog.h | 21 |
5 files changed, 119 insertions, 87 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 561c235b7..5183f993d 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -22,8 +22,6 @@ #include <config-kmetadata.h>
#include "dolphinmainwindow.h"
-#include <assert.h>
-
#include "bookmarkssidebarpage.h"
#include "dolphinapplication.h"
#include "dolphinnewmenu.h"
@@ -58,6 +56,7 @@ #include <kmenu.h>
#include <kmessagebox.h>
#include <konqmimedata.h>
+#include <konq_operations.h>
#include <kpropertiesdialog.h>
#include <kprotocolinfo.h>
#include <ktoggleaction.h>
@@ -106,7 +105,7 @@ DolphinMainWindow::~DolphinMainWindow() void DolphinMainWindow::setActiveView(DolphinView* view)
{
- assert((view == m_view[PrimaryIdx]) || (view == m_view[SecondaryIdx]));
+ Q_ASSERT((view == m_view[PrimaryIdx]) || (view == m_view[SecondaryIdx]));
if (m_activeView == view) {
return;
}
@@ -203,6 +202,12 @@ void DolphinMainWindow::dropUrls(const KUrl::List& urls, }
}
+void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl)
+{
+ KonqOperations::rename(this, oldUrl, newUrl);
+ m_undoCommandTypes.append(KonqUndoManager::RENAME);
+}
+
void DolphinMainWindow::refreshViews()
{
const bool split = DolphinSettings::instance().generalSettings()->splitView();
@@ -232,7 +237,7 @@ void DolphinMainWindow::refreshViews() }
m_activeView = isPrimaryViewActive ? m_view[PrimaryIdx] : m_view[SecondaryIdx];
- assert(m_activeView != 0);
+ Q_ASSERT(m_activeView != 0);
updateViewActions();
emit activeViewChanged();
@@ -336,7 +341,7 @@ void DolphinMainWindow::slotSelectionChanged() {
updateEditActions();
- assert(m_view[PrimaryIdx] != 0);
+ Q_ASSERT(m_view[PrimaryIdx] != 0);
int selectedUrlsCount = m_view[PrimaryIdx]->selectedUrls().count();
if (m_view[SecondaryIdx] != 0) {
selectedUrlsCount += m_view[SecondaryIdx]->selectedUrls().count();
@@ -444,7 +449,7 @@ void DolphinMainWindow::moveToTrash() clearStatusBar();
const KUrl::List selectedUrls = m_activeView->selectedUrls();
KonqOperations::del(this, KonqOperations::TRASH, selectedUrls);
- m_undoOperations.append(KonqOperations::TRASH);
+ m_undoCommandTypes.append(KonqUndoManager::TRASH);
}
void DolphinMainWindow::deleteItems()
@@ -453,7 +458,7 @@ void DolphinMainWindow::deleteItems() KUrl::List list = m_activeView->selectedUrls();
const uint itemCount = list.count();
- assert(itemCount >= 1);
+ Q_ASSERT(itemCount >= 1);
QString text;
if (itemCount > 1) {
@@ -514,26 +519,36 @@ void DolphinMainWindow::slotUndoAvailable(bool available) undoAction->setEnabled(available);
}
- if (available && (m_undoOperations.count() > 0)) {
- const KonqOperations::Operation op = m_undoOperations.takeFirst();
+ if (available && (m_undoCommandTypes.count() > 0)) {
+ const KonqUndoManager::CommandType command = m_undoCommandTypes.takeFirst();
DolphinStatusBar* statusBar = m_activeView->statusBar();
- switch (op) {
- case KonqOperations::COPY:
+ switch (command) {
+ case KonqUndoManager::COPY:
statusBar->setMessage(i18n("Copy operation completed."),
DolphinStatusBar::OperationCompleted);
break;
- case KonqOperations::MOVE:
+ case KonqUndoManager::MOVE:
statusBar->setMessage(i18n("Move operation completed."),
DolphinStatusBar::OperationCompleted);
break;
- case KonqOperations::LINK:
+ case KonqUndoManager::LINK:
statusBar->setMessage(i18n("Link operation completed."),
DolphinStatusBar::OperationCompleted);
break;
- case KonqOperations::TRASH:
+ case KonqUndoManager::TRASH:
statusBar->setMessage(i18n("Move to trash operation completed."),
DolphinStatusBar::OperationCompleted);
break;
+ case KonqUndoManager::RENAME:
+ statusBar->setMessage(i18n("Renaming operation completed."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+
+ case KonqUndoManager::MKDIR:
+ statusBar->setMessage(i18n("Created directory."),
+ DolphinStatusBar::OperationCompleted);
+ break;
+
default:
break;
}
@@ -912,7 +927,7 @@ void DolphinMainWindow::compareFiles() // - both in the secondary view
// - one in the primary view and the other in the secondary
// view
- assert(m_view[PrimaryIdx] != 0);
+ Q_ASSERT(m_view[PrimaryIdx] != 0);
KUrl urlA;
KUrl urlB;
@@ -920,9 +935,9 @@ void DolphinMainWindow::compareFiles() switch (urls.count()) {
case 0: {
- assert(m_view[SecondaryIdx] != 0);
+ Q_ASSERT(m_view[SecondaryIdx] != 0);
urls = m_view[SecondaryIdx]->selectedUrls();
- assert(urls.count() == 2);
+ Q_ASSERT(urls.count() == 2);
urlA = urls[0];
urlB = urls[1];
break;
@@ -930,9 +945,9 @@ void DolphinMainWindow::compareFiles() case 1: {
urlA = urls[0];
- assert(m_view[SecondaryIdx] != 0);
+ Q_ASSERT(m_view[SecondaryIdx] != 0);
urls = m_view[SecondaryIdx]->selectedUrls();
- assert(urls.count() == 1);
+ Q_ASSERT(urls.count() == 1);
urlB = urls[0];
break;
}
@@ -946,7 +961,7 @@ void DolphinMainWindow::compareFiles() default: {
// may not happen: compareFiles may only get invoked if 2
// files are selected
- assert(false);
+ Q_ASSERT(false);
}
}
@@ -983,7 +998,7 @@ void DolphinMainWindow::init() DolphinSettings& settings = DolphinSettings::instance();
KBookmarkManager* manager = settings.bookmarkManager();
- assert(manager != 0);
+ Q_ASSERT(manager != 0);
KBookmarkGroup root = manager->root();
if (root.first().isNull()) {
root.addBookmark(manager, i18n("Home"), settings.generalSettings()->homeUrl(), "folder-home");
@@ -1437,19 +1452,19 @@ void DolphinMainWindow::updateGoActions() void DolphinMainWindow::copyUrls(const KUrl::List& source, const KUrl& dest)
{
KonqOperations::copy(this, KonqOperations::COPY, source, dest);
- m_undoOperations.append(KonqOperations::COPY);
+ m_undoCommandTypes.append(KonqUndoManager::COPY);
}
void DolphinMainWindow::moveUrls(const KUrl::List& source, const KUrl& dest)
{
KonqOperations::copy(this, KonqOperations::MOVE, source, dest);
- m_undoOperations.append(KonqOperations::MOVE);
+ m_undoCommandTypes.append(KonqUndoManager::MOVE);
}
void DolphinMainWindow::linkUrls(const KUrl::List& source, const KUrl& dest)
{
KonqOperations::copy(this, KonqOperations::LINK, source, dest);
- m_undoOperations.append(KonqOperations::LINK);
+ m_undoCommandTypes.append(KonqUndoManager::LINK);
}
void DolphinMainWindow::clearStatusBar()
@@ -1489,7 +1504,7 @@ DolphinMainWindow::UndoUiInterface::UndoUiInterface(DolphinMainWindow* mainWin) KonqUndoManager::UiInterface(mainWin),
m_mainWin(mainWin)
{
- assert(m_mainWin != 0);
+ Q_ASSERT(m_mainWin != 0);
}
DolphinMainWindow::UndoUiInterface::~UndoUiInterface()
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index ff9fbf6a9..57d370890 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -26,7 +26,6 @@ #include <kmainwindow.h> #include <ksortablelist.h> -#include <konq_operations.h> #include <konq_undo.h> #include <QList> @@ -73,19 +72,22 @@ public: DolphinView* activeView() const { return m_activeView; } /** - * Handles the dropping of Urls to the given + * Handles the dropping of URLs to the given * destination. A context menu with the options * 'Move Here', 'Copy Here', 'Link Here' and * 'Cancel' is offered to the user. - * @param urls List of Urls which have been + * @param urls List of URLs which have been * dropped. - * @param destination Destination Url, where the - * list or Urls should be moved, + * @param destination Destination URL, where the + * list or URLs should be moved, * copied or linked to. */ void dropUrls(const KUrl::List& urls, const KUrl& destination); + /** Renames the item represented by \a oldUrl to \a newUrl. */ + void rename(const KUrl& oldUrl, const KUrl& newUrl); + /** * Refreshs the views of the main window by recreating them dependent from * the given Dolphin settings. @@ -146,7 +148,10 @@ private slots: /** Updates the 'Create New...' sub menu. */ void updateNewMenu(); - /** Renames the selected item of the active view. */ + /** + * Let the user input a name for the selected item(s) and trigger + * a renaming afterwards. + */ void rename(); /** Moves the selected items of the active view to the trash. */ @@ -307,16 +312,16 @@ private slots: */ void adjustViewProperties(); - /** Goes back on step of the Url history. */ + /** Goes back on step of the URL history. */ void goBack(); - /** Goes forward one step of the Url history. */ + /** Goes forward one step of the URL history. */ void goForward(); - /** Goes up one hierarchy of the current Url. */ + /** Goes up one hierarchy of the current URL. */ void goUp(); - /** Goes to the home Url. */ + /** Goes to the home URL. */ void goHome(); /** Opens a terminal for the current shown directory. */ @@ -360,7 +365,7 @@ private slots: /** * Updates the caption of the main window and the state - * of all menu actions which depend from a changed Url. + * of all menu actions which depend from a changed URL. */ void slotUrlChanged(const KUrl& url); @@ -430,7 +435,7 @@ private: DolphinView* m_view[SecondaryIdx + 1]; /// remember pending undo operations until they are finished - QList<KonqOperations::Operation> m_undoOperations; + QList<KonqUndoManager::CommandType> m_undoCommandTypes; }; #endif // _DOLPHIN_H_ diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 6569530ce..3602d1563 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -20,8 +20,6 @@ #include "dolphinview.h" -#include <assert.h> - #include <QApplication> #include <QClipboard> #include <QDropEvent> @@ -250,6 +248,7 @@ bool DolphinView::showHiddenFiles() const 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 @@ -259,10 +258,9 @@ void DolphinView::renameSelectedItems() 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 { @@ -271,13 +269,13 @@ void DolphinView::renameSelectedItems() //UndoManager& undoMan = UndoManager::instance(); //undoMan.beginMacro(); - assert(newName.contains('#')); + Q_ASSERT(newName.contains('#')); const int urlsCount = urls.count(); // iterate through all selected items and rename them... const int replaceIndex = newName.indexOf('#'); - assert(replaceIndex >= 0); + Q_ASSERT(replaceIndex >= 0); for (int i = 0; i < urlsCount; ++i) { const KUrl& source = urls[i]; QString number; @@ -311,28 +309,26 @@ void DolphinView::renameSelectedItems() 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: until KFileItemDelegate supports editing, use the the Dolphin + // rename dialog as temporary workaround: + 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); + } } } @@ -894,7 +890,7 @@ QString DolphinView::selectionStatusBarText() const void DolphinView::showFilterBar(bool show) { - assert(m_filterBar != 0); + Q_ASSERT(m_filterBar != 0); if (show) { m_filterBar->show(); } @@ -1001,7 +997,7 @@ void DolphinView::dropUrls(const KUrl::List& urls, 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; @@ -1073,8 +1069,8 @@ void DolphinView::createView() 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) { @@ -1089,7 +1085,7 @@ void DolphinView::createView() break; } - assert(view != 0); + Q_ASSERT(view != 0); m_fileItemDelegate = new KFileItemDelegate(view); view->setItemDelegate(m_fileItemDelegate); diff --git a/src/renamedialog.cpp b/src/renamedialog.cpp index 8aabb2f83..e68feff8d 100644 --- a/src/renamedialog.cpp +++ b/src/renamedialog.cpp @@ -1,6 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz * - * [email protected] * + * Copyright (C) 2006 by Peter Penz ([email protected]) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -19,14 +18,12 @@ ***************************************************************************/ #include "renamedialog.h" -#include <klocale.h> -#include <qlabel.h> -#include <qlayout.h> -#include <q3vbox.h> -//Added by qt3to4: -#include <Q3VBoxLayout> -#include <assert.h> + #include <klineedit.h> +#include <klocale.h> + +#include <QLabel> +#include <QVBoxLayout> RenameDialog::RenameDialog(const KUrl::List& items) : KDialog() @@ -37,19 +34,23 @@ RenameDialog::RenameDialog(const KUrl::List& items) : setButtonGuiItem(Ok, KGuiItem(i18n("Rename"), "dialog-apply")); - QWidget *page = new QWidget(this); + QWidget* page = new QWidget(this); setMainWidget(page); - Q3VBoxLayout* topLayout = new Q3VBoxLayout(page, 0, spacingHint()); + QVBoxLayout* topLayout = new QVBoxLayout(page); topLayout->setMargin(KDialog::marginHint()); const int itemCount = items.count(); - QLabel* editLabel = new QLabel(i18n("Rename the %1 selected items to:",itemCount), + QLabel* editLabel = new QLabel(i18n("Rename the %1 selected items to:", itemCount), page); m_lineEdit = new KLineEdit(page); m_newName = i18n("New name #"); - assert(itemCount > 1); + + // TODO: reactivate assertion as soon as KFileItemDelegate supports renaming of + // single items + //Q_ASSERT(itemCount > 1); + QString postfix(items[0].prettyUrl().section('.',1)); if (postfix.length() > 0) { // The first item seems to have a postfix (e. g. 'jpg' or 'txt'). Now @@ -88,8 +89,12 @@ void RenameDialog::slotButtonClicked(int button) { if (button==Ok) { m_newName = m_lineEdit->text(); - if (m_newName.contains('#') != 1) { + if (m_newName.isEmpty()) { + m_errorString = i18n("The new name is empty. A name with at least one character must be entered."); + } + else if (m_newName.contains('#') != 1) { m_newName.truncate(0); + m_errorString = i18n("The name must contain exactly one # character."); } } diff --git a/src/renamedialog.h b/src/renamedialog.h index 093484f2b..c08856f8c 100644 --- a/src/renamedialog.h +++ b/src/renamedialog.h @@ -1,6 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006 by Peter Penz * - * [email protected] * + * Copyright (C) 2006 by Peter Penz ([email protected]) * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -22,7 +21,8 @@ #include <kdialog.h> #include <kurl.h> -#include <qstring.h> + +#include <QString> class KLineEdit; @@ -35,10 +35,15 @@ class KLineEdit; * RenameDialog dialog(...); * if (dialog.exec() == QDialog::Accepted) { * const QString& newName = dialog.newName(); - * // ... rename items corresponding to the new name + * if (newName.isEmpty()) { + * // an invalid name has been chosen, use + * // dialog.errorString() to tell the user about this + * } + * else { + * // rename items corresponding to the new name + * } * } * \endcode - * @author Peter Penz */ class RenameDialog : public KDialog { @@ -56,12 +61,18 @@ public: */ const QString& newName() const { return m_newName; } + /** + * Returns the error string, if Dialog::newName() returned an empty string. + */ + const QString& errorString() const { return m_errorString; } + protected slots: virtual void slotButtonClicked(int button); private: KLineEdit* m_lineEdit; QString m_newName; + QString m_errorString; }; #endif |
