X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/1cdb64a12bf5e6f3b97d38992799ba6bfbb06ef5..84ea1693dace41d500c0a61501d67508b83711da:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 8f06d3dc8..6dfdd3d7b 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -59,6 +59,7 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, bool showHiddenFiles) : QWidget(parent), m_showProgress(false), + m_blockContentsMovedSignal(false), m_mode(mode), m_iconSize(0), m_folderCount(0), @@ -85,6 +86,10 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, connect(m_mainWindow, SIGNAL(activeViewChanged()), this, SLOT(updateActivationState())); + QClipboard* clipboard = QApplication::clipboard(); + connect(clipboard, SIGNAL(dataChanged()), + this, SLOT(updateCutItems())); + m_urlNavigator = new UrlNavigator(url, this); m_urlNavigator->setShowHiddenFiles(showHiddenFiles); connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)), @@ -460,6 +465,11 @@ bool DolphinView::hasSelection() const return itemView()->selectionModel()->hasSelection(); } +void DolphinView::clearSelection() +{ + itemView()->selectionModel()->clear(); +} + KFileItemList DolphinView::selectedItems() const { const QAbstractItemView* view = itemView(); @@ -670,14 +680,14 @@ void DolphinView::triggerItem(const QModelIndex& index) else if (item->isFile()) { // allow to browse through ZIP and tar files KMimeType::Ptr mime = item->mimeTypePtr(); - if (mime->is("application/x-zip")) { + if (mime->is("application/zip")) { url.setProtocol("zip"); setUrl(url); } else if (mime->is("application/x-tar") || mime->is("application/x-tarz") || - mime->is("application/x-tbz") || - mime->is("application/x-tgz") || + mime->is("application/x-bzip-compressed-tar") || + mime->is("application/x-compressed-tar") || mime->is("application/x-tzo")) { url.setProtocol("tar"); setUrl(url); @@ -726,6 +736,7 @@ void DolphinView::updateItemCount() updateStatusBar(); + m_blockContentsMovedSignal = false; QTimer::singleShot(0, this, SLOT(restoreContentsPos())); } @@ -736,11 +747,6 @@ void DolphinView::generatePreviews(const KFileItemList& items) connect(job, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)), this, SLOT(showPreview(const KFileItem*, const QPixmap&))); } - - const QMimeData* mimeData = QApplication::clipboard()->mimeData(); - if (KonqMimeData::decodeIsCutSelection(mimeData)) { - QTimer::singleShot(0, this, SLOT(applyCutEffect())); - } } void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) @@ -751,11 +757,11 @@ void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) const QMimeData* mimeData = QApplication::clipboard()->mimeData(); if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(*item)) { KIconEffect iconEffect; - QPixmap cutPixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState); - m_dirModel->setData(idx, cutPixmap, Qt::DecorationRole); + const QPixmap cutPixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState); + m_dirModel->setData(idx, QIcon(cutPixmap), Qt::DecorationRole); } else { - m_dirModel->setData(idx, pixmap, Qt::DecorationRole); + m_dirModel->setData(idx, QIcon(pixmap), Qt::DecorationRole); } } } @@ -821,6 +827,8 @@ void DolphinView::startDirLister(const KUrl& url, bool reload) m_statusBar->setProgress(0); } + m_cutItemsCache.clear(); + m_blockContentsMovedSignal = true; m_dirLister->stop(); m_dirLister->openUrl(url, false, reload); } @@ -914,31 +922,6 @@ void DolphinView::requestActivation() m_mainWindow->setActiveView(this); } -void DolphinView::updateCutItems() -{ - 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) { - KFileItem* item = *it; - if (isCutItem(*item)) { - QPixmap pixmap = item->pixmap(0); - KIconEffect iconEffect; - pixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState); - const QModelIndex idx = m_dirModel->indexForItem(*item); - if (idx.isValid()) { - m_dirModel->setData(idx, pixmap, Qt::DecorationRole); - } - } - ++it; - } -} - void DolphinView::changeNameFilter(const QString& nameFilter) { // The name filter of KDirLister does a 'hard' filtering, which @@ -973,10 +956,7 @@ void DolphinView::openContextMenu(const QPoint& pos) item = fileItem(index); } - DolphinContextMenu contextMenu(m_mainWindow, - item, - url(), - selectedItems()); + DolphinContextMenu contextMenu(m_mainWindow, item, url()); contextMenu.open(); } @@ -1002,9 +982,6 @@ void DolphinView::dropUrls(const KUrl::List& urls, const KUrl& destination = (directory == 0) ? url() : directory->url(); - - kDebug() << "DolphinView::dropUrls() - destination: " << destination.prettyUrl() << endl; - dropUrls(urls, destination); } @@ -1014,7 +991,6 @@ void DolphinView::dropUrls(const KUrl::List& urls, m_mainWindow->dropUrls(urls, destination); } - void DolphinView::updateSorting(DolphinView::Sorting sorting) { ViewProperties props(url()); @@ -1037,7 +1013,9 @@ void DolphinView::updateSortOrder(Qt::SortOrder order) void DolphinView::emitContentsMoved() { - emit contentsMoved(contentsX(), contentsY()); + if (!m_blockContentsMovedSignal) { + emit contentsMoved(contentsX(), contentsY()); + } } void DolphinView::updateActivationState() @@ -1045,6 +1023,25 @@ void DolphinView::updateActivationState() m_urlNavigator->setActive(isActive()); } +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_dirModel->indexForUrl((*it).url); + if (index.isValid()) { + m_dirModel->setData(index, QIcon((*it).pixmap), Qt::DecorationRole); + } + ++it; + } + m_cutItemsCache.clear(); + + // ... and apply an item effect to all currently cut items + applyCutItemEffect(); +} + void DolphinView::createView() { // delete current view @@ -1139,4 +1136,41 @@ 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) { + KFileItem* item = *it; + if (isCutItem(*item)) { + const QModelIndex index = m_dirModel->indexForItem(*item); + const KFileItem* item = m_dirModel->itemForIndex(index); + const QVariant value = m_dirModel->data(index, Qt::DecorationRole); + if ((value.type() == QVariant::Icon) && (item != 0)) { + 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, K3Icon::Desktop, K3Icon::DisabledState); + m_dirModel->setData(index, QIcon(pixmap), Qt::DecorationRole); + } + } + ++it; + } +} + #include "dolphinview.moc"