Added default minifig as a template. Fixes #539.
This commit is contained in:
+32
-18
@@ -112,7 +112,9 @@ lcMinifigDialog::lcMinifigDialog(QWidget* Parent)
|
||||
PreviewLayout->addWidget(ViewWidget);
|
||||
|
||||
mView->MakeCurrent();
|
||||
mMinifigWizard->LoadDefault();
|
||||
|
||||
mCurrentTemplateName = MinifigWizard::GetDefaultTemplateName();
|
||||
mMinifigWizard->LoadTemplate(mCurrentTemplateName);
|
||||
|
||||
for (int ItemIndex = 0; ItemIndex < LC_MFW_NUMITEMS; ItemIndex++)
|
||||
{
|
||||
@@ -154,6 +156,9 @@ void lcMinifigDialog::UpdateTemplateCombo()
|
||||
|
||||
for (const auto& [Name, Template] : mMinifigWizard->GetTemplates())
|
||||
{
|
||||
if (Name == MinifigWizard::GetDefaultTemplateName())
|
||||
continue;
|
||||
|
||||
if (mCurrentTemplateModified && Name == mCurrentTemplateName)
|
||||
{
|
||||
CurrentName += " *";
|
||||
@@ -163,6 +168,10 @@ void lcMinifigDialog::UpdateTemplateCombo()
|
||||
ui->TemplateComboBox->addItem(Name);
|
||||
}
|
||||
|
||||
if (ui->TemplateComboBox->count())
|
||||
ui->TemplateComboBox->insertSeparator(ui->TemplateComboBox->count());
|
||||
ui->TemplateComboBox->addItem(MinifigWizard::GetDefaultTemplateName());
|
||||
|
||||
ui->TemplateComboBox->setCurrentText(CurrentName);
|
||||
}
|
||||
|
||||
@@ -183,13 +192,13 @@ void lcMinifigDialog::on_TemplateComboBox_currentIndexChanged(const QString& Tem
|
||||
|
||||
mView->MakeCurrent();
|
||||
|
||||
mMinifigWizard->LoadTemplate(TemplateName);
|
||||
|
||||
for (int PartIdx = 0; PartIdx < LC_MFW_NUMITEMS; PartIdx++)
|
||||
{
|
||||
if (!Template.Parts[PartIdx].isEmpty())
|
||||
{
|
||||
PieceInfo* Info = lcGetPiecesLibrary()->FindPiece(Template.Parts[PartIdx].toLatin1(), nullptr, false, false);
|
||||
|
||||
mMinifigWizard->SetPieceInfo(PartIdx, Info);
|
||||
PieceInfo* Info = mMinifigWizard->mMinifig.Parts[PartIdx];
|
||||
|
||||
if (Info)
|
||||
{
|
||||
@@ -205,14 +214,11 @@ void lcMinifigDialog::on_TemplateComboBox_currentIndexChanged(const QString& Tem
|
||||
}
|
||||
else
|
||||
{
|
||||
mMinifigWizard->SetPieceInfo(PartIdx, nullptr);
|
||||
|
||||
mPieceButtons[PartIdx]->setText(tr("None"));
|
||||
}
|
||||
|
||||
QSignalBlocker ColorBlocker(mColorPickers[PartIdx]);
|
||||
|
||||
mMinifigWizard->SetColorIndex(PartIdx, lcGetColorIndex(Template.ColorCodes[PartIdx]));
|
||||
mColorPickers[PartIdx]->SetCurrentColorCode(Template.ColorCodes[PartIdx]);
|
||||
|
||||
lcDoubleSpinBox* AngleSpinBox = mSpinBoxes[PartIdx];
|
||||
@@ -221,13 +227,10 @@ void lcMinifigDialog::on_TemplateComboBox_currentIndexChanged(const QString& Tem
|
||||
{
|
||||
QSignalBlocker AngleBlocker(AngleSpinBox);
|
||||
|
||||
mMinifigWizard->SetAngle(PartIdx, Template.Angles[PartIdx]);
|
||||
AngleSpinBox->SetValue(Template.Angles[PartIdx]);
|
||||
}
|
||||
}
|
||||
|
||||
mMinifigWizard->Calculate();
|
||||
|
||||
mView->Redraw();
|
||||
}
|
||||
|
||||
@@ -246,7 +249,13 @@ void lcMinifigDialog::on_TemplateSaveButton_clicked()
|
||||
return;
|
||||
}
|
||||
|
||||
if (TemplateName == CurrentName)
|
||||
if (TemplateName == MinifigWizard::GetDefaultTemplateName())
|
||||
{
|
||||
QMessageBox::information(this, tr("Save Template"), tr("Cannot overwrite the default template."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (mMinifigWizard->GetTemplates().count(TemplateName))
|
||||
{
|
||||
QString Question = tr("Are you sure you want to overwrite the template '%1'?").arg(TemplateName);
|
||||
if (QMessageBox::question(this, tr("Overwrite Template"), Question, QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes)
|
||||
@@ -273,7 +282,7 @@ void lcMinifigDialog::on_TemplateSaveButton_clicked()
|
||||
|
||||
void lcMinifigDialog::on_TemplateDeleteButton_clicked()
|
||||
{
|
||||
if (mCurrentTemplateName.isEmpty())
|
||||
if (mCurrentTemplateName.isEmpty() || mCurrentTemplateName == MinifigWizard::GetDefaultTemplateName())
|
||||
return;
|
||||
|
||||
QString Template = mCurrentTemplateName;
|
||||
@@ -330,6 +339,14 @@ void lcMinifigDialog::on_TemplateExportButton_clicked()
|
||||
File.write(Templates);
|
||||
}
|
||||
|
||||
void lcMinifigDialog::SetCurrentTemplateModified()
|
||||
{
|
||||
if (mCurrentTemplateName == MinifigWizard::GetDefaultTemplateName())
|
||||
mCurrentTemplateName.clear();
|
||||
else
|
||||
mCurrentTemplateModified = true;
|
||||
}
|
||||
|
||||
void lcMinifigDialog::PieceButtonClicked()
|
||||
{
|
||||
QToolButton* PieceButton = qobject_cast<QToolButton*>(sender());
|
||||
@@ -364,8 +381,7 @@ void lcMinifigDialog::PieceButtonClicked()
|
||||
|
||||
PieceInfo* NewPiece = Result.value();
|
||||
|
||||
mCurrentTemplateModified = true;
|
||||
|
||||
SetCurrentTemplateModified();
|
||||
UpdateTemplateCombo();
|
||||
|
||||
mView->MakeCurrent();
|
||||
@@ -392,8 +408,7 @@ void lcMinifigDialog::ColorChanged(int Index)
|
||||
if (Search == mColorPickers.end())
|
||||
return;
|
||||
|
||||
mCurrentTemplateModified = true;
|
||||
|
||||
SetCurrentTemplateModified();
|
||||
UpdateTemplateCombo();
|
||||
|
||||
mMinifigWizard->SetColorIndex(std::distance(mColorPickers.begin(), Search), Index);
|
||||
@@ -407,8 +422,7 @@ void lcMinifigDialog::AngleChanged(double Value)
|
||||
if (Search == mSpinBoxes.end())
|
||||
return;
|
||||
|
||||
mCurrentTemplateModified = true;
|
||||
|
||||
SetCurrentTemplateModified();
|
||||
UpdateTemplateCombo();
|
||||
|
||||
mMinifigWizard->SetAngle(std::distance(mSpinBoxes.begin(), Search), Value);
|
||||
|
||||
@@ -32,6 +32,7 @@ protected slots:
|
||||
|
||||
protected:
|
||||
void UpdateTemplateCombo();
|
||||
void SetCurrentTemplateModified();
|
||||
|
||||
Ui::lcMinifigDialog* ui;
|
||||
|
||||
|
||||
+49
-24
@@ -34,6 +34,19 @@ MinifigWizard::MinifigWizard()
|
||||
{
|
||||
LoadSettings();
|
||||
LoadTemplates();
|
||||
|
||||
lcMinifigTemplate& Template = mTemplates[GetDefaultTemplateName()];
|
||||
const int ColorCodes[LC_MFW_NUMITEMS] = { 4, 7, 14, 7, 1, 0, 7, 4, 4, 14, 14, 7, 7, 0, 0, 7, 7 };
|
||||
const char* const Pieces[LC_MFW_NUMITEMS] = { "3624.dat", "", "3626bp01.dat", "", "973.dat", "3815.dat", "", "3819.dat", "3818.dat", "3820.dat", "3820.dat", "", "", "3817.dat", "3816.dat", "", "" };
|
||||
|
||||
for (int PartIndex = 0; PartIndex < LC_MFW_NUMITEMS; PartIndex++)
|
||||
{
|
||||
Template.Parts[PartIndex] = Pieces[PartIndex];
|
||||
Template.ColorCodes[PartIndex] = ColorCodes[PartIndex];
|
||||
Template.Angles[PartIndex] = 0.0f;
|
||||
}
|
||||
|
||||
memset(&mMinifig, 0, sizeof(mMinifig));
|
||||
}
|
||||
|
||||
MinifigWizard::~MinifigWizard()
|
||||
@@ -47,6 +60,11 @@ MinifigWizard::~MinifigWizard()
|
||||
SaveTemplates();
|
||||
}
|
||||
|
||||
QString MinifigWizard::GetDefaultTemplateName()
|
||||
{
|
||||
return QCoreApplication::translate("MinifigWizard", "Default");
|
||||
}
|
||||
|
||||
void MinifigWizard::LoadSettings()
|
||||
{
|
||||
QString CustomSettingsPath = lcGetProfileString(LC_PROFILE_MINIFIG_SETTINGS);
|
||||
@@ -68,30 +86,6 @@ void MinifigWizard::LoadSettings()
|
||||
ParseSettings(MinifigFile);
|
||||
}
|
||||
|
||||
void MinifigWizard::LoadDefault()
|
||||
{
|
||||
LC_ARRAY_SIZE_CHECK(MinifigWizard::mSectionNames, LC_MFW_NUMITEMS);
|
||||
|
||||
const int ColorCodes[LC_MFW_NUMITEMS] = { 4, 7, 14, 7, 1, 0, 7, 4, 4, 14, 14, 7, 7, 0, 0, 7, 7 };
|
||||
const char* const Pieces[LC_MFW_NUMITEMS] = { "3624.dat", "", "3626bp01.dat", "", "973.dat", "3815.dat", "", "3819.dat", "3818.dat", "3820.dat", "3820.dat", "", "", "3817.dat", "3816.dat", "", "" };
|
||||
lcPiecesLibrary* Library = lcGetPiecesLibrary();
|
||||
|
||||
for (int i = 0; i < LC_MFW_NUMITEMS; i++)
|
||||
{
|
||||
mMinifig.ColorIndices[i] = lcGetColorIndex(ColorCodes[i]);
|
||||
mMinifig.Angles[i] = 0.0f;
|
||||
mMinifig.Matrices[i] = lcMatrix44Identity();
|
||||
|
||||
PieceInfo* Info = Library->FindPiece(Pieces[i], nullptr, false, false);
|
||||
mMinifig.Parts[i] = Info;
|
||||
if (Info)
|
||||
Library->LoadPieceInfo(Info, false, true);
|
||||
}
|
||||
|
||||
Library->WaitForLoadQueue();
|
||||
Calculate();
|
||||
}
|
||||
|
||||
void MinifigWizard::ParseSettings(lcFile& Settings)
|
||||
{
|
||||
for (int SectionIndex = 0; SectionIndex < LC_MFW_NUMITEMS; SectionIndex++)
|
||||
@@ -191,6 +185,37 @@ void MinifigWizard::ParseSettings(lcFile& Settings)
|
||||
}
|
||||
}
|
||||
|
||||
void MinifigWizard::LoadTemplate(const QString& TemplateName)
|
||||
{
|
||||
const std::map<QString, lcMinifigTemplate>::iterator& TemplateIt = mTemplates.find(TemplateName);
|
||||
|
||||
if (TemplateIt == mTemplates.end())
|
||||
return;
|
||||
|
||||
const lcMinifigTemplate& Template = TemplateIt->second;
|
||||
lcPiecesLibrary* Library = lcGetPiecesLibrary();
|
||||
|
||||
for (int PartIndex = 0; PartIndex < LC_MFW_NUMITEMS; PartIndex++)
|
||||
{
|
||||
mMinifig.ColorIndices[PartIndex] = lcGetColorIndex(Template.ColorCodes[PartIndex]);
|
||||
mMinifig.Angles[PartIndex] = Template.Angles[PartIndex];
|
||||
mMinifig.Matrices[PartIndex] = lcMatrix44Identity();
|
||||
|
||||
if (mMinifig.Parts[PartIndex])
|
||||
Library->ReleasePieceInfo(mMinifig.Parts[PartIndex]);
|
||||
|
||||
PieceInfo* Info = Library->FindPiece(Template.Parts[PartIndex].toLatin1(), nullptr, false, false);
|
||||
|
||||
mMinifig.Parts[PartIndex] = Info;
|
||||
|
||||
if (Info)
|
||||
Library->LoadPieceInfo(Info, false, true);
|
||||
}
|
||||
|
||||
Library->WaitForLoadQueue();
|
||||
Calculate();
|
||||
}
|
||||
|
||||
void MinifigWizard::SaveTemplate(const QString& TemplateName, const lcMinifigTemplate& Template)
|
||||
{
|
||||
mTemplates[TemplateName] = Template;
|
||||
|
||||
+3
-2
@@ -67,13 +67,14 @@ public:
|
||||
return mTemplates;
|
||||
}
|
||||
|
||||
static QString GetDefaultTemplateName();
|
||||
|
||||
void LoadTemplate(const QString& TemplateName);
|
||||
void SaveTemplate(const QString& TemplateName, const lcMinifigTemplate& Template);
|
||||
void DeleteTemplate(const QString& TemplateName);
|
||||
void AddTemplatesJson(const QByteArray& TemplateData);
|
||||
QByteArray GetTemplatesJson() const;
|
||||
|
||||
void LoadDefault();
|
||||
|
||||
void Calculate();
|
||||
int GetSelectionIndex(int Type) const;
|
||||
void SetPieceInfo(int Type, PieceInfo* Info);
|
||||
|
||||
Reference in New Issue
Block a user