File indexing completed on 2024-05-12 15:59:52
0001 /* 0002 * SPDX-FileCopyrightText: 2018 boud <boud@valdyas.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "KisResourceTypeModel.h" 0007 #include <QtSql> 0008 0009 #include <KisResourceTypes.h> 0010 0011 struct KisResourceTypeModel::Private { 0012 int cachedRowCount {-1}; 0013 QSqlQuery query; 0014 }; 0015 0016 0017 KisResourceTypeModel::KisResourceTypeModel(QObject *parent) 0018 : QAbstractTableModel(parent) 0019 , d(new Private) 0020 { 0021 prepareQuery(); 0022 } 0023 0024 KisResourceTypeModel::~KisResourceTypeModel() 0025 { 0026 delete d; 0027 } 0028 0029 int KisResourceTypeModel::rowCount(const QModelIndex &parent) const 0030 { 0031 if (parent.isValid()) { 0032 return 0; 0033 } 0034 0035 if (d->cachedRowCount < 0) { 0036 QSqlQuery q; 0037 q.prepare("SELECT count(*)\n" 0038 "FROM resource_types\n"); 0039 q.exec(); 0040 q.first(); 0041 0042 const_cast<KisResourceTypeModel*>(this)->d->cachedRowCount = q.value(0).toInt(); 0043 } 0044 return d->cachedRowCount; 0045 } 0046 0047 int KisResourceTypeModel::columnCount(const QModelIndex &parent) const 0048 { 0049 if (parent.isValid()) { 0050 return 0; 0051 } 0052 0053 return 3; 0054 } 0055 0056 QVariant KisResourceTypeModel::data(const QModelIndex &index, int role) const 0057 { 0058 QVariant v; 0059 if (!index.isValid()) return v; 0060 0061 if (index.row() > rowCount()) return v; 0062 if (index.column() > (int)Name) return v; 0063 0064 bool pos = d->query.seek(index.row()); 0065 0066 if (pos) { 0067 QString id = d->query.value("id").toString(); 0068 QString resourceType = d->query.value("name").toString(); 0069 QString name = ResourceName::resourceTypeToName(resourceType); 0070 0071 switch(role) { 0072 case Qt::DisplayRole: 0073 { 0074 switch(index.column()) { 0075 case Id: 0076 return id; 0077 case ResourceType: 0078 return resourceType; 0079 case Name: 0080 default: 0081 return name; 0082 } 0083 } 0084 case Qt::UserRole + Id: 0085 return id; 0086 case Qt::UserRole + ResourceType: 0087 return resourceType; 0088 case Qt::UserRole + Name: 0089 return name; 0090 default: 0091 ; 0092 } 0093 } 0094 return v; 0095 } 0096 0097 bool KisResourceTypeModel::prepareQuery() 0098 { 0099 beginResetModel(); 0100 bool r = d->query.prepare("SELECT id\n" 0101 ", name\n" 0102 "FROM resource_types\n"); 0103 if (!r) { 0104 qWarning() << "Could not prepare KisResourceTypeModel query" << d->query.lastError(); 0105 } 0106 r = d->query.exec(); 0107 if (!r) { 0108 qWarning() << "Could not execute KisResourceTypeModel query" << d->query.lastError(); 0109 } 0110 d->cachedRowCount = -1; 0111 endResetModel(); 0112 return r; 0113 }