X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/362817d1834f2ada3ea4552a25fa39bbbb540f8c..08a485349f2bd73682ac806b97d3630c3a7dd3fd:/src/views/dolphinview.cpp diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 379cd9f90..148459f68 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -81,6 +81,7 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : m_tabsForFiles(false), m_assureVisibleCurrentIndex(false), m_isFolderWritable(true), + m_dragging(false), m_url(url), m_mode(DolphinView::IconsView), m_additionalInfoList(), @@ -132,15 +133,18 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : m_container->setVisibleRoles(QList() << "name"); m_container->installEventFilter(this); setFocusProxy(m_container); + connect(m_container->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(hideToolTip())); + connect(m_container->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(hideToolTip())); KItemListController* controller = m_container->controller(); controller->setSelectionBehavior(KItemListController::MultiSelection); - connect(controller, SIGNAL(itemActivated(int)), - this, SLOT(slotItemActivated(int))); + connect(controller, SIGNAL(itemActivated(int)), this, SLOT(slotItemActivated(int))); + connect(controller, SIGNAL(itemsActivated(QSet)), this, SLOT(slotItemsActivated(QSet))); connect(controller, SIGNAL(itemMiddleClicked(int)), this, SLOT(slotItemMiddleClicked(int))); connect(controller, SIGNAL(itemContextMenuRequested(int,QPointF)), this, SLOT(slotItemContextMenuRequested(int,QPointF))); connect(controller, SIGNAL(viewContextMenuRequested(QPointF)), this, SLOT(slotViewContextMenuRequested(QPointF))); connect(controller, SIGNAL(headerContextMenuRequested(QPointF)), this, SLOT(slotHeaderContextMenuRequested(QPointF))); + connect(controller, SIGNAL(itemPressed(int,Qt::MouseButton)), this, SLOT(hideToolTip())); connect(controller, SIGNAL(itemHovered(int)), this, SLOT(slotItemHovered(int))); connect(controller, SIGNAL(itemUnhovered(int)), this, SLOT(slotItemUnhovered(int))); connect(controller, SIGNAL(itemDropEvent(int,QGraphicsSceneDragDropEvent*)), this, SLOT(slotItemDropEvent(int,QGraphicsSceneDragDropEvent*))); @@ -151,6 +155,15 @@ DolphinView::DolphinView(const KUrl& url, QWidget* parent) : connect(model, SIGNAL(loadingCompleted()), this, SLOT(slotLoadingCompleted())); } + KItemListView* view = controller->view(); + view->installEventFilter(this); + connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder,Qt::SortOrder)), + this, SLOT(slotSortOrderChangedByHeader(Qt::SortOrder,Qt::SortOrder))); + connect(view, SIGNAL(sortRoleChanged(QByteArray,QByteArray)), + this, SLOT(slotSortRoleChangedByHeader(QByteArray,QByteArray))); + connect(view, SIGNAL(visibleRolesChanged(QList,QList)), + this, SLOT(slotVisibleRolesChangedByHeader(QList,QList))); + KItemListSelectionManager* selectionManager = controller->selectionManager(); connect(selectionManager, SIGNAL(selectionChanged(QSet,QSet)), this, SLOT(slotSelectionChanged(QSet,QSet))); @@ -259,8 +272,7 @@ void DolphinView::setHiddenFilesShown(bool show) ViewProperties props(url()); props.setHiddenFilesShown(show); - m_dirLister->setShowingDotFiles(show); - m_dirLister->emitChanges(); + fileItemModel()->setShowHiddenFiles(show); emit hiddenFilesShownChanged(show); } @@ -300,11 +312,8 @@ KFileItemList DolphinView::selectedItems() const const KItemListSelectionManager* selectionManager = m_container->controller()->selectionManager(); const QSet selectedIndexes = selectionManager->selectedItems(); - QList sortedIndexes = selectedIndexes.toList(); - qSort(sortedIndexes); - KFileItemList selectedItems; - QListIterator it(sortedIndexes); + QSetIterator it(selectedIndexes); while (it.hasNext()) { const int index = it.next(); selectedItems.append(model->fileItem(index)); @@ -441,28 +450,34 @@ void DolphinView::stopLoading() m_dirLister->stop(); } -void DolphinView::refresh() +void DolphinView::readSettings() { - const bool oldActivationState = m_active; - const int oldZoomLevel = zoomLevel(); - m_active = true; + const int oldZoomLevel = m_container->zoomLevel(); + GeneralSettings::self()->readConfig(); + m_container->readSettings(); applyViewProperties(); - reload(); - setActive(oldActivationState); - updateZoomLevel(oldZoomLevel); + const int newZoomLevel = m_container->zoomLevel(); + if (newZoomLevel != oldZoomLevel) { + emit zoomLevelChanged(newZoomLevel, oldZoomLevel); + } +} + +void DolphinView::writeSettings() +{ + GeneralSettings::self()->writeConfig(); + m_container->writeSettings(); } void DolphinView::setNameFilter(const QString& nameFilter) { - Q_UNUSED(nameFilter); - //m_viewModeController->setNameFilter(nameFilter); + fileItemModel()->setNameFilter(nameFilter); } QString DolphinView::nameFilter() const { - return QString(); //m_viewModeController->nameFilter(); + return fileItemModel()->nameFilter(); } void DolphinView::calculateItemCount(int& fileCount, @@ -550,9 +565,7 @@ void DolphinView::setUrl(const KUrl& url) emit urlAboutToBeChanged(url); m_url = url; - if (GeneralSettings::showToolTips()) { - m_toolTipManager->hideToolTip(); - } + hideToolTip(); // It is important to clear the items from the model before // applying the view properties, otherwise expensive operations @@ -665,6 +678,22 @@ bool DolphinView::eventFilter(QObject* watched, QEvent* event) } break; + case QEvent::GraphicsSceneDragEnter: + if (watched == m_container->controller()->view()) { + m_dragging = true; + } + break; + + case QEvent::GraphicsSceneDragLeave: + if (watched == m_container->controller()->view()) { + m_dragging = false; + } + break; + + case QEvent::GraphicsSceneDrop: + if (watched == m_container->controller()->view()) { + m_dragging = false; + } default: break; } @@ -685,6 +714,12 @@ void DolphinView::wheelEvent(QWheelEvent* event) } } +void DolphinView::hideEvent(QHideEvent* event) +{ + hideToolTip(); + QWidget::hideEvent(event); +} + void DolphinView::activate() { setActive(true); @@ -692,22 +727,30 @@ void DolphinView::activate() void DolphinView::slotItemActivated(int index) { - Q_UNUSED(index); + const KFileItem item = fileItemModel()->fileItem(index); + if (!item.isNull()) { + emit itemActivated(item); + } +} - const KFileItemList items = selectedItems(); - if (items.isEmpty()) { - return; +void DolphinView::slotItemsActivated(const QSet& indexes) +{ + Q_ASSERT(indexes.count() >= 2); + + KFileItemList items; + + KFileItemModel* model = fileItemModel(); + QSetIterator it(indexes); + while (it.hasNext()) { + const int index = it.next(); + items.append(model->fileItem(index)); } - if (items.count() == 1) { - emit itemActivated(items.at(0)); // caught by DolphinViewContainer or DolphinPart - } else { - foreach (const KFileItem& item, items) { - if (item.isDir()) { - emit tabRequested(item.url()); - } else { - emit itemActivated(item); - } + foreach (const KFileItem& item, items) { + if (item.isDir()) { + emit tabRequested(item.url()); + } else { + emit itemActivated(item); } } } @@ -722,18 +765,12 @@ void DolphinView::slotItemMiddleClicked(int index) void DolphinView::slotItemContextMenuRequested(int index, const QPointF& pos) { - if (GeneralSettings::showToolTips()) { - m_toolTipManager->hideToolTip(); - } const KFileItem item = fileItemModel()->fileItem(index); emit requestContextMenu(pos.toPoint(), item, url(), QList()); } void DolphinView::slotViewContextMenuRequested(const QPointF& pos) { - if (GeneralSettings::showToolTips()) { - m_toolTipManager->hideToolTip(); - } emit requestContextMenu(pos.toPoint(), KFileItem(), url(), QList()); } @@ -791,8 +828,8 @@ void DolphinView::slotItemHovered(int index) { const KFileItem item = fileItemModel()->fileItem(index); - if (GeneralSettings::showToolTips()) { - QRectF itemRect = m_container->controller()->view()->itemRect(index); + if (GeneralSettings::showToolTips() && !m_dragging) { + QRectF itemRect = m_container->controller()->view()->itemContextRect(index); const QPoint pos = m_container->mapToGlobal(itemRect.topLeft().toPoint()); itemRect.moveTo(pos); @@ -805,15 +842,23 @@ void DolphinView::slotItemHovered(int index) void DolphinView::slotItemUnhovered(int index) { Q_UNUSED(index); - if (GeneralSettings::showToolTips()) { - m_toolTipManager->hideToolTip(); - } + hideToolTip(); emit requestItemInfo(KFileItem()); } void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event) { - const KFileItem destItem = fileItemModel()->fileItem(index); + KUrl destUrl; + KFileItem destItem = fileItemModel()->fileItem(index); + if (destItem.isNull() || (!destItem.isDir() && !destItem.isDesktopFile())) { + // Use the URL of the view as drop target if the item is no directory + // or desktop-file + destItem = fileItemModel()->rootItem(); + destUrl = url(); + } else { + // The item represents a directory or desktop-file + destUrl = destItem.url(); + } QDropEvent dropEvent(event->pos().toPoint(), event->possibleActions(), @@ -821,7 +866,10 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even event->buttons(), event->modifiers()); - DragAndDropHelper::dropUrls(destItem, url(), &dropEvent, this); + const QString error = DragAndDropHelper::dropUrls(destItem, destUrl, &dropEvent); + if (!error.isEmpty()) { + emit errorMessage(error); + } } void DolphinView::slotModelChanged(KItemModelBase* current, KItemModelBase* previous) @@ -857,16 +905,6 @@ void DolphinView::emitSelectionChangedSignal() emit selectionChanged(selectedItems()); } -void DolphinView::dropUrls(const KFileItem& destItem, - const KUrl& destPath, - QDropEvent* event) -{ - Q_UNUSED(destItem); - Q_UNUSED(destPath); - markPastedUrlsAsSelected(event->mimeData()); - //DragAndDropHelper::instance().dropUrls(destItem, destPath, event, this); -} - void DolphinView::updateSorting(DolphinView::Sorting sorting) { ViewProperties props(url()); @@ -940,6 +978,7 @@ void DolphinView::saveState(QDataStream& stream) const int currentIndex = m_container->controller()->selectionManager()->currentItem(); if (currentIndex != -1) { KFileItem item = fileItemModel()->fileItem(currentIndex); + Q_ASSERT(!item.isNull()); // If the current index is valid a item must exist KUrl currentItemUrl = item.url(); stream << currentItemUrl; } else { @@ -1035,6 +1074,13 @@ void DolphinView::updateViewState() } } +void DolphinView::hideToolTip() +{ + if (GeneralSettings::showToolTips()) { + m_toolTipManager->hideToolTip(); + } +} + void DolphinView::showHoverInformation(const KFileItem& item) { emit requestItemInfo(item); @@ -1090,6 +1136,52 @@ void DolphinView::slotRefreshItems() } } +void DolphinView::slotSortOrderChangedByHeader(Qt::SortOrder current, Qt::SortOrder previous) +{ + Q_UNUSED(previous); + Q_ASSERT(fileItemModel()->sortOrder() == current); + + ViewProperties props(url()); + props.setSortOrder(current); + + emit sortOrderChanged(current); +} + +void DolphinView::slotSortRoleChangedByHeader(const QByteArray& current, const QByteArray& previous) +{ + Q_UNUSED(previous); + Q_ASSERT(fileItemModel()->sortRole() == current); + + ViewProperties props(url()); + const Sorting sorting = sortingForSortRole(current); + props.setSorting(sorting); + + emit sortingChanged(sorting); +} + +void DolphinView::slotVisibleRolesChangedByHeader(const QList& current, + const QList& previous) +{ + Q_UNUSED(previous); + Q_ASSERT(m_container->controller()->view()->visibleRoles() == current); + + const QList previousAdditionalInfoList = m_additionalInfoList; + + m_additionalInfoList.clear(); + m_additionalInfoList.reserve(current.count()); + const AdditionalInfoAccessor& infoAccessor = AdditionalInfoAccessor::instance(); + foreach (const QByteArray& role, current) { + if (role != "name") { + m_additionalInfoList.append(infoAccessor.additionalInfo(role)); + } + } + + ViewProperties props(url()); + props.setAdditionalInfoList(m_additionalInfoList); + + emit additionalInfoListChanged(m_additionalInfoList, previousAdditionalInfoList); +} + KFileItemModel* DolphinView::fileItemModel() const { return static_cast(m_container->controller()->model()); @@ -1115,6 +1207,7 @@ void DolphinView::applyViewProperties() m_container->beginTransaction(); const ViewProperties props(url()); + KFileItemModel* model = fileItemModel(); const Mode mode = props.viewMode(); if (m_mode != mode) { @@ -1141,14 +1234,11 @@ void DolphinView::applyViewProperties() } const bool hiddenFilesShown = props.hiddenFilesShown(); - if (hiddenFilesShown != m_dirLister->showingDotFiles()) { - m_dirLister->setShowingDotFiles(hiddenFilesShown); - m_dirLister->emitChanges(); + if (hiddenFilesShown != model->showHiddenFiles()) { + model->setShowHiddenFiles(hiddenFilesShown); emit hiddenFilesShownChanged(hiddenFilesShown); } - KFileItemModel* model = fileItemModel(); - const bool groupedSorting = props.groupedSorting(); if (groupedSorting != model->groupedSorting()) { model->setGroupedSorting(groupedSorting); @@ -1219,16 +1309,6 @@ void DolphinView::pasteToUrl(const KUrl& url) KonqOperations::doPaste(this, url); } -void DolphinView::updateZoomLevel(int oldZoomLevel) -{ - Q_UNUSED(oldZoomLevel); - /* const int newZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(m_viewAccessor.itemView()->iconSize()); - if (oldZoomLevel != newZoomLevel) { - m_viewModeController->setZoomLevel(newZoomLevel); - emit zoomLevelChanged(newZoomLevel); - }*/ -} - KUrl::List DolphinView::simplifiedSelectedUrls() const { KUrl::List urls;