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
#include <kiconloader.h>
#include <kio/netaccess.h>
#include <kio/deletejob.h>
-#include <kio/renamedialog.h>
#include <kinputdialog.h>
#include <klocale.h>
#include <kmenu.h>
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);
}
void DolphinMainWindow::rename()
{
clearStatusBar();
- m_activeViewContainer->renameSelectedItems();
+ m_activeViewContainer->view()->renameSelectedItems();
}
void DolphinMainWindow::moveToTrash()
QAction* renameAction = actionCollection()->action("rename");
if (renameAction != 0) {
- renameAction->setEnabled(list.count() >= 1);
+ renameAction->setEnabled(true);
}
bool enableMoveToTrash = true;
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&)),
/** 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();
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();
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()
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)
#define DOLPHINPART_H
#include <kparts/part.h>
+class KFileItemList;
class KFileItem;
class DolphinPartBrowserExtension;
class DolphinSortFilterProxyModel;
*/
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;
Q_DISABLE_COPY(DolphinPart)
};
-
#endif /* DOLPHINPART_H */
-
<!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>
<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>
#include <klocale.h>
#include <kiconeffect.h>
#include <kio/netaccess.h>
-#include <kio/renamedialog.h>
#include <kio/previewjob.h>
#include <kmimetyperesolver.h>
#include <konqmimedata.h>
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"
*/
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:
/**
*/
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);
#include <klocale.h>
#include <kiconeffect.h>
#include <kio/netaccess.h>
-#include <kio/renamedialog.h>
#include <kio/previewjob.h>
#include <kmimetyperesolver.h>
#include <konqmimedata.h>
#include "dolphiniconsview.h"
#include "dolphincontextmenu.h"
#include "filterbar.h"
-#include "renamedialog.h"
#include "kurlnavigator.h"
#include "viewproperties.h"
#include "dolphinsettings.h"
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();
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;