]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinview.cpp
Use hover effect from KFileItemDelegate also for the details view and assure that...
[dolphin.git] / src / dolphinview.cpp
index 5ec8c901eecb9b86432aee5c7c7ba1725d7c5b29..47c98f03fa95e5517ee4e4b54d18fb5fb776703f 100644 (file)
@@ -33,6 +33,7 @@
 #include <klocale.h>
 #include <kio/netaccess.h>
 #include <kio/renamedialog.h>
+#include <kio/previewjob.h>
 #include <kmimetyperesolver.h>
 #include <konq_operations.h>
 #include <kurl.h>
@@ -83,6 +84,7 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow,
             this, SLOT(updateActivationState()));
 
     m_urlNavigator = new UrlNavigator(url, this);
+    m_urlNavigator->setShowHiddenFiles(showHiddenFiles);
     connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)),
             this, SLOT(loadDirectory(const KUrl&)));
     connect(m_urlNavigator, SIGNAL(urlsDropped(const KUrl::List&, const KUrl&)),
@@ -108,6 +110,8 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow,
             this, SLOT(updateStatusBar()));
     connect(m_dirLister, SIGNAL(completed()),
             this, SLOT(updateItemCount()));
+    connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)),
+            this, SLOT(generatePreviews(const KFileItemList&)));
     connect(m_dirLister, SIGNAL(infoMessage(const QString&)),
             this, SLOT(showInfoMessage(const QString&)));
     connect(m_dirLister, SIGNAL(errorMessage(const QString&)),
@@ -204,15 +208,15 @@ void DolphinView::setShowPreview(bool show)
     ViewProperties props(m_urlNavigator->url());
     props.setShowPreview(show);
 
-    // TODO: wait until previews are possible with KFileItemDelegate
+    m_controller->setShowPreview(show);
 
     emit showPreviewChanged();
+    reload();
 }
 
 bool DolphinView::showPreview() const
 {
-    // TODO: wait until previews are possible with KFileItemDelegate
-    return true;
+    return m_controller->showPreview();
 }
 
 void DolphinView::setShowHiddenFiles(bool show)
@@ -226,6 +230,7 @@ void DolphinView::setShowHiddenFiles(bool show)
     props.save();
 
     m_dirLister->setShowingDotFiles(show);
+    m_urlNavigator->setShowHiddenFiles(show);
 
     emit showHiddenFilesChanged();
 
@@ -373,22 +378,22 @@ bool DolphinView::isUrlEditable() const
 
 void DolphinView::zoomIn()
 {
-    //itemEffectsManager()->zoomIn();
+    m_controller->triggerZoomIn();
 }
 
 void DolphinView::zoomOut()
 {
-    //itemEffectsManager()->zoomOut();
+    m_controller->triggerZoomOut();
 }
 
 bool DolphinView::isZoomInPossible() const
 {
-    return false; //itemEffectsManager()->isZoomInPossible();
+    return m_controller->isZoomInPossible();
 }
 
 bool DolphinView::isZoomOutPossible() const
 {
-    return false; //itemEffectsManager()->isZoomOutPossible();
+    return m_controller->isZoomOutPossible();
 }
 
 void DolphinView::setSorting(Sorting sorting)
@@ -456,7 +461,7 @@ KFileItemList DolphinView::selectedItems() const
 
     // Our view has a selection, we will map them back to the DirModel
     // and then fill the KFileItemList.
-    assert((view != 0) && (view->selectionModel() != 0));
+    Q_ASSERT((view != 0) && (view->selectionModel() != 0));
 
     const QItemSelection selection = m_proxyModel->mapSelectionToSource(view->selectionModel()->selection());
     KFileItemList itemList;
@@ -464,7 +469,7 @@ KFileItemList DolphinView::selectedItems() const
     const QModelIndexList indexList = selection.indexes();
     QModelIndexList::const_iterator end = indexList.end();
     for (QModelIndexList::const_iterator it = indexList.begin(); it != end; ++it) {
-        assert((*it).isValid());
+        Q_ASSERT((*it).isValid());
 
         KFileItem* item = m_dirModel->itemForIndex(*it);
         if (item != 0) {
@@ -603,7 +608,11 @@ void DolphinView::loadDirectory(const KUrl& url)
         emit sortOrderChanged(sortOrder);
     }
 
-    // TODO: handle previews (props.showPreview())
+    const bool showPreview = props.showPreview();
+    if (showPreview != m_controller->showPreview()) {
+        m_controller->setShowPreview(showPreview);
+        emit showPreviewChanged();
+    }
 
     startDirLister(url);
     emit urlChanged(url);
@@ -613,6 +622,10 @@ void DolphinView::loadDirectory(const KUrl& url)
 
 void DolphinView::triggerItem(const QModelIndex& index)
 {
+    if (!isValidNameIndex(index)) {
+        return;
+    }
+
     const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers();
     if ((modifier & Qt::ShiftModifier) || (modifier & Qt::ControlModifier)) {
         // items are selected by the user, hence don't trigger the
@@ -682,6 +695,24 @@ void DolphinView::updateItemCount()
     QTimer::singleShot(0, this, SLOT(restoreContentsPos()));
 }
 
+void DolphinView::generatePreviews(const KFileItemList& items)
+{
+    if (m_controller->showPreview()) {
+        KIO::PreviewJob* job = KIO::filePreview(items, 128);
+        connect(job, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)),
+                this, SLOT(showPreview(const KFileItem*, const QPixmap&)));
+    }
+}
+
+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);
+    }
+}
+
 void DolphinView::restoreContentsPos()
 {
     int index = 0;
@@ -866,7 +897,7 @@ void DolphinView::openContextMenu(const QPoint& pos)
     KFileItem* item = 0;
 
     const QModelIndex index = itemView()->indexAt(pos);
-    if (index.isValid()) {
+    if (isValidNameIndex(index)) {
         item = fileItem(index);
     }
 
@@ -879,7 +910,7 @@ void DolphinView::dropUrls(const KUrl::List& urls,
 {
     KFileItem* directory = 0;
     const QModelIndex index = itemView()->indexAt(pos);
-    if (index.isValid()) {
+    if (isValidNameIndex(index)) {
         KFileItem* item = fileItem(index);
         assert(item != 0);
         if (item->isDir()) {
@@ -961,10 +992,6 @@ void DolphinView::createView()
     view->setModel(m_proxyModel);
     view->setSelectionMode(QAbstractItemView::ExtendedSelection);
 
-    KFileItemDelegate* delegate = new KFileItemDelegate(this);
-    delegate->setAdditionalInformation(KFileItemDelegate::FriendlyMimeType);
-    view->setItemDelegate(delegate);
-
     new KMimeTypeResolver(view, m_dirModel);
     m_topLayout->insertWidget(1, view);
 
@@ -991,11 +1018,16 @@ void DolphinView::selectAll(QItemSelectionModel::SelectionFlags flags)
 
 QAbstractItemView* DolphinView::itemView() const
 {
-    assert((m_iconsView == 0) || (m_detailsView == 0));
+    Q_ASSERT((m_iconsView == 0) || (m_detailsView == 0));
     if (m_detailsView != 0) {
         return m_detailsView;
     }
     return m_iconsView;
 }
 
+bool DolphinView::isValidNameIndex(const QModelIndex& index) const
+{
+    return index.isValid() && (index.column() == KDirModel::Name);
+}
+
 #include "dolphinview.moc"