Use QString for object names.

This commit is contained in:
Leonardo Zide 2020-12-13 16:27:21 -08:00
parent 1012fc20cd
commit 2d7aba8895
13 changed files with 77 additions and 62 deletions

View file

@ -68,17 +68,22 @@ void lcCamera::Initialize()
m_zNear = 25.0f;
m_zFar = 50000.0f;
mState = 0;
memset(m_strName, 0, sizeof(m_strName));
}
void lcCamera::SetName(const QString& Name)
{
mName = Name;
}
void lcCamera::CreateName(const lcArray<lcCamera*>& Cameras)
{
if (m_strName[0])
if (!mName.isEmpty())
{
bool Found = false;
for (int CameraIdx = 0; CameraIdx < Cameras.GetSize(); CameraIdx++)
for (const lcCamera* Camera : Cameras)
{
if (!strcmp(Cameras[CameraIdx]->m_strName, m_strName))
if (Camera->GetName() == mName)
{
Found = true;
break;
@ -89,16 +94,24 @@ void lcCamera::CreateName(const lcArray<lcCamera*>& Cameras)
return;
}
int i, max = 0;
const char* Prefix = "Camera ";
int MaxCameraNumber = 0;
const QLatin1String Prefix("Camera ");
for (int CameraIdx = 0; CameraIdx < Cameras.GetSize(); CameraIdx++)
if (strncmp(Cameras[CameraIdx]->m_strName, Prefix, strlen(Prefix)) == 0)
if (sscanf(Cameras[CameraIdx]->m_strName + strlen(Prefix), " %d", &i) == 1)
if (i > max)
max = i;
for (const lcCamera* Camera : Cameras)
{
QString CameraName = Camera->GetName();
sprintf(m_strName, "%s %d", Prefix, max+1);
if (CameraName.startsWith(Prefix))
{
bool Ok = false;
int CameraNumber = CameraName.midRef(Prefix.size()).toInt(&Ok);
if (Ok && CameraNumber > MaxCameraNumber)
MaxCameraNumber = CameraNumber;
}
}
mName = Prefix + QString::number(MaxCameraNumber + 1);
}
void lcCamera::SaveLDraw(QTextStream& Stream) const
@ -130,7 +143,7 @@ void lcCamera::SaveLDraw(QTextStream& Stream) const
if (IsOrtho())
Stream << QLatin1String("ORTHOGRAPHIC ");
Stream << QLatin1String("NAME ") << m_strName << LineEnding;
Stream << QLatin1String("NAME ") << mName << LineEnding;
}
bool lcCamera::ParseLDrawLine(QTextStream& Stream)
@ -173,10 +186,7 @@ bool lcCamera::ParseLDrawLine(QTextStream& Stream)
LoadKeysLDraw(Stream, mUpVectorKeys);
else if (Token == QLatin1String("NAME"))
{
QString Name = Stream.readAll().trimmed();
QByteArray NameUtf = Name.toUtf8(); // todo: replace with qstring
strncpy(m_strName, NameUtf.constData(), sizeof(m_strName));
m_strName[sizeof(m_strName) - 1] = 0;
mName = Stream.readAll().trimmed();
return true;
}
}
@ -232,16 +242,20 @@ bool lcCamera::FileLoad(lcFile& file)
if (version == 4)
{
file.ReadBuffer(m_strName, 80);
m_strName[80] = 0;
char Name[81];
file.ReadBuffer(Name, 80);
Name[80] = 0;
mName = Name;
}
else
{
ch = file.ReadU8();
if (ch == 0xFF)
return false; // don't read CString
file.ReadBuffer(m_strName, ch);
m_strName[ch] = 0;
char Name[81];
file.ReadBuffer(Name, ch);
Name[ch] = 0;
mName = Name;
}
if (version < 3)

View file

@ -47,11 +47,12 @@ public:
lcCamera& operator=(const lcCamera&) = delete;
lcCamera& operator=(lcCamera&&) = delete;
const char* GetName() const override
QString GetName() const override
{
return m_strName;
return mName;
}
void SetName(const QString& Name);
void CreateName(const lcArray<lcCamera*>& Cameras);
bool IsSimple() const
@ -294,8 +295,6 @@ public:
void GetAngles(float& Latitude, float& Longitude, float& Distance) const;
void SetAngles(float Latitude, float Longitude, float Distance);
char m_strName[81];
float m_fovy;
float m_zNear;
float m_zFar;
@ -312,6 +311,6 @@ protected:
void Initialize();
QString mName;
quint32 mState;
};

View file

