┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Faure <[email protected]>2007-11-15 14:59:02 +0000
committerDavid Faure <[email protected]>2007-11-15 14:59:02 +0000
commit53d65e6392d3b03d7709385df5006d5d34c22852 (patch)
tree8835b13baca4e53540c3f94cc1f4472c77c4567c /src
parent205bf2035d30517e781271bbcae8e4c102d71871 (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')
-rw-r--r--src/dolphinmainwindow.cpp10
-rw-r--r--src/dolphinmainwindow.h3
-rw-r--r--src/dolphinpart.cpp45
-rw-r--r--src/dolphinpart.h15
-rw-r--r--src/dolphinpart.rc24
-rw-r--r--src/dolphinview.cpp70
-rw-r--r--src/dolphinview.h11
-rw-r--r--src/dolphinviewcontainer.cpp72
-rw-r--r--src/dolphinviewcontainer.h6
9 files changed, 163 insertions, 93 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 18476adb5..77cb13c02 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -53,7 +53,6 @@
#include <kiconloader.h>
#include <kio/netaccess.h>
#include <kio/deletejob.h>
-#include <kio/renamedialog.h>
#include <kinputdialog.h>
#include <klocale.h>
#include <kmenu.h>
@@ -123,10 +122,9 @@ void DolphinMainWindow::toggleViews()
m_viewContainer[SecondaryView] = container;
}
-void DolphinMainWindow::rename(const KUrl& oldUrl, const KUrl& newUrl)
+void DolphinMainWindow::slotRenaming()
{
clearStatusBar();
- KonqOperations::rename(this, oldUrl, newUrl);
m_undoCommandTypes.append(KonqFileUndoManager::RENAME);
}
@@ -484,7 +482,7 @@ void DolphinMainWindow::updateNewMenu()
void DolphinMainWindow::rename()
{
clearStatusBar();
- m_activeViewContainer->renameSelectedItems();
+ m_activeViewContainer->view()->renameSelectedItems();
}
void DolphinMainWindow::moveToTrash()
@@ -1460,7 +1458,7 @@ void DolphinMainWindow::updateEditActions()
QAction* renameAction = actionCollection()->action("rename");
if (renameAction != 0) {
- renameAction->setEnabled(list.count() >= 1);
+ renameAction->setEnabled(true);
}
bool enableMoveToTrash = true;
@@ -1583,6 +1581,8 @@ void DolphinMainWindow::connectViewSignals(int viewIndex)
this, SLOT(slotRequestItemInfo(KFileItem)));
connect(view, SIGNAL(activated()),
this, SLOT(toggleActiveView()));
+ connect(view, SIGNAL(renaming()),
+ this, SLOT(slotRenaming()));
const KUrlNavigator* navigator = container->urlNavigator();
connect(navigator, SIGNAL(urlChanged(const KUrl&)),
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h
index e33de4ef6..29ec37744 100644
--- a/src/dolphinmainwindow.h
+++ b/src/dolphinmainwindow.h
@@ -422,6 +422,9 @@ private slots:
/** Toggles the active view if two views are shown within the main window. */
void toggleActiveView();
+ /** Called when the view is renaming a file. */
+ void slotRenaming();
+
private:
DolphinMainWindow(int id);
void init();
diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp
index 2f52447ec..27000eae6 100644
--- a/src/dolphinpart.cpp
+++ b/src/dolphinpart.cpp
@@ -78,14 +78,18 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QStringLi
this, SLOT(slotErrorMessage(QString)));
connect(m_view, SIGNAL(itemTriggered(KFileItem)),
this, SLOT(slotItemTriggered(KFileItem)));
- connect(m_view, SIGNAL(requestContextMenu(KFileItem, const KUrl&)),
- this, SLOT(slotOpenContextMenu(KFileItem, const KUrl&)));
+ connect(m_view, SIGNAL(requestContextMenu(KFileItem,KUrl)),
+ this, SLOT(slotOpenContextMenu(KFileItem,KUrl)));
connect(m_view, SIGNAL(selectionChanged(KFileItemList)),
m_extension, SIGNAL(selectionInfo(KFileItemList)));
+ connect(m_view, SIGNAL(selectionChanged(KFileItemList)),
+ this, SLOT(slotSelectionChanged(KFileItemList)));
connect(m_view, SIGNAL(requestItemInfo(KFileItem)),
this, SLOT(slotRequestItemInfo(KFileItem)));
- connect(m_view, SIGNAL(urlChanged(const KUrl&)),
- this, SLOT(slotUrlChanged(const KUrl&)));
+ connect(m_view, SIGNAL(urlChanged(KUrl)),
+ this, SLOT(slotUrlChanged(KUrl)));
+ connect(m_view, SIGNAL(modeChanged()),
+ this, SLOT(updateViewActions()));
createActions();
updateViewActions();
@@ -122,6 +126,27 @@ void DolphinPart::createActions()
viewModeActions->addAction(DolphinView::detailsModeAction(actionCollection()));
viewModeActions->addAction(DolphinView::columnsModeAction(actionCollection()));
connect(viewModeActions, SIGNAL(triggered(QAction*)), this, SLOT(slotViewModeActionTriggered(QAction*)));
+
+ KAction* renameAction = new KAction(i18nc("@action:inmenu", "Rename..."), this);
+ connect(renameAction, SIGNAL(triggered()), m_view, SLOT(renameSelectedItems()));
+ renameAction->setShortcut(Qt::Key_F2);
+ actionCollection()->addAction("rename", renameAction);
+}
+
+void DolphinPart::slotSelectionChanged(const KFileItemList& selection)
+{
+ // Yes, DolphinMainWindow has very similar code :/
+ if (selection.isEmpty()) {
+ stateChanged("has_no_selection");
+ } else {
+ stateChanged("has_selection");
+
+ QAction* renameAction = actionCollection()->action("rename");
+ Q_ASSERT(renameAction);
+ if (renameAction) {
+ renameAction->setEnabled(true);
+ }
+ }
}
void DolphinPart::updateViewActions()
@@ -218,8 +243,18 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&)
item = KFileItem( S_IFDIR, (mode_t)-1, url() );
}
+ KParts::BrowserExtension::ActionGroupMap actionGroups;
+ QList<QAction *> editActions;
+ editActions.append(actionCollection()->action("rename"));
+ actionGroups.insert("editactions", editActions);
+
KFileItemList items; items.append(item);
- emit m_extension->popupMenu( QCursor::pos(), items, KParts::OpenUrlArguments(), KParts::BrowserArguments(), popupFlags );
+ emit m_extension->popupMenu(QCursor::pos(),
+ items,
+ KParts::OpenUrlArguments(),
+ KParts::BrowserArguments(),
+ popupFlags,
+ actionGroups);
}
void DolphinPart::slotViewModeActionTriggered(QAction* action)
diff --git a/src/dolphinpart.h b/src/dolphinpart.h
index 432b55bd3..eb1e009ec 100644
--- a/src/dolphinpart.h
+++ b/src/dolphinpart.h
@@ -21,6 +21,7 @@
#define DOLPHINPART_H
#include <kparts/part.h>
+class KFileItemList;
class KFileItem;
class DolphinPartBrowserExtension;
class DolphinSortFilterProxyModel;
@@ -77,9 +78,19 @@ private Q_SLOTS:
*/
void slotUrlChanged(const KUrl& url);
+ /**
+ * Updates the state of the 'Edit' menu actions and emits
+ * the signal selectionChanged().
+ */
+ void slotSelectionChanged(const KFileItemList& selection);
+
+ /**
+ * Same as in DolphinMainWindow: updates the view menu actions
+ */
+ void updateViewActions();
+
private:
void createActions();
- void updateViewActions();
private:
DolphinView* m_view;
@@ -90,6 +101,4 @@ private:
Q_DISABLE_COPY(DolphinPart)
};
-
#endif /* DOLPHINPART_H */
-
diff --git a/src/dolphinpart.rc b/src/dolphinpart.rc
index 0f9dd276f..e5a9ff63d 100644
--- a/src/dolphinpart.rc
+++ b/src/dolphinpart.rc
@@ -1,7 +1,10 @@
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<kpartgui version="3" name="dolphinpart" >
+<kpartgui name="dolphinpart" version="4" >
<MenuBar>
<Menu name="edit">
+ <!-- TODO cut, copy, paste -->
+ <Action name="rename"/>
+ <!-- TODO trash, del -->
<Action name="select_all" />
<Action name="invert_selection" />
</Menu>
@@ -46,4 +49,23 @@
<Action name="details" />
<Action name="columns" />
</ToolBar>
+<State name="has_selection" >
+ <enable>
+ <Action name="edit_cut" />
+ <Action name="edit_copy" />
+ <Action name="move_to_trash" />
+ <Action name="delete" />
+ <Action name="properties" />
+ </enable>
+ </State>
+ <State name="has_no_selection" >
+ <disable>
+ <Action name="edit_cut" />
+ <Action name="edit_copy" />
+ <Action name="rename" />
+ <Action name="move_to_trash" />
+ <Action name="delete" />
+ <Action name="properties" />
+ </disable>
+</State>
</kpartgui>
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"
diff --git a/src/dolphinview.h b/src/dolphinview.h
index abb82527e..ff72bbaa7 100644
--- a/src/dolphinview.h
+++ b/src/dolphinview.h
@@ -358,6 +358,11 @@ public slots:
*/
void changeSelection(const KFileItemList& selection);
+ /**
+ * Triggers the renaming of the currently selected items, where
+ * the user must input a new name for the items.
+ */
+ void renameSelectedItems();
signals:
/**
@@ -446,6 +451,12 @@ signals:
*/
void startedPathLoading(const KUrl& url);
+ /**
+ * Is emitted when renaming one or more items.
+ * Used for feedback in the mainwindow.
+ */
+ void renaming();
+
protected:
/** @see QWidget::mouseReleaseEvent */
virtual void mouseReleaseEvent(QMouseEvent* event);
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp
index 0a7516c45..7e28a30fe 100644
--- a/src/dolphinviewcontainer.cpp
+++ b/src/dolphinviewcontainer.cpp
@@ -33,7 +33,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>
@@ -51,7 +50,6 @@
#include "dolphiniconsview.h"
#include "dolphincontextmenu.h"
#include "filterbar.h"
-#include "renamedialog.h"
#include "kurlnavigator.h"
#include "viewproperties.h"
#include "dolphinsettings.h"
@@ -184,76 +182,6 @@ bool DolphinViewContainer::isActive() const
return m_view->isActive();
}
-void DolphinViewContainer::renameSelectedItems()
-{
- DolphinViewContainer* view = m_mainWindow->activeViewContainer();
- const KFileItemList items = m_view->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()) {
- view->statusBar()->setMessage(dialog.errorString(),
- DolphinStatusBar::Error);
- } 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();
- 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);
- m_mainWindow->rename(oldUrl, newUrl);
- }
- ++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()) {
- view->statusBar()->setMessage(dialog.errorString(),
- DolphinStatusBar::Error);
- } else {
- const KUrl& oldUrl = items.first().url();
- KUrl newUrl = oldUrl;
- newUrl.setFileName(newName);
- m_mainWindow->rename(oldUrl, newUrl);
- }
- }
-}
-
bool DolphinViewContainer::isFilterBarVisible() const
{
return m_filterBar->isVisible();
diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h
index abaf2e34e..5e252dcda 100644
--- a/src/dolphinviewcontainer.h
+++ b/src/dolphinviewcontainer.h
@@ -90,12 +90,6 @@ public:
void setActive(bool active);
bool isActive() const;
- /**
- * Triggers the renaming of the currently selected items, where
- * the user must input a new name for the items.
- */
- void renameSelectedItems();
-
KFileItem fileItem(const QModelIndex& index) const;
const DolphinStatusBar* statusBar() const;