digiKam
coredbfields.h
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 : 2007-09-22
7  * Description : Core database field enumerations.
8  *
9  * Copyright (C) 2007-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10  * Copyright (C) 2011-2022 by Gilles Caulier <caulier dot gilles at gmail dot com>
11  * Copyright (C) 2013 by Michael G. Hansen <mike at mghansen dot de>
12  *
13  * This program is free software; you can redistribute it
14  * and/or modify it under the terms of the GNU General
15  * Public License as published by the Free Software Foundation;
16  * either version 2, or (at your option)
17  * any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22  * GNU General Public License for more details.
23  *
24  * ============================================================ */
25 
26 #ifndef DIGIKAM_CORE_DB_FIELDS_H
27 #define DIGIKAM_CORE_DB_FIELDS_H
28 
29 #include "digikam_config.h"
30 
31 // C++ includes
32 
33 #include <stdint.h>
34 
35 // Qt includes
36 
37 #include <QFlags>
38 #include <QHash>
39 #include <QVariant>
40 
41 // Local includes
42 
43 #include "digikam_export.h"
44 
45 #ifdef HAVE_DBUS
46 class QDBusArgument;
47 #endif
48 
49 namespace Digikam
50 {
51 
52 namespace DatabaseFields
53 {
54 
56 {
58  Album = 1 << 0,
59  Name = 1 << 1,
60  Status = 1 << 2,
61  Category = 1 << 3,
62  ModificationDate = 1 << 4,
63  FileSize = 1 << 5,
64  UniqueHash = 1 << 6,
65  ManualOrder = 1 << 7,
66  ImagesAll = Album |
67  Name |
68  Status |
69  Category |
71  FileSize |
72  UniqueHash |
76 };
77 
78 typedef uint8_t ImagesMinSizeType;
79 
81 {
83  Rating = 1 << 0,
84  CreationDate = 1 << 1,
85  DigitizationDate = 1 << 2,
86  Orientation = 1 << 3,
87  Width = 1 << 4,
88  Height = 1 << 5,
89  Format = 1 << 6,
90  ColorDepth = 1 << 7,
91  ColorModel = 1 << 8,
92  ColorLabel = 1 << 9,
93  PickLabel = 1 << 10,
95  CreationDate |
97  Orientation |
98  Width |
99  Height |
100  Format |
101  ColorDepth |
102  ColorModel |
103  ColorLabel |
107 };
108 
109 typedef uint16_t ItemInformationMinSizeType;
110 
112 {
114  Make = 1 << 0,
115  Model = 1 << 1,
116  Lens = 1 << 2,
117  Aperture = 1 << 3,
118  FocalLength = 1 << 4,
119  FocalLength35 = 1 << 5,
120  ExposureTime = 1 << 6,
121  ExposureProgram = 1 << 7,
122  ExposureMode = 1 << 8,
123  Sensitivity = 1 << 9,
124  FlashMode = 1 << 10,
125  WhiteBalance = 1 << 11,
127  MeteringMode = 1 << 13,
128  SubjectDistance = 1 << 14,
131  Model |
132  Lens |
133  Aperture |
134  FocalLength |
135  FocalLength35 |
136  ExposureTime |
138  ExposureMode |
139  Sensitivity |
140  FlashMode |
141  WhiteBalance |
143  MeteringMode |
148 };
149 
150 typedef uint16_t ImageMetadataMinSizeType;
151 
153 {
155  Latitude = 1 << 0,
156  LatitudeNumber = 1 << 1,
157  Longitude = 1 << 2,
158  LongitudeNumber = 1 << 3,
159  Altitude = 1 << 4,
161  PositionTilt = 1 << 6,
162  PositionRoll = 1 << 7,
167  Longitude |
169  Altitude |
171  PositionTilt |
172  PositionRoll |
177 };
178 
179 typedef uint16_t ItemPositionsMinSizeType;
180 
182 {
184  CommentType = 1 << 0,
185  CommentLanguage = 1 << 1,
186  CommentAuthor = 1 << 2,
187  CommentDate = 1 << 3,
188  Comment = 1 << 4,
191  CommentAuthor |
192  CommentDate |
196 };
197 
198 typedef uint8_t ItemCommentsMinSizeType;
199 
201 {
203  ImageUUID = 1 << 0,
204  ImageHistory = 1 << 1,
205  ImageRelations = 1 << 2,
207  ImageHistory |
211 };
212 
214 
216 {
218  AspectRatio = 1 << 0,
219  AudioBitRate = 1 << 1,
221  AudioCodec = 1 << 3,
222  Duration = 1 << 4,
223  FrameRate = 1 << 5,
224  VideoCodec = 1 << 6,
226  AudioBitRate |
228  AudioCodec |
229  Duration |
230  FrameRate |
234 };
235 
236 typedef uint8_t VideoMetadataMinSizeType;
237 
238 Q_DECLARE_FLAGS(Images, ImagesField)
239 Q_DECLARE_FLAGS(ItemInformation, ItemInformationField)
240 Q_DECLARE_FLAGS(ImageMetadata, ImageMetadataField)
241 Q_DECLARE_FLAGS(ItemComments, ItemCommentsField)
242 Q_DECLARE_FLAGS(ItemPositions, ItemPositionsField)
243 Q_DECLARE_FLAGS(ImageHistoryInfo, ImageHistoryInfoField)
244 Q_DECLARE_FLAGS(VideoMetadata, VideoMetadataField)
245 
246 template<typename FieldName> class FieldMetaInfo
247 {
248 };
249 
250 #define DECLARE_FIELDMETAINFO(FieldName) \
251  template<> class DIGIKAM_DATABASE_EXPORT FieldMetaInfo <FieldName> \
252  { \
253  public: \
254  static const FieldName##Field First = FieldName##First; \
255  static const FieldName##Field Last = FieldName##Last; \
256  typedef FieldName##MinSizeType MinSizeType; \
257  inline static MinSizeType toMinSizeType(const FieldName value) { return MinSizeType(value); } \
258  inline static FieldName fromMinSizeType(const MinSizeType value) { return FieldName(value); } \
259  };
260 
261 DECLARE_FIELDMETAINFO(Images)
262 DECLARE_FIELDMETAINFO(ItemInformation)
263 DECLARE_FIELDMETAINFO(ImageMetadata)
264 DECLARE_FIELDMETAINFO(ItemComments)
265 DECLARE_FIELDMETAINFO(ItemPositions)
266 DECLARE_FIELDMETAINFO(ImageHistoryInfo)
267 DECLARE_FIELDMETAINFO(VideoMetadata)
268 
269 
274 template<typename FieldName> class DatabaseFieldsEnumIterator
275 {
276 
277 public:
278 
280  : i(FieldMetaInfo<FieldName>::First)
281  {
282  }
283 
284  bool atEnd() const
285  {
287  }
288 
289  void operator++()
290  {
291  i = (i << 1);
292  }
293 
294  FieldName operator*() const
295  {
296  return FieldName(i);
297  }
298 
299 private:
300 
301  int i;
302 };
303 
307 template<typename FieldName> class DatabaseFieldsEnumIteratorSetOnly
308 {
309 public:
310 
311  explicit DatabaseFieldsEnumIteratorSetOnly(const FieldName setValues)
312  : i (),
313  values(setValues)
314  {
315  if (! (*i & values) )
316  {
317  operator++();
318  }
319  }
320 
321  bool atEnd() const
322  {
323  return i.atEnd();
324  }
325 
326  void operator++()
327  {
328  while (!i.atEnd())
329  {
330  ++i;
331 
332  if (*i & values)
333  {
334  break;
335  }
336  }
337  }
338 
339  FieldName operator*() const
340  {
341  return *i;
342  }
343 
344 private:
345 
347  const FieldName values;
348 };
349 
350 #define DATABASEFIELDS_ENUM_ITERATOR(Flag) \
351  typedef DatabaseFieldsEnumIterator<Flag> Flag##Iterator; \
352  typedef DatabaseFieldsEnumIteratorSetOnly<Flag> Flag##IteratorSetOnly;
353 
355 DATABASEFIELDS_ENUM_ITERATOR(ItemInformation)
356 DATABASEFIELDS_ENUM_ITERATOR(ImageMetadata)
357 DATABASEFIELDS_ENUM_ITERATOR(VideoMetadata)
358 DATABASEFIELDS_ENUM_ITERATOR(ItemPositions)
359 DATABASEFIELDS_ENUM_ITERATOR(ItemComments)
360 DATABASEFIELDS_ENUM_ITERATOR(ImageHistoryInfo)
361 
362 
367 {
368 };
369 Q_DECLARE_FLAGS(CustomEnum, CustomEnumFlags)
370 
371 #define DATABASEFIELDS_SET_DECLARE_METHODS(Flag, variable) \
372  explicit Set(const Flag& f) { initialize(); variable = f; } \
373  explicit Set(const Flag##Field& f) { initialize(); variable = f; } \
374  inline Flag& operator=(const Flag& f) { return variable.operator=(f); } \
375  inline Flag& operator|=(Flag f) { return variable.operator|=(f); } \
376  inline Flag& operator^=(Flag f) { return variable.operator^=(f); } \
377  inline Flag operator|(Flag f) const { return variable.operator|(f); } \
378  inline Flag operator^(Flag f) const { return variable.operator^(f); } \
379  inline Flag operator&(Flag f) const { return variable.operator&(f); } \
380  inline operator Flag() const { return variable; } \
381  inline bool hasFieldsFrom##Flag() const { return variable & Flag##All; } \
382  inline Flag get##Flag() const { return variable; }
383 
388 class Set
389 {
390 public:
391 
392  Set()
393  {
394  initialize();
395  }
396 
397  void initialize()
398  {
399  images = ImagesNone;
400  imageInformation = ItemInformationNone;
401  imageMetadata = ImageMetadataNone;
402  imageComments = ItemCommentsNone;
403  imagePositions = ItemPositionsNone;
404  imageHistory = ImageHistoryInfoNone;
405  videoMetadata = VideoMetadataNone;
406  customEnum = CustomEnum();
407  }
408 
409 public:
410 
411  DATABASEFIELDS_SET_DECLARE_METHODS(Images, images)
412  DATABASEFIELDS_SET_DECLARE_METHODS(ItemInformation, imageInformation)
413  DATABASEFIELDS_SET_DECLARE_METHODS(VideoMetadata, videoMetadata)
414  DATABASEFIELDS_SET_DECLARE_METHODS(ImageMetadata, imageMetadata)
416  DATABASEFIELDS_SET_DECLARE_METHODS(ItemPositions, imagePositions)
417  DATABASEFIELDS_SET_DECLARE_METHODS(ImageHistoryInfo, imageHistory)
418 
419  inline bool operator&(const Set& other)
420  {
421  return (images & other.images) ||
422  (imageInformation & other.imageInformation) ||
423  (imageMetadata & other.imageMetadata) ||
424  (imageComments & other.imageComments) ||
425  (imagePositions & other.imagePositions) ||
426  (imageHistory & other.imageHistory) ||
427  (customEnum & other.customEnum) ||
428  (videoMetadata & other.videoMetadata);
429  }
430 
431  // overloading operator|= creates ambiguity with the database fields'
432  // operator|=, therefore we give it another name.
433  inline Set& setFields(const Set& otherSet)
434  {
435  images |= otherSet.images;
436  imageInformation |= otherSet.imageInformation;
437  imageMetadata |= otherSet.imageMetadata;
438  imageComments |= otherSet.imageComments;
439  imagePositions |= otherSet.imagePositions;
440  imageHistory |= otherSet.imageHistory;
441  customEnum |= otherSet.customEnum;
442  videoMetadata |= otherSet.videoMetadata;
443 
444  return *this;
445  }
446 
447  inline CustomEnum& operator=(const CustomEnum& f)
448  {
449  return customEnum.operator=(f);
450  }
451 
452  inline CustomEnum& operator|=(CustomEnum f)
453  {
454  return customEnum.operator|=(f);
455  }
456 
457  inline CustomEnum& operator^=(CustomEnum f)
458  {
459  return customEnum.operator^=(f);
460  }
461 
462  inline CustomEnum operator|(CustomEnum f) const
463  {
464  return customEnum.operator|(f);
465  }
466 
467  inline CustomEnum operator^(CustomEnum f) const
468  {
469  return customEnum.operator^(f);
470  }
471 
472  inline CustomEnum operator&(CustomEnum f) const
473  {
474  return customEnum.operator&(f);
475  }
476 
477 #ifdef HAVE_DBUS
478  // databasechangesets.cpp
479  Set& operator<<(const QDBusArgument& argument);
480  const Set& operator>>(QDBusArgument& argument) const;
481 #endif
482 
483 private:
484 
485  Images images;
486  ItemInformation imageInformation;
487  ImageMetadata imageMetadata;
488  VideoMetadata videoMetadata;
489  ItemComments imageComments;
490  ItemPositions imagePositions;
491  ImageHistoryInfo imageHistory;
492  CustomEnum customEnum;
493 };
494 
495 #define DATABASEFIELDS_HASH_DECLARE_METHODS(Key, method) \
496  void insertField(const Key& key, const T& value) { QHash<unsigned int, T>::insert(method(key), value); } \
497  int remove(const Key& key) { return QHash<unsigned int, T>::remove(method(key)); } \
498  int removeAllFields(const Key& key) \
499  { \
500  int removedCount = 0; \
501  \
502  for (DatabaseFieldsEnumIteratorSetOnly<Key> it(key) ; !it.atEnd() ; ++it) \
503  { \
504  removedCount += remove(*it); \
505  } \
506  \
507  return removedCount; \
508  } \
509  \
510  T take(const Key& key) { return QHash<unsigned int, T>::take(method(key)); } \
511  \
512  bool contains(const Key& key) const { return QHash<unsigned int, T>::contains(method(key)); } \
513  const T value(const Key& key) const { return QHash<unsigned int, T>::value(method(key)); } \
514  const T value(const Key& key, const T& defaultValue) const { return QHash<unsigned int, T>::value(method(key), defaultValue); } \
515  \
516  T& operator[](const Key& key) { return QHash<unsigned int, T>::operator[](method(key)); } \
517  const T operator[](const Key& key) const { return QHash<unsigned int, T>::operator[](method(key)); } \
518  \
519  QList<T> values(const Key& key) const { return QHash<unsigned int, T>::value(method(key)); } \
520  int count(const Key& key) const { return QHash<unsigned int, T>::count(method(key)); }
521 
532 template <class T>
533 class Hash : public QHash<unsigned int, T>
534 {
535 public:
536 
537  // We use the upper 6 bits to distinguish the enums, and give the lower 26 bits to the flags.
538  // So we can store up to 64 enums, with 26 flags each.
539  static inline unsigned int uniqueKey(Images f)
540  {
541  return (int)f | (0 << 26);
542  }
543 
544  static inline unsigned int uniqueKey(ItemInformation f)
545  {
546  return (int)f | (1 << 26);
547  }
548 
549  static inline unsigned int uniqueKey(ImageMetadata f)
550  {
551  return (int)f | (2 << 26);
552  }
553 
554  static inline unsigned int uniqueKey(ItemComments f)
555  {
556  return (int)f | (3 << 26);
557  }
558 
559  static inline unsigned int uniqueKey(ItemPositions f)
560  {
561  return (int)f | (4 << 26);
562  }
563 
564  static inline unsigned int uniqueKey(ImageHistoryInfo f)
565  {
566  return (int)f | (5 << 26);
567  }
568 
569  static inline unsigned int uniqueKey(VideoMetadata f)
570  {
571  return (int)f | (6 << 26);
572  }
573 
574  static inline unsigned int uniqueKey(CustomEnum f)
575  {
576  return f | (63 << 26);
577  }
578 
579  // override relevant methods from QHash
588 };
589 
590 } // namespace DatabaseFields
591 
592 } // namespace Digikam
593 
594 // NOTE: must be outside the namespace!
595 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::Images)
596 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ItemInformation)
597 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ImageMetadata)
598 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::VideoMetadata)
599 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ItemComments)
600 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ItemPositions)
601 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ImageHistoryInfo)
602 
603 #endif // DIGIKAM_CORE_DB_FIELDS_H
Abstract base class for all album types.
Definition: album.h:67
FieldName operator*() const
Definition: coredbfields.h:339
void operator++()
Definition: coredbfields.h:326
bool atEnd() const
Definition: coredbfields.h:321
DatabaseFieldsEnumIteratorSetOnly(const FieldName setValues)
Definition: coredbfields.h:311
FieldName operator*() const
Definition: coredbfields.h:294
DatabaseFieldsEnumIterator()
Definition: coredbfields.h:279
bool atEnd() const
Definition: coredbfields.h:284
void operator++()
Definition: coredbfields.h:289
Definition: coredbfields.h:247
Definition: coredbfields.h:534
DATABASEFIELDS_HASH_DECLARE_METHODS(ImageMetadata, uniqueKey)
DATABASEFIELDS_HASH_DECLARE_METHODS(ImageHistoryInfo, uniqueKey)
DATABASEFIELDS_HASH_DECLARE_METHODS(ItemPositions, uniqueKey)
DATABASEFIELDS_HASH_DECLARE_METHODS(ItemComments, uniqueKey)
static unsigned int uniqueKey(ItemInformation f)
Definition: coredbfields.h:544
static unsigned int uniqueKey(ItemComments f)
Definition: coredbfields.h:554
DATABASEFIELDS_HASH_DECLARE_METHODS(ItemInformation, uniqueKey)
static unsigned int uniqueKey(ImageMetadata f)
Definition: coredbfields.h:549
static unsigned int uniqueKey(Images f)
Definition: coredbfields.h:539
DATABASEFIELDS_HASH_DECLARE_METHODS(CustomEnum, uniqueKey)
static unsigned int uniqueKey(ImageHistoryInfo f)
Definition: coredbfields.h:564
static unsigned int uniqueKey(VideoMetadata f)
Definition: coredbfields.h:569
DATABASEFIELDS_HASH_DECLARE_METHODS(Images, uniqueKey)
DATABASEFIELDS_HASH_DECLARE_METHODS(VideoMetadata, uniqueKey)
static unsigned int uniqueKey(ItemPositions f)
Definition: coredbfields.h:559
static unsigned int uniqueKey(CustomEnum f)
Definition: coredbfields.h:574
Definition: coredbfields.h:389
Set & setFields(const Set &otherSet)
Definition: coredbfields.h:433
CustomEnum operator^(CustomEnum f) const
Definition: coredbfields.h:467
Set()
Definition: coredbfields.h:392
CustomEnum & operator|=(CustomEnum f)
Definition: coredbfields.h:452
CustomEnum & operator^=(CustomEnum f)
Definition: coredbfields.h:457
void initialize()
Definition: coredbfields.h:397
CustomEnum operator|(CustomEnum f) const
Definition: coredbfields.h:462
CustomEnum operator&(CustomEnum f) const
Definition: coredbfields.h:472
CustomEnum & operator=(const CustomEnum &f)
Definition: coredbfields.h:447
Definition: itemcomments.h:48
#define DECLARE_FIELDMETAINFO(FieldName)
Definition: coredbfields.h:250
#define DATABASEFIELDS_ENUM_ITERATOR(Flag)
Definition: coredbfields.h:350
#define DATABASEFIELDS_SET_DECLARE_METHODS(Flag, variable)
Definition: coredbfields.h:371
uint16_t ItemPositionsMinSizeType
Definition: coredbfields.h:179
CustomEnumFlags
Definition: coredbfields.h:367
ItemInformationField
Definition: coredbfields.h:81
@ ItemInformationNone
Definition: coredbfields.h:82
@ Width
Definition: coredbfields.h:87
@ ItemInformationLast
Definition: coredbfields.h:106
@ ItemInformationAll
Definition: coredbfields.h:94
@ CreationDate
Definition: coredbfields.h:84
@ DigitizationDate
Definition: coredbfields.h:85
@ PickLabel
Definition: coredbfields.h:93
@ Rating
Definition: coredbfields.h:83
@ Orientation
Definition: coredbfields.h:86
@ Height
Definition: coredbfields.h:88
@ ColorModel
Definition: coredbfields.h:91
@ ItemInformationFirst
Definition: coredbfields.h:105
@ ColorDepth
Definition: coredbfields.h:90
@ Format
Definition: coredbfields.h:89
uint8_t VideoMetadataMinSizeType
Definition: coredbfields.h:236
ImagesField
Definition: coredbfields.h:56
@ ImagesAll
Definition: coredbfields.h:66
@ Status
Definition: coredbfields.h:60
@ ManualOrder
Definition: coredbfields.h:65
@ Album
Definition: coredbfields.h:58
@ Name
Definition: coredbfields.h:59
@ FileSize
Definition: coredbfields.h:63
@ ImagesFirst
Definition: coredbfields.h:74
@ ModificationDate
Definition: coredbfields.h:62
@ Category
Definition: coredbfields.h:61
@ ImagesLast
Definition: coredbfields.h:75
@ UniqueHash
Definition: coredbfields.h:64
@ ImagesNone
Definition: coredbfields.h:57
ItemCommentsField
Definition: coredbfields.h:182
@ CommentDate
Definition: coredbfields.h:187
@ Comment
Definition: coredbfields.h:188
@ ItemCommentsFirst
Definition: coredbfields.h:194
@ CommentAuthor
Definition: coredbfields.h:186
@ CommentType
Definition: coredbfields.h:184
@ ItemCommentsLast
Definition: coredbfields.h:195
@ ItemCommentsNone
Definition: coredbfields.h:183
@ ItemCommentsAll
Definition: coredbfields.h:189
@ CommentLanguage
Definition: coredbfields.h:185
VideoMetadataField
Definition: coredbfields.h:216
@ VideoMetadataFirst
Definition: coredbfields.h:232
@ VideoCodec
Definition: coredbfields.h:224
@ AudioCodec
Definition: coredbfields.h:221
@ VideoMetadataNone
Definition: coredbfields.h:217
@ Duration
Definition: coredbfields.h:222
@ FrameRate
Definition: coredbfields.h:223
@ AspectRatio
Definition: coredbfields.h:218
@ VideoMetadataAll
Definition: coredbfields.h:225
@ AudioChannelType
Definition: coredbfields.h:220
@ VideoMetadataLast
Definition: coredbfields.h:233
@ AudioBitRate
Definition: coredbfields.h:219
uint8_t ImagesMinSizeType
Definition: coredbfields.h:78
uint8_t ItemCommentsMinSizeType
Definition: coredbfields.h:198
uint16_t ImageMetadataMinSizeType
Definition: coredbfields.h:150
uint8_t ImageHistoryInfoMinSizeType
Definition: coredbfields.h:213
uint16_t ItemInformationMinSizeType
Definition: coredbfields.h:109
ImageHistoryInfoField
Definition: coredbfields.h:201
@ ImageHistoryInfoLast
Definition: coredbfields.h:210
@ ImageHistory
Definition: coredbfields.h:204
@ ImageHistoryInfoFirst
Definition: coredbfields.h:209
@ ImageHistoryInfoNone
Definition: coredbfields.h:202
@ ImageHistoryInfoAll
Definition: coredbfields.h:206
@ ImageRelations
Definition: coredbfields.h:205
@ ImageUUID
Definition: coredbfields.h:203
ItemPositionsField
Definition: coredbfields.h:153
@ ItemPositionsLast
Definition: coredbfields.h:176
@ Altitude
Definition: coredbfields.h:159
@ PositionRoll
Definition: coredbfields.h:162
@ ItemPositionsNone
Definition: coredbfields.h:154
@ PositionAccuracy
Definition: coredbfields.h:163
@ Latitude
Definition: coredbfields.h:155
@ LatitudeNumber
Definition: coredbfields.h:156
@ Longitude
Definition: coredbfields.h:157
@ ItemPositionsFirst
Definition: coredbfields.h:175
@ LongitudeNumber
Definition: coredbfields.h:158
@ PositionTilt
Definition: coredbfields.h:161
@ PositionDescription
Definition: coredbfields.h:164
@ PositionOrientation
Definition: coredbfields.h:160
@ ItemPositionsAll
Definition: coredbfields.h:165
ImageMetadataField
Definition: coredbfields.h:112
@ ImageMetadataFirst
Definition: coredbfields.h:146
@ FlashMode
Definition: coredbfields.h:124
@ ExposureMode
Definition: coredbfields.h:122
@ FocalLength
Definition: coredbfields.h:118
@ Make
Definition: coredbfields.h:114
@ ImageMetadataAll
Definition: coredbfields.h:130
@ SubjectDistance
Definition: coredbfields.h:128
@ ImageMetadataLast
Definition: coredbfields.h:147
@ ExposureProgram
Definition: coredbfields.h:121
@ Sensitivity
Definition: coredbfields.h:123
@ FocalLength35
Definition: coredbfields.h:119
@ ExposureTime
Definition: coredbfields.h:120
@ MeteringMode
Definition: coredbfields.h:127
@ ImageMetadataNone
Definition: coredbfields.h:113
@ SubjectDistanceCategory
Definition: coredbfields.h:129
@ WhiteBalanceColorTemperature
Definition: coredbfields.h:126
@ Lens
Definition: coredbfields.h:116
@ Aperture
Definition: coredbfields.h:117
@ Model
Definition: coredbfields.h:115
@ WhiteBalance
Definition: coredbfields.h:125
Definition: datefolderview.cpp:43
QDebug operator<<(QDebug dbg, const DbEngineParameters &p)
Definition: dbengineparameters.cpp:863
QDataStream & operator>>(QDataStream &ds, PhotoInfoContainer &info)
Definition: photoinfocontainer.cpp:117
ColorLabel
Definition: digikam_globals.h:103
PickLabel
Definition: digikam_globals.h:122