6namespace qml_material::utils
13 bool exclusive =
true;
14 T* selected =
nullptr;
17 QList<QPointer<T>> snapshot()
const {
18 QList<QPointer<T>> result;
19 for (
auto* member : members) result.append(member);
23 template<
class UpdateChecked>
24 void normalize(QObject* owner, T* preferred, UpdateChecked updateChecked) {
25 const auto serial = ++revision;
30 if (! members.contains(selected) || ! selected->isChecked()) selected =
nullptr;
31 if (preferred && members.contains(preferred) && preferred->isChecked())
34 for (
auto* member : members)
35 if (member->isChecked()) {
40 QPointer<QObject> guard(owner);
41 const auto items = snapshot();
42 for (
const auto& member : items) {
43 if (member && members.contains(member) && member != selected && member->isChecked())
44 updateChecked(member,
false);
45 if (! guard || revision != serial)
return;
49 Qt::CheckState checkState()
const {
50 qsizetype checked = 0;
51 for (
auto* member : members) checked += member->isChecked();
52 return ! checked ? Qt::Unchecked
53 : checked == members.size() ? Qt::Checked
54 : Qt::PartiallyChecked;