X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/5c1e93481aa1f1305eb35358f1973ba2678ac07f..d6488887ecf69d7f192b94de8dce34fae0b7eb76:/src/metadatawidget.cpp diff --git a/src/metadatawidget.cpp b/src/metadatawidget.cpp index a3d5f842e..5c510f088 100644 --- a/src/metadatawidget.cpp +++ b/src/metadatawidget.cpp @@ -19,31 +19,29 @@ #include "metadatawidget.h" -#include +#include #include +#include #include #include #include -#ifdef HAVE_KMETADATA -#include -#include -#include -#include -#include +#ifdef HAVE_NEPOMUK +#include +#include +#include +#include +#include +#include #endif -// FIXME: these should be replaced by using KMetaData::File once it is available again -static const char* s_nfoFile = "http://ont.semanticdesktop.org/2007/03/22/nfo#File"; -static const char* s_nfoFileUrl = "http://ont.semanticdesktop.org/2007/03/22/nfo#fileUrl"; - bool MetaDataWidget::metaDataAvailable() { -#ifdef HAVE_KMETADATA - return !Nepomuk::KMetaData::ResourceManager::instance()->init(); +#ifdef HAVE_NEPOMUK + return !Nepomuk::ResourceManager::instance()->init(); #else return false; #endif @@ -53,52 +51,54 @@ bool MetaDataWidget::metaDataAvailable() class MetaDataWidget::Private { public: -#ifdef HAVE_KMETADATA - void loadComment(const QString& comment) - { - editComment->blockSignals(true); - if (comment.isEmpty()) { - editComment->setFontItalic(true); - editComment->setText(i18n("Click to add comment...")); - } else { - editComment->setFontItalic(false); - editComment->setText(comment); - } - editComment->blockSignals(false); - } - - KUrl fileUrl; +#ifdef HAVE_NEPOMUK + void loadComment(const QString& comment); - Nepomuk::KMetaData::Resource file; + QMap files; QTextEdit* editComment; KRatingWidget* ratingWidget; - Nepomuk::KMetaData::TagWidget* tagWidget; + Nepomuk::TagWidget* tagWidget; #endif }; +#ifdef HAVE_NEPOMUK +void MetaDataWidget::Private::loadComment(const QString& comment) +{ + editComment->blockSignals(true); + if (comment.isEmpty()) { + editComment->setFontItalic(true); + editComment->setText(i18nc("@info:tooltip", "Click to add comment...")); + } else { + editComment->setFontItalic(false); + editComment->setText(comment); + } + editComment->blockSignals(false); +} +#endif + -MetaDataWidget::MetaDataWidget(QWidget* parent) - : QWidget(parent) +MetaDataWidget::MetaDataWidget(QWidget* parent) : + QWidget(parent) { -#ifdef HAVE_KMETADATA +#ifdef HAVE_NEPOMUK d = new Private; d->editComment = new QTextEdit(this); - d->tagWidget = new Nepomuk::KMetaData::TagWidget(this); d->ratingWidget = new KRatingWidget(this); - connect(d->ratingWidget, SIGNAL(ratingChanged(int)), this, SLOT(slotRatingChanged(int))); + d->tagWidget = new Nepomuk::TagWidget(this); + connect(d->ratingWidget, SIGNAL(ratingChanged(unsigned int)), this, SLOT(slotRatingChanged(unsigned int))); connect(d->editComment, SIGNAL(textChanged()), this, SLOT(slotCommentChanged())); QVBoxLayout* lay = new QVBoxLayout(this); lay->setMargin(0); QHBoxLayout* hbox = new QHBoxLayout; - hbox->addWidget(new QLabel(i18n("Rating:"), this)); + hbox->addWidget(new QLabel(i18nc("@label:slider", "Rating:"), this)); hbox->addStretch(1); hbox->addWidget(d->ratingWidget); lay->addLayout(hbox); lay->addWidget(d->editComment); hbox = new QHBoxLayout; - hbox->addWidget(new QLabel(i18n("Tags:"), this)); + hbox->addWidget(new QLabel(i18nc("@label:textbox", "Tags:"), this)); hbox->addWidget(d->tagWidget, 1); lay->addLayout(hbox); @@ -118,45 +118,64 @@ MetaDataWidget::~MetaDataWidget() void MetaDataWidget::setFile(const KUrl& url) { -#ifdef HAVE_KMETADATA - // FIXME: replace with KMetaData::File once we have it again - d->fileUrl = url; - d->file = Nepomuk::KMetaData::Resource(url.url(), s_nfoFile); - d->ratingWidget->setRating(d->file.rating()); - d->tagWidget->setTaggedResource(d->file); - d->loadComment(d->file.description()); -#endif + KUrl::List urls; + urls.append( url ); + setFiles( urls ); } -void MetaDataWidget::setFiles(const KUrl::List urls) +void MetaDataWidget::setFiles(const KUrl::List& urls) { -#ifdef HAVE_KMETADATA - // FIXME: support multiple files - setFile( urls.first() ); +#ifdef HAVE_NEPOMUK + // FIXME: replace with KMetaData::File once we have it again + d->files.clear(); + bool first = true; + QList fileRes; + Q_FOREACH( KUrl url, urls ) { + Nepomuk::Resource file( url.url(), Nepomuk::NFO::File() ); +// file.setLocation(url.url()); + d->files.insert( url, file ); + fileRes.append( file ); + + if ( !first && + d->ratingWidget->rating() != file.rating() ) { + d->ratingWidget->setRating( 0 ); // reset rating + } + else if ( first ) { + d->ratingWidget->setRating( file.rating() ); + } + + if ( !first && + d->editComment->toPlainText() != file.description() ) { + d->loadComment( QString() ); + } + else if ( first ) { + d->loadComment( file.description() ); + } + first = false; + } + d->tagWidget->setTaggedResources(fileRes); #endif } void MetaDataWidget::slotCommentChanged() { -#ifdef HAVE_KMETADATA - if ( d->editComment->toPlainText() != d->file.description() ) { -// d->file.setLocation(url.url()); - d->file.setProperty( s_nfoFileUrl, d->fileUrl.url() ); - d->file.setDescription(d->editComment->toPlainText()); +#ifdef HAVE_NEPOMUK + for ( QMap::iterator it = d->files.begin(); + it != d->files.end(); ++it ) { + it.value().setDescription(d->editComment->toPlainText()); } #endif } -void MetaDataWidget::slotRatingChanged(int r) +void MetaDataWidget::slotRatingChanged(unsigned int rating) { -#ifdef HAVE_KMETADATA - if ( r != d->file.rating() ) { - // d->file.setLocation(url.url()); - d->file.setProperty( s_nfoFileUrl, d->fileUrl.url() ); - d->file.setRating(r); +#ifdef HAVE_NEPOMUK + for ( QMap::iterator it = d->files.begin(); + it != d->files.end(); ++it ) { + it.value().setRating(rating); } #endif } @@ -164,16 +183,16 @@ void MetaDataWidget::slotRatingChanged(int r) bool MetaDataWidget::eventFilter(QObject* obj, QEvent* event) { -#ifdef HAVE_KMETADATA - if (obj == d->editComment->viewport() - || obj == d->editComment) { +#ifdef HAVE_NEPOMUK + if (obj == d->editComment->viewport() || obj == d->editComment) { if (event->type() == QEvent::FocusOut) { // make sure the info text is displayed again d->loadComment(d->editComment->toPlainText()); } else if (event->type() == QEvent::FocusIn) { d->editComment->setFontItalic(false); - if (d->file.description().isEmpty()) + if (!d->files.isEmpty() && d->files.begin().value().description().isEmpty()) { d->editComment->setText(QString()); + } } } #endif