void ScoreBrowser::setScores(QFileInfoList& s) { qDeleteAll(scoreLists); scoreLists.clear(); QVBoxLayout* l = static_cast<QVBoxLayout*>(scoreList->layout()); while (l->count()) l->removeItem(l->itemAt(0)); ScoreListWidget* sl = 0; QStringList filter = { "*.mscz" }; if (_showCustomCategory) std::sort(s.begin(), s.end(), [](QFileInfo a, QFileInfo b)->bool { return a.fileName() < b.fileName(); }); QSet<QString> entries; //to avoid duplicates for (const QFileInfo& fi : s) { if (fi.isDir()) { QString s(fi.fileName()); if (!s.isEmpty() && s[0].isNumber() && _stripNumbers) s = s.mid(3); s = s.replace('_', ' '); QLabel* label = new QLabel(s); QFont f = label->font(); f.setBold(true); label->setFont(f); static_cast<QVBoxLayout*>(l)->addWidget(label); QDir dir(fi.filePath()); sl = createScoreList(); l->addWidget(sl); unsigned count = 0; //nbr of entries added for (const QFileInfo& fi : dir.entryInfoList(filter, QDir::Files, QDir::Name)){ if (entries.contains(fi.filePath())) continue; sl->addItem(genScoreItem(fi, sl)); count++; entries.insert(fi.filePath()); } if (count == 0) { delete label; delete sl; } sl = 0; } } for (const QFileInfo& fi : s) { if (fi.isFile()) { QString s = fi.filePath(); if (entries.contains(s)) continue; if (s.endsWith(".mscz") || s.endsWith(".mscx")) { if (!sl) { if (_showCustomCategory) { QLabel* label = new QLabel(tr("Custom Templates")); QFont f = label->font(); f.setBold(true); label->setFont(f); l->insertWidget(2,label); } sl = createScoreList(); l->insertWidget(3,sl); } sl->addItem(genScoreItem(fi, sl)); entries.insert(s); } } } }