@ -369,13 +369,13 @@ void lcGLWidget::SetCamera(lcCamera* Camera, bool ForceCopy)
}
}
void lcGLWidget::SetCamera(const char* CameraName)
void lcGLWidget::SetCamera(const QString& CameraName)
{
const lcArray<lcCamera*>& Cameras = mModel->GetCameras();
for (int CameraIdx = 0; CameraIdx < Cameras.GetSize(); CameraIdx++)
{
if (qstricmp(CameraName, Cameras[CameraIdx]->m_strName) == 0)
if (CameraName.compare(Cameras[CameraIdx]->GetName(), Qt::CaseInsensitive) == 0)
{
SetCameraIndex(CameraIdx);
return;
@ -557,9 +557,9 @@ void lcGLWidget::DrawViewport() const
mContext->SetVertexFormatPosition(2);
mContext->DrawPrimitives(GL_LINE_LOOP, 0, 4);
const char* CameraName = mCamera->GetName();
QString CameraName = mCamera->GetName();
if (CameraName[0])
if (!CameraName.isEmpty())
{
mContext->SetMaterial(lcMaterialType::UnlitTextureModulate);
mContext->SetColor(0.0f, 0.0f, 0.0f, 1.0f);
@ -567,7 +567,7 @@ void lcGLWidget::DrawViewport() const
glEnable(GL_BLEND);
gTexFont.PrintText(mContext, 3.0f, (float)mHeight - 1.0f - 6.0f, 0.0f, CameraName);
gTexFont.PrintText(mContext, 3.0f, (float)mHeight - 1.0f - 6.0f, 0.0f, CameraName.toLatin1().constData());
glDisable(GL_BLEND);
}

View file

@ -165,7 +165,7 @@ public:
void SetCameraAngles(float Latitude, float Longitude);
void SetDefaultCamera();
void SetCamera(lcCamera* Camera, bool ForceCopy);
void SetCamera(const char* CameraName);
void SetCamera(const QString& CameraName);
void SetCameraIndex(int Index);
void DrawBackground() const;

View file

@ -1392,7 +1392,7 @@ QByteArray lcMainWindow::GetTabLayout()
else
{
DataStream << (qint32)1;
DataStream << QByteArray::fromRawData(Camera->m_strName, sizeof(Camera->m_strName));
DataStream << Camera->GetName();
}
}
else

View file

@ -3022,13 +3022,12 @@ void lcModel::SetCameraZFar(lcCamera* Camera, float ZFar)
gMainWindow->UpdateAllViews();
}
void lcModel::SetCameraName(lcCamera* Camera, const char* Name)
void lcModel::SetCameraName(lcCamera* Camera, const QString& Name)
{
if (!strcmp(Camera->m_strName, Name))
if (Camera->GetName() == Name)
return;
strncpy(Camera->m_strName, Name, sizeof(Camera->m_strName));
Camera->m_strName[sizeof(Camera->m_strName) - 1] = 0;
Camera->SetName(Name);
SaveCheckpoint(tr("Renaming Camera"));
gMainWindow->UpdateSelectedObjects(false);
@ -3857,7 +3856,7 @@ void lcModel::FindPiece(bool FindFirst, bool SearchForward)
if ((!SearchOptions.MatchInfo || Current->mPieceInfo == SearchOptions.Info) &&
(!SearchOptions.MatchColor || Current->mColorIndex == SearchOptions.ColorIndex) &&
(!SearchOptions.MatchName || strcasestr(Current->GetName(), SearchOptions.Name)))
(!SearchOptions.MatchName || (Current->GetName().indexOf(SearchOptions.Name, 0, Qt::CaseInsensitive) != -1)))
{
Focus = Current;
break;

View file

@ -340,7 +340,7 @@ public:
void SetCameraFOV(lcCamera* Camera, float FOV);
void SetCameraZNear(lcCamera* Camera, float ZNear);
void SetCameraZFar(lcCamera* Camera, float ZFar);
void SetCameraName(lcCamera* Camera, const char* Name);
void SetCameraName(lcCamera* Camera, const QString& Name);
void ShowPropertiesDialog();
void ShowSelectByNameDialog();

View file

@ -32,7 +32,6 @@ lcLight::lcLight(float px, float py, float pz, float tx, float ty, float tz)
void lcLight::Initialize(const lcVector3& Position, const lcVector3& TargetPosition)
{
mState = 0;
memset(m_strName, 0, sizeof(m_strName));
ChangeKey(mPositionKeys, Position, 1, true);
ChangeKey(mTargetPositionKeys, TargetPosition, 1, true);
@ -55,13 +54,13 @@ void lcLight::SaveLDraw(QTextStream& Stream) const
void lcLight::CreateName(const lcArray<lcLight*>& Lights)
{
if (m_strName[0])
if (!mName.isEmpty())
{
bool Found = false;
for (lcLight* Light : Lights)
{
if (!strcmp(Light->m_strName, m_strName))
if (Light->GetName() == mName)
{
Found = true;
break;
@ -72,21 +71,24 @@ void lcLight::CreateName(const lcArray<lcLight*>& Lights)
return;
}
int i, max = 0;
int MaxLightNumber = 0;
const QLatin1String Prefix("Light ");
for (lcLight* Light : Lights)
{
if (strncmp(Light->m_strName, "Light ", 6) == 0)
QString LightName = Light->GetName();
if (LightName.startsWith(Prefix))
{
if (sscanf(Light->m_strName + 6, " #%d", &i) == 1)
{
if (i > max)
max = i;
}
bool Ok = false;
int LightNumber = LightName.midRef(Prefix.size()).toInt(&Ok);
if (Ok && LightNumber > MaxLightNumber)
MaxLightNumber = LightNumber;
}
}
sprintf(m_strName, "Light #%.2d", max+1);
mName = Prefix + QString::number(MaxLightNumber + 1);
}
void lcLight::CompareBoundingBox(lcVector3& Min, lcVector3& Max)

View file

@ -191,8 +191,10 @@ public:
bool IsVisible() const
{ return (mState & LC_LIGHT_HIDDEN) == 0; }
const char* GetName() const override
{ return m_strName; }
QString GetName() const override
{
return mName;
}
void CompareBoundingBox(lcVector3& Min, lcVector3& Max);
void UpdatePosition(lcStep Step);
@ -226,7 +228,6 @@ protected:
void DrawPointLight(lcContext* Context) const;
void DrawSpotLight(lcContext* Context) const;
QString mName;
quint32 mState;
char m_strName[81];
};

View file

@ -101,7 +101,7 @@ public:
virtual void BoxTest(lcObjectBoxTest& ObjectBoxTest) const = 0;
virtual void DrawInterface(lcContext* Context, const lcScene& Scene) const = 0;
virtual void RemoveKeyFrames() = 0;
virtual const char* GetName() const = 0;
virtual QString GetName() const = 0;
protected:
template<typename T>

View file

@ -896,9 +896,9 @@ void lcPiece::VerifyControlPoints(lcArray<lcPieceControlPoint>& ControlPoints) c
}
}
const char* lcPiece::GetName() const
QString lcPiece::GetName() const
{
return mPieceInfo->m_strDescription;
return QString::fromLatin1(mPieceInfo->m_strDescription);
}
bool lcPiece::IsVisible(lcStep Step) const

View file

@ -453,7 +453,7 @@ public:
void UpdateID();
const char* GetName() const override;
QString GetName() const override;
bool IsVisible(lcStep Step) const;
bool IsVisibleInSubModel() const;
void GetModelParts(const lcMatrix44& WorldMatrix, int DefaultColorIndex, std::vector<lcModelPartsEntry>& ModelParts) const;

View file

@ -492,7 +492,7 @@ QWidget *lcQPropertiesTree::createEditor(QWidget *parent, QTreeWidgetItem *item)
case PropertyString:
{
QLineEdit *editor = new QLineEdit(parent);
const char *value = (const char*)item->data(0, PropertyValueRole).value<void*>();
QString value = item->data(0, PropertyValueRole).toString();
editor->setText(value);
@ -740,7 +740,7 @@ void lcQPropertiesTree::slotReturnPressed()
{
QString Value = Editor->text();
Model->SetCameraName(Camera, Value.toLocal8Bit().data());
Model->SetCameraName(Camera, Value);
}
}
}
@ -1062,7 +1062,7 @@ void lcQPropertiesTree::SetCamera(lcObject* Focus)
float FoV = 60.0f;
float ZNear = 1.0f;
float ZFar = 100.0f;
const char* Name = "";
QString Name;
if (Camera)
{
@ -1108,7 +1108,7 @@ void lcQPropertiesTree::SetCamera(lcObject* Focus)
cameraFar->setData(0, PropertyValueRole, ZFar);
cameraName->setText(1, Name);
cameraName->setData(0, PropertyValueRole, QVariant::fromValue((void*)Name));
cameraName->setData(0, PropertyValueRole, Name);
}
void lcQPropertiesTree::SetLight(lcObject* Focus)