[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/gwenview
From:       Aurélien Gâteau <aurelien.gateau () free ! fr>
Date:       2008-05-01 8:24:04
Message-ID: 1209630244.454099.29879.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 802907 by gateau:

Reference tags by id, and introduced labelForTag() and tagForLabel() methods
in AbstractMetaDataBackEnd.


 M  +17 -11    app/nepomukcontextmanageritem.cpp  
 M  +3 -2      app/nepomukcontextmanageritem.h  
 M  +2 -2      lib/metadata/abstractmetadatabackend.cpp  
 M  +9 -2      lib/metadata/abstractmetadatabackend.h  
 M  +12 -2     lib/metadata/fakemetadatabackend.cpp  
 M  +4 -0      lib/metadata/fakemetadatabackend.h  
 M  +5 -0      lib/metadata/metadatadirmodel.cpp  
 M  +3 -0      lib/metadata/metadatadirmodel.h  
 M  +27 -3     lib/metadata/nepomukmetadatabackend.cpp  
 M  +4 -0      lib/metadata/nepomukmetadatabackend.h  
 M  +5 -0      lib/metadata/sorteddirmodel.cpp  
 M  +3 -0      lib/metadata/sorteddirmodel.h  
 M  +19 -4     lib/metadata/tagwidget.cpp  
 M  +5 -4      lib/metadata/tagwidget.h  


--- trunk/KDE/kdegraphics/gwenview/app/nepomukcontextmanageritem.cpp #802906:802907
@@ -80,21 +80,25 @@
 			mTagLabel->clear();
 			return;
 		}
+
+		AbstractMetaDataBackEnd* backEnd = that->contextManager()->dirModel()->metaDataBackEnd();
+
 		TagInfo::ConstIterator
 			it = mTagInfo.constBegin(),
 			end = mTagInfo.constEnd();
-		QStringList tags;
+		QStringList labels;
 		for (; it!=end; ++it) {
-			QString tag = it.key();
+			MetaDataTag tag = it.key();
+			QString label = backEnd->labelForTag(tag);
 			if (!it.value()) {
 				// Tag is not present for all urls
-				tag += '*';
+				label += '*';
 			}
-			tags << tag;
+			labels << label;
 		}
 
 		QString editLink = i18n("Edit");
-		QString text = tags.join(", ") + QString(" <a href='edit'>%1</a>").arg(editLink);
+		QString text = labels.join(", ") + QString(" <a href='edit'>%1</a>").arg(editLink);
 		mTagLabel->setText(text);
 	}
 
@@ -259,7 +263,7 @@
 }
 
 
