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 }