#include <Phonon/MediaObject>
#include <QLabel>
+#include <QDialogButtonBox>
#include <QScrollArea>
#include <QTextLayout>
#include <QTimer>
m_phononWidget = new PhononWidget(parent);
m_phononWidget->hide();
m_phononWidget->setMinimumWidth(minPreviewWidth);
+ m_phononWidget->setAutoPlay(InformationPanelSettings::previewsAutoPlay());
connect(m_phononWidget, &PhononWidget::hasVideoChanged,
this, &InformationPanelContent::slotHasVideoChanged);
m_metaDataWidget->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont));
m_metaDataWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
- // Encapsulate the MetaDataWidget inside a container that has a dummy widget
- // at the bottom. This prevents that the meta data widget gets vertically stretched
- // in the case where the height of m_metaDataArea > m_metaDataWidget.
- QWidget* metaDataWidgetContainer = new QWidget(parent);
- QVBoxLayout* containerLayout = new QVBoxLayout(metaDataWidgetContainer);
- containerLayout->setContentsMargins(0, 0, 0, 0);
- containerLayout->setSpacing(0);
- containerLayout->addWidget(m_metaDataWidget);
- containerLayout->addStretch();
+ // Configuration
+ m_configureLabel = new QLabel(i18nc("@label::textbox",
+ "Select which data should be shown:"), this);
+ m_configureLabel->setWordWrap(true);
+ m_configureLabel->setVisible(false);
+
+ m_configureButtons = new QDialogButtonBox(QDialogButtonBox::Save | QDialogButtonBox::Cancel);
+ m_configureButtons->setVisible(false);
+ connect(m_configureButtons, &QDialogButtonBox::accepted, this, [this]() {
+ m_metaDataWidget->setConfigurationMode(Baloo::ConfigurationMode::Accept);
+ m_configureButtons->setVisible(false);
+ m_configureLabel->setVisible(false);
+ emit configurationFinished();
+ }
+ );
+ connect(m_configureButtons, &QDialogButtonBox::rejected, this, [this]() {
+ m_metaDataWidget->setConfigurationMode(Baloo::ConfigurationMode::Cancel);
+ m_configureButtons->setVisible(false);
+ m_configureLabel->setVisible(false);
+ emit configurationFinished();
+ }
+ );
m_metaDataArea = new QScrollArea(parent);
- m_metaDataArea->setWidget(metaDataWidgetContainer);
+ m_metaDataArea->setWidget(m_metaDataWidget);
m_metaDataArea->setWidgetResizable(true);
m_metaDataArea->setFrameShape(QFrame::NoFrame);
layout->addWidget(m_phononWidget);
layout->addWidget(m_nameLabel);
layout->addWidget(new KSeparator());
+ layout->addWidget(m_configureLabel);
layout->addWidget(m_metaDataArea);
+ layout->addWidget(m_configureButtons);
m_placesItemModel = new PlacesItemModel(this);
}
void InformationPanelContent::showItem(const KFileItem& item)
{
- m_item = item;
+ if (item != m_item) {
+ m_item = item;
+ refreshMetaData();
+ }
refreshPreview();
- refreshMetaData();
}
-void InformationPanelContent::refreshPreview() {
+void InformationPanelContent::refreshPreview()
+{
// If there is a preview job, kill it to prevent that we have jobs for
// multiple items running, and thus a race condition (bug 250787).
if (m_previewJob) {
setNameLabelText(m_item.text());
if (InformationPanelSettings::previewsShown()) {
- m_preview->show();
const QUrl itemUrl = m_item.url();
const bool isSearchUrl = itemUrl.scheme().contains(QStringLiteral("search")) && m_item.localPath().isEmpty();
if (isSearchUrl) {
+ m_preview->show();
+
// in the case of a search-URL the URL is not readable for humans
// (at least not useful to show in the Information Panel)
m_preview->setPixmap(
this, &InformationPanelContent::showIcon);
const QString mimeType = m_item.mimetype();
- const bool usePhonon = mimeType.startsWith(QLatin1String("audio/")) || mimeType.startsWith(QLatin1String("video/"));
+ const bool isVideo = mimeType.startsWith(QLatin1String("video/"));
+ const bool usePhonon = mimeType.startsWith(QLatin1String("audio/")) || isVideo;
+
if (usePhonon) {
+
+ if (InformationPanelSettings::previewsAutoPlay() && isVideo) {
+ // hides the preview now to avoid flickering when the autoplay video starts
+ m_preview->hide();
+ } else {
+ // the video won't play before the preview is displayed
+ m_preview->show();
+ }
+
m_phononWidget->show();
- m_phononWidget->setUrl(m_item.targetUrl());
+ m_phononWidget->setUrl(m_item.targetUrl(), isVideo ? PhononWidget::MediaKind::Video : PhononWidget::MediaKind::Audio);
m_phononWidget->setVideoSize(m_preview->size());
} else {
+ // When we don't need it, hide the phonon widget first to avoid flickering
m_phononWidget->hide();
+ m_preview->show();
}
}
} else {
}
}
-void InformationPanelContent::refreshMetaData() {
- if (m_metaDataWidget) {
- m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
- m_metaDataWidget->show();
- m_metaDataWidget->setItems(KFileItemList() << m_item);
- }
+void InformationPanelContent::configureShownProperties()
+{
+ m_configureLabel->setVisible(true);
+ m_configureButtons->setVisible(true);
+ m_metaDataWidget->setConfigurationMode(Baloo::ConfigurationMode::ReStart);
+}
+
+void InformationPanelContent::refreshMetaData()
+{
+ m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
+ m_metaDataWidget->show();
+ m_metaDataWidget->setItems(KFileItemList() << m_item);
}
void InformationPanelContent::showItems(const KFileItemList& items)
);
setNameLabelText(i18ncp("@label", "%1 item selected", "%1 items selected", items.count()));
- if (m_metaDataWidget) {
- m_metaDataWidget->setItems(items);
- }
+ m_metaDataWidget->setItems(items);
m_phononWidget->hide();
m_preview->setPixmap(disabledPixmap);
}
-KFileItemList InformationPanelContent::items() {
+KFileItemList InformationPanelContent::items()
+{
return m_metaDataWidget->items();
}
m_preview->setVisible(InformationPanelSettings::previewsShown() && !hasVideo);
}
+void InformationPanelContent::setPreviewAutoPlay(bool autoPlay) {
+ m_phononWidget->setAutoPlay(autoPlay);
+}
+
void InformationPanelContent::setNameLabelText(const QString& text)
{
QTextOption textOption;
// The metadata widget also contains a text widget which may return
// a large preferred width.
- if (m_metaDataWidget) {
- m_metaDataWidget->setMaximumWidth(maxWidth);
- }
+ m_metaDataWidget->setMaximumWidth(maxWidth);
// try to increase the preview as large as possible
m_preview->setSizeHint(QSize(maxWidth, maxWidth));