16 using SingleColumn = std::tuple<T>;
21 using type = std::remove_pointer_t<T>;
24 using if_get_matches = std::enable_if_t<std::is_same_v<q20::remove_cvref_t<X>,
25 MultiColumn<T>>,
bool>;
27 template <
typename V = T,
28 std::enable_if_t<QGenericItemModelDetails::is_validatable<V>::value,
bool> =
true>
29 constexpr explicit operator
bool()
const noexcept {
return bool(data); }
32 template <std::size_t I,
typename V, if_get_matches<V> =
true>
33 friend inline decltype(
auto) get(V &&multiColumn)
35 static_assert(I < std::tuple_size_v<type>,
"Index out of bounds for wrapped type");
36 return get<I>(QGenericItemModelDetails::refTo(q23::forward_like<V>(multiColumn.data)));
40 template <
typename Range,
41 QGenericItemModelDetails::if_is_table_range<Range> =
true>
42 explicit QGenericItemModel(Range &&range, QObject *parent =
nullptr);
44 template <
typename Range,
45 QGenericItemModelDetails::if_is_tree_range<Range> =
true>
46 explicit QGenericItemModel(Range &&range, QObject *parent =
nullptr);
48 template <
typename Range,
typename Protocol,
49 QGenericItemModelDetails::if_is_tree_range<Range, Protocol> =
true>
50 explicit QGenericItemModel(Range &&range, Protocol &&protocol, QObject *parent =
nullptr);
52 ~QGenericItemModel() override;
54 QModelIndex index(
int row,
int column,
const QModelIndex &parent = {})
const override;
55 QModelIndex parent(
const QModelIndex &child)
const override;
56 QModelIndex sibling(
int row,
int column,
const QModelIndex &index)
const override;
57 int rowCount(
const QModelIndex &parent = {})
const override;
58 int columnCount(
const QModelIndex &parent = {})
const override;
59 Qt::ItemFlags flags(
const QModelIndex &index)
const override;
60 QVariant headerData(
int section, Qt::Orientation orientation,
int role)
const override;
61 QVariant data(
const QModelIndex &index,
int role = Qt::DisplayRole)
const override;
62 bool setData(
const QModelIndex &index,
const QVariant &data,
int role = Qt::EditRole) override;
63 QMap<
int, QVariant> itemData(
const QModelIndex &index)
const override;
64 bool setItemData(
const QModelIndex &index,
const QMap<
int, QVariant> &data) override;
65 bool clearItemData(
const QModelIndex &index) override;
66 bool insertColumns(
int column,
int count,
const QModelIndex &parent = {}) override;
67 bool removeColumns(
int column,
int count,
const QModelIndex &parent = {}) override;
68 bool moveColumns(
const QModelIndex &sourceParent,
int sourceColumn,
int count,
69 const QModelIndex &destParent,
int destColumn) override;
70 bool insertRows(
int row,
int count,
const QModelIndex &parent = {}) override;
71 bool removeRows(
int row,
int count,
const QModelIndex &parent = {}) override;
72 bool moveRows(
const QModelIndex &sourceParent,
int sourceRow,
int count,
73 const QModelIndex &destParent,
int destRow) override;
75 bool canFetchMore(
const QModelIndex &parent)
const override;
76 void fetchMore(
const QModelIndex &parent) override;
78 bool hasChildren(
const QModelIndex &parent = QModelIndex())
const override;
79 QModelIndex buddy(
const QModelIndex &index)
const override;
80 bool canDropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
81 const QModelIndex &parent)
const override;
82 bool dropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
83 const QModelIndex &parent) override;
84 QMimeData *mimeData(
const QModelIndexList &indexes)
const override;
85 QStringList mimeTypes()
const override;
86 QModelIndexList match(
const QModelIndex &start,
int role,
const QVariant &value,
int hits,
87 Qt::MatchFlags flags)
const override;
88 void multiData(
const QModelIndex &index, QModelRoleDataSpan roleDataSpan)
const override;
89 QHash<
int, QByteArray> roleNames()
const override;
90 void sort(
int column, Qt::SortOrder order = Qt::AscendingOrder) override;
91 QSize span(
const QModelIndex &index)
const override;
92 Qt::DropActions supportedDragActions()
const override;
93 Qt::DropActions supportedDropActions()
const override;
96 void resetInternalData() override;
99 bool event(QEvent *) override;
100 bool eventFilter(QObject *, QEvent *) override;
103 Q_DISABLE_COPY_MOVE(QGenericItemModel)
105 friend class QGenericItemModelImplBase;
106 struct Deleter {
void operator()(QGenericItemModelImplBase *that) { that->destroy(); } };
107 std::unique_ptr<QGenericItemModelImplBase, Deleter> impl;
208QGenericItemModel::QGenericItemModel(Range &&range, Protocol &&protocol, QObject *parent)
209 : QAbstractItemModel(parent)
210 , impl(
new QGenericTreeItemModelImpl<Range, Protocol>(std::forward<Range>(range),
211 std::forward<Protocol>(protocol),
this))