* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-#include <config-kmetadata.h>
-
#include "metadatawidget.h"
-#include <klocale.h>
+#include "commentwidget.h"
-#include <QLabel>
-#include <QGridLayout>
-#include <QTextEdit>
+#include <config-nepomuk.h>
-#ifdef HAVE_KMETADATA
-#include <kmetadatatagwidget.h>
-#include <kmetadata/resourcemanager.h>
-#include <kmetadata/resource.h>
-#include <kratingwidget.h>
-#include <kmetadatatagwidget.h>
+#include <klocale.h>
+#include <KDebug>
+#include <KMessageBox>
+
+#include <QtCore/QEvent>
+#include <QtGui/QLabel>
+#include <QtGui/QGridLayout>
+#include <QtGui/QTextEdit>
+
+#ifdef HAVE_NEPOMUK
+#include "nepomukmassupdatejob.h"
+#include <nepomuk/kmetadatatagwidget.h>
+#include <nepomuk/resourcemanager.h>
+#include <nepomuk/resource.h>
+#include <nepomuk/variant.h>
+#include <nepomuk/kratingwidget.h>
+#include <Soprano/Vocabulary/Xesam>
+#include "tagcloud/resourcetaggingwidget.h"
#endif
bool MetaDataWidget::metaDataAvailable()
{
-#ifdef HAVE_KMETADATA
- return !Nepomuk::KMetaData::ResourceManager::instance()->init();
+#ifdef HAVE_NEPOMUK
+ return !Nepomuk::ResourceManager::instance()->init();
#else
return false;
#endif
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);
- }
+#ifdef HAVE_NEPOMUK
+ void loadComment(const QString& comment);
- KUrl fileUrl;
+ QMap<KUrl, Nepomuk::Resource> files;
- Nepomuk::KMetaData::Resource file;
-
- QTextEdit* editComment;
+ CommentWidget* editComment;
KRatingWidget* ratingWidget;
- Nepomuk::KMetaData::TagWidget* tagWidget;
+ Nepomuk::ResourceTaggingWidget* tagWidget;
#endif
};
+#ifdef HAVE_NEPOMUK
+void MetaDataWidget::Private::loadComment(const QString& comment)
+{
+ editComment->setComment( comment );
+}
+#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->editComment = new CommentWidget(this);
+ d->editComment->setFocusPolicy(Qt::ClickFocus);
d->ratingWidget = new KRatingWidget(this);
- connect(d->ratingWidget, SIGNAL(ratingChanged(int)), this, SLOT(slotRatingChanged(int)));
- connect(d->editComment, SIGNAL(textChanged()), this, SLOT(slotCommentChanged()));
+ d->ratingWidget->setAlignment( Qt::AlignCenter );
+ d->tagWidget = new Nepomuk::ResourceTaggingWidget(this);
+ connect(d->ratingWidget, SIGNAL(ratingChanged(unsigned int)), this, SLOT(slotRatingChanged(unsigned int)));
+ connect(d->editComment, SIGNAL(commentChanged(const QString&)), this, SLOT(slotCommentChanged(const QString&)));
+ connect( d->tagWidget, SIGNAL( tagClicked( const Nepomuk::Tag& ) ), this, SLOT( slotTagClicked( const Nepomuk::Tag& ) ) );
QVBoxLayout* lay = new QVBoxLayout(this);
lay->setMargin(0);
- QHBoxLayout* hbox = new QHBoxLayout;
- hbox->addWidget(new QLabel(i18n("Rating:"), this));
- hbox->addStretch(1);
- hbox->addWidget(d->ratingWidget);
- lay->addLayout(hbox);
+ lay->addWidget(d->ratingWidget);
lay->addWidget(d->editComment);
- hbox = new QHBoxLayout;
- hbox->addWidget(new QLabel(i18n("Tags:"), this));
- hbox->addWidget(d->tagWidget, 1);
- lay->addLayout(hbox);
-
- d->editComment->installEventFilter(this);
- d->editComment->viewport()->installEventFilter(this);
+ QHBoxLayout* hbox = new QHBoxLayout;
+ lay->addWidget( d->tagWidget );
#else
- d = 0L;
+ d = 0;
#endif
}
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->tagWidget->setTaggedResource(d->file);
- d->loadComment(d->file.getComment());
-#endif
+ kDebug() << url;
+ 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
+ d->files.clear();
+ bool first = true;
+ QList<Nepomuk::Resource> fileRes;
+ Q_FOREACH( const KUrl &url, urls ) {
+ Nepomuk::Resource file( url, Soprano::Vocabulary::Xesam::File() );
+ 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( (qint32)(file.rating()) );
+ }
+
+ if ( !first &&
+ d->editComment->comment() != file.description() ) {
+ d->loadComment( QString() );
+ }
+ else if ( first ) {
+ d->loadComment( file.description() );
+ }
+ first = false;
+ }
+ d->tagWidget->setResources( fileRes );
#endif
}
-void MetaDataWidget::slotCommentChanged()
+void MetaDataWidget::slotCommentChanged( const QString& s )
{
-#ifdef HAVE_KMETADATA
- d->file.setComment(d->editComment->toPlainText());
+#ifdef HAVE_NEPOMUK
+ Nepomuk::MassUpdateJob* job = Nepomuk::MassUpdateJob::commentResources( d->files.values(), s );
+ connect( job, SIGNAL( result( KJob* ) ),
+ this, SLOT( metadataUpdateDone() ) );
+ setEnabled( false ); // no updates during execution
+ job->start();
#endif
}
-void MetaDataWidget::slotRatingChanged(int r)
+void MetaDataWidget::slotRatingChanged(unsigned int rating)
{
-#ifdef HAVE_KMETADATA
- d->file.setRating(r);
+#ifdef HAVE_NEPOMUK
+ Nepomuk::MassUpdateJob* job = Nepomuk::MassUpdateJob::rateResources( d->files.values(), rating );
+ connect( job, SIGNAL( result( KJob* ) ),
+ this, SLOT( metadataUpdateDone() ) );
+ setEnabled( false ); // no updates during execution
+ job->start();
#endif
}
-bool MetaDataWidget::eventFilter(QObject* obj, QEvent* event)
+void MetaDataWidget::metadataUpdateDone()
{
-#ifdef HAVE_KMETADATA
- 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())
- d->editComment->setText(QString());
- }
- }
-#endif
+ setEnabled( true );
+}
+
+bool MetaDataWidget::eventFilter(QObject* obj, QEvent* event)
+{
return QWidget::eventFilter(obj, event);
}
+
+void MetaDataWidget::slotTagClicked( const Nepomuk::Tag& tag )
+{
+ // FIXME
+#ifdef HAVE_NEPOMUK
+ KMessageBox::information( this, "FIXME: connect me to the dolphinmodel: tags:/" + tag.genericLabel() );
+#endif
+}
+
#include "metadatawidget.moc"