X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/90b0e715d220f64a9f50f06d4757fca2a6a32b46..b5cc2a6924cfd8f59611d3cec2edbb00a08b4ff1:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 47c98f03f..50f56a478 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -31,10 +32,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -110,6 +113,8 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, this, SLOT(updateStatusBar())); connect(m_dirLister, SIGNAL(completed()), this, SLOT(updateItemCount())); + connect(m_dirLister, SIGNAL(completed()), + this, SLOT(updateCutItems())); connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), this, SLOT(generatePreviews(const KFileItemList&))); connect(m_dirLister, SIGNAL(infoMessage(const QString&)), @@ -638,18 +643,40 @@ void DolphinView::triggerItem(const QModelIndex& index) return; } + // Prefer the local path over the URL. This assures that the + // volume space information is correct. Assuming that the URL is media:/sda1, + // and the local path is /windows/C: For the URL the space info is related + // to the root partition (and hence wrong) and for the local path the space + // info is related to the windows partition (-> correct). + const QString localPath(item->localPath()); + KUrl url; + if (localPath.isEmpty()) { + url = item->url(); + } + else { + url = localPath; + } + if (item->isDir()) { - // Prefer the local path over the URL. This assures that the - // volume space information is correct. Assuming that the URL is media:/sda1, - // and the local path is /windows/C: For the URL the space info is related - // to the root partition (and hence wrong) and for the local path the space - // info is related to the windows partition (-> correct). - const QString localPath(item->localPath()); - if (localPath.isEmpty()) { - setUrl(item->url()); + setUrl(url); + } + else if (item->isFile()) { + // allow to browse through ZIP and tar files + KMimeType::Ptr mime = item->mimeTypePtr(); + if (mime->is("application/x-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-tzo")) { + url.setProtocol("tar"); + setUrl(url); } else { - setUrl(KUrl(localPath)); + item->run(); } } else { @@ -702,6 +729,11 @@ 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(1000, this, SLOT(applyCutEffect())); + } } void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) @@ -709,7 +741,15 @@ void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) Q_ASSERT(item != 0); const QModelIndex idx = m_dirModel->indexForItem(*item); if (idx.isValid() && (idx.column() == 0)) { - m_dirModel->setData(idx, pixmap, Qt::DecorationRole); + 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); + } + else { + m_dirModel->setData(idx, pixmap, Qt::DecorationRole); + } } } @@ -867,6 +907,31 @@ 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 @@ -1030,4 +1095,22 @@ bool DolphinView::isValidNameIndex(const QModelIndex& index) const return index.isValid() && (index.column() == KDirModel::Name); } +bool DolphinView::isCutItem(const KFileItem& item) const +{ + const QMimeData* mimeData = QApplication::clipboard()->mimeData(); + const KUrl::List cutUrls = KUrl::List::fromMimeData(mimeData); + + const KUrl& itemUrl = item.url(); + KUrl::List::const_iterator it = cutUrls.begin(); + const KUrl::List::const_iterator end = cutUrls.end(); + while (it != end){ + if (*it == itemUrl) { + return true; + } + ++it; + } + + return false; +} + #include "dolphinview.moc"