┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/metadatawidget.cpp2
-rw-r--r--src/tagcloud/resourcetaggingwidget.cpp51
-rw-r--r--src/tagcloud/resourcetaggingwidget.h1
3 files changed, 47 insertions, 7 deletions
diff --git a/src/metadatawidget.cpp b/src/metadatawidget.cpp
index 8b9176707..e9acac7ce 100644
--- a/src/metadatawidget.cpp
+++ b/src/metadatawidget.cpp
@@ -145,7 +145,7 @@ void MetaDataWidget::setFiles(const KUrl::List& urls)
}
first = false;
}
- d->tagWidget->setResource( fileRes.first() );
+ d->tagWidget->setResources( fileRes );
#endif
}
diff --git a/src/tagcloud/resourcetaggingwidget.cpp b/src/tagcloud/resourcetaggingwidget.cpp
index b67e8f47d..8eba24a9c 100644
--- a/src/tagcloud/resourcetaggingwidget.cpp
+++ b/src/tagcloud/resourcetaggingwidget.cpp
@@ -25,14 +25,22 @@
#include <QtGui/QContextMenuEvent>
#include <QtGui/QCursor>
#include <QtGui/QLabel>
+#include <QtCore/QSet>
#include <KLocale>
+namespace Nepomuk {
+ inline uint qHash( const Tag& res )
+ {
+ return qHash( res.resourceUri().toString() );
+ }
+}
+
class Nepomuk::ResourceTaggingWidget::Private
{
public:
- Nepomuk::Resource resource;
+ QList<Nepomuk::Resource> resources;
TagCloud* resourceTagCloud;
TaggingPopup* popup;
@@ -41,20 +49,25 @@ public:
void showTaggingPopup( const QPoint& );
void _k_slotShowTaggingPopup();
+ static QList<Tag> intersectTags( const QList<Resource>& );
};
void Nepomuk::ResourceTaggingWidget::Private::showTaggingPopup( const QPoint& pos )
{
popup->showAllTags();
- resourceTags = resource.tags();
+ resourceTags = intersectTags( resources );
Q_FOREACH( Tag tag, resourceTags ) {
popup->setTagSelected( tag, true );
}
popup->exec( pos );
- resource.setTags( resourceTags );
+ foreach( Resource res, resources ) {
+ res.setTags( resourceTags );
+ }
+
+ resourceTagCloud->showTags( resourceTags );
}
@@ -64,6 +77,26 @@ void Nepomuk::ResourceTaggingWidget::Private::_k_slotShowTaggingPopup()
}
+QList<Nepomuk::Tag> Nepomuk::ResourceTaggingWidget::Private::intersectTags( const QList<Resource>& res )
+{
+ if ( res.count() == 1 ) {
+ return res.first().tags();
+ }
+ else if ( !res.isEmpty() ) {
+ // determine the tags used for all resources
+ QSet<Tag> tags = QSet<Tag>::fromList( res.first().tags() );
+ QList<Resource>::const_iterator it = res.begin();
+ for ( ++it; it != res.end(); ++it ) {
+ tags.intersect( QSet<Tag>::fromList( (*it).tags() ) );
+ }
+ return tags.values();
+ }
+ else {
+ return QList<Tag>();
+ }
+}
+
+
Nepomuk::ResourceTaggingWidget::ResourceTaggingWidget( QWidget* parent )
: QWidget( parent ),
d( new Private() )
@@ -101,8 +134,14 @@ Nepomuk::ResourceTaggingWidget::~ResourceTaggingWidget()
void Nepomuk::ResourceTaggingWidget::setResource( const Nepomuk::Resource& res )
{
- d->resource = res;
- d->resourceTagCloud->showResourceTags( res );
+ setResources( QList<Resource>() << res );
+}
+
+
+void Nepomuk::ResourceTaggingWidget::setResources( const QList<Nepomuk::Resource>& resList )
+{
+ d->resources = resList;
+ d->resourceTagCloud->showTags( d->intersectTags( resList ) );
}
@@ -122,7 +161,7 @@ void Nepomuk::ResourceTaggingWidget::slotTagAdded( const Nepomuk::Tag& tag )
{
// assign it right away
d->resourceTags.append( tag );
- d->resource.addTag( tag );
+// d->resource.addTag( tag );
}
diff --git a/src/tagcloud/resourcetaggingwidget.h b/src/tagcloud/resourcetaggingwidget.h
index a75746348..692b2e207 100644
--- a/src/tagcloud/resourcetaggingwidget.h
+++ b/src/tagcloud/resourcetaggingwidget.h
@@ -41,6 +41,7 @@ namespace Nepomuk {
public Q_SLOTS:
void setResource( const Nepomuk::Resource& );
+ void setResources( const QList<Nepomuk::Resource>& );
private Q_SLOTS:
void slotTagToggled( const Nepomuk::Tag& tag, bool enabled );