All pastes #798644 Raw Edit

Untitled

public text v1 · immutable
#798644 ·published 2007-11-26 22:38 UTC
rendered paste body
jon@ibook:~/kdesvn/patches$ cat kdiroperator_2.diff
Index: kdiroperator.cpp
===================================================================
--- kdiroperator.cpp    (revisión: 741751)
+++ kdiroperator.cpp    (copia de trabajo)
@@ -21,6 +21,7 @@
 #include "kdiroperator.h"
 #include "kdirmodel.h"
 #include "kdiroperatordetailview_p.h"
+#include "kdiroperatorimagesview_p.h"
 #include "kdirsortfilterproxymodel.h"
 #include "kfileview.h"
 #include "kfileitem.h"
@@ -101,7 +102,7 @@
     QListView(parent)
 {
     setViewMode(QListView::IconMode);
-    setFlow(QListView::TopToBottom);
+    setFlow(QListView::LeftToRight);
     setResizeMode(QListView::Adjust);
     setSpacing(KDialog::spacingHint());
     setMovement(QListView::Static);
@@ -109,15 +110,19 @@
     setVerticalScrollMode(QListView::ScrollPerPixel);
     setHorizontalScrollMode(QListView::ScrollPerPixel);

+    QSize itemSize(KIconLoader::SizeHuge,  KIconLoader::SizeHuge);
+//    QSize itemSize(KIconLoader::SizeHuge, KIconLoader::SizeHuge);
+
     m_viewOptions = QListView::viewOptions();
     m_viewOptions.showDecorationSelected = true;
-    m_viewOptions.decorationPosition = QStyleOptionViewItem::Left;
+    m_viewOptions.decorationPosition = QStyleOptionViewItem::Top;
     m_viewOptions.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
-    m_viewOptions.decorationSize = QSize(KIconLoader::SizeSmall, KIconLoader::SizeSmall);
+    m_viewOptions.decorationSize = QSize(KIconLoader::SizeHuge, KIconLoader::SizeHuge);

     QFontMetrics metrics(m_viewOptions.font);
     const int fontHeight = metrics.height();
-    setGridSize(QSize(fontHeight * 10, fontHeight + 4));
+//    setGridSize(QSize(fontHeight * 10, fontHeight + 4));
+    setGridSize(QSize(KIconLoader::SizeHuge + 30, KIconLoader::SizeHuge + 30));
 }

 KDirOperatorIconView::~KDirOperatorIconView()
@@ -167,6 +172,7 @@
     // private slots
     void _k_slotDetailedView();
     void _k_slotSimpleView();
+    void _k_slotIconView();
     void _k_slotToggleHidden(bool);
     void _k_togglePreview(bool);
     void _k_slotSortByName();
@@ -323,6 +329,9 @@

     setDirLister(new KDirLister());

+    connect(d->dirLister, SIGNAL(newItems(const KFileItemList&)),
+            this, SLOT(generatePreviews(const KFileItemList&)));
+
     connect(&d->completion, SIGNAL(match(const QString&)),
             SLOT(slotCompletionMatch(const QString&)));

@@ -452,6 +461,30 @@
     setView(static_cast<KFile::FileView>(d->viewKind));
 }

+void KDirOperator::generatePreviews(const KFileItemList& items)
+{
+
+    KFile::FileView fv = static_cast<KFile::FileView>(d->viewKind);
+    if (KFile::isSimpleView(fv)) {
+        KIO::PreviewJob* job = KIO::filePreview(items, 128);
+        connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
+                this, SLOT(showPreview(const KFileItem&, const QPixmap&)));
+    }
+}
+
+void KDirOperator::showPreview(const KFileItem& item, const QPixmap& pixmap)
+{
+    Q_ASSERT(!item.isNull());
+    if (item.url().directory() != d->dirLister->url().path()) {
+        return;
+    }
+
+    const QModelIndex idx = d->dirModel->indexForItem(item);
+    d->dirModel->setData(idx, QIcon(pixmap), Qt::DecorationRole);
+
+}
+
+
 KFileItemList KDirOperator::selectedItems() const
 {
     KFileItemList itemList;
@@ -510,16 +543,22 @@

 void KDirOperator::Private::_k_slotDetailedView()
 {
-    KFile::FileView view = static_cast<KFile::FileView>((viewKind & ~KFile::Simple) | KFile::Detail);
+    KFile::FileView view = static_cast<KFile::FileView>((viewKind & ~KFile::Simple & ~KFile::PreviewContents) | KFile::Detail);
     parent->setView(view);
 }

 void KDirOperator::Private::_k_slotSimpleView()
 {
-    KFile::FileView view = static_cast<KFile::FileView>((viewKind & ~KFile::Detail) | KFile::Simple);
+    KFile::FileView view = static_cast<KFile::FileView>((viewKind & ~KFile::Detail & ~KFile::PreviewContents) | KFile::Simple);
     parent->setView(view);
 }

+void KDirOperator::Private::_k_slotIconView()
+{
+    KFile::FileView view = static_cast<KFile::FileView>((viewKind & ~KFile::Detail & KFile::Simple) | KFile::PreviewContents);
+    parent->setView(view);
+}
+
 void KDirOperator::Private::_k_slotToggleHidden(bool show)
 {
     dirLister->setShowingDotFiles(show);
@@ -1185,9 +1224,12 @@
         connect(detailView->header(), SIGNAL(sortIndicatorChanged (int, Qt::SortOrder)),
                 this, SLOT(_k_synchronizeSortingState(int, Qt::SortOrder)));
         itemView = detailView;
-    } else {
+    } else if (KFile::isSimpleView(viewKind)) {
         itemView = new KDirOperatorIconView(parent);
     }
+    else {
+        itemView = new KDirOperatorImagesView(parent);
+    }

     return itemView;
 }
