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

#include <KisRecentFilesManager.h>

+ Inheritance diagram for KisRecentFilesManager:

Classes

class  Private
 

Signals

void fileAdded (const QUrl &url)
 
void fileRemoved (const QUrl &url)
 
void listRenewed ()
 

Public Member Functions

void add (const QUrl &url)
 
void clear ()
 
QVector< KisRecentFilesEntryrecentFiles () const
 
QList< QUrl > recentUrlsLatestFirst () const
 
void remove (const QUrl &url)
 

Static Public Member Functions

static KisRecentFilesManagerinstance ()
 

Private Member Functions

 KisRecentFilesManager ()
 
void loadEntries (const KConfigGroup &config)
 
void saveEntries (const KConfigGroup &config)
 
 ~KisRecentFilesManager ()
 

Private Attributes

Privatem_d
 

Detailed Description

Definition at line 25 of file KisRecentFilesManager.h.

Constructor & Destructor Documentation

◆ KisRecentFilesManager()

KisRecentFilesManager::KisRecentFilesManager ( )
private

Definition at line 74 of file KisRecentFilesManager.cpp.

75 : m_d(new Private(this))
76{
77 loadEntries(KSharedConfig::openConfig()->group("RecentFiles"));
78}
void loadEntries(const KConfigGroup &config)

References loadEntries().

◆ ~KisRecentFilesManager()

KisRecentFilesManager::~KisRecentFilesManager ( )
private

Definition at line 80 of file KisRecentFilesManager.cpp.

81{
82 delete m_d;
83}

References m_d.

Member Function Documentation

◆ add()

void KisRecentFilesManager::add ( const QUrl & url)

Definition at line 121 of file KisRecentFilesManager_p.h.

122{
123 const QString name; // Dummy
124
125 if (m_d->m_maxItems <= 0) {
126 return;
127 }
128
129 if (url.isLocalFile() && url.toLocalFile().startsWith(QDir::tempPath())) {
130 return;
131 }
132 const QString tmpName = name.isEmpty() ? url.fileName() : name;
133 const QString pathOrUrl(url.toDisplayString(QUrl::PreferLocalFile));
134
135#ifdef Q_OS_WIN
136 const QString file = url.isLocalFile() ? QDir::toNativeSeparators(pathOrUrl) : pathOrUrl;
137#else
138 const QString file = pathOrUrl;
139#endif
140
141 // remove file if already in list
142 {
143 int removeIndex = m_d->indexOfUrl(url);
144 if (removeIndex >= 0) {
145 m_d->m_entries.removeAt(removeIndex);
146 Q_EMIT fileRemoved(url);
147 }
148 }
149
150 // remove oldest item if already maxitems in list
151 if (m_d->m_entries.count() >= m_d->m_maxItems) {
152 // remove oldest added item
153 m_d->m_entries.removeFirst();
154 }
155
157 url, // m_url
158 tmpName, // m_displayName
159 });
160 Q_EMIT fileAdded(url);
162}
int indexOfUrl(const QUrl &url) const
QVector< KisRecentFilesEntry > m_entries
void fileAdded(const QUrl &url)
void fileRemoved(const QUrl &url)
const char * name(StandardAction id)

References fileAdded(), fileRemoved(), KisRecentFilesManager::Private::indexOfUrl(), m_d, KisRecentFilesManager::Private::m_entries, KisRecentFilesManager::Private::m_maxItems, and KisRecentFilesManager::Private::requestSaveOnNextTick().

◆ clear()

void KisRecentFilesManager::clear ( )

◆ fileAdded

void KisRecentFilesManager::fileAdded ( const QUrl & url)
signal

◆ fileRemoved

void KisRecentFilesManager::fileRemoved ( const QUrl & url)
signal

◆ instance()

KisRecentFilesManager * KisRecentFilesManager::instance ( )
static

Definition at line 85 of file KisRecentFilesManager.cpp.

86{
87 if (QThread::currentThread() != qApp->thread()) {
88 qWarning() << "KisRecentFilesManager::instance() called from non-GUI thread!";
89 return nullptr;
90 }
91 static KisRecentFilesManager s_instance;
92 return &s_instance;
93}

◆ listRenewed

void KisRecentFilesManager::listRenewed ( )
signal

◆ loadEntries()

void KisRecentFilesManager::loadEntries ( const KConfigGroup & config)
private

Definition at line 28 of file KisRecentFilesManager_p.h.

