1 /****************************************************************************
2 **
3 ** Copyright (C) 2021 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of Qt Creator.
7 **
8 ** Commercial License Usage
9 ** Licensees holding valid commercial Qt licenses may use this file in
10 ** accordance with the commercial license agreement provided with the
11 ** Software or, alternatively, in accordance with the terms contained in
12 ** a written agreement between you and The Qt Company. For licensing terms
13 ** and conditions see https://www.qt.io/terms-conditions. For further
14 ** information use the contact form at https://www.qt.io/contact-us.
15 **
16 ** GNU General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU
18 ** General Public License version 3 as published by the Free Software
19 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
20 ** included in the packaging of this file. Please review the following
21 ** information to ensure the GNU General Public License requirements will
22 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
23 **
24 ****************************************************************************/
25 
26 #pragma once
27 
28 #include <QAbstractItemModel>
29 #include <QFileInfo>
30 #include <QList>
31 #include <QSet>
32 #include <QStringList>
33 
34 namespace QmlDesigner {
35 namespace Internal {
36 
37 class AssetImportUpdateTreeItem;
38 
39 class AssetImportUpdateTreeModel : public QAbstractItemModel
40 {
41     Q_OBJECT
42 
43 public:
44     AssetImportUpdateTreeModel(QObject *parent = nullptr);
45     ~AssetImportUpdateTreeModel() override;
46 
47     Qt::ItemFlags flags(const QModelIndex &index) const override;
48     QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
49     QModelIndex parent(const QModelIndex &child) const override;
50     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
51     int columnCount(const QModelIndex &parent = QModelIndex()) const override;
52     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
53     bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
54 
55     void createItems(const QList<QFileInfo> &infos, const QSet<QString> &preselectedFiles);
56     QStringList checkedFiles() const;
57 
58     static AssetImportUpdateTreeItem *treeItemAtIndex(const QModelIndex &idx);
59 
60 public slots:
61     void clear();
62 
63 private:
64     QModelIndex index(AssetImportUpdateTreeItem *item) const;
65     QVariant data(const AssetImportUpdateTreeItem *row, int role) const;
66     bool setCheckState(const QModelIndex &idx, Qt::CheckState checkState, bool firstCall = true);
67 
68     AssetImportUpdateTreeItem *m_rootItem;
69     QList<AssetImportUpdateTreeItem *> m_fileItems;
70 };
71 
72 } // namespace Internal
73 } // namespace QmlDesigner
74