]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/metadatawidget.cpp
Forwardport 773570:
[dolphin.git] / src / metadatawidget.cpp
index d2a955872060e7ca51d864a5435f870cfa26a479..8db305e93e5dadb94b3ed3c85c9fc634601443f6 100644 (file)
 
 #include "metadatawidget.h"
 
-#include <config-kmetadata.h>
+#include <config-nepomuk.h>
 
 #include <klocale.h>
 
+#include <QtCore/QEvent>
 #include <QtGui/QLabel>
 #include <QtGui/QGridLayout>
 #include <QtGui/QTextEdit>
 
-#ifdef HAVE_KMETADATA
-#include <kmetadata/kmetadatatagwidget.h>
-#include <kmetadata/resourcemanager.h>
-#include <kmetadata/resource.h>
-#include <kmetadata/variant.h>
-#include <kmetadata/kratingwidget.h>
+#ifdef HAVE_NEPOMUK
+#include <nepomuk/kmetadatatagwidget.h>
+#include <nepomuk/resourcemanager.h>
+#include <nepomuk/resource.h>
+#include <nepomuk/variant.h>
+#include <nepomuk/kratingwidget.h>
+#include <nepomuk/global.h>
+#include <Soprano/Vocabulary/Xesam>
 #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,26 +52,24 @@ bool MetaDataWidget::metaDataAvailable()
 class MetaDataWidget::Private
 {
 public:
-#ifdef HAVE_KMETADATA
+#ifdef HAVE_NEPOMUK
     void loadComment(const QString& comment);
 
-    KUrl fileUrl;
-
-    Nepomuk::KMetaData::Resource file;
+    QMap<KUrl, Nepomuk::Resource> files;
 
     QTextEdit* editComment;
     KRatingWidget* ratingWidget;
-    Nepomuk::KMetaData::TagWidget* tagWidget;
+    Nepomuk::TagWidget* tagWidget;
 #endif
 };
 
-#ifdef HAVE_KMETADATA
+#ifdef HAVE_NEPOMUK
 void MetaDataWidget::Private::loadComment(const QString& comment)
 {
     editComment->blockSignals(true);
     if (comment.isEmpty()) {
         editComment->setFontItalic(true);
-        editComment->setText(i18n("Click to add comment..."));
+        editComment->setText(i18nc("@info:tooltip", "Click to add comment..."));
     } else {
         editComment->setFontItalic(false);
         editComment->setText(comment);
@@ -85,24 +82,24 @@ void MetaDataWidget::Private::loadComment(const QString& comment)
 MetaDataWidget::MetaDataWidget(QWidget* parent) :
     QWidget(parent)
 {
-#ifdef HAVE_KMETADATA
+#ifdef HAVE_NEPOMUK
     d = new Private;
     d->editComment = new QTextEdit(this);
     d->ratingWidget = new KRatingWidget(this);
-    d->tagWidget = new Nepomuk::KMetaData::TagWidget(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);
 
@@ -122,45 +119,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)
 {
-#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<Nepomuk::Resource> fileRes;
+    Q_FOREACH( KUrl url, urls ) {
+        Nepomuk::Resource file( url.url(), Soprano::Vocabulary::Xesam::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<KUrl, Nepomuk::Resource>::iterator it = d->files.begin();
+          it != d->files.end(); ++it ) {
+        it.value().setDescription(d->editComment->toPlainText());
     }
 #endif
 }
 
 
-void MetaDataWidget::slotRatingChanged(int rating)
+void MetaDataWidget::slotRatingChanged(unsigned int rating)
 {
-#ifdef HAVE_KMETADATA
-    if (rating != d->file.rating()) {
-        //    d->file.setLocation(url.url());
-        d->file.setProperty(s_nfoFileUrl, d->fileUrl.url());
-        d->file.setRating(rating);
+#ifdef HAVE_NEPOMUK
+    for ( QMap<KUrl, Nepomuk::Resource>::iterator it = d->files.begin();
+          it != d->files.end(); ++it ) {
+        it.value().setRating(rating);
     }
 #endif
 }
@@ -168,14 +184,14 @@ void MetaDataWidget::slotRatingChanged(int rating)
 
 bool MetaDataWidget::eventFilter(QObject* obj, QEvent* event)
 {
-#ifdef HAVE_KMETADATA
+#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());
             }
         }