Krita Source Code Documentation
Loading...
Searching...
No Matches
KisRecentDocumentsModelWrapper Class Reference

#include <KisRecentDocumentsModelWrapper.h>

+ Inheritance diagram for KisRecentDocumentsModelWrapper:

Signals

void sigModelIsUpToDate ()
 

Public Member Functions

QStandardItemModel & model ()
 

Static Public Member Functions

static KisRecentDocumentsModelWrapperinstance ()
 

Static Public Attributes

static constexpr const int ICON_SIZE_LENGTH = 200
 

Private Slots

void fileAdded (const QUrl &url)
 
void fileRemoved (const QUrl &url)
 
void listRenewed ()
 
void slotFileIconChanged (const QUrl &url, const QIcon &icon)
 

Private Member Functions

 KisRecentDocumentsModelWrapper ()
 
void setFiles (const QList< QUrl > &urls)
 
 ~KisRecentDocumentsModelWrapper ()
 

Private Attributes

QStandardItemModel m_filesAndThumbnailsModel
 

Detailed Description

This singleton class provides a QStandardItemModel representing the recent files list and also supports lazy-loading of the file thumbnail icons. Each recent file entry is represented as a QStandardItem. When QStandardItem::icon() is called for the first time, it fetches the icon via KisRecentFileIconCache, which triggers loading the file icon in background if it hasn't already been loaded and cached.

See also KisRecentFilesManager.

Definition at line 26 of file KisRecentDocumentsModelWrapper.h.

Constructor & Destructor Documentation

◆ KisRecentDocumentsModelWrapper()

KisRecentDocumentsModelWrapper::KisRecentDocumentsModelWrapper ( )
private

Definition at line 113 of file KisRecentDocumentsModelWrapper.cpp.

114{
116 SIGNAL(fileIconChanged(const QUrl &, const QIcon &)),
117 SLOT(slotFileIconChanged(const QUrl &, const QIcon &)));
119 SIGNAL(fileAdded(const QUrl &)),
120 SLOT(fileAdded(const QUrl &)));
122 SIGNAL(fileRemoved(const QUrl &)),
123 SLOT(fileRemoved(const QUrl &)));
125 SIGNAL(listRenewed()),
126 SLOT(listRenewed()));
127
128 // Load the initial recent files list
129 listRenewed();
130}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void slotFileIconChanged(const QUrl &url, const QIcon &icon)
static KisRecentFileIconCache * instance()
static KisRecentFilesManager * instance()

References connect(), fileAdded(), fileRemoved(), KisRecentFileIconCache::instance(), KisRecentFilesManager::instance(), listRenewed(), and slotFileIconChanged().

◆ ~KisRecentDocumentsModelWrapper()

KisRecentDocumentsModelWrapper::~KisRecentDocumentsModelWrapper ( )
private

Definition at line 132 of file KisRecentDocumentsModelWrapper.cpp.

132{}

Member Function Documentation

◆ fileAdded

void KisRecentDocumentsModelWrapper::fileAdded ( const QUrl & url)
privateslot

◆ fileRemoved

void KisRecentDocumentsModelWrapper::fileRemoved ( const QUrl & url)
privateslot

Definition at line 175 of file KisRecentDocumentsModelWrapper.cpp.

176{
177 const int count = m_filesAndThumbnailsModel.rowCount();
178 for (int i = 0; i < count; i++) {
179 QStandardItem *item = m_filesAndThumbnailsModel.item(i);
180 if (item && item->data() == url) {
181 m_filesAndThumbnailsModel.removeRow(i);
182 Q_EMIT sigModelIsUpToDate();
183 return;
184 }
185 }
186}

References m_filesAndThumbnailsModel, and sigModelIsUpToDate().

◆ instance()

KisRecentDocumentsModelWrapper * KisRecentDocumentsModelWrapper::instance ( )
static

Definition at line 134 of file KisRecentDocumentsModelWrapper.cpp.

135{
136 if (QThread::currentThread() != qApp->thread()) {
137 qWarning() << "KisRecentDocumentsModelWrapper::instance() called from non-GUI thread!";
138 return nullptr;
139 }
140 static KisRecentDocumentsModelWrapper s_instance;
141 return &s_instance;
142}

◆ listRenewed

void KisRecentDocumentsModelWrapper::listRenewed ( )
privateslot

Definition at line 188 of file KisRecentDocumentsModelWrapper.cpp.

189{
190 setFiles(KisRecentFilesManager::instance()->recentUrlsLatestFirst());
191}

References KisRecentFilesManager::instance(), and setFiles().

◆ model()

QStandardItemModel & KisRecentDocumentsModelWrapper::model ( )

Get underlying model

No need for any extra setup. This will hold the provided files

Definition at line 193 of file KisRecentDocumentsModelWrapper.cpp.

194{
196}

References m_filesAndThumbnailsModel.

◆ setFiles()

void KisRecentDocumentsModelWrapper::setFiles ( const QList< QUrl > & urls)
private

Update m_filesAndThumbnailsModel and launch worker thread to fetch icons in background

Definition at line 144 of file KisRecentDocumentsModelWrapper.cpp.

145{
146 // Replace all items in the model. The existing items are deleted by
147 // `QStandardItemModel`.
148 m_filesAndThumbnailsModel.setRowCount(urls.count());
149 for (int i = 0; i < urls.count(); i++) {
150 QStandardItem *item = new KisRecentDocumentsModelItem(urls[i]);
151 m_filesAndThumbnailsModel.setItem(i, item);
152 }
153
154 Q_EMIT sigModelIsUpToDate();
155}

References m_filesAndThumbnailsModel, and sigModelIsUpToDate().

◆ sigModelIsUpToDate

void KisRecentDocumentsModelWrapper::sigModelIsUpToDate ( )
signal

Report when the model has been updated with the latest recent file list.

◆ slotFileIconChanged

void KisRecentDocumentsModelWrapper::slotFileIconChanged ( const QUrl & url,
const QIcon & icon )
privateslot

Definition at line 157 of file KisRecentDocumentsModelWrapper.cpp.

158{
159 const int count = m_filesAndThumbnailsModel.rowCount();
160 for (int i = 0; i < count; i++) {
161 QStandardItem *item = m_filesAndThumbnailsModel.item(i);
162 if (item && item->data() == url) {
163 item->setIcon(icon);
164 return;
165 }
166 }
167}

References m_filesAndThumbnailsModel.

Member Data Documentation

◆ ICON_SIZE_LENGTH

constexpr const int KisRecentDocumentsModelWrapper::ICON_SIZE_LENGTH = 200
staticconstexpr

Definition at line 30 of file KisRecentDocumentsModelWrapper.h.

◆ m_filesAndThumbnailsModel

QStandardItemModel KisRecentDocumentsModelWrapper::m_filesAndThumbnailsModel
private

Definition at line 52 of file KisRecentDocumentsModelWrapper.h.


The documentation for this class was generated from the following files: