X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/bbf9faa05396d66b3dbe101a0c309459e3ffacb1..34f13357c0141d615988046417d1e89adc45c5ee:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index c280b40d0..a2d56f474 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -19,8 +19,6 @@ ***************************************************************************/ #include "dolphinview.h" -#include -#include #include #include @@ -30,29 +28,35 @@ #include #include +#include #include #include #include -#include #include +#include +#include #include -#include #include +#include +#include #include -#include #include +#include +#include #include +#include "dolphindropcontroller.h" #include "dolphinmodel.h" #include "dolphincolumnview.h" #include "dolphincontroller.h" #include "dolphinsortfilterproxymodel.h" #include "dolphindetailsview.h" #include "dolphiniconsview.h" -#include "renamedialog.h" -#include "viewproperties.h" #include "dolphinsettings.h" #include "dolphin_generalsettings.h" +#include "iconmanager.h" +#include "renamedialog.h" +#include "viewproperties.h" DolphinView::DolphinView(QWidget* parent, const KUrl& url, @@ -71,23 +75,19 @@ DolphinView::DolphinView(QWidget* parent, m_detailsView(0), m_columnView(0), m_fileItemDelegate(0), + m_selectionModel(0), m_dolphinModel(dolphinModel), m_dirLister(dirLister), - m_proxyModel(proxyModel) + m_proxyModel(proxyModel), + m_iconManager(0) { setFocusPolicy(Qt::StrongFocus); m_topLayout = new QVBoxLayout(this); m_topLayout->setSpacing(0); m_topLayout->setMargin(0); - QClipboard* clipboard = QApplication::clipboard(); - connect(clipboard, SIGNAL(dataChanged()), - this, SLOT(updateCutItems())); - connect(m_dirLister, SIGNAL(completed()), this, SLOT(updateCutItems())); - connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), - this, SLOT(generatePreviews(const KFileItemList&))); m_controller = new DolphinController(this); m_controller->setUrl(url); @@ -103,8 +103,8 @@ DolphinView::DolphinView(QWidget* parent, connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)), this, SLOT(openContextMenu(const QPoint&))); - connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&, const KFileItem&, QWidget*)), - this, SLOT(dropUrls(const KUrl::List&, const KUrl&, const KFileItem&, QWidget*))); + connect(m_controller, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&, const KFileItem&)), + this, SLOT(dropUrls(const KUrl::List&, const KUrl&, const KFileItem&))); connect(m_controller, SIGNAL(sortingChanged(DolphinView::Sorting)), this, SLOT(updateSorting(DolphinView::Sorting))); connect(m_controller, SIGNAL(sortOrderChanged(Qt::SortOrder)), @@ -145,6 +145,7 @@ void DolphinView::setActive(bool active) } m_active = active; + m_selectionModel->clearSelection(); QColor color = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); if (active) { @@ -194,17 +195,18 @@ void DolphinView::setMode(Mode mode) m_controller->setUrl(root); } + deleteView(); + const KUrl viewPropsUrl = viewPropertiesUrl(); ViewProperties props(viewPropsUrl); props.setViewMode(m_mode); - createView(); // the file item delegate has been recreated, apply the current // additional information manually const KFileItemDelegate::InformationList infoList = props.additionalInfo(); m_fileItemDelegate->setShowInformation(infoList); - emit additionalInfoChanged(infoList); + emit additionalInfoChanged(); // Not all view modes support categorized sorting. Adjust the sorting model // if changing the view mode results in a change of the categorized sorting @@ -216,8 +218,6 @@ void DolphinView::setMode(Mode mode) emit categorizedSortingChanged(); } - loadDirectory(viewPropsUrl); - emit modeChanged(); } @@ -237,7 +237,7 @@ void DolphinView::setShowPreview(bool show) props.setShowPreview(show); m_showPreview = show; - + m_iconManager->setShowPreview(show); emit showPreviewChanged(); loadDirectory(viewPropsUrl, true); @@ -308,7 +308,13 @@ bool DolphinView::supportsCategorizedSorting() const void DolphinView::selectAll() { - itemView()->selectAll(); + QAbstractItemView* view = itemView(); + // TODO: there seems to be a bug in QAbstractItemView::selectAll(); if + // the Ctrl-key is pressed (e. g. for Ctrl+A), selectAll() inverts the + // selection instead of selecting all items. This is bypassed for KDE 4.0 + // by invoking clearSelection() first. + view->clearSelection(); + view->selectAll(); } void DolphinView::invertSelection() @@ -452,7 +458,7 @@ void DolphinView::setAdditionalInfo(KFileItemDelegate::InformationList info) props.setAdditionalInfo(info); m_fileItemDelegate->setShowInformation(info); - emit additionalInfoChanged(info); + emit additionalInfoChanged(); if (itemView() != m_detailsView) { // the details view requires no reloading of the directory, as it maps @@ -560,37 +566,6 @@ void DolphinView::triggerItem(const KFileItem& item) emit itemTriggered(item); // caught by DolphinViewContainer or DolphinPart } -void DolphinView::generatePreviews(const KFileItemList& items) -{ - if (m_controller->dolphinView()->showPreview()) { - KIO::PreviewJob* job = KIO::filePreview(items, 128); - connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)), - this, SLOT(showPreview(const KFileItem&, const QPixmap&))); - } -} - -void DolphinView::showPreview(const KFileItem& item, const QPixmap& pixmap) -{ - Q_ASSERT(!item.isNull()); - if (item.url().directory() != m_dirLister->url().path()) { - // the preview job is still working on items of an older URL, hence - // the item is not part of the directory model anymore - return; - } - - const QModelIndex idx = m_dolphinModel->indexForItem(item); - if (idx.isValid() && (idx.column() == 0)) { - const QMimeData* mimeData = QApplication::clipboard()->mimeData(); - if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(item)) { - KIconEffect iconEffect; - const QPixmap cutPixmap = iconEffect.apply(pixmap, KIconLoader::Desktop, KIconLoader::DisabledState); - m_dolphinModel->setData(idx, QIcon(cutPixmap), Qt::DecorationRole); - } else { - m_dolphinModel->setData(idx, QIcon(pixmap), Qt::DecorationRole); - } - } -} - void DolphinView::emitSelectionChangedSignal() { emit selectionChanged(DolphinView::selectedItems()); @@ -608,7 +583,6 @@ void DolphinView::loadDirectory(const KUrl& url, bool reload) return; } - m_cutItemsCache.clear(); m_loadingDirectory = true; m_dirLister->stop(); @@ -685,12 +659,13 @@ void DolphinView::applyViewProperties(const KUrl& url) KFileItemDelegate::InformationList info = props.additionalInfo(); if (info != m_fileItemDelegate->showInformation()) { m_fileItemDelegate->setShowInformation(info); - emit additionalInfoChanged(info); + emit additionalInfoChanged(); } const bool showPreview = props.showPreview(); if (showPreview != m_showPreview) { m_showPreview = showPreview; + m_iconManager->setShowPreview(showPreview); emit showPreviewChanged(); } } @@ -730,30 +705,25 @@ void DolphinView::openContextMenu(const QPoint& pos) void DolphinView::dropUrls(const KUrl::List& urls, const KUrl& destPath, - const KFileItem& destItem, - QWidget* source) -{ - bool dropAboveDir = false; - if (!destItem.isNull()) { - dropAboveDir = destItem.isDir(); - if (!dropAboveDir) { - // the dropping is done above a file - return; - } - } else if (source == itemView()) { - // the dropping is done into the same viewport where the dragging - // has been started - return; + const KFileItem& destItem) +{ + Q_ASSERT(!urls.isEmpty()); + const KUrl& destination = !destItem.isNull() && destItem.isDir() ? + destItem.url() : destPath; + const KUrl sourceDir = KUrl(urls.first().directory()); + if (sourceDir != destination) { + dropUrls(urls, destination); } - - const KUrl& destination = dropAboveDir ? destItem.url() : destPath; - dropUrls(urls, destination); } void DolphinView::dropUrls(const KUrl::List& urls, const KUrl& destination) { - emit urlsDropped(urls, destination); + DolphinDropController dropController(this); + // forward doingOperation signal up to the mainwindow + connect(&dropController, SIGNAL(doingOperation(KonqFileUndoManager::CommandType)), + this, SIGNAL(doingOperation(KonqFileUndoManager::CommandType))); + dropController.dropUrls(urls, destination); } void DolphinView::updateSorting(DolphinView::Sorting sorting) @@ -776,15 +746,96 @@ void DolphinView::updateSortOrder(Qt::SortOrder order) emit sortOrderChanged(order); } +void DolphinView::toggleSortOrder() +{ + const Qt::SortOrder order = (sortOrder() == Qt::AscendingOrder) ? + Qt::DescendingOrder : + Qt::AscendingOrder; + setSortOrder(order); +} + void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList& info) { ViewProperties props(viewPropertiesUrl()); props.setAdditionalInfo(info); + props.save(); m_fileItemDelegate->setShowInformation(info); - emit additionalInfoChanged(info); + emit additionalInfoChanged(); // will call updateAdditionalInfoActions just below +} + +void DolphinView::updateAdditionalInfoActions(KActionCollection* collection) +{ + const bool enable = (m_mode == DolphinView::DetailsView) || + (m_mode == DolphinView::IconsView); + + QAction* showSizeInfo = collection->action("show_size_info"); + QAction* showDateInfo = collection->action("show_date_info"); + QAction* showPermissionsInfo = collection->action("show_permissions_info"); + QAction* showOwnerInfo = collection->action("show_owner_info"); + QAction* showGroupInfo = collection->action("show_group_info"); + QAction* showMimeInfo = collection->action("show_mime_info"); + + showSizeInfo->setChecked(false); + showDateInfo->setChecked(false); + showPermissionsInfo->setChecked(false); + showOwnerInfo->setChecked(false); + showGroupInfo->setChecked(false); + showMimeInfo->setChecked(false); + + showSizeInfo->setEnabled(enable); + showDateInfo->setEnabled(enable); + showPermissionsInfo->setEnabled(enable); + showOwnerInfo->setEnabled(enable); + showGroupInfo->setEnabled(enable); + showMimeInfo->setEnabled(enable); + + foreach (KFileItemDelegate::Information info, m_fileItemDelegate->showInformation()) { + switch (info) { + case KFileItemDelegate::Size: + showSizeInfo->setChecked(true); + break; + case KFileItemDelegate::ModificationTime: + showDateInfo->setChecked(true); + break; + case KFileItemDelegate::Permissions: + showPermissionsInfo->setChecked(true); + break; + case KFileItemDelegate::Owner: + showOwnerInfo->setChecked(true); + break; + case KFileItemDelegate::OwnerAndGroup: + showGroupInfo->setChecked(true); + break; + case KFileItemDelegate::FriendlyMimeType: + showMimeInfo->setChecked(true); + break; + default: + break; + } + } +} + +void DolphinView::toggleAdditionalInfo(QAction* action) +{ + const KFileItemDelegate::Information info = + static_cast(action->data().toInt()); + KFileItemDelegate::InformationList list = additionalInfo(); + + const bool show = action->isChecked(); + + const int index = list.indexOf(info); + const bool containsInfo = (index >= 0); + if (show && !containsInfo) { + list.append(info); + setAdditionalInfo(list); + } else if (!show && containsInfo) { + list.removeAt(index); + setAdditionalInfo(list); + Q_ASSERT(list.indexOf(info) < 0); + } } void DolphinView::emitContentsMoved() @@ -800,28 +851,9 @@ void DolphinView::emitContentsMoved() } } -void DolphinView::updateCutItems() -{ - // restore the icons of all previously selected items to the - // original state... - QList::const_iterator it = m_cutItemsCache.begin(); - QList::const_iterator end = m_cutItemsCache.end(); - while (it != end) { - const QModelIndex index = m_dolphinModel->indexForUrl((*it).url); - if (index.isValid()) { - m_dolphinModel->setData(index, QIcon((*it).pixmap), Qt::DecorationRole); - } - ++it; - } - m_cutItemsCache.clear(); - - // ... and apply an item effect to all currently cut items - applyCutItemEffect(); -} - void DolphinView::showHoverInformation(const KFileItem& item) { - if (hasSelection()) { + if (hasSelection() || !m_active) { return; } @@ -830,30 +862,19 @@ void DolphinView::showHoverInformation(const KFileItem& item) void DolphinView::clearHoverInformation() { - emit requestItemInfo(KFileItem()); + if (m_active) { + emit requestItemInfo(KFileItem()); + } } - void DolphinView::createView() { - // delete current view - QAbstractItemView* view = itemView(); - if (view != 0) { - m_topLayout->removeWidget(view); - view->close(); - view->deleteLater(); - view = 0; - m_iconsView = 0; - m_detailsView = 0; - m_columnView = 0; - m_fileItemDelegate = 0; - } - + deleteView(); Q_ASSERT(m_iconsView == 0); Q_ASSERT(m_detailsView == 0); Q_ASSERT(m_columnView == 0); - // ... and recreate it representing the current mode + QAbstractItemView* view = 0; switch (m_mode) { case IconsView: { m_iconsView = new DolphinIconsView(this, m_controller); @@ -878,9 +899,22 @@ void DolphinView::createView() view->setItemDelegate(m_fileItemDelegate); view->setModel(m_proxyModel); + if (m_selectionModel != 0) { + view->setSelectionModel(m_selectionModel); + } else { + m_selectionModel = view->selectionModel(); + } + + // reparent the selection model, as it should not be deleted + // when deleting the model + m_selectionModel->setParent(this); + view->setSelectionMode(QAbstractItemView::ExtendedSelection); new KMimeTypeResolver(view, m_dolphinModel); + m_iconManager = new IconManager(view, m_proxyModel); + m_iconManager->setShowPreview(m_showPreview); + m_topLayout->insertWidget(1, view); connect(view->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), @@ -891,6 +925,22 @@ void DolphinView::createView() this, SLOT(emitContentsMoved())); } +void DolphinView::deleteView() +{ + QAbstractItemView* view = itemView(); + if (view != 0) { + m_topLayout->removeWidget(view); + view->close(); + view->deleteLater(); + view = 0; + m_iconsView = 0; + m_detailsView = 0; + m_columnView = 0; + m_fileItemDelegate = 0; + m_iconManager = 0; + } +} + QAbstractItemView* DolphinView::itemView() const { if (m_detailsView != 0) { @@ -920,48 +970,12 @@ bool DolphinView::isCutItem(const KFileItem& item) const return false; } -void DolphinView::applyCutItemEffect() -{ - const QMimeData* mimeData = QApplication::clipboard()->mimeData(); - if (!KonqMimeData::decodeIsCutSelection(mimeData)) { - return; - } - - KFileItemList items(m_dirLister->items()); - KFileItemList::const_iterator it = items.begin(); - const KFileItemList::const_iterator end = items.end(); - while (it != end) { - const KFileItem item = *it; - if (isCutItem(item)) { - const QModelIndex index = m_dolphinModel->indexForItem(item); - const QVariant value = m_dolphinModel->data(index, Qt::DecorationRole); - if (value.type() == QVariant::Icon) { - const QIcon icon(qvariant_cast(value)); - QPixmap pixmap = icon.pixmap(128, 128); - - // remember current pixmap for the item to be able - // to restore it when other items get cut - CutItem cutItem; - cutItem.url = item.url(); - cutItem.pixmap = pixmap; - m_cutItemsCache.append(cutItem); - - // apply icon effect to the cut item - KIconEffect iconEffect; - pixmap = iconEffect.apply(pixmap, KIconLoader::Desktop, KIconLoader::DisabledState); - m_dolphinModel->setData(index, QIcon(pixmap), Qt::DecorationRole); - } - } - ++it; - } -} - KToggleAction* DolphinView::iconsModeAction(KActionCollection* actionCollection) { KToggleAction* iconsView = actionCollection->add("icons"); iconsView->setText(i18nc("@action:inmenu View Mode", "Icons")); iconsView->setShortcut(Qt::CTRL | Qt::Key_1); - iconsView->setIcon(KIcon("fileview-icon")); + iconsView->setIcon(KIcon("view-list-icons")); iconsView->setData(QVariant::fromValue(IconsView)); return iconsView; } @@ -971,7 +985,7 @@ KToggleAction* DolphinView::detailsModeAction(KActionCollection* actionCollectio KToggleAction* detailsView = actionCollection->add("details"); detailsView->setText(i18nc("@action:inmenu View Mode", "Details")); detailsView->setShortcut(Qt::CTRL | Qt::Key_2); - detailsView->setIcon(KIcon("fileview-detailed")); + detailsView->setIcon(KIcon("view-list-details")); detailsView->setData(QVariant::fromValue(DetailsView)); return detailsView; } @@ -981,7 +995,7 @@ KToggleAction* DolphinView::columnsModeAction(KActionCollection* actionCollectio KToggleAction* columnView = actionCollection->add("columns"); columnView->setText(i18nc("@action:inmenu View Mode", "Columns")); columnView->setShortcut(Qt::CTRL | Qt::Key_3); - columnView->setIcon(KIcon("fileview-column")); + columnView->setIcon(KIcon("view-file-columns")); columnView->setData(QVariant::fromValue(ColumnView)); return columnView; } @@ -999,4 +1013,261 @@ 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... + int index = 1; + foreach (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); + emit doingOperation(KonqFileUndoManager::RENAME); + } + } + } + } 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 doingOperation(KonqFileUndoManager::RENAME); + } + } +} + +void DolphinView::trashSelectedItems() +{ + emit doingOperation(KonqFileUndoManager::TRASH); + KonqOperations::del(this, KonqOperations::TRASH, selectedUrls()); +} + +void DolphinView::deleteSelectedItems() +{ + const KUrl::List list = selectedUrls(); + const bool del = KonqOperations::askDeleteConfirmation(list, + KonqOperations::DEL, + KonqOperations::DEFAULT_CONFIRMATION, + this); + + if (del) { + KIO::Job* job = KIO::del(list); + connect(job, SIGNAL(result(KJob*)), + this, SLOT(slotDeleteFileFinished(KJob*))); + } +} + +void DolphinView::slotDeleteFileFinished(KJob* job) +{ + if (job->error() == 0) { + emit operationCompletedMessage(i18nc("@info:status", "Delete operation completed.")); + } else { + emit errorMessage(job->errorString()); + } +} + +void DolphinView::cutSelectedItems() +{ + QMimeData* mimeData = new QMimeData(); + const KUrl::List kdeUrls = selectedUrls(); + const KUrl::List mostLocalUrls; + KonqMimeData::populateMimeData(mimeData, kdeUrls, mostLocalUrls, true); + QApplication::clipboard()->setMimeData(mimeData); +} + +void DolphinView::copySelectedItems() +{ + QMimeData* mimeData = new QMimeData(); + const KUrl::List kdeUrls = selectedUrls(); + const KUrl::List mostLocalUrls; + KonqMimeData::populateMimeData(mimeData, kdeUrls, mostLocalUrls, false); + QApplication::clipboard()->setMimeData(mimeData); +} + +void DolphinView::paste() +{ + QClipboard* clipboard = QApplication::clipboard(); + const QMimeData* mimeData = clipboard->mimeData(); + + const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData); + + // per default the pasting is done into the current Url of the view + KUrl destUrl(url()); + + // check whether the pasting should be done into a selected directory + const KUrl::List selectedUrls = this->selectedUrls(); + if (selectedUrls.count() == 1) { + const KFileItem fileItem(S_IFDIR, + KFileItem::Unknown, + selectedUrls.first(), + true); + if (fileItem.isDir()) { + // only one item is selected which is a directory, hence paste + // into this directory + destUrl = selectedUrls.first(); + } + } + + if (KonqMimeData::decodeIsCutSelection(mimeData)) { + KonqOperations::copy(this, KonqOperations::MOVE, sourceUrls, destUrl); + emit doingOperation(KonqFileUndoManager::MOVE); + clipboard->clear(); + } else { + KonqOperations::copy(this, KonqOperations::COPY, sourceUrls, destUrl); + emit doingOperation(KonqFileUndoManager::COPY); + } +} + +QPair DolphinView::pasteInfo() const +{ + QPair ret; + QClipboard* clipboard = QApplication::clipboard(); + const QMimeData* mimeData = clipboard->mimeData(); + + KUrl::List urls = KUrl::List::fromMimeData(mimeData); + if (!urls.isEmpty()) { + ret.first = true; + ret.second = i18ncp("@action:inmenu", "Paste One File", "Paste %1 Files", urls.count()); + } else { + ret.first = false; + ret.second = i18nc("@action:inmenu", "Paste"); + } + + if (ret.first) { + const KFileItemList items = selectedItems(); + const uint count = items.count(); + if (count > 1) { + // pasting should not be allowed when more than one file + // is selected + ret.first = false; + } else if (count == 1) { + // Only one file is selected. Pasting is only allowed if this + // file is a directory. + ret.first = items.first().isDir(); + } + } + return ret; +} + +KAction* DolphinView::createRenameAction(KActionCollection* collection) +{ + KAction* rename = collection->addAction("rename"); + rename->setText(i18nc("@action:inmenu File", "Rename...")); + rename->setShortcut(Qt::Key_F2); + return rename; +} + +KAction* DolphinView::createMoveToTrashAction(KActionCollection* collection) +{ + KAction* moveToTrash = collection->addAction("move_to_trash"); + moveToTrash->setText(i18nc("@action:inmenu File", "Move to Trash")); + moveToTrash->setIcon(KIcon("user-trash")); + moveToTrash->setShortcut(QKeySequence::Delete); + return moveToTrash; +} + +KAction* DolphinView::createDeleteAction(KActionCollection* collection) +{ + KAction* deleteAction = collection->addAction("delete"); + deleteAction->setIcon(KIcon("edit-delete")); + deleteAction->setText(i18nc("@action:inmenu File", "Delete")); + deleteAction->setShortcut(Qt::SHIFT | Qt::Key_Delete); + return deleteAction; +} + +KAction* DolphinView::createNewDirAction(KActionCollection* collection) +{ + // This action doesn't appear in the GUI, it's for the shortcut only. + // KNewMenu takes care of the GUI stuff. + KAction* newDirAction = collection->addAction("create_dir"); + newDirAction->setText(i18n("Create Folder...")); + newDirAction->setShortcut(Qt::Key_F10); + return newDirAction; +} + +KAction* DolphinView::createSortDescendingAction(KActionCollection* collection) +{ + KToggleAction* sortDescending = collection->add("descending"); + sortDescending->setText(i18nc("@action:inmenu Sort", "Descending")); + return sortDescending; +} + +QActionGroup* DolphinView::createAdditionalInformationActionGroup(KActionCollection* collection) +{ + QActionGroup* showInformationGroup = new QActionGroup(collection); + showInformationGroup->setExclusive(false); + + KToggleAction* showSizeInfo = collection->add("show_size_info"); + showSizeInfo->setText(i18nc("@action:inmenu Additional information", "Size")); + showSizeInfo->setData(KFileItemDelegate::Size); + showSizeInfo->setActionGroup(showInformationGroup); + + KToggleAction* showDateInfo = collection->add("show_date_info"); + showDateInfo->setText(i18nc("@action:inmenu Additional information", "Date")); + showDateInfo->setData(KFileItemDelegate::ModificationTime); + showDateInfo->setActionGroup(showInformationGroup); + + KToggleAction* showPermissionsInfo = collection->add("show_permissions_info"); + showPermissionsInfo->setText(i18nc("@action:inmenu Additional information", "Permissions")); + showPermissionsInfo->setData(KFileItemDelegate::Permissions); + showPermissionsInfo->setActionGroup(showInformationGroup); + + KToggleAction* showOwnerInfo = collection->add("show_owner_info"); + showOwnerInfo->setText(i18nc("@action:inmenu Additional information", "Owner")); + showOwnerInfo->setData(KFileItemDelegate::Owner); + showOwnerInfo->setActionGroup(showInformationGroup); + + KToggleAction* showGroupInfo = collection->add("show_group_info"); + showGroupInfo->setText(i18nc("@action:inmenu Additional information", "Group")); + showGroupInfo->setData(KFileItemDelegate::OwnerAndGroup); + showGroupInfo->setActionGroup(showInformationGroup); + + KToggleAction* showMimeInfo = collection->add("show_mime_info"); + showMimeInfo->setText(i18nc("@action:inmenu Additional information", "Type")); + showMimeInfo->setData(KFileItemDelegate::FriendlyMimeType); + showMimeInfo->setActionGroup(showInformationGroup); + + return showInformationGroup; +} + #include "dolphinview.moc"