rendered paste bodyjon@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.