NOISSUE Add world icons and world icon reset button

This commit is contained in:
Petr Mrázek
2020-08-22 01:34:55 +02:00
parent c6c9feb3a2
commit 8a0027c73a
7 changed files with 108 additions and 2 deletions

View File

@ -138,14 +138,31 @@ void World::repath(const QFileInfo &file)
m_folderName = file.fileName();
if(file.isFile() && file.suffix() == "zip")
{
m_iconFile = QString();
readFromZip(file);
}
else if(file.isDir())
{
QFileInfo assumedIconPath(file.absoluteFilePath() + "/icon.png");
if(assumedIconPath.exists()) {
m_iconFile = assumedIconPath.absoluteFilePath();
}
readFromFS(file);
}
}
bool World::resetIcon()
{
if(m_iconFile.isNull()) {
return false;
}
if(QFile(m_iconFile).remove()) {
m_iconFile = QString();
return true;
}
return false;
}
void World::readFromFS(const QFileInfo &file)
{
auto bytes = getLevelDatDataFromFS(file);

View File

@ -40,6 +40,10 @@ public:
{
return m_actualName;
}
QString iconFile() const
{
return m_iconFile;
}
QDateTime lastPlayed() const
{
return m_lastPlayed;
@ -70,6 +74,8 @@ public:
bool replace(World &with);
// change the world's filesystem path (used by world lists for *MAGIC* purposes)
void repath(const QFileInfo &file);
// remove the icon file, if any
bool resetIcon();
bool rename(const QString &to);
bool install(const QString &to, const QString &name= QString());
@ -88,6 +94,7 @@ protected:
QString m_containerOffsetPath;
QString m_folderName;
QString m_actualName;
QString m_iconFile;
QDateTime levelDatTime;
QDateTime m_lastPlayed;
int64_t m_randomSeed = 0;

View File

@ -136,6 +136,19 @@ bool WorldList::deleteWorlds(int first, int last)
return true;
}
bool WorldList::resetIcon(int row)
{
if (row >= worlds.size() || row < 0)
return false;
World &m = worlds[row];
if(m.resetIcon()) {
emit dataChanged(index(row), index(row), {WorldList::IconFileRole});
return true;
}
return false;
}
int WorldList::columnCount(const QModelIndex &parent) const
{
return 3;
@ -195,6 +208,10 @@ QVariant WorldList::data(const QModelIndex &index, int role) const
{
return world.lastPlayed();
}
case IconFileRole:
{
return world.iconFile();
}
default:
return QVariant();
}

View File

@ -44,7 +44,8 @@ public:
SeedRole,
NameRole,
GameModeRole,
LastPlayedRole
LastPlayedRole,
IconFileRole
};
WorldList(const QString &dir);
@ -81,6 +82,9 @@ public:
/// Deletes the mod at the given index.
virtual bool deleteWorld(int index);
/// Removes the world icon, if any
virtual bool resetIcon(int index);
/// Deletes all the selected mods
virtual bool deleteWorlds(int first, int last);