29{
30 m_d->m_entries.clear();
31
32 KConfigGroup cg = _config;
33 if (cg.name().isEmpty()) {
34 cg = KConfigGroup(cg.config(), "RecentFiles");
35 }
36
37 m_d->m_maxItems = cg.readEntry("maxRecentFileItems", 100);
38
39 for (int i = 0; i < m_d->m_maxItems; ++i) {
40 const QString key = QString("File%1").arg(i+1);
41 QString value;
42#ifdef Q_OS_ANDROID
43 value = cg.readEntry(key, QString());
44#else
45 value = cg.readPathEntry(key, QString());
46#endif
47 if (value.isEmpty()) {
48 continue;
49 }
50 QUrl url = QUrl::fromUserInput(value);
51
52 if (url.isLocalFile()) {
53 QString localFilePath = url.toLocalFile();
54 QFileInfo fileInfo = QFileInfo(localFilePath);
55
56 // Don't restore if file doesn't exist anymore
57 if (!fileInfo.exists()) {
58 continue;
59 }
60
61 // When KConfigGroup substitutes $HOME, it may produce a path
62 // with two consecutive forward slashes. This may cause duplicated
63 // entries of the same file when opened using the file selector,
64 // in which the path does not include this double slash.
65 // `absoluteFilePath` replaces the double slash to a single slash.
66 value = fileInfo.absoluteFilePath();
67 url = QUrl::fromLocalFile(value);
68 }
69
70 // Don't restore where the url is already known (eg. broken config)
71 if (m_d->containsUrl(url)) {
72 continue;
73 }
74
75#ifdef Q_OS_WIN
76 // convert to backslashes
77 if (url.isLocalFile()) {
78 value = QDir::toNativeSeparators(value);
79 }
80#endif
81
82 const QString nameKey = QString("Name%1").arg(i+1);
83 const QString nameValue = cg.readEntry(nameKey, url.fileName());
85 url, // m_url
86 nameValue, // m_displayName
87 });
88 }
89
90 Q_EMIT listRenewed();
91}
float value(const T *src, size_t ch)
bool containsUrl(const QUrl &url) const

References KisRecentFilesManager::Private::containsUrl(), listRenewed(), m_d, KisRecentFilesManager::Private::m_entries, KisRecentFilesManager::Private::m_maxItems, and value().

◆ recentFiles()

QVector< KisRecentFilesEntry > KisRecentFilesManager::recentFiles ( ) const

Definition at line 112 of file KisRecentFilesManager.cpp.

113{
114 return m_d->m_entries;
115}

References m_d, and KisRecentFilesManager::Private::m_entries.

◆ recentUrlsLatestFirst()

QList< QUrl > KisRecentFilesManager::recentUrlsLatestFirst ( ) const

Definition at line 117 of file KisRecentFilesManager.cpp.

118{
119 // switch order so last opened file is first
120 QList<QUrl> sortedList;
121 for (int i = m_d->m_entries.length() - 1; i >= 0; i--) {
122 sortedList.append(m_d->m_entries[i].m_url);
123 }
124
125 return sortedList;
126}

References m_d, and KisRecentFilesManager::Private::m_entries.

◆ remove()

void KisRecentFilesManager::remove ( const QUrl & url)

Definition at line 102 of file KisRecentFilesManager.cpp.

103{
104 int removeIndex = m_d->indexOfUrl(url);
105 if (removeIndex >= 0) {
106 m_d->m_entries.removeAt(removeIndex);
107 Q_EMIT fileRemoved(url);
109 }
110}

References fileRemoved(), KisRecentFilesManager::Private::indexOfUrl(), m_d, KisRecentFilesManager::Private::m_entries, and KisRecentFilesManager::Private::requestSaveOnNextTick().

◆ saveEntries()

void KisRecentFilesManager::saveEntries ( const KConfigGroup & config)
private

Definition at line 93 of file KisRecentFilesManager_p.h.

94{
95 KConfigGroup cg = _cg;
96 if (cg.name().isEmpty()) {
97 cg = KConfigGroup(cg.config(), "RecentFiles");
98 }
99
100 cg.deleteGroup();
101
102 cg.writeEntry("maxRecentFileItems", m_d->m_maxItems);
103
104 // write file list
105 for (int i = 0; i < m_d->m_entries.count(); ++i) {
106 const QString key = QString("File%1").arg(i+1);
107 QString value;
108#ifdef Q_OS_ANDROID
109 value = m_d->m_entries[i].m_url.toDisplayString();
110 cg.writeEntry(key, value);
111#else
112 value = m_d->m_entries[i].m_url.toDisplayString(QUrl::PreferLocalFile);
113 cg.writePathEntry(key, value);
114#endif
115 const QString nameKey = QString("Name%1").arg(i+1);
116 const QString nameValue = m_d->m_entries[i].m_displayName;
117 cg.writeEntry(nameKey, nameValue);
118 }
119}

References m_d, KisRecentFilesManager::Private::m_entries, KisRecentFilesManager::Private::m_maxItems, and value().

Member Data Documentation

◆ m_d

Private* KisRecentFilesManager::m_d
private

Definition at line 30 of file KisRecentFilesManager.h.


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