diff --git a/kfile/kdiroperator.cpp b/kfile/kdiroperator.cpp index d0726a7..23d45dc 100644 --- a/kfile/kdiroperator.cpp +++ b/kfile/kdiroperator.cpp @@ -176,6 +176,12 @@ public: Private( KDirOperator *parent ); ~Private(); + enum InlinePreviewState { + ForcedToFalse = 0, + ForcedToTrue, + NotForced + }; + // private methods bool checkPreviewInternal() const; void checkPath(const QString &txt, bool takeFiles = false); @@ -282,6 +288,7 @@ public: KToggleAction *leftAction; KUrl::List itemsToBeSetAsCurrent; bool shouldFetchForItems; + InlinePreviewState inlinePreviewState; }; KDirOperator::Private::Private(KDirOperator *_parent) : @@ -308,7 +315,8 @@ KDirOperator::Private::Private(KDirOperator *_parent) : iconsZoom(0), decorationMenu(0), leftAction(0), - shouldFetchForItems(false) + shouldFetchForItems(false), + inlinePreviewState(NotForced) { } @@ -879,6 +887,11 @@ KFilePreviewGenerator *KDirOperator::previewGenerator() const return d->previewGenerator; } +void KDirOperator::setInlinePreviewShown(bool show) +{ + d->inlinePreviewState = show ? Private::ForcedToTrue : Private::ForcedToFalse; +} + bool KDirOperator::isInlinePreviewShown() const { return d->showPreviews; @@ -916,12 +929,13 @@ void KDirOperator::setIconsZoom(int _value) value = qMin(100, value); value = qMax(0, value); - d->iconsZoom = value; - - if (qobject_cast(d->itemView)) { - d->configGroup->writeEntry("listViewIconSize", d->iconsZoom); - } else { - d->configGroup->writeEntry("detailedViewIconSize", d->iconsZoom); + if (d->inlinePreviewState == Private::NotForced) { + d->iconsZoom = value; + if (qobject_cast(d->itemView)) { + d->configGroup->writeEntry("listViewIconSize", d->iconsZoom); + } else { + d->configGroup->writeEntry("detailedViewIconSize", d->iconsZoom); + } } if (!d->previewGenerator) { @@ -1567,18 +1581,21 @@ void KDirOperator::setView(QAbstractItemView *view) d->itemsToBeSetAsCurrent.clear(); } + const bool previewShown = d->inlinePreviewState == Private::NotForced ? d->showPreviews : d->inlinePreviewState; + const bool previewForcedToTrue = d->inlinePreviewState == Private::ForcedToTrue; d->previewGenerator = new KFilePreviewGenerator(d->itemView); int maxSize = KIconLoader::SizeEnormous - KIconLoader::SizeSmall; int val = (maxSize * d->iconsZoom / 100) + KIconLoader::SizeSmall; - d->itemView->setIconSize(QSize(val, val)); - d->previewGenerator->setPreviewShown(d->showPreviews); + d->itemView->setIconSize(previewForcedToTrue ? QSize(KIconLoader::SizeEnormous, KIconLoader::SizeEnormous) : QSize(val, val)); + d->previewGenerator->setPreviewShown(previewShown); + d->actionCollection->action("inline preview")->setChecked(previewShown); // ensure we change everything needed d->_k_slotChangeDecorationPosition(); emit viewChanged(view); - const int zoom = d->iconSizeForViewType(view); + const int zoom = previewForcedToTrue ? 100 : d->iconSizeForViewType(view); // this will make d->iconsZoom be updated, since setIconsZoom slot will be called emit currentIconSizeChanged(zoom); } @@ -2067,8 +2084,9 @@ void KDirOperator::readConfig(const KConfigGroup& configGroup) d->sorting = d->sorting | QDir::Reversed; } - d->showPreviews = configGroup.readEntry(QLatin1String("Previews"), false); - d->iconsZoom = configGroup.readEntry(QLatin1String("Zoom"), 0); + if (d->inlinePreviewState == Private::NotForced) { + d->showPreviews = configGroup.readEntry(QLatin1String("Previews"), false); + } decorationPosition = (QStyleOptionViewItem::Position) configGroup.readEntry(QLatin1String("Decoration position"), (int) QStyleOptionViewItem::Top); const bool decorationAtLeft = decorationPosition == QStyleOptionViewItem::Left; d->actionCollection->action("decorationAtLeft")->setChecked(decorationAtLeft); @@ -2128,8 +2146,9 @@ void KDirOperator::writeConfig(KConfigGroup& configGroup) style = QLatin1String("DetailTree"); configGroup.writeEntry(QLatin1String("View Style"), style); - configGroup.writeEntry(QLatin1String("Previews"), d->showPreviews); - configGroup.writeEntry(QLatin1String("Zoom"), d->iconsZoom); + if (d->inlinePreviewState == Private::NotForced) { + configGroup.writeEntry(QLatin1String("Previews"), d->showPreviews); + } configGroup.writeEntry(QLatin1String("Decoration position"), (int) decorationPosition); } diff --git a/kfile/kdiroperator.h b/kfile/kdiroperator.h index 3494248..a7de1c1 100644 --- a/kfile/kdiroperator.h +++ b/kfile/kdiroperator.h @@ -541,6 +541,14 @@ public: KFilePreviewGenerator *previewGenerator() const; /** + * Forces the inline previews to be shown or hidden, depending on @p show. + * + * @param show Whether to show inline previews or not. + * @since 4.2 + */ + void setInlinePreviewShown(bool show); + + /** * Returns whether the inline previews are shown or not. * @since 4.2 */ diff --git a/kfile/kdiroperatordetailview.cpp b/kfile/kdiroperatordetailview.cpp index aa19ba0..509ec51 100644 --- a/kfile/kdiroperatordetailview.cpp +++ b/kfile/kdiroperatordetailview.cpp @@ -99,7 +99,8 @@ bool KDirOperatorDetailView::event(QEvent *event) setColumnHidden(KDirModel::Size, m_hideDetailColumns); setColumnHidden(KDirModel::ModifiedTime, m_hideDetailColumns); - hideColumn(KDirModel::Type); + setColumnHidden(KDirModel::Type, m_hideDetailColumns); + hideColumn(KDirModel::Permissions); hideColumn(KDirModel::Owner); hideColumn(KDirModel::Group); diff --git a/kfile/kfilewidget.cpp b/kfile/kfilewidget.cpp index 2cd45e2..7366440 100644 --- a/kfile/kfilewidget.cpp +++ b/kfile/kfilewidget.cpp @@ -197,6 +197,8 @@ public: */ static KUrl mostLocalUrl(const KUrl &url); + void setInlinePreviewShown(bool show); + KFileWidget* q; // the last selected url @@ -2495,10 +2497,18 @@ void KFileWidget::virtual_hook( int id, void* data ) // is going to become a virtual function for KDE5 switch (id) { - case 0: - bool *enable = static_cast(data); - d->confirmOverwrite = *enable; - break; + case 0: { // setConfirmOverwrite(bool) + bool *enable = static_cast(data); + d->confirmOverwrite = *enable; + } + break; + case 1: { // setInlinePreviewShown(bool) + bool *show = static_cast(data); + d->setInlinePreviewShown(*show); + } + break; + default: + break; } } @@ -2530,4 +2540,9 @@ KUrl KFileWidgetPrivate::mostLocalUrl(const KUrl &url) return url; } +void KFileWidgetPrivate::setInlinePreviewShown(bool show) +{ + ops->setInlinePreviewShown(show); +} + #include "kfilewidget.moc" diff --git a/kio/kfile/kabstractfilewidget.h b/kio/kfile/kabstractfilewidget.h index 48b47c9..6096cd1 100644 --- a/kio/kfile/kabstractfilewidget.h +++ b/kio/kfile/kabstractfilewidget.h @@ -368,6 +368,15 @@ public: virtual_hook(0, static_cast(&enable)); } + /** + * Forces the inline previews to be shown or hidden, depending on @p show. + * + * @param show Whether to show inline previews or not. + * @since 4.2 + */ + void setInlinePreviewShown(bool show) { // KDE5 TODO: make this virtual + virtual_hook(1, static_cast(&show)); + } }; Q_DECLARE_INTERFACE(KAbstractFileWidget, "org.kde.KAbstractFileWidget") diff --git a/kio/kfile/kfiledialog.cpp b/kio/kfile/kfiledialog.cpp index 60c6c4b..129a0de 100644 --- a/kio/kfile/kfiledialog.cpp +++ b/kio/kfile/kfiledialog.cpp @@ -335,6 +335,14 @@ void KFileDialog::setPreviewWidget(KPreviewWidgetBase *w) d->w->setPreviewWidget(w); } +void KFileDialog::setInlinePreviewShown(bool show) +{ + if (d->native) { + return; + } + d->w->setInlinePreviewShown(show); +} + QSize KFileDialog::sizeHint() const { return QSize(640, 400); @@ -548,9 +556,8 @@ KUrl KFileDialog::getImageOpenUrl( const KUrl& startDir, QWidget *parent, dlg.setOperationMode( Opening ); dlg.setCaption( caption.isEmpty() ? i18n("Open") : caption ); dlg.setMode( KFile::File ); + dlg.setInlinePreviewShown( true ); - KImageFilePreview *ip = new KImageFilePreview( &dlg ); - dlg.setPreviewWidget( ip ); dlg.exec(); return dlg.selectedUrl(); diff --git a/kio/kfile/kfiledialog.h b/kio/kfile/kfiledialog.h index 2b73db1..5937f49 100644 --- a/kio/kfile/kfiledialog.h +++ b/kio/kfile/kfiledialog.h @@ -306,6 +306,14 @@ public: void setPreviewWidget(KPreviewWidgetBase *w); /** + * Forces the inline previews to be shown or hidden, depending on @p show. + * + * @param show Whether to show inline previews or not. + * @since 4.2 + */ + void setInlinePreviewShown(bool show); + + /** * Sets whether the dialog should ask before accepting the selected file * when KFileDialog::OperationMode is set to Saving. *