-void NepomukContextManagerItem::assignTag(const QString& tag) {
+void NepomukContextManagerItem::assignTag(const MetaDataTag& tag) {
 	KFileItemList itemList = contextManager()->selection();
 
 	SortedDirModel* dirModel = contextManager()->dirModel();
@@ -274,7 +278,7 @@
 }
 
 
-void NepomukContextManagerItem::removeTag(const QString& tag) {
+void NepomukContextManagerItem::removeTag(const MetaDataTag& tag) {
 	KFileItemList itemList = contextManager()->selection();
 
 	SortedDirModel* dirModel = contextManager()->dirModel();
@@ -299,10 +303,12 @@
 		connect(d->mMetaDataDialog->mNextButton, SIGNAL(clicked()),
 			d->mActionCollection->action("go_next"), SLOT(trigger()) );
 
-		connect(d->mMetaDataDialog->mTagWidget, SIGNAL(tagAssigned(const QString&)),
-			SLOT(assignTag(const QString&)) );
-		connect(d->mMetaDataDialog->mTagWidget, SIGNAL(tagRemoved(const QString&)),
-			SLOT(removeTag(const QString&)) );
+		AbstractMetaDataBackEnd* backEnd = contextManager()->dirModel()->metaDataBackEnd();
+		d->mMetaDataDialog->mTagWidget->setMetaDataBackEnd(backEnd);
+		connect(d->mMetaDataDialog->mTagWidget, SIGNAL(tagAssigned(const MetaDataTag&)),
+			SLOT(assignTag(const MetaDataTag&)) );
+		connect(d->mMetaDataDialog->mTagWidget, SIGNAL(tagRemoved(const MetaDataTag&)),
+			SLOT(removeTag(const MetaDataTag&)) );
 	}
 	d->updateMetaDataDialog();
 	d->mMetaDataDialog->show();
--- trunk/KDE/kdegraphics/gwenview/app/nepomukcontextmanageritem.h #802906:802907
@@ -27,6 +27,7 @@
 
 // Local
 #include "abstractcontextmanageritem.h"
+#include <lib/metadata/abstractmetadatabackend.h>
 
 class KActionCollection;
 
@@ -46,8 +47,8 @@
 	void updateSideBarContent();
 	void slotRatingChanged(int rating);
 	void storeDescription();
-	void assignTag(const QString&);
-	void removeTag(const QString&);
+	void assignTag(const MetaDataTag&);
+	void removeTag(const MetaDataTag&);
 	void showMetaDataDialog();
 
 private:
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/abstractmetadatabackend.cpp #802906:802907
@@ -34,9 +34,9 @@
 
 
 TagSet::TagSet()
-: QSet<QString>() {}
+: QSet<MetaDataTag>() {}
 
-TagSet::TagSet(const QSet<QString>& set)
+TagSet::TagSet(const QSet<MetaDataTag>& set)
 : QSet<QString>(set) {}
 
 
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/abstractmetadatabackend.h #802906:802907
@@ -36,16 +36,19 @@
 namespace Gwenview {
 
 
+typedef QString MetaDataTag;
+
+
 /**
  * This class represents the set of tags associated to an url.
  *
  * It provides convenience methods to convert to and from QVariant, which are
  * useful to communicate with MetaDataDirModel.
  */
-class GWENVIEWLIB_EXPORT TagSet : public QSet<QString> {
+class GWENVIEWLIB_EXPORT TagSet : public QSet<MetaDataTag> {
 public:
 	TagSet();
-	TagSet(const QSet<QString>&);
+	TagSet(const QSet<MetaDataTag>&);
 
 	QVariant toVariant() const;
 	static TagSet fromVariant(const QVariant&);
@@ -75,6 +78,10 @@
 
 	virtual void retrieveMetaData(const KUrl&) = 0;
 
+	virtual QString labelForTag(const MetaDataTag&) const = 0;
+
+	virtual MetaDataTag tagForLabel(const QString&) const = 0;
+
 Q_SIGNALS:
 	void metaDataRetrieved(const KUrl&, const MetaData&);
 };
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/fakemetadatabackend.cpp #802906:802907
@@ -41,14 +41,24 @@
 	MetaData metaData;
 	metaData.mRating = int(urlString.length()) % 6;
 	metaData.mDescription = url.fileName();
-	QStringList lst = urlString.split("/");
+	QStringList lst = url.path().split("/");
 	Q_FOREACH(const QString& token, lst) {
 		if (!token.isEmpty()) {
-			metaData.mTags << token;
+			metaData.mTags << '#' + token.toLower();
 		}
 	}
 	emit metaDataRetrieved(url, metaData);
 }
 
 
+QString FakeMetaDataBackEnd::labelForTag(const MetaDataTag& tag) const {
+	return tag[1].toUpper() + tag.mid(2);
+}
+
+
+MetaDataTag FakeMetaDataBackEnd::tagForLabel(const QString& label) const {
+	return '#' + label.toLower();
+}
+
+
 } // namespace
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/fakemetadatabackend.h #802906:802907
@@ -43,6 +43,10 @@
 	virtual void storeMetaData(const KUrl&, const MetaData&);
 
 	virtual void retrieveMetaData(const KUrl&);
+
+	virtual QString labelForTag(const MetaDataTag&) const;
+
+	virtual MetaDataTag tagForLabel(const QString&) const;
 };
 
 
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/metadatadirmodel.cpp #802906:802907
@@ -197,4 +197,9 @@
 }
 
 
