┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/metadatawidget.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-01-14 19:26:23 +0000
committerPeter Penz <[email protected]>2009-01-14 19:26:23 +0000
commit307285e9635a4bf584d6e5d7478876b90ef870f0 (patch)
treedb36cbbdc7996ab86c38be8f96fe83597d350dfb /src/metadatawidget.cpp
parent86d9c40ab71df5b8bd5063251337d5ca0c22380a (diff)
Group classes into folders, Dolphin is too big in the meantime for having a flat directory hierarchy. dolphin/src/CMakeLists.txt will be cleaned up later.
svn path=/trunk/KDE/kdebase/apps/; revision=911065
Diffstat (limited to 'src/metadatawidget.cpp')
-rw-r--r--src/metadatawidget.cpp281
1 files changed, 0 insertions, 281 deletions
diff --git a/src/metadatawidget.cpp b/src/metadatawidget.cpp
deleted file mode 100644
index 218a6d1ce..000000000
--- a/src/metadatawidget.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2007 by Sebastian Trueg <[email protected]> *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
- ***************************************************************************/
-
-#include "metadatawidget.h"
-
-#include "commentwidget.h"
-
-#include <config-nepomuk.h>
-
-#include <klocale.h>
-#include <KDebug>
-#include <KMessageBox>
-
-#include <QtCore/QEvent>
-#include <QtCore/QMutex>
-#include <QtCore/QMutexLocker>
-#include <QtCore/QThread>
-#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_NEPOMUK
- return !Nepomuk::ResourceManager::instance()->init();
-#else
- return false;
-#endif
-}
-
-
-class MetaDataWidget::Private
-{
-public:
-#ifdef HAVE_NEPOMUK
- void loadComment(const QString& comment);
-
- CommentWidget* editComment;
- KRatingWidget* ratingWidget;
- Nepomuk::ResourceTaggingWidget* tagWidget;
-
- // shared data between the GUI-thread and
- // the loader-thread (see LoadFilesThread):
- QMutex mutex;
- struct SharedData
- {
- int rating;
- QString comment;
- QList<Nepomuk::Resource> fileRes;
- QMap<KUrl, Nepomuk::Resource> files;
- } sharedData;
-
- /**
- * Loads the meta data of files and writes
- * the result into a shared data pool that
- * can be used by the widgets in the GUI thread.
- */
- class LoadFilesThread : public QThread
- {
- public:
- LoadFilesThread(SharedData* sharedData, QMutex* mutex);
- void setFiles(const KUrl::List& urls);
- virtual void run();
-
- private:
- SharedData* m_sharedData;
- QMutex* m_mutex;
- KUrl::List m_urls;
- };
-
- LoadFilesThread* loadFilesThread;
-#endif
-};
-
-#ifdef HAVE_NEPOMUK
-void MetaDataWidget::Private::loadComment(const QString& comment)
-{
- editComment->setComment( comment );
-}
-
-MetaDataWidget::Private::LoadFilesThread::LoadFilesThread(
- MetaDataWidget::Private::SharedData* sharedData,
- QMutex* mutex) :
- m_sharedData(sharedData),
- m_mutex(mutex),
- m_urls()
-{
-}
-
-void MetaDataWidget::Private::LoadFilesThread::setFiles(const KUrl::List& urls)
-{
- QMutexLocker locker( m_mutex );
- m_urls = urls;
-}
-
-void MetaDataWidget::Private::LoadFilesThread::run()
-{
- QMutexLocker locker( m_mutex );
- const KUrl::List urls = m_urls;
- locker.unlock();
-
- bool first = true;
- QList<Nepomuk::Resource> fileRes;
- QMap<KUrl, Nepomuk::Resource> files;
- unsigned int rating = 0;
- QString comment;
- Q_FOREACH( const KUrl &url, urls ) {
- Nepomuk::Resource file( url, Soprano::Vocabulary::Xesam::File() );
- files.insert( url, file );
- fileRes.append( file );
-
- if ( !first && rating != file.rating() ) {
- rating = 0; // reset rating
- }
- else if ( first ) {
- rating = file.rating();
- }
-
- if ( !first && comment != file.description() ) {
- comment.clear();
- }
- else if ( first ) {
- comment = file.description();
- }
- first = false;
- }
-
- locker.relock();
- m_sharedData->rating = rating;
- m_sharedData->comment = comment;
- m_sharedData->fileRes = fileRes;
- m_sharedData->files = files;
-}
-#endif
-
-MetaDataWidget::MetaDataWidget(QWidget* parent) :
- QWidget(parent)
-{
-#ifdef HAVE_NEPOMUK
- d = new Private;
- d->editComment = new CommentWidget(this);
- d->editComment->setFocusPolicy(Qt::ClickFocus);
- d->ratingWidget = new KRatingWidget(this);
- 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& ) ) );
-
- d->sharedData.rating = 0;
- d->loadFilesThread = new Private::LoadFilesThread(&d->sharedData, &d->mutex);
- connect(d->loadFilesThread, SIGNAL(finished()), this, SLOT(slotLoadingFinished()));
-
- QVBoxLayout* lay = new QVBoxLayout(this);
- lay->setMargin(0);
- lay->addWidget(d->ratingWidget);
- lay->addWidget(d->editComment);
- lay->addWidget( d->tagWidget );
-#else
- d = 0;
-#endif
-}
-
-
-MetaDataWidget::~MetaDataWidget()
-{
-#ifdef HAVE_NEPOMUK
- delete d->loadFilesThread;
-#endif
- delete d;
-}
-
-
-void MetaDataWidget::setFile(const KUrl& url)
-{
- kDebug() << url;
- KUrl::List urls;
- urls.append( url );
- setFiles( urls );
-}
-
-void MetaDataWidget::setFiles(const KUrl::List& urls)
-{
-#ifdef HAVE_NEPOMUK
- d->loadFilesThread->setFiles( urls );
- d->loadFilesThread->start();
-#else
- Q_UNUSED( urls );
-#endif
-}
-
-
-void MetaDataWidget::slotCommentChanged( const QString& s )
-{
-#ifdef HAVE_NEPOMUK
- QMutexLocker locker( &d->mutex );
- Nepomuk::MassUpdateJob* job = Nepomuk::MassUpdateJob::commentResources( d->sharedData.files.values(), s );
- connect( job, SIGNAL( result( KJob* ) ),
- this, SLOT( metadataUpdateDone() ) );
- setEnabled( false ); // no updates during execution
- job->start();
-#else
- Q_UNUSED( s );
-#endif
-}
-
-
-void MetaDataWidget::slotRatingChanged(unsigned int rating)
-{
-#ifdef HAVE_NEPOMUK
- QMutexLocker locker( &d->mutex );
- Nepomuk::MassUpdateJob* job = Nepomuk::MassUpdateJob::rateResources( d->sharedData.files.values(), rating );
- connect( job, SIGNAL( result( KJob* ) ),
- this, SLOT( metadataUpdateDone() ) );
- setEnabled( false ); // no updates during execution
- job->start();
-#else
- Q_UNUSED( rating );
-#endif
-}
-
-
-void MetaDataWidget::metadataUpdateDone()
-{
- setEnabled( true );
-}
-
-
-bool MetaDataWidget::eventFilter(QObject* obj, QEvent* event)
-{
- return QWidget::eventFilter(obj, event);
-}
-
-
-void MetaDataWidget::slotTagClicked( const Nepomuk::Tag& tag )
-{
- Q_UNUSED( tag );
-#ifdef HAVE_NEPOMUK
- d->tagWidget->showTagPopup( QCursor::pos() );
-#endif
-}
-
-void MetaDataWidget::slotLoadingFinished()
-{
-#ifdef HAVE_NEPOMUK
- QMutexLocker locker( &d->mutex );
- d->ratingWidget->setRating( d->sharedData.rating );
- d->loadComment( d->sharedData.comment );
- d->tagWidget->setResources( d->sharedData.fileRes );
-#endif
-}
-
-#include "metadatawidget.moc"