]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/metadatawidget.cpp
create modal dialogs on stack as David suggested
[dolphin.git] / src / metadatawidget.cpp
index 8d5eb68155d18967cee4e2abab98145e57fe8510..d2a955872060e7ca51d864a5435f870cfa26a479 100644 (file)
  *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
  ***************************************************************************/
 
-#include <config-kmetadata.h>
-
 #include "metadatawidget.h"
 
+#include <config-kmetadata.h>
+
 #include <klocale.h>
 
-#include <QLabel>
-#include <QGridLayout>
-#include <QTextEdit>
+#include <QtGui/QLabel>
+#include <QtGui/QGridLayout>
+#include <QtGui/QTextEdit>
 
 #ifdef HAVE_KMETADATA
-#include <kmetadatatagwidget.h>
+#include <kmetadata/kmetadatatagwidget.h>
 #include <kmetadata/resourcemanager.h>
 #include <kmetadata/resource.h>
-#include <kratingwidget.h>
-#include <kmetadatatagwidget.h>
+#include <kmetadata/variant.h>
+#include <kmetadata/kratingwidget.h>
 #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()
 {
@@ -50,18 +54,7 @@ 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);
-    }
+    void loadComment(const QString& comment);
 
     KUrl fileUrl;
 
@@ -73,15 +66,30 @@ public:
 #endif
 };
 
+#ifdef HAVE_KMETADATA
+void MetaDataWidget::Private::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);
+}
+#endif
+
 
-MetaDataWidget::MetaDataWidget(QWidget* parent)
-        : QWidget(parent)
+MetaDataWidget::MetaDataWidget(QWidget* parent) :
+    QWidget(parent)
 {
 #ifdef HAVE_KMETADATA
     d = new Private;
     d->editComment = new QTextEdit(this);
-    d->tagWidget = new Nepomuk::KMetaData::TagWidget(this);
     d->ratingWidget = new KRatingWidget(this);
+    d->tagWidget = new Nepomuk::KMetaData::TagWidget(this);
     connect(d->ratingWidget, SIGNAL(ratingChanged(int)), this, SLOT(slotRatingChanged(int)));
     connect(d->editComment, SIGNAL(textChanged()), this, SLOT(slotCommentChanged()));
 
@@ -101,7 +109,7 @@ MetaDataWidget::MetaDataWidget(QWidget* parent)
     d->editComment->installEventFilter(this);
     d->editComment->viewport()->installEventFilter(this);
 #else
-    d = 0L;
+    d = 0;
 #endif
 }
 
@@ -117,16 +125,15 @@ 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());
-//    d->file.setLocation(url.url());
-    d->ratingWidget->setRating(d->file.getRating());
+    d->file = Nepomuk::KMetaData::Resource(url.url(), s_nfoFile);
+    d->ratingWidget->setRating(d->file.rating());
     d->tagWidget->setTaggedResource(d->file);
-    d->loadComment(d->file.getComment());
+    d->loadComment(d->file.description());
 #endif
 }
 
 
-void MetaDataWidget::setFiles(const KUrl::List urls)
+void MetaDataWidget::setFiles(const KUrl::List& urls)
 {
 #ifdef HAVE_KMETADATA
     // FIXME: support multiple files
@@ -138,15 +145,23 @@ void MetaDataWidget::setFiles(const KUrl::List urls)
 void MetaDataWidget::slotCommentChanged()
 {
 #ifdef HAVE_KMETADATA
-    d->file.setComment(d->editComment->toPlainText());
+    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());
+    }
 #endif
 }
 
 
-void MetaDataWidget::slotRatingChanged(int r)
+void MetaDataWidget::slotRatingChanged(int rating)
 {
 #ifdef HAVE_KMETADATA
-    d->file.setRating(r);
+    if (rating != d->file.rating()) {
+        //    d->file.setLocation(url.url());
+        d->file.setProperty(s_nfoFileUrl, d->fileUrl.url());
+        d->file.setRating(rating);
+    }
 #endif
 }
 
@@ -154,15 +169,15 @@ void MetaDataWidget::slotRatingChanged(int r)
 bool MetaDataWidget::eventFilter(QObject* obj, QEvent* event)
 {
 #ifdef HAVE_KMETADATA
-    if (obj == d->editComment->viewport()
-            || obj == d->editComment) {
+    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.getComment().isEmpty())
+            if (d->file.description().isEmpty()) {
                 d->editComment->setText(QString());
+            }
         }
     }
 #endif