+AbstractMetaDataBackEnd* MetaDataDirModel::metaDataBackEnd() const {
+	return d->mBackEnd;
+}
+
+
 } // namespace
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/metadatadirmodel.h #802906:802907
@@ -33,6 +33,7 @@
 namespace Gwenview {
 
 
+class AbstractMetaDataBackEnd;
 class MetaData;
 class MetaDataDirModelPrivate;
 /**
@@ -58,6 +59,8 @@
 
 	bool setData(const QModelIndex& index, const QVariant& data, int role = Qt::EditRole);
 
+	AbstractMetaDataBackEnd* metaDataBackEnd() const;
+
 Q_SIGNALS:
 	void metaDataRetrieved(const KUrl&, const MetaData&);
 
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/nepomukmetadatabackend.cpp #802906:802907
@@ -63,7 +63,7 @@
 		metaData.mRating = resource.rating();
 		metaData.mDescription = resource.description();
 		Q_FOREACH(const Nepomuk::Tag& tag, resource.tags()) {
-			metaData.mTags << tag.genericLabel();
+			metaData.mTags << tag.resourceUri().toString();
 		}
 		mBackEnd->emitMetaDataRetrieved(mUrl, metaData);
 	}
@@ -82,8 +82,8 @@
 		resource.setRating(mMetaData.mRating);
 		resource.setDescription(mMetaData.mDescription);
 		QList<Nepomuk::Tag> tags;
-		Q_FOREACH(const QString& label, mMetaData.mTags) {
-			tags << Nepomuk::Tag(label);
+		Q_FOREACH(const MetaDataTag& uri, mMetaData.mTags) {
+			tags << Nepomuk::Tag(uri);
 		}
 		resource.setTags(tags);
 	}
@@ -182,4 +182,28 @@
 }
 
 
+QString NepomukMetaDataBackEnd::labelForTag(const MetaDataTag& uri) const {
+	Nepomuk::Tag tag(uri);
+	Q_ASSERT(tag.exists());
+	return tag.label();
+}
+
+
+MetaDataTag NepomukMetaDataBackEnd::tagForLabel(const QString& label) const {
+	// FIXME There is got to be a faster way
+	QList<Nepomuk::Tag> list = Nepomuk::Tag::allTags();
+	Q_FOREACH(const Nepomuk::Tag& tag, list) {
+		if (tag.label() == label) {
+			return tag.resourceUri().toString();
+		}
+	}
+
+	// Not found, create the tag
+	Nepomuk::Tag tag(label);
+	tag.setLabel(label);
+	tag.addIdentifier(label);
+	return tag.resourceUri().toString();
+}
+
+
 } // namespace
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/nepomukmetadatabackend.h #802906:802907
@@ -47,6 +47,10 @@
 
 	virtual void retrieveMetaData(const KUrl&);
 
+	virtual QString labelForTag(const MetaDataTag&) const;
+
+	virtual MetaDataTag tagForLabel(const QString&) const;
+
 	void emitMetaDataRetrieved(const KUrl&, const MetaData&);
 
 private:
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/sorteddirmodel.cpp #802906:802907
@@ -141,4 +141,9 @@
 }
 
 
+AbstractMetaDataBackEnd* SortedDirModel::metaDataBackEnd() const {
+	return d->mSourceModel->metaDataBackEnd();
+}
+
+
 } //namespace
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/sorteddirmodel.h #802906:802907
@@ -34,6 +34,7 @@
 
 namespace Gwenview {
 
+class AbstractMetaDataBackEnd;
 class SortedDirModelPrivate;
 
 
@@ -53,6 +54,8 @@
 
 	virtual void setMimeExcludeFilter(const QStringList &mimeList);
 
+	AbstractMetaDataBackEnd* metaDataBackEnd() const;
+
 public Q_SLOTS:
 	void setMinimumRating(int);
 
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/tagwidget.cpp #802906:802907
@@ -55,12 +55,16 @@
 	QPixmap mRemovePixmap;
 };
 
+enum {
+	TagRole = Qt::UserRole
+};
 
 struct TagWidgetPrivate {
 	TagWidget* that;
 	TagInfo mTagInfo;
 	QListWidget* mTreeWidget;
 	KLineEdit* mLineEdit;
+	AbstractMetaDataBackEnd* mBackEnd;
 
 	void setupWidgets() {
 		mTreeWidget = new QListWidget;
@@ -71,20 +75,23 @@
 
 		QVBoxLayout* layout = new QVBoxLayout(that);
 		layout->setMargin(0);
-		layout->setSpacing(2);
 		layout->addWidget(mTreeWidget);
 		layout->addWidget(mLineEdit);
 	}
 
 
 	void fillTreeWidget() {
+		Q_ASSERT(mBackEnd);
 		mTreeWidget->clear();
 
 		TagInfo::ConstIterator
 			it = mTagInfo.begin(),
 			end = mTagInfo.end();
 		for(; it!=end; ++it) {
-			new QListWidgetItem(it.key(), mTreeWidget);
+			MetaDataTag tag = it.key();
+			QString label = mBackEnd->labelForTag(tag);
+			QListWidgetItem* item = new QListWidgetItem(label, mTreeWidget);
+			item->setData(TagRole, QVariant(tag));
 		}
 	}
 };
@@ -94,6 +101,7 @@
 : QWidget(parent)
 , d(new TagWidgetPrivate) {
 	d->that = this;
+	d->mBackEnd = 0;
 	d->setupWidgets();
 
 	connect(d->mTreeWidget, SIGNAL(itemClicked(QListWidgetItem*)),
@@ -109,6 +117,11 @@
 }
 
 
+void TagWidget::setMetaDataBackEnd(AbstractMetaDataBackEnd* backEnd) {
+	d->mBackEnd = backEnd;
+}
+
+
 void TagWidget::setTagInfo(const TagInfo& tagInfo) {
 	d->mTagInfo = tagInfo;
 	d->fillTreeWidget();
@@ -116,7 +129,9 @@
 
 
 void TagWidget::assignTag() {
-	QString tag = d->mLineEdit->text();
+	Q_ASSERT(d->mBackEnd);
+	QString label = d->mLineEdit->text();
+	MetaDataTag tag = d->mBackEnd->tagForLabel(label);
 	d->mTagInfo[tag] = true;
 	d->fillTreeWidget();
 	d->mLineEdit->clear();
@@ -129,7 +144,7 @@
 	if (!item) {
 		return;
 	}
-	QString tag = item->text();
+	MetaDataTag tag = item->data(TagRole).toString();
 	d->mTagInfo.remove(tag);
 	d->fillTreeWidget();
 
--- trunk/KDE/kdegraphics/gwenview/lib/metadata/tagwidget.h #802906:802907
@@ -25,18 +25,18 @@
 
 // Qt
 #include <QMap>
-#include <QString>
 #include <QWidget>
 
 // KDE
 
 // Local
+#include <lib/metadata/abstractmetadatabackend.h>
 
 class QListWidgetItem;
 
 namespace Gwenview {
 
-typedef QMap<QString, bool> TagInfo;
+typedef QMap<MetaDataTag, bool> TagInfo;
 
 class TagWidgetPrivate;
 class GWENVIEWLIB_EXPORT TagWidget : public QWidget {
@@ -45,10 +45,11 @@
 	TagWidget(QWidget* parent = 0);
 	~TagWidget();
 	void setTagInfo(const TagInfo&);
+	void setMetaDataBackEnd(AbstractMetaDataBackEnd*);
 
 Q_SIGNALS:
-	void tagAssigned(const QString&);
-	void tagRemoved(const QString&);
+	void tagAssigned(const MetaDataTag&);
+	void tagRemoved(const MetaDataTag&);
 
 private Q_SLOTS:
 	void assignTag();
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic