[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