Files
2026-03-10 21:11:40 -07:00

99 lines
2.0 KiB
C++

#include "lc_global.h"
#include <stdlib.h>
#include "group.h"
#include "lc_model.h"
#include "lc_file.h"
lcGroupId lcGroup::mNextId;
lcGroup::lcGroup()
: mId(mNextId)
{
mNextId = static_cast<lcGroupId>(static_cast<uint32_t>(mNextId) + 1);
}
void lcGroup::FileLoad(lcFile* File)
{
qint32 GroupIndex;
char Name[LC_MAX_GROUP_NAME + 1];
File->ReadU8();
File->ReadBuffer(Name, sizeof(Name));
mName = QString::fromUtf8(Name);
File->ReadVector3();
File->ReadS32(&GroupIndex, 1);
mGroup = (lcGroup*)(quintptr)GroupIndex;
}
void lcGroup::CreateName(const std::vector<std::unique_ptr<lcGroup>>& Groups)
{
if (!mName.isEmpty())
{
bool Found = false;
for (const std::unique_ptr<lcGroup>& Group : Groups)
{
if (Group->mName == mName)
{
Found = true;
break;
}
}
if (!Found)
return;
}
int Max = 0;
QString Prefix = QApplication::tr("Group #");
const qsizetype Length = Prefix.length();
for (const std::unique_ptr<lcGroup>& Group : Groups)
{
const QString& Name = Group->mName;
if (Name.startsWith(Prefix))
{
bool Ok = false;
int GroupNumber = Name.mid(Length).toInt(&Ok);
if (Ok && GroupNumber > Max)
Max = GroupNumber;
}
}
mName = Prefix + QString::number(Max + 1);
}
lcGroupHistoryState lcGroup::GetHistoryState(const lcModel* Model) const
{
lcGroupHistoryState State;
State.Id = mId;
State.ParentIndex = ~0U;
State.Name = mName;
if (mGroup)
{
const std::vector<std::unique_ptr<lcGroup>>& Groups = Model->GetGroups();
for (size_t GroupIndex = 0; GroupIndex < Groups.size(); GroupIndex++)
{
if (Groups[GroupIndex].get() == mGroup)
{
State.ParentIndex = static_cast<uint32_t>(GroupIndex);
break;
}
}
}
return State;
}
void lcGroup::SetHistoryState(const lcGroupHistoryState& State, const lcModel* Model)
{
const std::vector<std::unique_ptr<lcGroup>>& Groups = Model->GetGroups();
mId = State.Id;
mName = State.Name;
mGroup = (State.ParentIndex < Groups.size()) ? Groups[State.ParentIndex].get() : nullptr;
}