diff options
| author | Peter Penz <[email protected]> | 2009-01-14 19:26:23 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2009-01-14 19:26:23 +0000 |
| commit | 307285e9635a4bf584d6e5d7478876b90ef870f0 (patch) | |
| tree | db36cbbdc7996ab86c38be8f96fe83597d350dfb /src/metadatawidget.cpp | |
| parent | 86d9c40ab71df5b8bd5063251337d5ca0c22380a (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.cpp | 281 |
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" |
