File indexing completed on 2024-05-12 15:59:49

0001 /*
0002  * SPDX-FileCopyrightText: 2018 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 #include "KisResourceIterator.h"
0007 
0008 #include <KisResourceModel.h>
0009 #include <QModelIndex>
0010 
0011 KisResourceItem::KisResourceItem(KisResourceModel *resourceModel, const QModelIndex &index)
0012     : m_resourceModel(resourceModel)
0013     , m_index(index)
0014 {
0015 
0016 }
0017 
0018 int KisResourceItem::id()
0019 {
0020     if (m_index.isValid()) {
0021         return m_index.data(Qt::UserRole + KisAbstractResourceModel::Id).toInt();
0022     }
0023     return -1;
0024 }
0025 
0026 QString KisResourceItem::resourceType()
0027 {
0028     if (m_index.isValid()) {
0029         return m_index.data(Qt::UserRole + KisAbstractResourceModel::ResourceType).toString();
0030     }
0031     return QString();
0032 }
0033 
0034 QString KisResourceItem::name()
0035 {
0036     if (m_index.isValid()) {
0037         return m_index.data(Qt::UserRole + KisAbstractResourceModel::Name).toString();
0038     }
0039     return QString();
0040 }
0041 
0042 QString KisResourceItem::filename()
0043 {
0044     if (m_index.isValid()) {
0045         return m_index.data(Qt::UserRole + KisAbstractResourceModel::Filename).toString();
0046     }
0047     return QString();
0048 }
0049 
0050 QString KisResourceItem::tooltip()
0051 {
0052     if (m_index.isValid()) {
0053         return m_index.data(Qt::UserRole + KisAbstractResourceModel::Tooltip).toString();
0054     }
0055     return QString();
0056 }
0057 
0058 QString KisResourceItem::md5sum()
0059 {
0060     return resource()->md5Sum();
0061 }
0062 
0063 QImage KisResourceItem::thumbnail()
0064 {
0065     if (m_index.isValid()) {
0066         return m_index.data(Qt::UserRole + KisAbstractResourceModel::Thumbnail).value<QImage>();
0067     }
0068     return QImage();
0069 }
0070 
0071 KoResourceSP KisResourceItem::resource()
0072 {
0073     if (m_index.isValid() && m_resourceModel) {
0074        return m_resourceModel->resourceForIndex(m_index);
0075     }
0076     return 0;
0077 }
0078 
0079 struct KisResourceIterator::Private
0080 {
0081     Private(KisResourceModel *_resourceModel)
0082         : resourceModel(_resourceModel)
0083     {}
0084 
0085     KisResourceModel *resourceModel {0};
0086     int currentRow {0};
0087 };
0088 
0089 KisResourceIterator::KisResourceIterator(KisResourceModel *resourceModel)
0090     : d(new Private(resourceModel))
0091 {
0092 }
0093 
0094 KisResourceIterator::~KisResourceIterator()
0095 {
0096 }
0097 
0098 
0099 bool KisResourceIterator::hasNext() const
0100 {
0101     return d->currentRow < d->resourceModel->rowCount();
0102 }
0103 
0104 bool KisResourceIterator::hasPrevious() const
0105 {
0106     return d->currentRow > 0 && d->resourceModel->rowCount() > 0;
0107 }
0108 
0109 const KisResourceItemSP KisResourceIterator::next()
0110 {
0111     if (hasNext()) {
0112         QModelIndex idx = d->resourceModel->index(d->currentRow, 0);
0113         d->currentRow++;
0114         return KisResourceItemSP(new KisResourceItem(d->resourceModel, idx));
0115     }
0116     return KisResourceItemSP(new KisResourceItem(0, QModelIndex()));
0117 }
0118 
0119 const KisResourceItemSP KisResourceIterator::peekNext() const
0120 {
0121     if (hasNext()) {
0122         QModelIndex idx = d->resourceModel->index(d->currentRow, 0);
0123         return KisResourceItemSP(new KisResourceItem(d->resourceModel, idx));
0124     }
0125     return KisResourceItemSP(new KisResourceItem(0, QModelIndex()));
0126 }
0127 
0128 const KisResourceItemSP KisResourceIterator::peekPrevious() const
0129 {
0130     if (hasPrevious()) {
0131         QModelIndex idx = d->resourceModel->index(d->currentRow - 1, 0);
0132         return KisResourceItemSP(new KisResourceItem(d->resourceModel, idx));
0133     }
0134     return KisResourceItemSP(new KisResourceItem(0, QModelIndex()));
0135 }
0136 
0137 const KisResourceItemSP KisResourceIterator::previous()
0138 {
0139     if (hasPrevious()) {
0140         d->currentRow--;
0141         QModelIndex idx = d->resourceModel->index(d->currentRow, 0);
0142         return KisResourceItemSP(new KisResourceItem(d->resourceModel, idx));
0143     }
0144     return KisResourceItemSP(new KisResourceItem(0, QModelIndex()));
0145 
0146 }
0147 
0148 void KisResourceIterator::toFront()
0149 {
0150     d->currentRow = 0;
0151 }
0152 
0153 void KisResourceIterator::toBack()
0154 {
0155     d->currentRow = d->resourceModel->rowCount();
0156 }