X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/1daef0dc52a18b03e2bc5b4ce85944356b6b5da3..bd925ea49a7e4e7c6e652f4529dcd0c4e25fd19a:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 819420210..f5a972d37 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -19,8 +19,6 @@ ***************************************************************************/ #include "dolphinview.h" -#include -#include #include #include @@ -30,6 +28,7 @@ #include #include +#include #include #include #include @@ -40,9 +39,11 @@ #include #include #include +#include #include #include #include +#include #include #include "dolphindropcontroller.h" @@ -62,8 +63,7 @@ DolphinView::DolphinView(QWidget* parent, const KUrl& url, KDirLister* dirLister, DolphinModel* dolphinModel, - DolphinSortFilterProxyModel* proxyModel, - KActionCollection* actionCollection) : + DolphinSortFilterProxyModel* proxyModel) : QWidget(parent), m_active(true), m_showPreview(false), @@ -87,9 +87,6 @@ DolphinView::DolphinView(QWidget* parent, m_topLayout->setSpacing(0); m_topLayout->setMargin(0); - connect(m_dirLister, SIGNAL(completed()), - this, SLOT(updateCutItems())); - m_controller = new DolphinController(this); m_controller->setUrl(url); @@ -123,16 +120,6 @@ DolphinView::DolphinView(QWidget* parent, applyViewProperties(url); m_topLayout->addWidget(itemView()); - - Q_ASSERT(actionCollection != 0); - if (actionCollection->action("create_dir") == 0) { - // This action doesn't appear in the GUI, it's for the shortcut only. - // KNewMenu takes care of the GUI stuff. - KAction* newDirAction = actionCollection->addAction("create_dir"); - newDirAction->setText(i18n("Create Folder...")); - connect(newDirAction, SIGNAL(triggered()), SLOT(createDir())); - newDirAction->setShortcut(Qt::Key_F10); - } } DolphinView::~DolphinView() @@ -196,16 +183,6 @@ void DolphinView::setMode(Mode mode) m_mode = mode; - if (isColumnViewActive()) { - // When changing the mode in the column view, it makes sense - // to go back to the root URL of the column view automatically. - // Otherwise there it would not be possible to turn off the column view - // without focusing the first column. - const KUrl root = rootUrl(); - setUrl(root); - m_controller->setUrl(root); - } - deleteView(); const KUrl viewPropsUrl = viewPropertiesUrl(); @@ -217,7 +194,7 @@ void DolphinView::setMode(Mode mode) // 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 @@ -251,7 +228,7 @@ void DolphinView::setShowPreview(bool show) m_iconManager->setShowPreview(show); emit showPreviewChanged(); - loadDirectory(viewPropsUrl, true); + loadDirectory(viewPropsUrl); } bool DolphinView::showPreview() const @@ -272,7 +249,7 @@ void DolphinView::setShowHiddenFiles(bool show) m_dirLister->setShowingDotFiles(show); emit showHiddenFilesChanged(); - loadDirectory(viewPropsUrl, true); + loadDirectory(viewPropsUrl); } bool DolphinView::showHiddenFiles() const @@ -421,11 +398,13 @@ QPoint DolphinView::contentsPosition() const void DolphinView::zoomIn() { m_controller->triggerZoomIn(); + m_iconManager->updatePreviews(); } void DolphinView::zoomOut() { m_controller->triggerZoomOut(); + m_iconManager->updatePreviews(); } bool DolphinView::isZoomInPossible() const @@ -469,12 +448,12 @@ 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 // the file item delegate info to its columns internally - loadDirectory(viewPropsUrl, true); + loadDirectory(viewPropsUrl); } } @@ -556,6 +535,29 @@ void DolphinView::mouseReleaseEvent(QMouseEvent* event) QWidget::mouseReleaseEvent(event); setActive(true); } + +void DolphinView::wheelEvent(QWheelEvent* event) +{ + if (event->modifiers() & Qt::ControlModifier) { + const int delta = event->delta(); + if ((delta > 0) && isZoomInPossible()) { + zoomIn(); + } else if ((delta < 0) && isZoomOutPossible()) { + zoomOut(); + } + event->accept(); + } +} + +bool DolphinView::eventFilter(QObject* watched, QEvent* event) +{ + if ((watched == itemView()) && (event->type() == QEvent::FocusIn)) { + m_controller->requestActivation(); + } + + return QWidget::eventFilter(watched, event); +} + void DolphinView::activate() { setActive(true); @@ -613,7 +615,7 @@ void DolphinView::loadDirectory(const KUrl& url, bool reload) KUrl DolphinView::viewPropertiesUrl() const { if (isColumnViewActive()) { - return m_dirLister->url(); + return m_columnView->rootUrl(); } return url(); @@ -670,7 +672,7 @@ 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(); @@ -757,6 +759,14 @@ 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()); @@ -765,8 +775,80 @@ void DolphinView::updateAdditionalInfo(const KFileItemDelegate::InformationList& m_fileItemDelegate->setShowInformation(info); - emit additionalInfoChanged(info); + emit additionalInfoChanged(); +} + +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() @@ -825,6 +907,9 @@ void DolphinView::createView() } Q_ASSERT(view != 0); + view->installEventFilter(this); + + m_controller->setItemView(view); m_fileItemDelegate = new KFileItemDelegate(view); view->setItemDelegate(m_fileItemDelegate); @@ -901,49 +986,6 @@ bool DolphinView::isCutItem(const KFileItem& item) const return false; } -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("view-list-icons")); - iconsView->setData(QVariant::fromValue(IconsView)); - return iconsView; -} - -KToggleAction* DolphinView::detailsModeAction(KActionCollection* actionCollection) -{ - KToggleAction* detailsView = actionCollection->add("details"); - detailsView->setText(i18nc("@action:inmenu View Mode", "Details")); - detailsView->setShortcut(Qt::CTRL | Qt::Key_2); - detailsView->setIcon(KIcon("view-list-details")); - detailsView->setData(QVariant::fromValue(DetailsView)); - return detailsView; -} - -KToggleAction* DolphinView::columnsModeAction(KActionCollection* actionCollection) -{ - KToggleAction* columnView = actionCollection->add("columns"); - columnView->setText(i18nc("@action:inmenu View Mode", "Columns")); - columnView->setShortcut(Qt::CTRL | Qt::Key_3); - columnView->setIcon(KIcon("view-file-columns")); - columnView->setData(QVariant::fromValue(ColumnView)); - return columnView; -} - -QString DolphinView::currentViewModeActionName() const -{ - switch (m_mode) { - case DolphinView::IconsView: - return "icons"; - case DolphinView::DetailsView: - return "details"; - case DolphinView::ColumnView: - return "columns"; - } - return QString(); // can't happen -} - void DolphinView::renameSelectedItems() { const KFileItemList items = selectedItems(); @@ -1037,11 +1079,6 @@ void DolphinView::slotDeleteFileFinished(KJob* job) } } -void DolphinView::createDir() -{ - KonqOperations::newDir(this, url()); -} - void DolphinView::cutSelectedItems() { QMimeData* mimeData = new QMimeData(); @@ -1067,8 +1104,8 @@ void DolphinView::paste() const KUrl::List sourceUrls = KUrl::List::fromMimeData(mimeData); - // per default the pasting is done into the current Url of the view - KUrl destUrl(url()); + // 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(); @@ -1081,6 +1118,17 @@ void DolphinView::paste() // only one item is selected which is a directory, hence paste // into this directory destUrl = selectedUrls.first(); + if (sourceUrls.contains(destUrl)) { + const QString text = i18nc("@info", "The folder %1 is pasted into itself. Is this intended?", fileItem.name()); + int result = KMessageBox::questionYesNo(window(), + text, + i18nc("@title:window", "Paste into Folder"), + KGuiItem(i18nc("@label", "Paste"), "dialog-ok"), + KGuiItem(i18nc("@label", "Cancel"), "dialog-cancel")); + if (result == KMessageBox::No) { + return; + } + } } } @@ -1103,7 +1151,14 @@ QPair DolphinView::pasteInfo() const 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()); + if (urls.count() == 1) { + const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, urls.first(), true); + ret.second = item.isDir() ? i18nc("@action:inmenu", "Paste One Folder") : + i18nc("@action:inmenu", "Paste One File"); + + } else { + ret.second = i18ncp("@action:inmenu", "Paste One Item", "Paste %1 Items", urls.count()); + } } else { ret.first = false; ret.second = i18nc("@action:inmenu", "Paste"); @@ -1125,30 +1180,4 @@ QPair DolphinView::pasteInfo() const 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; -} - #include "dolphinview.moc"