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(d->viewKind)); } +void KDirOperator::generatePreviews(const KFileItemList& items) +{ + + KFile::FileView fv = static_cast(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((viewKind & ~KFile::Simple) | KFile::Detail); + KFile::FileView view = static_cast((viewKind & ~KFile::Simple & ~KFile::PreviewContents) | KFile::Detail); parent->setView(view); } void KDirOperator::Private::_k_slotSimpleView() { - KFile::FileView view = static_cast((viewKind & ~KFile::Detail) | KFile::Simple); + KFile::FileView view = static_cast((viewKind & ~KFile::Detail & ~KFile::PreviewContents) | KFile::Simple); parent->setView(view); } +void KDirOperator::Private::_k_slotIconView() +{ + KFile::FileView view = static_cast((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(d->defaultView); - preview = (KFile::isPreviewInfo(defaultViewKind) || KFile::isPreviewContents(defaultViewKind)) - && d->actionCollection->action("preview")->isEnabled(); + if (viewKind != KFile::PreviewContents) { + const KFile::FileView defaultViewKind = static_cast(d->defaultView); + preview = (KFile::isPreviewInfo(defaultViewKind) || KFile::isPreviewContents(defaultViewKind)) + && d->actionCollection->action("preview")->isEnabled(); + } + else { + preview = false; + } } d->viewKind = static_cast(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.