m_selection(),
m_nameLabel(0),
m_preview(0),
+ m_previewSeparator(0),
m_phononWidget(0),
m_metaDataWidget(0),
+ m_metaDataSeparator(0),
m_metaTextArea(0),
m_metaTextLabel(0)
{
InformationPanel::~InformationPanel()
{
+ InformationPanelSettings::self()->writeConfig();
}
QSize InformationPanel::sizeHint() const
m_preview->setSizeHint(QSize(maxWidth, maxWidth));
m_urlCandidate = m_shownUrl; // reset the URL candidate if a resizing is done
m_infoTimer->start();
+
+ 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));
+ }
}
Panel::resizeEvent(event);
}
KMenu popup(this);
+ QAction* previewAction = popup.addAction(i18nc("@action:inmenu", "Preview"));
+ previewAction->setIcon(KIcon("view-preview"));
+ previewAction->setCheckable(true);
+ previewAction->setChecked(InformationPanelSettings::showPreview());
+
+ const bool metaDataAvailable = MetaDataWidget::metaDataAvailable();
+
QAction* ratingAction = popup.addAction(i18nc("@action:inmenu", "Rating"));
+ ratingAction->setIcon(KIcon("rating"));
ratingAction->setCheckable(true);
ratingAction->setChecked(InformationPanelSettings::showRating());
+ ratingAction->setEnabled(metaDataAvailable);
QAction* commentAction = popup.addAction(i18nc("@action:inmenu", "Comment"));
+ commentAction->setIcon(KIcon("text-plain"));
commentAction->setCheckable(true);
commentAction->setChecked(InformationPanelSettings::showComment());
+ commentAction->setEnabled(metaDataAvailable);
QAction* tagsAction = popup.addAction(i18nc("@action:inmenu", "Tags"));
tagsAction->setCheckable(true);
tagsAction->setChecked(InformationPanelSettings::showTags());
+ tagsAction->setEnabled(metaDataAvailable);
KConfig config("kmetainformationrc", KConfig::NoGlobals);
KConfigGroup settings = config.group("Show");
return;
}
- if (action == ratingAction) {
- // TODO
+ const bool isChecked = action->isChecked();
+ if (action == previewAction) {
+ m_preview->setVisible(isChecked);
+ m_previewSeparator->setVisible(isChecked);
+ InformationPanelSettings::setShowPreview(isChecked);
+ updatePhononWidget();
+ } else if (action == ratingAction) {
+ m_metaDataWidget->setRatingVisible(isChecked);
+ InformationPanelSettings::setShowRating(isChecked);
} else if (action == commentAction) {
- // TODO
+ m_metaDataWidget->setCommentVisible(isChecked);
+ InformationPanelSettings::setShowComment(isChecked);
} else if (action == tagsAction) {
- // TODO
+ m_metaDataWidget->setTagsVisible(isChecked);
+ InformationPanelSettings::setShowTags(isChecked);
} else {
settings.writeEntry(action->data().toString(), action->isChecked());
settings.sync();
showMetaInfo();
}
+
+ const bool visible = m_metaDataWidget->isRatingVisible() ||
+ m_metaDataWidget->isCommentVisible() ||
+ m_metaDataWidget->areTagsVisible();
+ m_metaDataSeparator->setVisible(visible);
#endif
}
}
}
+void InformationPanel::slotPlayingStarted()
+{
+ m_preview->setVisible(m_phononWidget->mode() != PhononWidget::Video);
+}
+
+void InformationPanel::slotPlayingStopped()
+{
+ m_preview->setVisible(true);
+}
+
bool InformationPanel::applyPlace(const KUrl& url)
{
KFilePlacesModel* placesModel = DolphinSettings::instance().placesModel();
}
}
m_metaTextLabel->add(i18nc("@label", "Total size:"), KIO::convertSize(totalSize));
-
- delete m_phononWidget;
- m_phononWidget = 0;
} else {
const KFileItem item = fileItem();
if (item.isDir()) {
if (m_metaDataWidget != 0) {
m_metaDataWidget->setFile(item.targetUrl());
}
-
- if (Phonon::BackendCapabilities::isMimeTypeAvailable(item.mimetype())) {
- if (m_phononWidget == 0) {
- m_phononWidget = new PhononWidget(this);
-
- QVBoxLayout* vBoxLayout = qobject_cast<QVBoxLayout*>(layout());
- Q_ASSERT(vBoxLayout != 0);
- vBoxLayout->insertWidget(3, m_phononWidget);
- }
- m_phononWidget->setUrl(item.url());
- } else {
- delete m_phononWidget;
- m_phononWidget = 0;
- }
}
+
+ updatePhononWidget();
}
KFileItem InformationPanel::fileItem() const
}
}
-void InformationPanel::init()
+void InformationPanel::updatePhononWidget()
{
- const int spacing = KDialog::spacingHint();
+ const bool multipleSelections = showMultipleSelectionInfo();
+ const bool showPreview = InformationPanelSettings::showPreview();
+
+ if (multipleSelections || !showPreview) {
+ m_phononWidget->hide();
+ } else if (!multipleSelections && showPreview) {
+ const KFileItem item = fileItem();
+ const QString mimeType = item.mimetype();
+ const bool usePhonon = Phonon::BackendCapabilities::isMimeTypeAvailable(mimeType) &&
+ (mimeType != "image/png"); // TODO: workaround, as Phonon
+ // thinks it supports PNG images
+ if (usePhonon) {
+ m_phononWidget->show();
+ PhononWidget::Mode mode = mimeType.startsWith("video")
+ ? PhononWidget::Video
+ : PhononWidget::Audio;
+ m_phononWidget->setMode(mode);
+ m_phononWidget->setUrl(item.url());
+ if ((mode == PhononWidget::Video) && m_preview->isVisible()) {
+ m_phononWidget->setVideoSize(m_preview->size());
+ }
+ } else {
+ m_phononWidget->hide();
+ m_preview->setVisible(true);
+ }
+ }
+}
+void InformationPanel::init()
+{
m_infoTimer = new QTimer(this);
m_infoTimer->setInterval(300);
m_infoTimer->setSingleShot(true);
this, SLOT(markOutdatedPreview()));
QVBoxLayout* layout = new QVBoxLayout;
- layout->setSpacing(spacing);
+ layout->setSpacing(KDialog::spacingHint());
// name
m_nameLabel = new QLabel(this);
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;
+
m_preview = new PixmapViewer(this);
- m_preview->setMinimumWidth(KIconLoader::SizeEnormous + KIconLoader::SizeMedium);
+ m_preview->setMinimumWidth(minPreviewWidth);
m_preview->setMinimumHeight(KIconLoader::SizeEnormous);
+ m_phononWidget = new PhononWidget(this);
+ m_phononWidget->setMinimumWidth(minPreviewWidth);
+ connect(m_phononWidget, SIGNAL(playingStarted()),
+ this, SLOT(slotPlayingStarted()));
+ connect(m_phononWidget, SIGNAL(playingStopped()),
+ this, SLOT(slotPlayingStopped()));
+
+ m_previewSeparator = new KSeparator(this);
+
+ const bool showPreview = InformationPanelSettings::showPreview();
+ m_preview->setVisible(showPreview);
+ m_previewSeparator->setVisible(showPreview);
+
if (MetaDataWidget::metaDataAvailable()) {
// rating, comment and tags
m_metaDataWidget = new MetaDataWidget(this);
m_metaDataWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+
+ const bool showRating = InformationPanelSettings::showRating();
+ const bool showComment = InformationPanelSettings::showComment();
+ const bool showTags = InformationPanelSettings::showTags();
+
+ m_metaDataWidget->setRatingVisible(showRating);
+ m_metaDataWidget->setCommentVisible(showComment);
+ m_metaDataWidget->setTagsVisible(showTags);
+
+ m_metaDataSeparator = new KSeparator(this);
+ m_metaDataSeparator->setVisible(showRating || showComment || showTags);
}
// general meta text information
layout->addWidget(m_nameLabel);
layout->addWidget(new KSeparator(this));
layout->addWidget(m_preview);
- layout->addWidget(new KSeparator(this));
+ layout->addWidget(m_phononWidget);
+ layout->addWidget(m_previewSeparator);
if (m_metaDataWidget != 0) {
layout->addWidget(m_metaDataWidget);
- layout->addWidget(new KSeparator(this));
+ layout->addWidget(m_metaDataSeparator);
}
layout->addWidget(m_metaTextArea);
setLayout(layout);