#include <QBoxLayout>
#include <QTimer>
#include <QScrollBar>
-#include <QClipboard>
#include <kcolorscheme.h>
#include <kdirlister.h>
#include <kio/deletejob.h>
#include <kio/netaccess.h>
#include <kio/previewjob.h>
+#include <kjob.h>
+#include <kmenu.h>
#include <kmimetyperesolver.h>
#include <konqmimedata.h>
#include <konq_operations.h>
#include <kurl.h>
+#include "dolphindropcontroller.h"
#include "dolphinmodel.h"
#include "dolphincolumnview.h"
#include "dolphincontroller.h"
m_selectionModel(0),
m_dolphinModel(dolphinModel),
m_dirLister(dirLister),
- m_proxyModel(proxyModel)
+ m_proxyModel(proxyModel),
+ m_previewJob(0)
{
setFocusPolicy(Qt::StrongFocus);
m_topLayout = new QVBoxLayout(this);
DolphinView::~DolphinView()
{
+ if (m_previewJob != 0) {
+ m_previewJob->kill();
+ m_previewJob = 0;
+ }
}
const KUrl& DolphinView::url() 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()
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&)));
+ if (m_previewJob != 0) {
+ m_previewJob->kill();
+ m_previewJob = 0;
+ }
+
+ m_previewJob = KIO::filePreview(items, 128);
+ connect(m_previewJob, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
+ this, SLOT(replaceIcon(const KFileItem&, const QPixmap&)));
+ connect(m_previewJob, SIGNAL(finished(KJob*)),
+ this, SLOT(slotPreviewJobFinished(KJob*)));
}
}
-void DolphinView::showPreview(const KFileItem& item, const QPixmap& pixmap)
+void DolphinView::replaceIcon(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
+ if (!m_showPreview || (item.url().directory() != m_dirLister->url().path())) {
+ // the preview has been deactivated in the meanwhile or 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 KUrl& destPath,
const KFileItem& destItem)
{
+ Q_ASSERT(!urls.isEmpty());
const KUrl& destination = !destItem.isNull() && destItem.isDir() ?
destItem.url() : destPath;
const KUrl sourceDir = KUrl(urls.first().directory());
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)
KToggleAction* iconsView = actionCollection->add<KToggleAction>("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;
}
KToggleAction* detailsView = actionCollection->add<KToggleAction>("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;
}
KToggleAction* columnView = actionCollection->add<KToggleAction>("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;
}
}
}
+void DolphinView::slotPreviewJobFinished(KJob* job)
+{
+ Q_ASSERT(job == m_previewJob);
+ m_previewJob = 0;
+}
+
void DolphinView::cutSelectedItems()
{
QMimeData* mimeData = new QMimeData();
}
if (ret.first) {
- const KUrl::List urls = selectedUrls();
- const uint count = urls.count();
+ const KFileItemList items = selectedItems();
+ const uint count = items.count();
if (count > 1) {
// pasting should not be allowed when more than one file
// is selected
} else if (count == 1) {
// Only one file is selected. Pasting is only allowed if this
// file is a directory.
- // TODO: this doesn't work with remote protocols; instead we need a
- // m_activeViewContainer->selectedFileItems() to get the real KFileItems
- const KFileItem fileItem(S_IFDIR,
- KFileItem::Unknown,
- urls.first(),
- true);
- ret.first = fileItem.isDir();
+ ret.first = items.first().isDir();
}
}
return ret;