digiKam
Loading...
Searching...
No Matches
choicesearchutilities.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 : 2008-04-18
7 * Description : User interface for searches
8 *
9 * SPDX-FileCopyrightText: 2008-2012 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 <QAbstractListModel>
20#include <QList>
21#include <QVariant>
22
23// Local includes
24
25#include "dexpanderbox.h"
26#include "coredbsearchxml.h"
27#include "comboboxutilities.h"
28
29namespace Digikam
30{
31
32class ChoiceSearchModel : public QAbstractListModel
33{
34 Q_OBJECT
35
36public:
37
39 {
40 IdRole = Qt::UserRole
41 };
42
43public:
44
45 explicit ChoiceSearchModel(QObject* const parent = nullptr);
46
50 void setChoice(const QMap<int, QString>& data);
51
57 void setChoice(const QVariantList& data);
58
63 void setChoice(const QStringList& data);
64
68 QVariantList checkedKeys() const;
69
74 template <typename T> QList<T> checkedKeys() const;
75
79 QStringList checkedDisplayTexts() const;
80
84 template <typename T> void setChecked(const T& key, bool checked = true);
85
89 template <typename T> void setChecked(const QList<T>& keys, bool checked = true);
90
97 template <typename T> void setChecked(const T& value, SearchXml::Relation relation);
98
102 void resetChecked();
103
104 int rowCount(const QModelIndex& parent) const override;
105 QVariant data(const QModelIndex& index, int role) const override;
106 QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const override;
107 Qt::ItemFlags flags(const QModelIndex& index) const override;
108 bool setData(const QModelIndex& index, const QVariant& value, int role) override;
109
110Q_SIGNALS:
111
112 void checkStateChanged(const QVariant& key, bool isChecked);
113
114protected:
115
116 void setChecked(int index, bool checked);
117
118protected:
119
120 class Entry
121 {
122 public:
123
124 Entry() = default;
125 Entry(const QVariant& key, const QString& userDisplay);
126
127 bool operator==(const Entry& other) const;
128
130 bool operator==(const QVariant& other) const;
131
132 public:
133
134 QVariant m_key;
135 QString m_display;
136 bool m_checkState = false;
137 };
138
139protected:
140
141 QList<Entry> m_entries;
142};
143
144template <typename T> void ChoiceSearchModel::setChecked(const T& key, bool checked)
145{
146 QVariant variantKey(key);
147
148 for (int i = 0 ; i < m_entries.size() ; ++i)
149 {
150 if (m_entries[i].m_key == variantKey)
151 {
152 setChecked(i, checked);
153 }
154 }
155}
156
157template <typename T> void ChoiceSearchModel::setChecked(const T& value, SearchXml::Relation relation)
158{
159 for (int i = 0 ; i < m_entries.size() ; ++i)
160 {
161 setChecked(i, SearchXml::testRelation(m_entries.at(i).m_key.value<T>(), value, relation));
162 }
163}
164
165template <typename T> void ChoiceSearchModel::setChecked(const QList<T>& keys, bool checked)
166{
167 for (T key : std::as_const(keys))
168 {
169 setChecked(key, checked);
170 }
171}
172
173template <typename T> QList<T> ChoiceSearchModel::checkedKeys() const
174{
175 QList<T> list;
176
177 for (QList<Entry>::const_iterator it = m_entries.begin() ; it != m_entries.end() ; ++it)
178 {
179 if ((*it).m_checkState)
180 {
181 list << (*it).m_key.value<T>();
182 }
183 }
184
185 return list;
186}
187
188// -------------------------------------------------------------------------------------
189
191{
192 Q_OBJECT
193
194public:
195
202 explicit ChoiceSearchComboBox(QWidget* const parent = nullptr);
203
209
213 void setLabelText(const QString& text);
214
215 ChoiceSearchModel* model() const;
216 DSqueezedClickLabel* label() const;
217
218Q_SIGNALS:
219
221
222protected Q_SLOTS:
223
224 void labelClicked();
225
226protected:
227
228 void installView(QAbstractItemView* view = nullptr) override;
229
230protected:
231
233};
234
235} // namespace Digikam
Definition choicesearchutilities.h:191
ChoiceSearchModel * model() const
Definition choicesearchutilities.cpp:226
void setLabelText(const QString &text)
Definition choicesearchutilities.cpp:236
DSqueezedClickLabel * m_label
Definition choicesearchutilities.h:232
void setSearchModel(ChoiceSearchModel *model)
Definition choicesearchutilities.cpp:220
DSqueezedClickLabel * label() const
Definition choicesearchutilities.cpp:231
void installView(QAbstractItemView *view=nullptr) override
Definition choicesearchutilities.cpp:247
void labelClicked()
Definition choicesearchutilities.cpp:241
Definition choicesearchutilities.h:121
bool m_checkState
Definition choicesearchutilities.h:136
bool operator==(const QVariant &other) const
bool operator==(const Entry &other) const
Definition choicesearchutilities.cpp:35
QString m_display
Definition choicesearchutilities.h:135
QVariant m_key
Definition choicesearchutilities.h:134
Definition choicesearchutilities.h:33
void setChoice(const QMap< int, QString > &data)
Definition choicesearchutilities.cpp:45
void checkStateChanged(const QVariant &key, bool isChecked)
QVariant data(const QModelIndex &index, int role) const override
Definition choicesearchutilities.cpp:162
bool setData(const QModelIndex &index, const QVariant &value, int role) override
Definition choicesearchutilities.cpp:198
QStringList checkedDisplayTexts() const
Definition choicesearchutilities.cpp:117
QModelIndex index(int row, int column=0, const QModelIndex &parent=QModelIndex()) const override
Definition choicesearchutilities.cpp:183
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition choicesearchutilities.cpp:193
void resetChecked()
Definition choicesearchutilities.cpp:141
QVariantList checkedKeys() const
Definition choicesearchutilities.cpp:102
void setChecked(const T &key, bool checked=true)
Definition choicesearchutilities.h:144
CustomRoles
Definition choicesearchutilities.h:39
@ IdRole
Definition choicesearchutilities.h:40
QList< Entry > m_entries
Definition choicesearchutilities.h:141
int rowCount(const QModelIndex &parent) const override
Definition choicesearchutilities.cpp:152
Definition dexpanderbox.h:122
Definition comboboxutilities.h:228
QListView * view() const
Definition comboboxutilities.cpp:457
qulonglong value
Definition itemviewutilities.cpp:585
#define T
Relation
Definition coredbsearchxml.h:56
bool testRelation(T v1, T v2, Relation rel)
Definition coredbsearchxml.h:76
Definition datefolderview.cpp:34