• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • graphics API Reference
  • KDE Home
  • Contact Us
 

digikam

  • extragear
  • graphics
  • digikam
  • core
  • libs
  • metadataengine
  • dmetadata
dmetadatasettingscontainer.cpp
Go to the documentation of this file.
1 /* ============================================================
2  *
3  * This file is a part of digiKam project
4  * https://www.digikam.org
5  *
6  * Date : 2015-08-12
7  * Description : DMetadata Settings Container.
8  *
9  * Copyright (C) 2015 by Veaceslav Munteanu <veaceslav dot munteanu90 at gmail dot com>
10  * Copyright (C) 2015-2019 by Gilles Caulier <caulier dot gilles at gmail dot com>
11  *
12  * This program is free software; you can redistribute it
13  * and/or modify it under the terms of the GNU General
14  * Public License as published by the Free Software Foundation;
15  * either version 2, or (at your option)
16  * any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * ============================================================ */
24 
25 #include "dmetadatasettingscontainer.h"
26 
27 // KDE includes
28 
29 #include <klocalizedstring.h>
30 #include <kconfiggroup.h>
31 
32 // Local includes
33 
34 #include "dmetadatasettings.h"
35 #include "digikam_debug.h"
36 
37 namespace Digikam
38 {
39 
40 QString NamespaceEntry::DM_TAG_CONTAINER()
41 {
42  return QString::fromUtf8(I18N_NOOP("Tags"));
43 }
44 
45 QString NamespaceEntry::DM_RATING_CONTAINER()
46 {
47  return QString::fromUtf8(I18N_NOOP("Rating"));
48 }
49 
50 QString NamespaceEntry::DM_COMMENT_CONTAINER()
51 {
52  return QString::fromUtf8(I18N_NOOP("Comment"));
53 }
54 
55 // ------------------------------------------------------------
56 
57 bool dmcompare(NamespaceEntry& e1, NamespaceEntry e2)
58 {
59  return (e1.index < e2.index);
60 }
61 
62 QDebug operator<<(QDebug dbg, const NamespaceEntry& inf)
63 {
64  dbg.nospace() << "[NamespaceEntry] nsType("
65  << inf.nsType << "), ";
66  dbg.nospace() << "subspace("
67  << inf.subspace << "), ";
68  dbg.nospace() << "isDefault("
69  << inf.isDefault << "), ";
70  dbg.nospace() << "isDisabled("
71  << inf.isDisabled << "), ";
72  dbg.nospace() << "index("
73  << inf.index << "), ";
74  dbg.nospace() << "namespaceName("
75  << inf.namespaceName << "), ";
76  dbg.nospace() << "alternativeName("
77  << inf.alternativeName << "), ";
78  dbg.nospace() << "tagPaths("
79  << inf.tagPaths << "), ";
80  dbg.nospace() << "separator("
81  << inf.separator << "), ";
82  dbg.nospace() << "convertRatio("
83  << inf.convertRatio << "), ";
84  dbg.nospace() << "specialOpts("
85  << inf.specialOpts << "), ";
86  dbg.nospace() << "secondNameOpts("
87  << inf.secondNameOpts << ")";
88 
89  return dbg.space();
90 }
91 
92 // -------------------------------------------------------------------------------------------------
93 
94 class Q_DECL_HIDDEN DMetadataSettingsContainer::Private
95 {
96 public:
97 
98  explicit Private()
99  {
100  unifyReadWrite = false;
101  }
102 
103 public:
104 
105  QMap<QString, QList<NamespaceEntry> > readMappings;
106  QMap<QString, QList<NamespaceEntry> > writeMappings;
107  bool unifyReadWrite;
108 };
109 
110 DMetadataSettingsContainer::DMetadataSettingsContainer()
111  : d(new Private)
112 {
113  addMapping(NamespaceEntry::DM_TAG_CONTAINER());
114  addMapping(NamespaceEntry::DM_RATING_CONTAINER());
115  addMapping(NamespaceEntry::DM_COMMENT_CONTAINER());
116 }
117 
118 DMetadataSettingsContainer::DMetadataSettingsContainer(const DMetadataSettingsContainer& other)
119  : d(new Private)
120 {
121  *d = *other.d;
122 }
123 
124 DMetadataSettingsContainer& DMetadataSettingsContainer::operator=(const DMetadataSettingsContainer& other)
125 {
126  *d = *other.d;
127  return *this;
128 }
129 
130 DMetadataSettingsContainer::~DMetadataSettingsContainer()
131 {
132  delete d;
133 }
134 
135 bool DMetadataSettingsContainer::unifyReadWrite() const
136 {
137  return d->unifyReadWrite;
138 }
139 
140 void DMetadataSettingsContainer::setUnifyReadWrite(bool b)
141 {
142  d->unifyReadWrite = b;
143 }
144 
145 void DMetadataSettingsContainer::readFromConfig(KConfigGroup& group)
146 {
147  bool valid = true;
148  const QString readNameSpace = QLatin1String("read%1Namespaces");
149  const QString writeNameSpace = QLatin1String("write%1Namespaces");
150 
151  foreach (const QString& str, mappingKeys())
152  {
153  if (!group.hasGroup(readNameSpace.arg(str)))
154  {
155  valid = false;
156  qCDebug(DIGIKAM_GENERAL_LOG) << "Does not contain " << str << " Namespace";
157  break;
158  }
159 
160  if (!group.hasGroup(writeNameSpace.arg(str)))
161  {
162  valid = false;
163  qCDebug(DIGIKAM_GENERAL_LOG) << "Does not contain " << str << " Namespace";
164  break;
165  }
166  }
167 
168  if (valid)
169  {
170  foreach (const QString& str, mappingKeys())
171  {
172  readOneGroup(group, readNameSpace.arg(str), getReadMapping(str));
173  readOneGroup(group, writeNameSpace.arg(str), getWriteMapping(str));
174  }
175  }
176  else
177  {
178  defaultValues();
179  }
180 }
181 
182 void DMetadataSettingsContainer::writeToConfig(KConfigGroup& group) const
183 {
184  const QString readNameSpace = QLatin1String("read%1Namespaces");
185  const QString writeNameSpace = QLatin1String("write%1Namespaces");
186 
187  foreach (const QString& str, mappingKeys())
188  {
189  // Remove all old group elements.
190  group.group(readNameSpace.arg(str)).deleteGroup();
191  group.group(writeNameSpace.arg(str)).deleteGroup();
192 
193  writeOneGroup(group, readNameSpace.arg(str), getReadMapping(str));
194  writeOneGroup(group, writeNameSpace.arg(str), getWriteMapping(str));
195  }
196 
197  group.sync();
198 }
199 
200 void DMetadataSettingsContainer::defaultValues()
201 {
202  d->unifyReadWrite = true;
203  d->writeMappings.clear();
204  d->readMappings.clear();
205 
206  defaultTagValues();
207  defaultRatingValues();
208  defaultCommentValues();
209 }
210 
211 void DMetadataSettingsContainer::addMapping(const QString& key)
212 {
213  d->readMappings[key] = QList<NamespaceEntry>();
214  d->writeMappings[key] = QList<NamespaceEntry>();
215 }
216 
217 QList<NamespaceEntry> &DMetadataSettingsContainer::getReadMapping(const QString& key) const
218 {
219  return d->readMappings[key];
220 }
221 
222 QList<NamespaceEntry> &DMetadataSettingsContainer::getWriteMapping(const QString& key) const
223 {
224  return d->writeMappings[key];
225 }
226 
227 QList<QString> DMetadataSettingsContainer::mappingKeys() const
228 {
229  return d->readMappings.keys();
230 }
231 
232 void DMetadataSettingsContainer::defaultTagValues()
233 {
234  // Default tag namespaces
235  NamespaceEntry tagNs1;
236  tagNs1.namespaceName = QLatin1String("Xmp.digiKam.TagsList");
237  tagNs1.tagPaths = NamespaceEntry::TAGPATH;
238  tagNs1.separator = QLatin1Char('/');
239  tagNs1.nsType = NamespaceEntry::TAGS;
240  tagNs1.index = 0;
241  tagNs1.specialOpts = NamespaceEntry::TAG_XMPSEQ;
242  tagNs1.subspace = NamespaceEntry::XMP;
243 
244  NamespaceEntry tagNs2;
245  tagNs2.namespaceName = QLatin1String("Xmp.MicrosoftPhoto.LastKeywordXMP");
246  tagNs2.tagPaths = NamespaceEntry::TAGPATH;
247  tagNs2.separator = QLatin1Char('/');
248  tagNs2.nsType = NamespaceEntry::TAGS;
249  tagNs2.index = 1;
250  tagNs2.specialOpts = NamespaceEntry::TAG_XMPBAG;
251  tagNs2.subspace = NamespaceEntry::XMP;
252 
253  NamespaceEntry tagNs3;
254  tagNs3.namespaceName = QLatin1String("Xmp.lr.hierarchicalSubject");
255  tagNs3.tagPaths = NamespaceEntry::TAGPATH;
256  tagNs3.separator = QLatin1Char('|');
257  tagNs3.nsType = NamespaceEntry::TAGS;
258  tagNs3.index = 2;
259  tagNs3.specialOpts = NamespaceEntry::TAG_XMPBAG;
260  tagNs3.subspace = NamespaceEntry::XMP;
261  tagNs3.alternativeName = QLatin1String("Xmp.lr.HierarchicalSubject");
262  tagNs3.secondNameOpts = NamespaceEntry::TAG_XMPSEQ;
263 
264  NamespaceEntry tagNs4;
265  tagNs4.namespaceName = QLatin1String("Xmp.mediapro.CatalogSets");
266  tagNs4.tagPaths = NamespaceEntry::TAGPATH;
267  tagNs4.separator = QLatin1Char('|');
268  tagNs4.nsType = NamespaceEntry::TAGS;
269  tagNs4.index = 3;
270  tagNs4.specialOpts = NamespaceEntry::TAG_XMPBAG;
271  tagNs4.subspace = NamespaceEntry::XMP;
272 
273  NamespaceEntry tagNs5;
274  tagNs5.namespaceName = QLatin1String("Xmp.acdsee.categories");
275  tagNs5.tagPaths = NamespaceEntry::TAGPATH;
276  tagNs5.separator = QLatin1Char('/');
277  tagNs5.nsType = NamespaceEntry::TAGS;
278  tagNs5.index = 4;
279  tagNs5.specialOpts = NamespaceEntry::TAG_ACDSEE;
280  tagNs5.subspace = NamespaceEntry::XMP;
281 
282  NamespaceEntry tagNs6;
283  tagNs6.namespaceName = QLatin1String("Xmp.dc.subject");
284  tagNs6.tagPaths = NamespaceEntry::TAG;
285  tagNs6.separator = QLatin1Char('/');
286  tagNs6.nsType = NamespaceEntry::TAGS;
287  tagNs6.index = 5;
288  tagNs6.specialOpts = NamespaceEntry::TAG_XMPBAG;
289  tagNs6.subspace = NamespaceEntry::XMP;
290 
291  NamespaceEntry tagNs7;
292  tagNs7.namespaceName = QLatin1String("Iptc.Application2.Keywords");
293  tagNs7.tagPaths = NamespaceEntry::TAGPATH;
294  tagNs7.separator = QLatin1Char('.');
295  tagNs7.nsType = NamespaceEntry::TAGS;
296  tagNs7.index = 6;
297  tagNs7.subspace = NamespaceEntry::IPTC;
298 
299  NamespaceEntry tagNs8;
300  tagNs8.namespaceName = QLatin1String("Exif.Image.XPKeywords");
301  tagNs8.tagPaths = NamespaceEntry::TAGPATH;
302  tagNs8.separator = QLatin1Char(';');
303  tagNs8.nsType = NamespaceEntry::TAGS;
304  tagNs8.index = 7;
305  tagNs8.subspace = NamespaceEntry::EXIF;
306 
307  getReadMapping(NamespaceEntry::DM_TAG_CONTAINER()) << tagNs1
308  << tagNs2
309  << tagNs3
310  << tagNs4
311  << tagNs5
312  << tagNs6
313  << tagNs7
314  << tagNs8;
315 
316  d->writeMappings[NamespaceEntry::DM_TAG_CONTAINER()]
317  = QList<NamespaceEntry>(getReadMapping(NamespaceEntry::DM_TAG_CONTAINER()));
318 }
319 
320 void DMetadataSettingsContainer::defaultRatingValues()
321 {
322  QList<int> defaultVal;
323  QList<int> microsoftMappings;
324  QList<int> iptcMappings;
325 
326  defaultVal << 0 << 1 << 2 << 3 << 4 << 5;
327  microsoftMappings << 0 << 1 << 25 << 50 << 75 << 99;
328  iptcMappings << 8 << 6 << 5 << 4 << 2 << 1;
329 
330  NamespaceEntry ratingNs1;
331  ratingNs1.namespaceName = QLatin1String("Xmp.xmp.Rating");
332  ratingNs1.convertRatio = defaultVal;
333  ratingNs1.nsType = NamespaceEntry::RATING;
334  ratingNs1.index = 0;
335  ratingNs1.subspace = NamespaceEntry::XMP;
336 
337  NamespaceEntry ratingNs2;
338  ratingNs2.namespaceName = QLatin1String("Xmp.acdsee.rating");
339  ratingNs2.convertRatio = defaultVal;
340  ratingNs2.nsType = NamespaceEntry::RATING;
341  ratingNs2.index = 1;
342  ratingNs2.subspace = NamespaceEntry::XMP;
343 
344  NamespaceEntry ratingNs3;
345  ratingNs3.namespaceName = QLatin1String("Xmp.MicrosoftPhoto.Rating");
346  ratingNs3.convertRatio = microsoftMappings;
347  ratingNs3.nsType = NamespaceEntry::RATING;
348  ratingNs3.index = 2;
349  ratingNs3.subspace = NamespaceEntry::XMP;
350 
351  NamespaceEntry ratingNs4;
352  ratingNs4.namespaceName = QLatin1String("Exif.Image.0x4746");
353  ratingNs4.convertRatio = defaultVal;
354  ratingNs4.nsType = NamespaceEntry::RATING;
355  ratingNs4.index = 3;
356  ratingNs4.subspace = NamespaceEntry::EXIF;
357 
358  NamespaceEntry ratingNs5;
359  ratingNs5.namespaceName = QLatin1String("Exif.Image.0x4749");
360  ratingNs5.convertRatio = microsoftMappings;
361  ratingNs5.nsType = NamespaceEntry::RATING;
362  ratingNs5.index = 4;
363  ratingNs5.subspace = NamespaceEntry::EXIF;
364 
365  NamespaceEntry ratingNs6;
366  ratingNs6.namespaceName = QLatin1String("Iptc.Application2.Urgency");
367  ratingNs6.convertRatio = iptcMappings;
368  ratingNs6.nsType = NamespaceEntry::RATING;
369  ratingNs6.index = 5;
370  ratingNs6.subspace = NamespaceEntry::IPTC;
371 
372  getReadMapping(NamespaceEntry::DM_RATING_CONTAINER()) << ratingNs1
373  << ratingNs2
374  << ratingNs3
375  << ratingNs4
376  << ratingNs5
377  << ratingNs6;
378 
379  d->writeMappings[NamespaceEntry::DM_RATING_CONTAINER()]
380  = QList<NamespaceEntry>(getReadMapping(NamespaceEntry::DM_RATING_CONTAINER()));
381 }
382 
383 void DMetadataSettingsContainer::defaultCommentValues()
384 {
385  NamespaceEntry commNs1;
386  commNs1.namespaceName = QLatin1String("Xmp.dc.description");
387  commNs1.nsType = NamespaceEntry::COMMENT;
388  commNs1.specialOpts = NamespaceEntry::COMMENT_ATLLANGLIST;
389  commNs1.index = 0;
390  commNs1.subspace = NamespaceEntry::XMP;
391 
392  NamespaceEntry commNs2;
393  commNs2.namespaceName = QLatin1String("Xmp.exif.UserComment");
394  commNs2.nsType = NamespaceEntry::COMMENT;
395  commNs2.specialOpts = NamespaceEntry::COMMENT_ALTLANG;
396  commNs2.index = 1;
397  commNs2.subspace = NamespaceEntry::XMP;
398 
399  NamespaceEntry commNs3;
400  commNs3.namespaceName = QLatin1String("Xmp.tiff.ImageDescription");
401  commNs3.nsType = NamespaceEntry::COMMENT;
402  commNs3.specialOpts = NamespaceEntry::COMMENT_ALTLANG;
403  commNs3.index = 2;
404  commNs3.subspace = NamespaceEntry::XMP;
405 
406  NamespaceEntry commNs4;
407  commNs4.namespaceName = QLatin1String("Xmp.acdsee.notes");
408  commNs4.nsType = NamespaceEntry::COMMENT;
409  commNs4.specialOpts = NamespaceEntry::COMMENT_XMP;
410  commNs4.index = 3;
411  commNs4.subspace = NamespaceEntry::XMP;
412 
413  NamespaceEntry commNs5;
414  commNs5.namespaceName = QLatin1String("JPEG/TIFF Comments");
415  commNs5.nsType = NamespaceEntry::COMMENT;
416  commNs5.specialOpts = NamespaceEntry::COMMENT_JPEG;
417  commNs5.index = 4;
418  commNs5.subspace = NamespaceEntry::XMP;
419 
420  NamespaceEntry commNs6;
421  commNs6.namespaceName = QLatin1String("Exif.Image.ImageDescription");
422  commNs6.nsType = NamespaceEntry::COMMENT;
423  commNs6.specialOpts = NamespaceEntry::NO_OPTS;
424  commNs6.index = 5;
425  commNs6.alternativeName = QLatin1String("Exif.Photo.UserComment");
426  commNs6.subspace = NamespaceEntry::EXIF;
427 
428  NamespaceEntry commNs7;
429  commNs7.namespaceName = QLatin1String("Iptc.Application2.Caption");
430  commNs7.nsType = NamespaceEntry::COMMENT;
431  commNs7.specialOpts = NamespaceEntry::NO_OPTS;
432  commNs7.index = 6;
433  commNs7.subspace = NamespaceEntry::IPTC;
434 
435 
436  getReadMapping(NamespaceEntry::DM_COMMENT_CONTAINER()) << commNs1
437  << commNs2
438  << commNs3
439  << commNs4
440  << commNs5
441  << commNs6
442  << commNs7;
443 
444  d->writeMappings[NamespaceEntry::DM_COMMENT_CONTAINER()]
445  = QList<NamespaceEntry>(getReadMapping(NamespaceEntry::DM_COMMENT_CONTAINER()));
446 }
447 
448 void DMetadataSettingsContainer::readOneGroup(KConfigGroup& group, const QString& name, QList<NamespaceEntry>& container)
449 {
450  KConfigGroup myItems = group.group(name);
451 
452  for (QString element : myItems.groupList())
453  {
454  KConfigGroup gr = myItems.group(element);
455  NamespaceEntry ns;
456 
457  if (element.startsWith(QLatin1Char('#')))
458  {
459  ns.namespaceName = gr.readEntry("namespaceName");
460  }
461  else
462  {
463  ns.namespaceName = element;
464  }
465 
466  ns.tagPaths = (NamespaceEntry::TagType)gr.readEntry("tagPaths").toInt();
467  ns.separator = gr.readEntry("separator");
468  ns.nsType = (NamespaceEntry::NamespaceType)gr.readEntry("nsType").toInt();
469  ns.index = gr.readEntry("index").toInt();
470  ns.subspace = (NamespaceEntry::NsSubspace)gr.readEntry("subspace").toInt();
471  ns.alternativeName = gr.readEntry("alternativeName");
472  ns.specialOpts = (NamespaceEntry::SpecialOptions)gr.readEntry("specialOpts").toInt();
473  ns.secondNameOpts = (NamespaceEntry::SpecialOptions)gr.readEntry("secondNameOpts").toInt();
474  ns.isDefault = gr.readEntry(QLatin1String("isDefault"), QVariant(true)).toBool();
475  ns.isDisabled = gr.readEntry(QLatin1String("isDisabled"), QVariant(false)).toBool();
476  QString conversion = gr.readEntry("convertRatio");
477 
478  for (QString str : conversion.split(QLatin1String(",")))
479  {
480  ns.convertRatio.append(str.toInt());
481  }
482 
483  container.append(ns);
484  }
485 
486  std::sort(container.begin(), container.end(), Digikam::dmcompare);
487 }
488 
489 void DMetadataSettingsContainer::writeOneGroup(KConfigGroup& group, const QString& name, QList<NamespaceEntry>& container) const
490 {
491  KConfigGroup namespacesGroup = group.group(name);
492  int index = 0;
493 
494  for (NamespaceEntry e : container)
495  {
496  QString groupNumber = QString::fromLatin1("#%1")
497  .arg(++index, 4, 10, QLatin1Char('0'));
498 
499  KConfigGroup tmp = namespacesGroup.group(groupNumber);
500  tmp.writeEntry("namespaceName", e.namespaceName);
501  tmp.writeEntry("alternativeName", e.alternativeName);
502  tmp.writeEntry("subspace", (int)e.subspace);
503  tmp.writeEntry("tagPaths", (int)e.tagPaths);
504  tmp.writeEntry("separator", e.separator);
505  tmp.writeEntry("nsType", (int)e.nsType);
506  tmp.writeEntry("convertRatio", e.convertRatio);
507  tmp.writeEntry("specialOpts", (int)e.specialOpts);
508  tmp.writeEntry("secondNameOpts", (int)e.secondNameOpts);
509  tmp.writeEntry("index", e.index);
510  tmp.writeEntry("isDisabled", e.isDisabled);
511  tmp.writeEntry("isDefault", e.isDefault);
512  }
513 }
514 
515 QDebug operator<<(QDebug dbg, const DMetadataSettingsContainer& inf)
516 {
517  dbg.nospace() << "[DMetadataSettingsContainer] readMappings(";
518 
519  foreach (const QString& str, inf.mappingKeys())
520  {
521  dbg.nospace() << inf.getReadMapping(str) << "), ";
522  }
523 
524  dbg.nospace() << "writeMappings(";
525 
526  foreach (const QString& str, inf.mappingKeys())
527  {
528  dbg.nospace() << inf.getWriteMapping(str) << "), ";
529  }
530 
531  dbg.nospace() << "unifyReadWrite("
532  << inf.unifyReadWrite() << ")";
533 
534  return dbg.space();
535 }
536 
537 } // namespace Digikam
Digikam::NamespaceEntry
The NamespaceEntry class provide a simple container for dmetadata namespaces variables, such as names, what types of data expects and extra xml tags.
Definition: dmetadatasettingscontainer.h:50
Digikam::NamespaceEntry::index
int index
Definition: dmetadatasettingscontainer.h:133
QString::append
QString & append(QChar ch)
dmetadatasettingscontainer.h
QString::split
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
QMap
Digikam::operator<<
QDebug operator<<(QDebug dbg, const DbEngineParameters &p)
Definition: dbengineparameters.cpp:796
Digikam::NamespaceEntry::DM_RATING_CONTAINER
static QString DM_RATING_CONTAINER()
Definition: dmetadatasettingscontainer.cpp:45
QDebug::nospace
QDebug & nospace()
Digikam::NamespaceEntry::nsType
NamespaceType nsType
Definition: dmetadatasettingscontainer.h:129
Digikam::NamespaceEntry::subspace
NsSubspace subspace
Definition: dmetadatasettingscontainer.h:130
Digikam::NamespaceEntry::DM_COMMENT_CONTAINER
static QString DM_COMMENT_CONTAINER()
Definition: dmetadatasettingscontainer.cpp:50
Digikam::NamespaceEntry::isDefault
bool isDefault
Definition: dmetadatasettingscontainer.h:131
QList::append
void append(const T &value)
QString::fromUtf8
QString fromUtf8(const char *str, int size)
Digikam::NamespaceEntry::alternativeName
QString alternativeName
Definition: dmetadatasettingscontainer.h:139
dmetadatasettings.h
QString::toInt
int toInt(bool *ok, int base) const
Digikam::NamespaceEntry::secondNameOpts
SpecialOptions secondNameOpts
Definition: dmetadatasettingscontainer.h:149
QString
QList
Definition: piwigotalker.h:47
Digikam::operator<<
QDebug operator<<(QDebug dbg, const DMetadataSettingsContainer &inf)
qDebug() stream operator. Writes property inf to the debug output in a nicely formatted way...
Definition: dmetadatasettingscontainer.cpp:515
COMMENT
Definition: zlib-1.2.3/inflate.h:28
Digikam::TAG
Definition: itemquerybuilder_p.h:76
Digikam::dmcompare
bool dmcompare(NamespaceEntry &e1, NamespaceEntry e2)
Definition: dmetadatasettingscontainer.cpp:57
QList::end
iterator end()
Digikam::TAGS
Definition: filtersidebarwidget.h:50
QDebug::space
QDebug & space()
QLatin1Char
QDebug
QLatin1String
Digikam::NamespaceEntry::specialOpts
SpecialOptions specialOpts
Definition: dmetadatasettingscontainer.h:148
digikam_debug.h
Digikam::NamespaceEntry::separator
QString separator
Definition: dmetadatasettingscontainer.h:141
QString::fromLatin1
QString fromLatin1(const char *str, int size)
Digikam::NamespaceEntry::DM_TAG_CONTAINER
static QString DM_TAG_CONTAINER()
Definition: dmetadatasettingscontainer.cpp:40
Digikam::NamespaceEntry::isDisabled
bool isDisabled
Definition: dmetadatasettingscontainer.h:132
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QList::begin
iterator begin()
Digikam::NamespaceEntry::convertRatio
QList< int > convertRatio
Rating Options.
Definition: dmetadatasettingscontainer.h:146
Digikam::NamespaceEntry::tagPaths
TagType tagPaths
Definition: dmetadatasettingscontainer.h:140
Digikam::NamespaceEntry::namespaceName
QString namespaceName
Tag Options.
Definition: dmetadatasettingscontainer.h:138
QVariant
Digikam::RATING
Definition: itemquerybuilder_p.h:82
b
long b
Definition: 62/jpegint.h:371
This file is part of the KDE documentation.
Documentation copyright © 1996-2019 The KDE developers.
Generated on Sat Dec 14 2019 02:33:34 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

digikam

Skip menu "digikam"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages
-->

graphics API Reference

Skip menu "graphics API Reference"
  • digikam
  • KDiagram
  •     KChart
  •     KGantt
  • KPhotoAlbum
  •   AndroidRemoteControl
  • Krita
  •   libs
  •     KritaBasicFlakes
  •     brush
  •     KritaUndo2
  •     KritaFlake
  •     image
  •     KritaPlugin
  •     Krita
  •     KritaOdf
  •     KritaPigment
  •     KritaStore
  •     ui
  •     KritaWidgets
  •     KritaWidgetUtils
  •   plugins
  •     Assitants
  •     Extensions
  •     Filters
  •         KritaText
  •         KritaTextLayout
  •     Generators
  •     Formats
  •             src
  •     PaintOps
  •       libpaintop
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal