55
55
#include "fileoperations.h"
56
56
#include "sidebar.h"
60
61
struct FileOpsContextManagerItemPrivate {
61
FileOpsContextManagerItem* mContextManagerItem;
62
QListView* mThumbnailView;
63
KXMLGUIClient* mXMLGUIClient;
67
KAction* mPasteAction;
68
KAction* mCopyToAction;
69
KAction* mMoveToAction;
70
KAction* mLinkToAction;
71
KAction* mRenameAction;
72
KAction* mTrashAction;
74
KAction* mRestoreAction;
75
KAction* mShowPropertiesAction;
76
KAction* mCreateFolderAction;
77
KAction* mOpenWithAction;
78
QList<QAction*> mRegularFileActionList;
79
QList<QAction*> mTrashFileActionList;
80
QMap<QString, KService::Ptr> mServiceForName;
83
KUrl::List urlList() const {
86
KFileItemList list = mContextManagerItem->contextManager()->selectedFileItemList();
87
if (list.count() > 0) {
88
urlList = list.urlList();
90
KUrl url = mContextManagerItem->contextManager()->currentUrl();
91
Q_ASSERT(url.isValid());
98
void updateServiceForName() {
99
// This code is inspired from
100
// kdebase/apps/lib/konq/konq_menuactions.cpp
102
// Get list of all distinct mimetypes in selection
103
QStringList mimeTypes;
104
Q_FOREACH(const KFileItem& item, mContextManagerItem->contextManager()->selectedFileItemList()) {
105
const QString mimeType = item.mimetype();
106
if (!mimeTypes.contains(mimeType)) {
107
mimeTypes << mimeType;
112
const QString firstMimeType = mimeTypes.takeFirst();
113
const QString constraintTemplate = "'%1' in ServiceTypes";
114
QStringList constraints;
115
Q_FOREACH(const QString& mimeType, mimeTypes) {
116
constraints << constraintTemplate.arg(mimeType);
119
KService::List services = KMimeTypeTrader::self()->query(
120
firstMimeType, "Application",
121
constraints.join(" and "));
124
mServiceForName.clear();
125
Q_FOREACH(const KService::Ptr &service, services) {
126
mServiceForName[service->name()] = service;
131
QMimeData* selectionMimeData() {
132
QMimeData* mimeData = new QMimeData;
133
KFileItemList list = mContextManagerItem->contextManager()->selectedFileItemList();
134
list.urlList().populateMimeData(mimeData);
139
KUrl pasteTargetUrl() const {
140
// If only one folder is selected, paste inside it, otherwise paste in
142
KFileItemList list = mContextManagerItem->contextManager()->selectedFileItemList();
143
if (list.count() == 1 && list.first().isDir()) {
144
return list.first().url();
146
return mContextManagerItem->contextManager()->currentDirUrl();
62
FileOpsContextManagerItem* q;
63
QListView* mThumbnailView;
64
KXMLGUIClient* mXMLGUIClient;
68
KAction* mPasteAction;
69
KAction* mCopyToAction;
70
KAction* mMoveToAction;
71
KAction* mLinkToAction;
72
KAction* mRenameAction;
73
KAction* mTrashAction;
75
KAction* mRestoreAction;
76
KAction* mShowPropertiesAction;
77
KAction* mCreateFolderAction;
78
KAction* mOpenWithAction;
79
QList<QAction*> mRegularFileActionList;
80
QList<QAction*> mTrashFileActionList;
81
QMap<QString, KService::Ptr> mServiceForName;
84
KUrl::List urlList() const {
87
KFileItemList list = q->contextManager()->selectedFileItemList();
88
if (list.count() > 0) {
89
urlList = list.urlList();
91
KUrl url = q->contextManager()->currentUrl();
92
Q_ASSERT(url.isValid());
98
void updateServiceForName()
100
// This code is inspired from
101
// kdebase/apps/lib/konq/konq_menuactions.cpp
103
// Get list of all distinct mimetypes in selection
104
QStringList mimeTypes;
105
Q_FOREACH(const KFileItem & item, q->contextManager()->selectedFileItemList()) {
106
const QString mimeType = item.mimetype();
107
if (!mimeTypes.contains(mimeType)) {
108
mimeTypes << mimeType;
113
const QString firstMimeType = mimeTypes.takeFirst();
114
const QString constraintTemplate = "'%1' in ServiceTypes";
115
QStringList constraints;
116
Q_FOREACH(const QString & mimeType, mimeTypes) {
117
constraints << constraintTemplate.arg(mimeType);
120
KService::List services = KMimeTypeTrader::self()->query(
121
firstMimeType, "Application",
122
constraints.join(" and "));
125
mServiceForName.clear();
126
Q_FOREACH(const KService::Ptr & service, services) {
127
mServiceForName[service->name()] = service;
131
QMimeData* selectionMimeData()
133
QMimeData* mimeData = new QMimeData;
134
KFileItemList list = q->contextManager()->selectedFileItemList();
135
list.urlList().populateMimeData(mimeData);
139
KUrl pasteTargetUrl() const {
140
// If only one folder is selected, paste inside it, otherwise paste in
142
KFileItemList list = q->contextManager()->selectedFileItemList();
143
if (list.count() == 1 && list.first().isDir()) {
144
return list.first().url();
146
return q->contextManager()->currentDirUrl();
152
static QAction* createSeparator(QObject* parent) {
153
QAction* action = new KAction(parent);
154
action->setSeparator(true);
151
static QAction* createSeparator(QObject* parent)
153
QAction* action = new KAction(parent);
154
action->setSeparator(true);
159
158
FileOpsContextManagerItem::FileOpsContextManagerItem(ContextManager* manager, QListView* thumbnailView, KActionCollection* actionCollection, KXMLGUIClient* client)
160
159
: AbstractContextManagerItem(manager)
161
, d(new FileOpsContextManagerItemPrivate) {
162
d->mContextManagerItem = this;
163
d->mThumbnailView = thumbnailView;
164
d->mXMLGUIClient = client;
165
d->mGroup = new SideBarGroup(i18n("File Operations"));
166
setWidget(d->mGroup);
167
EventWatcher::install(d->mGroup, QEvent::Show, this, SLOT(updateSideBarContent()));
171
connect(contextManager(), SIGNAL(selectionChanged()),
172
SLOT(updateActions()) );
173
connect(contextManager(), SIGNAL(currentDirUrlChanged()),
174
SLOT(updateActions()) );
176
KActionCategory* file = new KActionCategory(i18nc("@title actions category","File"), actionCollection);
177
KActionCategory* edit = new KActionCategory(i18nc("@title actions category","Edit"), actionCollection);
179
d->mCutAction = edit->addAction(KStandardAction::Cut, this, SLOT(cut()));
181
// Copied from Dolphin:
160
, d(new FileOpsContextManagerItemPrivate)
163
d->mThumbnailView = thumbnailView;
164
d->mXMLGUIClient = client;
165
d->mGroup = new SideBarGroup(i18n("File Operations"));
166
setWidget(d->mGroup);
167
EventWatcher::install(d->mGroup, QEvent::Show, this, SLOT(updateSideBarContent()));
171
connect(contextManager(), SIGNAL(selectionChanged()),
172
SLOT(updateActions()));
173
connect(contextManager(), SIGNAL(currentDirUrlChanged()),
174
SLOT(updateActions()));
176
KActionCategory* file = new KActionCategory(i18nc("@title actions category", "File"), actionCollection);
177
KActionCategory* edit = new KActionCategory(i18nc("@title actions category", "Edit"), actionCollection);
179
d->mCutAction = edit->addAction(KStandardAction::Cut, this, SLOT(cut()));
181
// Copied from Dolphin:
182
182
// need to remove shift+del from cut action, else the shortcut for deletejob
184
KShortcut cutShortcut = d->mCutAction->shortcut();
185
cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty);
186
d->mCutAction->setShortcut(cutShortcut);
188
d->mCopyAction = edit->addAction(KStandardAction::Copy, this, SLOT(copy()));
189
d->mPasteAction = edit->addAction(KStandardAction::Paste, this, SLOT(paste()));
191
d->mCopyToAction = file->addAction("file_copy_to",this,SLOT(copyTo()));
192
d->mCopyToAction->setText(i18nc("Verb", "Copy To..."));
193
d->mCopyToAction->setShortcut(Qt::Key_F7);
195
d->mMoveToAction = file->addAction("file_move_to",this,SLOT(moveTo()));
196
d->mMoveToAction->setText(i18nc("Verb", "Move To..."));
197
d->mMoveToAction->setShortcut(Qt::Key_F8);
199
d->mLinkToAction = file->addAction("file_link_to",this,SLOT(linkTo()));
200
d->mLinkToAction->setText(i18nc("Verb: create link to the file where user wants", "Link To..."));
201
d->mLinkToAction->setShortcut(Qt::Key_F9);
203
d->mRenameAction = file->addAction("file_rename",this,SLOT(rename()));
204
d->mRenameAction->setText(i18nc("Verb", "Rename..."));
205
d->mRenameAction->setShortcut(Qt::Key_F2);
207
d->mTrashAction = file->addAction("file_trash",this,SLOT(trash()));
208
d->mTrashAction->setText(i18nc("Verb", "Trash"));
209
d->mTrashAction->setIcon(KIcon("user-trash"));
210
d->mTrashAction->setShortcut(Qt::Key_Delete);
212
d->mDelAction = file->addAction("file_delete",this,SLOT(del()));
213
d->mDelAction->setText(i18n("Delete"));
214
d->mDelAction->setIcon(KIcon("edit-delete"));
215
d->mDelAction->setShortcut(QKeySequence(Qt::ShiftModifier | Qt::Key_Delete));
217
d->mRestoreAction = file->addAction("file_restore", this, SLOT(restore()));
218
d->mRestoreAction->setText(i18n("Restore"));
220
d->mShowPropertiesAction = file->addAction("file_show_properties",this,SLOT(showProperties()));
221
d->mShowPropertiesAction->setText(i18n("Properties"));
222
d->mShowPropertiesAction->setIcon(KIcon("document-properties"));
224
d->mCreateFolderAction = file->addAction("file_create_folder",this,SLOT(createFolder()));
225
d->mCreateFolderAction->setText(i18n("Create Folder..."));
226
d->mCreateFolderAction->setIcon(KIcon("folder-new"));
228
d->mOpenWithAction = file->addAction("file_open_with");
229
d->mOpenWithAction->setText(i18n("Open With"));
230
QMenu* menu = new QMenu;
231
d->mOpenWithAction->setMenu(menu);
232
connect(menu, SIGNAL(aboutToShow()),
233
SLOT(populateOpenMenu()) );
234
connect(menu, SIGNAL(triggered(QAction*)),
235
SLOT(openWith(QAction*)) );
237
d->mRegularFileActionList
241
<< createSeparator(this)
245
<< createSeparator(this)
246
<< d->mOpenWithAction
247
<< d->mShowPropertiesAction
248
<< createSeparator(this)
249
<< d->mCreateFolderAction
252
d->mTrashFileActionList
255
<< createSeparator(this)
256
<< d->mShowPropertiesAction
259
connect(QApplication::clipboard(), SIGNAL(dataChanged()),
260
SLOT(updatePasteAction()));
263
// Delay action update because it must happen *after* main window has called
264
// createGUI(), otherwise calling d->mXMLGUIClient->plugActionList() will
266
QMetaObject::invokeMethod(this, "updateActions", Qt::QueuedConnection);
270
FileOpsContextManagerItem::~FileOpsContextManagerItem() {
271
delete d->mOpenWithAction->menu();
276
void FileOpsContextManagerItem::updateActions() {
277
const int count = contextManager()->selectedFileItemList().count();
278
const bool selectionNotEmpty = count > 0;
279
const bool urlIsValid = contextManager()->currentUrl().isValid();
280
const bool dirUrlIsValid = contextManager()->currentDirUrl().isValid();
282
d->mInTrash = contextManager()->currentDirUrl().protocol() == "trash";
284
d->mCutAction->setEnabled(selectionNotEmpty);
285
d->mCopyAction->setEnabled(selectionNotEmpty);
286
d->mCopyToAction->setEnabled(selectionNotEmpty);
287
d->mMoveToAction->setEnabled(selectionNotEmpty);
288
d->mLinkToAction->setEnabled(selectionNotEmpty);
289
d->mTrashAction->setEnabled(selectionNotEmpty);
290
d->mRestoreAction->setEnabled(selectionNotEmpty);
291
d->mDelAction->setEnabled(selectionNotEmpty);
292
d->mOpenWithAction->setEnabled(selectionNotEmpty);
293
d->mRenameAction->setEnabled(count == 1);
295
d->mCreateFolderAction->setEnabled(dirUrlIsValid);
296
d->mShowPropertiesAction->setEnabled(dirUrlIsValid || urlIsValid);
298
d->mXMLGUIClient->unplugActionList("file_action_list");
299
QList<QAction*>& list = d->mInTrash ? d->mTrashFileActionList : d->mRegularFileActionList;
300
d->mXMLGUIClient->plugActionList("file_action_list", list);
302
updateSideBarContent();
306
void FileOpsContextManagerItem::updatePasteAction() {
307
QPair<bool, QString> info = KonqOperations::pasteInfo(d->pasteTargetUrl());
308
d->mPasteAction->setEnabled(info.first);
309
d->mPasteAction->setText(info.second);
313
void FileOpsContextManagerItem::updateSideBarContent() {
314
if (!d->mGroup->isVisible()) {
319
QList<QAction*>& list = d->mInTrash ? d->mTrashFileActionList : d->mRegularFileActionList;
320
Q_FOREACH(QAction* action, list) {
321
if (action->isEnabled() && !action->isSeparator()) {
322
d->mGroup->addAction(action);
328
void FileOpsContextManagerItem::showProperties() {
329
KFileItemList list = contextManager()->selectedFileItemList();
330
if (list.count() > 0) {
331
KPropertiesDialog::showDialog(list, d->mGroup);
333
KUrl url = contextManager()->currentDirUrl();
334
KPropertiesDialog::showDialog(url, d->mGroup);
339
void FileOpsContextManagerItem::cut() {
340
QMimeData* mimeData = d->selectionMimeData();
341
KonqMimeData::addIsCutSelection(mimeData, true);
342
QApplication::clipboard()->setMimeData(mimeData);
346
void FileOpsContextManagerItem::copy() {
347
QMimeData* mimeData = d->selectionMimeData();
348
KonqMimeData::addIsCutSelection(mimeData, false);
349
QApplication::clipboard()->setMimeData(mimeData);
353
void FileOpsContextManagerItem::paste() {
354
const bool move = KonqMimeData::decodeIsCutSelection(QApplication::clipboard()->mimeData());
355
KIO::pasteClipboard(d->pasteTargetUrl(), d->mGroup, move);
359
void FileOpsContextManagerItem::trash() {
360
FileOperations::trash(d->urlList(), d->mGroup);
364
void FileOpsContextManagerItem::del() {
365
FileOperations::del(d->urlList(), d->mGroup);
369
void FileOpsContextManagerItem::restore() {
370
KonqOperations::restoreTrashedItems(d->urlList(), d->mGroup);
374
void FileOpsContextManagerItem::copyTo() {
375
FileOperations::copyTo(d->urlList(), d->mGroup);
379
void FileOpsContextManagerItem::moveTo() {
380
FileOperations::moveTo(d->urlList(), d->mGroup);
384
void FileOpsContextManagerItem::linkTo() {
385
FileOperations::linkTo(d->urlList(), d->mGroup);
389
void FileOpsContextManagerItem::rename() {
390
if (d->mThumbnailView->isVisible()) {
391
QModelIndex index = d->mThumbnailView->currentIndex();
392
d->mThumbnailView->edit(index);
394
FileOperations::rename(d->urlList().first(), d->mGroup);
399
void FileOpsContextManagerItem::createFolder() {
400
KUrl url = contextManager()->currentDirUrl();
401
KonqOperations::newDir(d->mGroup, url);
405
void FileOpsContextManagerItem::populateOpenMenu() {
406
QMenu* openMenu = d->mOpenWithAction->menu();
407
qDeleteAll(openMenu->actions());
409
d->updateServiceForName();
411
Q_FOREACH(const KService::Ptr &service, d->mServiceForName) {
412
QString text = service->name().replace( '&', "&&" );
413
QAction* action = openMenu->addAction(text);
414
action->setIcon(KIcon(service->icon()));
415
action->setData(service->name());
418
openMenu->addSeparator();
419
openMenu->addAction(i18n("Other Application..."));
423
void FileOpsContextManagerItem::openWith(QAction* action) {
425
KService::Ptr service;
426
KUrl::List list = d->urlList();
428
QString name = action->data().toString();
429
if (name.isEmpty()) {
430
// Other Application...
431
KOpenWithDialog dlg(list, d->mGroup);
435
service = dlg.service();
438
// User entered a custom command
439
Q_ASSERT(!dlg.text().isEmpty());
440
KRun::run(dlg.text(), list, d->mGroup);
444
service = d->mServiceForName[name];
448
KRun::run(*service, list, d->mGroup);
184
KShortcut cutShortcut = d->mCutAction->shortcut();
185
cutShortcut.remove(Qt::SHIFT + Qt::Key_Delete, KShortcut::KeepEmpty);
186
d->mCutAction->setShortcut(cutShortcut);
188
d->mCopyAction = edit->addAction(KStandardAction::Copy, this, SLOT(copy()));
189
d->mPasteAction = edit->addAction(KStandardAction::Paste, this, SLOT(paste()));
191
d->mCopyToAction = file->addAction("file_copy_to", this, SLOT(copyTo()));
192
d->mCopyToAction->setText(i18nc("Verb", "Copy To..."));
193
d->mCopyToAction->setShortcut(Qt::Key_F7);
195
d->mMoveToAction = file->addAction("file_move_to", this, SLOT(moveTo()));
196
d->mMoveToAction->setText(i18nc("Verb", "Move To..."));
197
d->mMoveToAction->setShortcut(Qt::Key_F8);
199
d->mLinkToAction = file->addAction("file_link_to", this, SLOT(linkTo()));
200
d->mLinkToAction->setText(i18nc("Verb: create link to the file where user wants", "Link To..."));
201
d->mLinkToAction->setShortcut(Qt::Key_F9);
203
d->mRenameAction = file->addAction("file_rename", this, SLOT(rename()));
204
d->mRenameAction->setText(i18nc("Verb", "Rename..."));
205
d->mRenameAction->setShortcut(Qt::Key_F2);
207
d->mTrashAction = file->addAction("file_trash", this, SLOT(trash()));
208
d->mTrashAction->setText(i18nc("Verb", "Trash"));
209
d->mTrashAction->setIcon(KIcon("user-trash"));
210
d->mTrashAction->setShortcut(Qt::Key_Delete);
212
d->mDelAction = file->addAction("file_delete", this, SLOT(del()));
213
d->mDelAction->setText(i18n("Delete"));
214
d->mDelAction->setIcon(KIcon("edit-delete"));
215
d->mDelAction->setShortcut(QKeySequence(Qt::ShiftModifier | Qt::Key_Delete));
217
d->mRestoreAction = file->addAction("file_restore", this, SLOT(restore()));
218
d->mRestoreAction->setText(i18n("Restore"));
220
d->mShowPropertiesAction = file->addAction("file_show_properties", this, SLOT(showProperties()));
221
d->mShowPropertiesAction->setText(i18n("Properties"));
222
d->mShowPropertiesAction->setIcon(KIcon("document-properties"));
224
d->mCreateFolderAction = file->addAction("file_create_folder", this, SLOT(createFolder()));
225
d->mCreateFolderAction->setText(i18n("Create Folder..."));
226
d->mCreateFolderAction->setIcon(KIcon("folder-new"));
228
d->mOpenWithAction = file->addAction("file_open_with");
229
d->mOpenWithAction->setText(i18n("Open With"));
230
QMenu* menu = new QMenu;
231
d->mOpenWithAction->setMenu(menu);
232
connect(menu, SIGNAL(aboutToShow()),
233
SLOT(populateOpenMenu()));
234
connect(menu, SIGNAL(triggered(QAction*)),
235
SLOT(openWith(QAction*)));
237
d->mRegularFileActionList
241
<< createSeparator(this)
245
<< createSeparator(this)
246
<< d->mOpenWithAction
247
<< d->mShowPropertiesAction
248
<< createSeparator(this)
249
<< d->mCreateFolderAction
252
d->mTrashFileActionList
255
<< createSeparator(this)
256
<< d->mShowPropertiesAction
259
connect(QApplication::clipboard(), SIGNAL(dataChanged()),
260
SLOT(updatePasteAction()));
263
// Delay action update because it must happen *after* main window has called
264
// createGUI(), otherwise calling d->mXMLGUIClient->plugActionList() will
266
QMetaObject::invokeMethod(this, "updateActions", Qt::QueuedConnection);
269
FileOpsContextManagerItem::~FileOpsContextManagerItem()
271
delete d->mOpenWithAction->menu();
275
void FileOpsContextManagerItem::updateActions()
277
const int count = contextManager()->selectedFileItemList().count();
278
const bool selectionNotEmpty = count > 0;
279
const bool urlIsValid = contextManager()->currentUrl().isValid();
280
const bool dirUrlIsValid = contextManager()->currentDirUrl().isValid();
282
d->mInTrash = contextManager()->currentDirUrl().protocol() == "trash";
284
d->mCutAction->setEnabled(selectionNotEmpty);
285
d->mCopyAction->setEnabled(selectionNotEmpty);
286
d->mCopyToAction->setEnabled(selectionNotEmpty);
287
d->mMoveToAction->setEnabled(selectionNotEmpty);
288
d->mLinkToAction->setEnabled(selectionNotEmpty);
289
d->mTrashAction->setEnabled(selectionNotEmpty);
290
d->mRestoreAction->setEnabled(selectionNotEmpty);
291
d->mDelAction->setEnabled(selectionNotEmpty);
292
d->mOpenWithAction->setEnabled(selectionNotEmpty);
293
d->mRenameAction->setEnabled(count == 1);
295
d->mCreateFolderAction->setEnabled(dirUrlIsValid);
296
d->mShowPropertiesAction->setEnabled(dirUrlIsValid || urlIsValid);
298
d->mXMLGUIClient->unplugActionList("file_action_list");
299
QList<QAction*>& list = d->mInTrash ? d->mTrashFileActionList : d->mRegularFileActionList;
300
d->mXMLGUIClient->plugActionList("file_action_list", list);
302
updateSideBarContent();
305
void FileOpsContextManagerItem::updatePasteAction()
307
QPair<bool, QString> info = KonqOperations::pasteInfo(d->pasteTargetUrl());
308
d->mPasteAction->setEnabled(info.first);
309
d->mPasteAction->setText(info.second);
312
void FileOpsContextManagerItem::updateSideBarContent()
314
if (!d->mGroup->isVisible()) {
319
QList<QAction*>& list = d->mInTrash ? d->mTrashFileActionList : d->mRegularFileActionList;
320
Q_FOREACH(QAction * action, list) {
321
if (action->isEnabled() && !action->isSeparator()) {
322
d->mGroup->addAction(action);
327
void FileOpsContextManagerItem::showProperties()
329
KFileItemList list = contextManager()->selectedFileItemList();
330
if (list.count() > 0) {
331
KPropertiesDialog::showDialog(list, d->mGroup);
333
KUrl url = contextManager()->currentDirUrl();
334
KPropertiesDialog::showDialog(url, d->mGroup);
338
void FileOpsContextManagerItem::cut()
340
QMimeData* mimeData = d->selectionMimeData();
341
KonqMimeData::addIsCutSelection(mimeData, true);
342
QApplication::clipboard()->setMimeData(mimeData);
345
void FileOpsContextManagerItem::copy()
347
QMimeData* mimeData = d->selectionMimeData();
348
KonqMimeData::addIsCutSelection(mimeData, false);
349
QApplication::clipboard()->setMimeData(mimeData);
352
void FileOpsContextManagerItem::paste()
354
const bool move = KonqMimeData::decodeIsCutSelection(QApplication::clipboard()->mimeData());
355
KIO::pasteClipboard(d->pasteTargetUrl(), d->mGroup, move);
358
void FileOpsContextManagerItem::trash()
360
FileOperations::trash(d->urlList(), d->mGroup);
363
void FileOpsContextManagerItem::del()
365
FileOperations::del(d->urlList(), d->mGroup);
368
void FileOpsContextManagerItem::restore()
370
KonqOperations::restoreTrashedItems(d->urlList(), d->mGroup);
373
void FileOpsContextManagerItem::copyTo()
375
FileOperations::copyTo(d->urlList(), d->mGroup);
378
void FileOpsContextManagerItem::moveTo()
380
FileOperations::moveTo(d->urlList(), d->mGroup);
383
void FileOpsContextManagerItem::linkTo()
385
FileOperations::linkTo(d->urlList(), d->mGroup);
388
void FileOpsContextManagerItem::rename()
390
if (d->mThumbnailView->isVisible()) {
391
QModelIndex index = d->mThumbnailView->currentIndex();
392
d->mThumbnailView->edit(index);
394
FileOperations::rename(d->urlList().first(), d->mGroup);
398
void FileOpsContextManagerItem::createFolder()
400
KUrl url = contextManager()->currentDirUrl();
401
KonqOperations::newDir(d->mGroup, url);
404
void FileOpsContextManagerItem::populateOpenMenu()
406
QMenu* openMenu = d->mOpenWithAction->menu();
407
qDeleteAll(openMenu->actions());
409
d->updateServiceForName();
411
Q_FOREACH(const KService::Ptr & service, d->mServiceForName) {
412
QString text = service->name().replace('&', "&&");
413
QAction* action = openMenu->addAction(text);
414
action->setIcon(KIcon(service->icon()));
415
action->setData(service->name());
418
openMenu->addSeparator();
419
openMenu->addAction(i18n("Other Application..."));
422
void FileOpsContextManagerItem::openWith(QAction* action)
425
KService::Ptr service;
426
KUrl::List list = d->urlList();
428
QString name = action->data().toString();
429
if (name.isEmpty()) {
430
// Other Application...
431
KOpenWithDialog dlg(list, d->mGroup);
435
service = dlg.service();
438
// User entered a custom command
439
Q_ASSERT(!dlg.text().isEmpty());
440
KRun::run(dlg.text(), list, d->mGroup);
444
service = d->mServiceForName[name];
448
KRun::run(*service, list, d->mGroup);