digiKam
Loading...
Searching...
No Matches
itemfiltermodel_p.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 : 2009-03-11
7 * Description : Qt item model for database entries - private containers
8 *
9 * SPDX-FileCopyrightText: 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17// Qt includes
18
19#include <QHash>
20#include <QMutex>
21#include <QMutexLocker>
22#include <QSet>
23#include <QThread>
24#include <QTimer>
25#include <QWaitCondition>
26
27// Local includes
28
29#include "iteminfo.h"
30#include "itemfiltermodel.h"
31#include "digikam_export.h"
32
33// NOTE: we need the EXPORT macro in a private header because
34// this private header is shared across binary objects.
35// This does NOT make this classes here any more public!
36
37namespace Digikam
38{
39
40const int PrepareChunkSize = 101;
41const int FilterChunkSize = 2001;
42
44{
45public:
46
48
49 ItemFilterModelTodoPackage(const QVector<ItemInfo>& infos,
50 const QVector<QVariant>& extraValues,
51 int version,
52 bool isForReAdd)
53 : infos (infos),
57 {
58 }
59
60 QVector<ItemInfo> infos;
61 QVector<QVariant> extraValues;
62 unsigned int version = 0;
63 bool isForReAdd = false;
64 QHash<qlonglong, bool> filterResults;
65};
66
67// ------------------------------------------------------------------------------------------------
68
71
72class DIGIKAM_DATABASE_EXPORT ItemFilterModel::ItemFilterModelPrivate : public QObject
73{
74 Q_OBJECT
75
76public:
77
80
83 void infosToProcess(const QList<ItemInfo>& infos);
84 void infosToProcess(const QList<ItemInfo>& infos, const QList<QVariant>& extraValues, bool forReAdd = true);
85
86public:
87
88 ItemFilterModel* q = nullptr;
89
90 ItemModel* imageModel = nullptr;
91
96
97 volatile unsigned int version = 0;
98 unsigned int lastDiscardVersion = 0;
99 unsigned int lastFilteredVersion = 0;
100 int sentOut = 0;
101 int sentOutForReAdd = 0;
102
103 QTimer* updateFilterTimer = nullptr;
104
105 bool needPrepare = false;
106 bool needPrepareComments = false;
107 bool needPrepareTags = false;
108 bool needPrepareGroups = false;
109
110 QMutex mutex;
114 ItemFilterModelPreparer* preparer = nullptr;
115 ItemFilterModelFilterer* filterer = nullptr;
116
117 QHash<qlonglong, bool> filterResults;
118 bool hasOneMatch = false;
119 bool hasOneMatchForText = false;
120
121 QList<ItemFilterModelPrepareHook*> prepareHooks;
122
123/*
124 QHash<int, QSet<qlonglong> > categoryCountHashInt;
125 QHash<QString, QSet<qlonglong> > categoryCountHashString;
126
127public:
128
129 void cacheCategoryCount(int id, qlonglong imageid) const
130 {
131 const_cast<ItemFilterModelPrivate*>(this)->categoryCountHashInt[id].insert(imageid);
132 }
133
134 void cacheCategoryCount(const QString& id, qlonglong imageid) const
135 {
136 const_cast<ItemFilterModelPrivate*>(this)->categoryCountHashString[id].insert(imageid);
137 }
138*/
139
140public Q_SLOTS:
141
142 void preprocessInfos(const QList<ItemInfo>& infos, const QList<QVariant>& extraValues);
143 void processAddedInfos(const QList<ItemInfo>& infos, const QList<QVariant>& extraValues);
146
147Q_SIGNALS:
148
151 void reAddItemInfos(const QList<ItemInfo>& infos, const QList<QVariant>& extraValues);
153
154private:
155
156 // Disable
157
158 explicit ItemFilterModelPrivate(QObject*) = delete;
159};
160
161} // namespace Digikam
Definition itemfiltersettings.h:300
Definition itemfiltermodelthreads.h:75
Definition itemfiltermodelthreads.h:59
Definition itemfiltermodel_p.h:44
ItemFilterModelTodoPackage(const QVector< ItemInfo > &infos, const QVector< QVariant > &extraValues, int version, bool isForReAdd)
Definition itemfiltermodel_p.h:49
bool isForReAdd
Definition itemfiltermodel_p.h:63
QVector< ItemInfo > infos
Definition itemfiltermodel_p.h:60
unsigned int version
Definition itemfiltermodel_p.h:62
QVector< QVariant > extraValues
Definition itemfiltermodel_p.h:61
QHash< qlonglong, bool > filterResults
Definition itemfiltermodel_p.h:64
Definition itemfiltermodel.h:115
ItemFilterSettings filter
Definition itemfiltermodel_p.h:92
void preprocessInfos(const QList< ItemInfo > &infos, const QList< QVariant > &extraValues)
VersionItemFilterSettings versionFilter
Definition itemfiltermodel_p.h:94
~ItemFilterModelPrivate() override
GroupItemFilterSettings groupFilter
Definition itemfiltermodel_p.h:95
void infosToProcess(const QList< ItemInfo > &infos)
void packageToFilter(const ItemFilterModelTodoPackage &package)
QList< ItemFilterModelPrepareHook * > prepareHooks
Definition itemfiltermodel_p.h:121
void infosToProcess(const QList< ItemInfo > &infos, const QList< QVariant > &extraValues, bool forReAdd=true)
void reAddItemInfos(const QList< ItemInfo > &infos, const QList< QVariant > &extraValues)
void init(ItemFilterModel *qq)
QHash< qlonglong, bool > filterResults
Definition itemfiltermodel_p.h:117
void packageDiscarded(const ItemFilterModelTodoPackage &package)
void packageFinished(const ItemFilterModelTodoPackage &package)
VersionItemFilterSettings versionFilterCopy
Definition itemfiltermodel_p.h:112
QMutex mutex
Definition itemfiltermodel_p.h:110
GroupItemFilterSettings groupFilterCopy
Definition itemfiltermodel_p.h:113
ItemFilterSettings filterCopy
Definition itemfiltermodel_p.h:111
void packageToPrepare(const ItemFilterModelTodoPackage &package)
void processAddedInfos(const QList< ItemInfo > &infos, const QList< QVariant > &extraValues)
ItemSortSettings sorter
Definition itemfiltermodel_p.h:93
Definition itemfiltersettings.h:85
Definition itemmodel.h:44
Definition itemsortsettings.h:39
Definition itemfiltersettings.h:256
Definition datefolderview.cpp:34
const int PrepareChunkSize
Definition itemfiltermodel_p.h:40
const int FilterChunkSize
Definition itemfiltermodel_p.h:41