X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/73007f7d632bdd5565b8394043bb2de07bebb336..d1099ee5bf4ed626a9ae9e5d30ec5ff3c468fa01:/src/panels/information/informationpanelcontent.cpp diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index 831a6e78b..1164a5591 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -19,8 +19,6 @@ #include "informationpanelcontent.h" -#include - #include #include #include @@ -38,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -57,10 +56,9 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : m_item(), m_pendingPreview(false), m_outdatedPreviewTimer(0), - m_nameLabel(0), m_preview(0), - m_previewSeparator(0), m_phononWidget(0), + m_nameLabel(0), m_metaDataWidget(0), m_metaDataArea(0) { @@ -78,15 +76,6 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : QVBoxLayout* layout = new QVBoxLayout; layout->setSpacing(KDialog::spacingHint()); - // name - m_nameLabel = new QLabel(parent); - QFont font = m_nameLabel->font(); - font.setBold(true); - m_nameLabel->setFont(font); - m_nameLabel->setAlignment(Qt::AlignHCenter); - m_nameLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); - m_nameLabel->setMaximumWidth(KIconLoader::SizeEnormous); - // preview const int minPreviewWidth = KIconLoader::SizeEnormous + KIconLoader::SizeMedium; @@ -101,14 +90,20 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : connect(m_phononWidget, SIGNAL(playingStopped()), this, SLOT(slotPlayingStopped())); - m_previewSeparator = new KSeparator(parent); + // name + m_nameLabel = new QLabel(parent); + QFont font = m_nameLabel->font(); + font.setBold(true); + m_nameLabel->setFont(font); + m_nameLabel->setAlignment(Qt::AlignHCenter); + m_nameLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); const bool showPreview = InformationPanelSettings::showPreview(); m_preview->setVisible(showPreview); - m_previewSeparator->setVisible(showPreview); m_metaDataWidget = new KMetaDataWidget(parent); m_metaDataWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); + connect(m_metaDataWidget, SIGNAL(urlActivated(KUrl)), this, SIGNAL(urlActivated(KUrl))); // Encapsulate the MetaDataWidget inside a container that has a dummy widget // at the bottom. This prevents that the meta data widget gets vertically stretched @@ -134,11 +129,10 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) : palette.setColor(viewport->backgroundRole(), QColor(Qt::transparent)); viewport->setPalette(palette); - layout->addWidget(m_nameLabel); - layout->addWidget(new KSeparator(this)); layout->addWidget(m_preview); layout->addWidget(m_phononWidget); - layout->addWidget(m_previewSeparator); + layout->addWidget(m_nameLabel); + layout->addWidget(new KSeparator()); layout->addWidget(m_metaDataArea); parent->setLayout(layout); } @@ -153,37 +147,54 @@ void InformationPanelContent::showItem(const KFileItem& item) m_pendingPreview = false; const KUrl itemUrl = item.url(); + const bool isNepomukSearchUrl = itemUrl.protocol().startsWith("nepomuk") && item.nepomukUri().isEmpty(); if (!applyPlace(itemUrl)) { - // try to get a preview pixmap from the item... - m_pendingPreview = true; - - // Mark the currently shown preview as outdated. This is done - // with a small delay to prevent a flickering when the next preview - // can be shown within a short timeframe. This timer is not started - // for directories, as directory previews might fail and return the - // same icon. - if (!item.isDir()) { - m_outdatedPreviewTimer->start(); - } + if (isNepomukSearchUrl) { + // in the case of a Nepomuk query-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; + + // Mark the currently shown preview as outdated. This is done + // with a small delay to prevent a flickering when the next preview + // can be shown within a short timeframe. This timer is not started + // for directories, as directory previews might fail and return the + // same icon. + if (!item.isDir()) { + m_outdatedPreviewTimer->start(); + } - KIO::PreviewJob* job = KIO::filePreview(KFileItemList() << item, - m_preview->width(), - m_preview->height(), - 0, - 0, - false, - true); + KIO::PreviewJob* job = KIO::filePreview(KFileItemList() << item, + m_preview->width(), + m_preview->height(), + 0, + 0, + false, + true); - 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&))); + 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(itemUrl.fileName()); + setNameLabelText(item.text()); + } } if (m_metaDataWidget != 0) { - m_metaDataWidget->setItem(item); + if (isNepomukSearchUrl) { + m_metaDataWidget->hide(); + } else { + m_metaDataWidget->show(); + m_metaDataWidget->setItem(item); + } } if (InformationPanelSettings::showPreview()) { @@ -234,36 +245,27 @@ void InformationPanelContent::showItems(const KFileItemList& items) bool InformationPanelContent::eventFilter(QObject* obj, QEvent* event) { - if (event->type() == QEvent::Resize) { + switch (event->type()) { + case QEvent::Resize: { QResizeEvent* resizeEvent = static_cast(event); if (obj == m_metaDataArea->viewport()) { // The size of the meta text area has changed. Adjust the fixed // width in a way that no horizontal scrollbar needs to be shown. m_metaDataWidget->setFixedWidth(resizeEvent->size().width()); } else if (obj == parent()) { - // If the text inside the name label or the info label cannot - // get wrapped, then the maximum width of the label is increased - // so that the width of the information panel gets increased. - // To prevent this, the maximum width is adjusted to - // the current width of the panel. - const int maxWidth = resizeEvent->size().width() - KDialog::spacingHint() * 4; - m_nameLabel->setMaximumWidth(maxWidth); - - // The metadata widget also contains a text widget which may return - // a large preferred width. - if (m_metaDataWidget != 0) { - m_metaDataWidget->setMaximumWidth(maxWidth); - } + adjustWidgetSizes(resizeEvent->size().width()); + } + break; + } - // try to increase the preview as large as possible - m_preview->setSizeHint(QSize(maxWidth, maxWidth)); + case QEvent::Polish: + adjustWidgetSizes(parentWidget()->width()); + break; - if (m_phononWidget->isVisible() && (m_phononWidget->mode() == PhononWidget::Video)) { - // assure that the size of the video player is the same as the preview size - m_phononWidget->setVideoSize(QSize(maxWidth, maxWidth)); - } - } + default: + break; } + return Panel::eventFilter(obj, event); } @@ -289,11 +291,13 @@ void InformationPanelContent::configureSettings() const bool isChecked = action->isChecked(); if (action == previewAction) { m_preview->setVisible(isChecked); - m_previewSeparator->setVisible(isChecked); InformationPanelSettings::setShowPreview(isChecked); } else if (action == configureAction) { - KMetaDataConfigurationDialog dialog(m_metaDataWidget, this, Qt::Dialog); - dialog.exec(); + QPointer dialog = new KMetaDataConfigurationDialog(m_metaDataWidget, this, Qt::Dialog); + dialog->setDescription(i18nc("@label::textbox", + "Configure which data should be shown in the Information Panel.")); + dialog->exec(); + delete dialog; } if (!m_item.isNull() && m_item.nepomukUri().isValid()) { @@ -388,4 +392,29 @@ void InformationPanelContent::setNameLabelText(const QString& text) m_nameLabel->setText(wrappedText); } +void InformationPanelContent::adjustWidgetSizes(int width) +{ + // If the text inside the name label or the info label cannot + // get wrapped, then the maximum width of the label is increased + // so that the width of the information panel gets increased. + // To prevent this, the maximum width is adjusted to + // the current width of the panel. + const int maxWidth = width - KDialog::spacingHint() * 4; + m_nameLabel->setMaximumWidth(maxWidth); + + // The metadata widget also contains a text widget which may return + // a large preferred width. + if (m_metaDataWidget != 0) { + m_metaDataWidget->setMaximumWidth(maxWidth); + } + + // try to increase the preview as large as possible + m_preview->setSizeHint(QSize(maxWidth, maxWidth)); + + if (m_phononWidget->isVisible() && (m_phononWidget->mode() == PhononWidget::Video)) { + // assure that the size of the video player is the same as the preview size + m_phononWidget->setVideoSize(QSize(maxWidth, maxWidth)); + } +} + #include "informationpanelcontent.moc"