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 }