MCPcopy Create free account
hub / github.com/TeXworks/texworks / updateRecentFileActions

Method updateRecentFileActions

src/TWUtils.cpp:248–313  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

246}
247
248void TWUtils::updateRecentFileActions(QObject *parent, QList<QAction*> &actions, QMenu *menu, QAction * clearAction) /* static */
249{
250 Tw::Settings settings;
251 QStringList fileList, labelList;
252 if (settings.contains(QString::fromLatin1("recentFiles"))) {
253 QList<QVariant> files = settings.value(QString::fromLatin1("recentFiles")).toList();
254 foreach (const QVariant& v, files) {
255 QMap<QString,QVariant> map = v.toMap();
256 if (map.contains(QString::fromLatin1("path")))
257 fileList.append(map.value(QString::fromLatin1("path")).toString());
258 }
259 }
260 else {
261 // check for an old "recentFilesList" entry, and migrate it
262 if (settings.contains(QString::fromLatin1("recentFileList"))) {
263 fileList = settings.value(QString::fromLatin1("recentFileList")).toStringList();
264 QList<QVariant> files;
265 foreach (const QString& path, fileList) {
266 QMap<QString,QVariant> map;
267 map.insert(QString::fromLatin1("path"), path);
268 files.append(QVariant(map));
269 }
270 settings.remove(QString::fromLatin1("recentFileList"));
271 settings.setValue(QString::fromLatin1("recentFiles"), files);
272 }
273 }
274
275 // Generate label list (list of filenames without directory components)
276 labelList = Tw::Utils::WindowManager::constructUniqueFileLabels(fileList);
277
278 QStringList::size_type numRecentFiles = fileList.size();
279
280 foreach(QAction * sep, menu->actions()) {
281 if (sep->isSeparator())
282 delete sep;
283 }
284
285 while (actions.size() < numRecentFiles) {
286 QAction *act = new QAction(parent);
287 act->setVisible(false);
288 QObject::connect(act, &QAction::triggered, TWApp::instance(), &TWApp::openRecentFile);
289 actions.append(act);
290 menu->insertAction(clearAction, act);
291 }
292
293 while (actions.size() > numRecentFiles) {
294 QAction *act = actions.takeLast();
295 delete act;
296 }
297
298 for (QStringList::size_type i = 0; i < numRecentFiles; ++i) {
299 // a "&" inside a menu label is considered a mnemonic, thus, we need to escape them
300 labelList[i].replace(QString::fromLatin1("&"), QString::fromLatin1("&&"));
301
302 actions[i]->setText(QDir::toNativeSeparators(labelList[i]));
303 actions[i]->setData(fileList[i]);
304 actions[i]->setToolTip(QDir::toNativeSeparators(fileList[i]));
305 actions[i]->setVisible(true);

Callers

nothing calls this directly

Calls 7

containsMethod · 0.80
removeMethod · 0.80
setValueMethod · 0.80
setDataMethod · 0.80
setEnabledMethod · 0.80
foreachFunction · 0.70
valueMethod · 0.45

Tested by

no test coverage detected