X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/abf29a89efc569db4e51d582eec95d7740db36ad..d3496b12310d9fec0e52e537c341e87fcaa2f8b5:/src/panels/information/informationpanelcontent.cpp diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index 8d8c21549..08121e78a 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Peter Penz * + * Copyright (C) 2009 by Peter Penz * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -19,18 +19,18 @@ #include "informationpanelcontent.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include +#include #include #include @@ -42,19 +42,20 @@ #include #include #include +#include #include #include #include #include #include "dolphin_informationpanelsettings.h" +#include "filemetadataconfigurationdialog.h" #include "settings/dolphinsettings.h" -#include "settings/filemetadataconfigurationdialog.h" #include "phononwidget.h" #include "pixmapviewer.h" InformationPanelContent::InformationPanelContent(QWidget* parent) : - Panel(parent), + QWidget(parent), m_item(), m_pendingPreview(false), m_outdatedPreviewTimer(0), @@ -62,7 +63,8 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : m_phononWidget(0), m_nameLabel(0), m_metaDataWidget(0), - m_metaDataArea(0) + m_metaDataArea(0), + m_enabledPlugins() { parent->installEventFilter(this); @@ -86,6 +88,7 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : m_preview->setMinimumHeight(KIconLoader::SizeEnormous); m_phononWidget = new PhononWidget(parent); + m_phononWidget->hide(); m_phononWidget->setMinimumWidth(minPreviewWidth); connect(m_phononWidget, SIGNAL(playingStarted()), this, SLOT(slotPlayingStarted())); @@ -147,17 +150,17 @@ void InformationPanelContent::showItem(const KFileItem& item) m_pendingPreview = false; const KUrl itemUrl = item.url(); - const bool isNepomukSearchUrl = itemUrl.protocol().startsWith("nepomuk") && item.nepomukUri().isEmpty(); + const bool isSearchUrl = itemUrl.protocol().contains("search") && item.nepomukUri().isEmpty(); if (!applyPlace(itemUrl)) { - if (isNepomukSearchUrl) { - // in the case of a Nepomuk query-URL the URL is not readable for humans + setNameLabelText(item.text()); + if (isSearchUrl) { + // in the case of a search-URL the URL is not readable for humans // (at least not useful to show in the Information Panel) KIconLoader iconLoader; QPixmap icon = iconLoader.loadIcon("nepomuk", KIconLoader::NoGroup, KIconLoader::SizeEnormous); m_preview->setPixmap(icon); - setNameLabelText(QString()); } else { // try to get a preview pixmap from the item... m_pendingPreview = true; @@ -171,30 +174,27 @@ void InformationPanelContent::showItem(const KFileItem& item) m_outdatedPreviewTimer->start(); } - KIO::PreviewJob* job = KIO::filePreview(KFileItemList() << item, - m_preview->width(), - m_preview->height(), - 0, - 0, - false, - true); + if (m_enabledPlugins.isEmpty()) { + const KConfigGroup globalConfig(KGlobal::config(), "PreviewSettings"); + m_enabledPlugins = globalConfig.readEntry("Plugins", QStringList() + << "directorythumbnail" + << "imagethumbnail" + << "jpegthumbnail"); + } + + KIO::PreviewJob* job = KIO::filePreview(KFileItemList() << item, m_preview->width(), m_preview->height(), + 0, 0, false, true, &m_enabledPlugins); connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)), this, SLOT(showPreview(const KFileItem&, const QPixmap&))); connect(job, SIGNAL(failed(const KFileItem&)), this, SLOT(showIcon(const KFileItem&))); - - setNameLabelText(item.text()); } } - if (m_metaDataWidget != 0) { - if (isNepomukSearchUrl) { - m_metaDataWidget->hide(); - } else { - m_metaDataWidget->show(); - m_metaDataWidget->setItems(KFileItemList() << item); - } + if (m_metaDataWidget) { + m_metaDataWidget->show(); + m_metaDataWidget->setItems(KFileItemList() << item); } if (InformationPanelSettings::showPreview()) { @@ -208,7 +208,7 @@ void InformationPanelContent::showItem(const KFileItem& item) ? PhononWidget::Video : PhononWidget::Audio; m_phononWidget->setMode(mode); - m_phononWidget->setUrl(item.url()); + m_phononWidget->setUrl(item.targetUrl()); if ((mode == PhononWidget::Video) && m_preview->isVisible()) { m_phononWidget->setVideoSize(m_preview->size()); } @@ -234,7 +234,7 @@ void InformationPanelContent::showItems(const KFileItemList& items) m_preview->setPixmap(icon); setNameLabelText(i18ncp("@info", "%1 item selected", "%1 items selected", items.count())); - if (m_metaDataWidget != 0) { + if (m_metaDataWidget) { m_metaDataWidget->setItems(items); } @@ -266,10 +266,10 @@ bool InformationPanelContent::eventFilter(QObject* obj, QEvent* event) break; } - return Panel::eventFilter(obj, event); + return QWidget::eventFilter(obj, event); } -void InformationPanelContent::configureSettings() +void InformationPanelContent::configureSettings(const QList& customContextMenuActions) { KMenu popup(this); @@ -281,10 +281,15 @@ void InformationPanelContent::configureSettings() QAction* configureAction = popup.addAction(i18nc("@action:inmenu", "Configure...")); configureAction->setIcon(KIcon("configure")); + popup.addSeparator(); + foreach (QAction* action, customContextMenuActions) { + popup.addAction(action); + } + // Open the popup and adjust the settings for the // selected action. QAction* action = popup.exec(QCursor::pos()); - if (action == 0) { + if (!action) { return; } @@ -295,7 +300,7 @@ void InformationPanelContent::configureSettings() } else if (action == configureAction) { FileMetaDataConfigurationDialog* dialog = new FileMetaDataConfigurationDialog(); dialog->setDescription(i18nc("@label::textbox", - "Select which data should be shown in the information panel.")); + "Select which data should be shown in the information panel:")); dialog->setItems(m_metaDataWidget->items()); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->show(); @@ -309,7 +314,7 @@ void InformationPanelContent::showIcon(const KFileItem& item) { m_outdatedPreviewTimer->stop(); m_pendingPreview = false; - if (!applyPlace(item.url())) { + if (!applyPlace(item.targetUrl())) { m_preview->setPixmap(item.pixmap(KIconLoader::SizeEnormous)); } } @@ -328,10 +333,10 @@ void InformationPanelContent::showPreview(const KFileItem& item, void InformationPanelContent::markOutdatedPreview() { - KIconEffect iconEffect; - QPixmap disabledPixmap = iconEffect.apply(m_preview->pixmap(), - KIconLoader::Desktop, - KIconLoader::DisabledState); + KIconEffect *iconEffect = KIconLoader::global()->iconEffect(); + QPixmap disabledPixmap = iconEffect->apply(m_preview->pixmap(), + KIconLoader::Desktop, + KIconLoader::DisabledState); m_preview->setPixmap(disabledPixmap); } @@ -375,8 +380,8 @@ void InformationPanelContent::setNameLabelText(const QString& text) QTextOption textOption; textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); - const QString processedText = KStringHandler::preProcessWrap(text); - + const QString processedText = Qt::mightBeRichText(text) ? text : KStringHandler::preProcessWrap(text); + QTextLayout textLayout(processedText); textLayout.setFont(m_nameLabel->font()); textLayout.setTextOption(textOption); @@ -413,7 +418,7 @@ void InformationPanelContent::adjustWidgetSizes(int width) // The metadata widget also contains a text widget which may return // a large preferred width. - if (m_metaDataWidget != 0) { + if (m_metaDataWidget) { m_metaDataWidget->setMaximumWidth(maxWidth); }