19#include "digikam_config.h"
42namespace DatabaseFields
240#define DECLARE_FIELDMETAINFO(FieldName) \
241 template<> class DIGIKAM_DATABASE_EXPORT FieldMetaInfo <FieldName> \
244 static const FieldName##Field First = FieldName##First; \
245 static const FieldName##Field Last = FieldName##Last; \
246 typedef FieldName##MinSizeType MinSizeType; \
247 inline static MinSizeType toMinSizeType(const FieldName value) { return MinSizeType(value); } \
248 inline static FieldName fromMinSizeType(const MinSizeType value) { return FieldName(value); } \
302 if (! (*i & values) )
334 const FieldName values;
337#define DATABASEFIELDS_ENUM_ITERATOR(Flag) \
338 typedef DatabaseFieldsEnumIterator<Flag> Flag##Iterator; \
339 typedef DatabaseFieldsEnumIteratorSetOnly<Flag> Flag##IteratorSetOnly;
358#define DATABASEFIELDS_SET_DECLARE_METHODS(Flag, variable) \
359 explicit Set(const Flag& f) { initialize(); variable = f; } \
360 explicit Set(const Flag##Field& f) { initialize(); variable = f; } \
361 inline Flag& operator=(const Flag& f) { return variable.operator=(f); } \
362 inline Flag& operator|=(Flag f) { return variable.operator|=(f); } \
363 inline Flag& operator^=(Flag f) { return variable.operator^=(f); } \
364 inline Flag operator|(Flag f) const { return variable.operator|(f); } \
365 inline Flag operator^(Flag f) const { return variable.operator^(f); } \
366 inline Flag operator&(Flag f) const { return variable.operator&(f); } \
367 inline operator Flag() const { return variable; } \
368 inline bool hasFieldsFrom##Flag() const { return variable & Flag##All; } \
369 inline Flag get##Flag() const { return variable; }
393 customEnum = CustomEnum();
406 inline
bool operator&(const
Set& other)
408 return (images & other.images) ||
409 (imageInformation & other.imageInformation) ||
410 (imageMetadata & other.imageMetadata) ||
411 (imageComments & other.imageComments) ||
412 (imagePositions & other.imagePositions) ||
413 (imageHistory & other.imageHistory) ||
414 (customEnum & other.customEnum) ||
415 (videoMetadata & other.videoMetadata);
422 images |= otherSet.images;
423 imageInformation |= otherSet.imageInformation;
424 imageMetadata |= otherSet.imageMetadata;
425 imageComments |= otherSet.imageComments;
426 imagePositions |= otherSet.imagePositions;
427 imageHistory |= otherSet.imageHistory;
428 customEnum |= otherSet.customEnum;
429 videoMetadata |= otherSet.videoMetadata;
436 return customEnum.operator=(f);
441 return customEnum.operator|=(f);
446 return customEnum.operator^=(f);
451 return customEnum.operator|(f);
456 return customEnum.operator^(f);
461 return customEnum.operator&(f);
473 ItemInformation imageInformation;
474 ImageMetadata imageMetadata;
475 VideoMetadata videoMetadata;
477 ItemPositions imagePositions;
478 ImageHistoryInfo imageHistory;
479 CustomEnum customEnum;
482#define DATABASEFIELDS_HASH_DECLARE_METHODS(Key, method) \
483 void insertField(const Key& key, const T& value) { QHash<unsigned int, T>::insert(method(key), value); } \
484 int remove(const Key& key) { return QHash<unsigned int, T>::remove(method(key)); } \
485 int removeAllFields(const Key& key) \
487 int removedCount = 0; \
489 for (DatabaseFieldsEnumIteratorSetOnly<Key> it(key) ; !it.atEnd() ; ++it) \
491 removedCount += remove(*it); \
494 return removedCount; \
497 T take(const Key& key) { return QHash<unsigned int, T>::take(method(key)); } \
499 bool contains(const Key& key) const { return QHash<unsigned int, T>::contains(method(key)); } \
500 const T value(const Key& key) const { return QHash<unsigned int, T>::value(method(key)); } \
501 const T value(const Key& key, const T& defaultValue) const { return QHash<unsigned int, T>::value(method(key), defaultValue); } \
503 T& operator[](const Key& key) { return QHash<unsigned int, T>::operator[](method(key)); } \
504 const T operator[](const Key& key) const { return QHash<unsigned int, T>::operator[](method(key)); } \
506 QList<T> values(const Key& key) const { return QHash<unsigned int, T>::value(method(key)); } \
507 int count(const Key& key) const { return QHash<unsigned int, T>::count(method(key)); }
520class Hash :
public QHash<unsigned int, T>
528 return (
unsigned int)f;
533 return (
unsigned int)f | (
unsigned int)(1 << 26);
538 return (
unsigned int)f | (
unsigned int)(2 << 26);
543 return (
unsigned int)f | (
unsigned int)(3 << 26);
548 return (
unsigned int)f | (
unsigned int)(4 << 26);
551 static inline unsigned int uniqueKey(ImageHistoryInfo f)
553 return (
unsigned int)f | (
unsigned int)(5 << 26);
558 return (
unsigned int)f | (
unsigned int)(6 << 26);
563 return (
unsigned int)f | ((
unsigned int)(63) << 26);
582Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::Images)
583Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ItemInformation)
584Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ImageMetadata)
585Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::VideoMetadata)
586Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ItemComments)
587Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ItemPositions)
588Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::DatabaseFields::ImageHistoryInfo)
Abstract base class for all album types.
Definition album.h:57
Definition coredbfields.h:295
FieldName operator*() const
Definition coredbfields.h:326
void operator++()
Definition coredbfields.h:313
bool atEnd() const
Definition coredbfields.h:308
DatabaseFieldsEnumIteratorSetOnly(const FieldName setValues)
Definition coredbfields.h:298
Definition coredbfields.h:265
FieldName operator*() const
Definition coredbfields.h:281
DatabaseFieldsEnumIterator()=default
bool atEnd() const
Definition coredbfields.h:271
void operator++()
Definition coredbfields.h:276
Definition coredbfields.h:521
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:531
static unsigned int uniqueKey(ItemComments f)
Definition coredbfields.h:541
DATABASEFIELDS_HASH_DECLARE_METHODS(ItemInformation, uniqueKey)
static unsigned int uniqueKey(ImageMetadata f)
Definition coredbfields.h:536
static unsigned int uniqueKey(Images f)
Definition coredbfields.h:526
DATABASEFIELDS_HASH_DECLARE_METHODS(CustomEnum, uniqueKey)
static unsigned int uniqueKey(ImageHistoryInfo f)
Definition coredbfields.h:551
static unsigned int uniqueKey(VideoMetadata f)
Definition coredbfields.h:556
DATABASEFIELDS_HASH_DECLARE_METHODS(Images, uniqueKey)
DATABASEFIELDS_HASH_DECLARE_METHODS(VideoMetadata, uniqueKey)
static unsigned int uniqueKey(ItemPositions f)
Definition coredbfields.h:546
static unsigned int uniqueKey(CustomEnum f)
Definition coredbfields.h:561
Definition coredbfields.h:376
CustomEnum operator^(CustomEnum f) const
Definition coredbfields.h:454
CustomEnum & operator^=(CustomEnum f)
Definition coredbfields.h:444
Set()
Definition coredbfields.h:379
CustomEnum & operator|=(CustomEnum f)
Definition coredbfields.h:439
Set & setFields(const Set &otherSet)
Definition coredbfields.h:420
CustomEnum & operator=(const CustomEnum &f)
Definition coredbfields.h:434
void initialize()
Definition coredbfields.h:384
CustomEnum operator|(CustomEnum f) const
Definition coredbfields.h:449
CustomEnum operator&(CustomEnum f) const
Definition coredbfields.h:459
#define DECLARE_FIELDMETAINFO(FieldName)
Definition coredbfields.h:240
#define DATABASEFIELDS_ENUM_ITERATOR(Flag)
Definition coredbfields.h:337
#define DATABASEFIELDS_SET_DECLARE_METHODS(Flag, variable)
Definition coredbfields.h:358
uint16_t ItemPositionsMinSizeType
Definition coredbfields.h:169
CustomEnumFlags
Definition coredbfields.h:354
ItemInformationField
Definition coredbfields.h:71
@ ItemInformationNone
Definition coredbfields.h:72
@ Width
Definition coredbfields.h:77
@ ItemInformationLast
Definition coredbfields.h:96
@ ItemInformationAll
Definition coredbfields.h:84
@ CreationDate
Definition coredbfields.h:74
@ DigitizationDate
Definition coredbfields.h:75
@ PickLabel
Definition coredbfields.h:83
@ Rating
Definition coredbfields.h:73
@ Orientation
Definition coredbfields.h:76
@ Height
Definition coredbfields.h:78
@ ColorModel
Definition coredbfields.h:81
@ ItemInformationFirst
Definition coredbfields.h:95
@ ColorDepth
Definition coredbfields.h:80
@ Format
Definition coredbfields.h:79
uint8_t VideoMetadataMinSizeType
Definition coredbfields.h:226
ImagesField
Definition coredbfields.h:46
@ ImagesAll
Definition coredbfields.h:56
@ Status
Definition coredbfields.h:50
@ ManualOrder
Definition coredbfields.h:55
@ Album
Definition coredbfields.h:48
@ Name
Definition coredbfields.h:49
@ FileSize
Definition coredbfields.h:53
@ ImagesFirst
Definition coredbfields.h:64
@ ModificationDate
Definition coredbfields.h:52
@ Category
Definition coredbfields.h:51
@ ImagesLast
Definition coredbfields.h:65
@ UniqueHash
Definition coredbfields.h:54
@ ImagesNone
Definition coredbfields.h:47
ItemCommentsField
Definition coredbfields.h:172
@ CommentDate
Definition coredbfields.h:177
@ Comment
Definition coredbfields.h:178
@ ItemCommentsFirst
Definition coredbfields.h:184
@ CommentAuthor
Definition coredbfields.h:176
@ CommentType
Definition coredbfields.h:174
@ ItemCommentsLast
Definition coredbfields.h:185
@ ItemCommentsNone
Definition coredbfields.h:173
@ ItemCommentsAll
Definition coredbfields.h:179
@ CommentLanguage
Definition coredbfields.h:175
VideoMetadataField
Definition coredbfields.h:206
@ VideoMetadataFirst
Definition coredbfields.h:222
@ VideoCodec
Definition coredbfields.h:214
@ AudioCodec
Definition coredbfields.h:211
@ VideoMetadataNone
Definition coredbfields.h:207
@ Duration
Definition coredbfields.h:212
@ FrameRate
Definition coredbfields.h:213
@ AspectRatio
Definition coredbfields.h:208
@ VideoMetadataAll
Definition coredbfields.h:215
@ AudioChannelType
Definition coredbfields.h:210
@ VideoMetadataLast
Definition coredbfields.h:223
@ AudioBitRate
Definition coredbfields.h:209
uint8_t ImagesMinSizeType
Definition coredbfields.h:68
uint8_t ItemCommentsMinSizeType
Definition coredbfields.h:188
uint16_t ImageMetadataMinSizeType
Definition coredbfields.h:140
uint8_t ImageHistoryInfoMinSizeType
Definition coredbfields.h:203
uint16_t ItemInformationMinSizeType
Definition coredbfields.h:99
ImageHistoryInfoField
Definition coredbfields.h:191
@ ImageHistoryInfoLast
Definition coredbfields.h:200
@ ImageHistory
Definition coredbfields.h:194
@ ImageHistoryInfoFirst
Definition coredbfields.h:199
@ ImageHistoryInfoNone
Definition coredbfields.h:192
@ ImageHistoryInfoAll
Definition coredbfields.h:196
@ ImageRelations
Definition coredbfields.h:195
@ ImageUUID
Definition coredbfields.h:193
ItemPositionsField
Definition coredbfields.h:143
@ ItemPositionsLast
Definition coredbfields.h:166
@ Altitude
Definition coredbfields.h:149
@ PositionRoll
Definition coredbfields.h:152
@ ItemPositionsNone
Definition coredbfields.h:144
@ PositionAccuracy
Definition coredbfields.h:153
@ Latitude
Definition coredbfields.h:145
@ LatitudeNumber
Definition coredbfields.h:146
@ Longitude
Definition coredbfields.h:147
@ ItemPositionsFirst
Definition coredbfields.h:165
@ LongitudeNumber
Definition coredbfields.h:148
@ PositionTilt
Definition coredbfields.h:151
@ PositionDescription
Definition coredbfields.h:154
@ PositionOrientation
Definition coredbfields.h:150
@ ItemPositionsAll
Definition coredbfields.h:155
ImageMetadataField
Definition coredbfields.h:102
@ ImageMetadataFirst
Definition coredbfields.h:136
@ FlashMode
Definition coredbfields.h:114
@ ExposureMode
Definition coredbfields.h:112
@ FocalLength
Definition coredbfields.h:108
@ Make
Definition coredbfields.h:104
@ ImageMetadataAll
Definition coredbfields.h:120
@ SubjectDistance
Definition coredbfields.h:118
@ ImageMetadataLast
Definition coredbfields.h:137
@ ExposureProgram
Definition coredbfields.h:111
@ Sensitivity
Definition coredbfields.h:113
@ FocalLength35
Definition coredbfields.h:109
@ ExposureTime
Definition coredbfields.h:110
@ MeteringMode
Definition coredbfields.h:117
@ ImageMetadataNone
Definition coredbfields.h:103
@ SubjectDistanceCategory
Definition coredbfields.h:119
@ WhiteBalanceColorTemperature
Definition coredbfields.h:116
@ Lens
Definition coredbfields.h:106
@ Aperture
Definition coredbfields.h:107
@ Model
Definition coredbfields.h:105
@ WhiteBalance
Definition coredbfields.h:115
Definition datefolderview.cpp:34
QDebug operator<<(QDebug dbg, const DbEngineParameters &p)
Definition dbengineparameters.cpp:930
QDataStream & operator>>(QDataStream &ds, PhotoInfoContainer &info)
Definition photoinfocontainer.cpp:108
ColorLabel
Definition digikam_globals.h:90
PickLabel
Definition digikam_globals.h:109