┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastian Trueg <[email protected]>2008-04-01 12:27:06 +0000
committerSebastian Trueg <[email protected]>2008-04-01 12:27:06 +0000
commitbd64849b07d79e799517acf1ed504532dd50e8cf (patch)
treed5a10bf594a96d79e3aa23b57f746732f0bc67a9 /src
parent18354deaae117d65525929a1de2337275e454232 (diff)
Implemented tagging of multiple files at the same time.
The result is always an intersection of the tags of all files. Another possibility would be to only change the clicked tag. Feedback? BUG: 160157 svn path=/trunk/KDE/kdebase/apps/; revision=792518
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 );