@@ -1215,13 +1257,20 @@
     if (viewKind == KFile::Default) {
         if (KFile::isDetailView((KFile::FileView)d->defaultView)) {
             viewKind = KFile::Detail;
+        } else if (KFile::isSimpleView((KFile::FileView)d->defaultView)){
+            viewKind = KFile::Simple;
         } else {
-            viewKind = KFile::Simple;
+            viewKind = KFile::PreviewContents;
         }

-        const KFile::FileView defaultViewKind = static_cast<KFile::FileView>(d->defaultView);
-        preview = (KFile::isPreviewInfo(defaultViewKind) || KFile::isPreviewContents(defaultViewKind))
-                  && d->actionCollection->action("preview")->isEnabled();
+        if (viewKind != KFile::PreviewContents) {
+            const KFile::FileView defaultViewKind = static_cast<KFile::FileView>(d->defaultView);
+            preview = (KFile::isPreviewInfo(defaultViewKind) || KFile::isPreviewContents(defaultViewKind))
+                      && d->actionCollection->action("preview")->isEnabled();
+        }
+        else {
+            preview = false;
+        }
     }

     d->viewKind = static_cast<int>(viewKind);
@@ -1542,10 +1591,17 @@
     detailedAction->setIcon(KIcon(QLatin1String("fileview-detailed")));
     connect(detailedAction, SIGNAL(activated()), SLOT(_k_slotDetailedView()));

+    KToggleAction *iconViewAction = new KToggleAction(i18n("Icon View"), this);
+    d->actionCollection->addAction("icon view", iconViewAction);
+    iconViewAction->setIcon(KIcon(QLatin1String("fileview-icon")));
+    connect(iconViewAction, SIGNAL(activated()), SLOT(_k_slotIconView()));
+
     QActionGroup* viewGroup = new QActionGroup(this);
     shortAction->setActionGroup(viewGroup);
+    iconViewAction->setActionGroup(viewGroup);
     detailedAction->setActionGroup(viewGroup);

+
     KToggleAction *showHiddenAction = new KToggleAction(i18n("Show Hidden Files"), this);
     d->actionCollection->addAction("show hidden", showHiddenAction);
     connect(showHiddenAction, SIGNAL(toggled(bool)), SLOT(_k_slotToggleHidden(bool)));
@@ -1566,6 +1622,7 @@
     d->actionCollection->addAction("view menu", viewMenu);
     viewMenu->addAction(shortAction);
     viewMenu->addAction(detailedAction);
+    viewMenu->addAction(iconViewAction);
     // TODO: QAbstractItemView does not offer an action collection. Provide
     // an interface to add a custom action collection.

Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt      (revisión: 741751)
+++ CMakeLists.txt      (copia de trabajo)
@@ -16,6 +16,7 @@
   k3filetreeviewitem.cpp
   kdiroperator.cpp
   kdiroperatordetailview.cpp
+  kdiroperatorimagesview.cpp
   kdirselectdialog.cpp
   kdirsortfilterproxymodel.cpp #used in combination with kio/kio/kdirmodel.cpp
   kfilebookmarkhandler.cpp
Index: kdiroperator.h
===================================================================
--- kdiroperator.h      (revisión: 741751)
+++ kdiroperator.h      (copia de trabajo)
@@ -651,6 +651,9 @@
     virtual void trashSelected();

 protected Q_SLOTS:
+    void generatePreviews(const KFileItemList& items);
+    void showPreview(const KFileItem& item, const QPixmap& pixmap);
+
     /**
      * Restores the normal cursor after showing the busy-cursor. Also hides
      * the progressbar.