From b77210db227f67f431620070e4a84c680d8e67d5 Mon Sep 17 00:00:00 2001 From: Leonardo Zide Date: Sat, 19 Dec 2020 16:05:29 -0800 Subject: [PATCH] Use a regular View for the Minifig Wizard. --- common/lc_glwidget.cpp | 4 +- common/lc_glwidget.h | 16 +++- common/lc_mainwindow.cpp | 2 +- common/lc_model.cpp | 4 +- common/lc_previewwidget.cpp | 2 +- common/lc_viewsphere.cpp | 14 ++- common/lc_viewsphere.h | 2 +- common/lc_viewwidget.cpp | 6 +- common/minifig.cpp | 170 +----------------------------------- common/minifig.h | 33 +++---- common/project.h | 7 -- common/view.cpp | 47 ++++++---- common/view.h | 2 +- qt/lc_qminifigdialog.cpp | 53 ++++++----- qt/lc_qminifigdialog.h | 4 +- 15 files changed, 113 insertions(+), 253 deletions(-) diff --git a/common/lc_glwidget.cpp b/common/lc_glwidget.cpp index f385e362..018082d7 100644 --- a/common/lc_glwidget.cpp +++ b/common/lc_glwidget.cpp @@ -13,8 +13,8 @@ lcGLWidget* lcGLWidget::mLastFocusedView; std::vector lcGLWidget::mViews; -lcGLWidget::lcGLWidget(lcModel* Model) - : mScene(new lcScene()), mModel(Model) +lcGLWidget::lcGLWidget(lcViewType ViewType, lcModel* Model) + : mScene(new lcScene()), mModel(Model), mViewType(ViewType) { mContext = new lcContext(); mViews.push_back(this); diff --git a/common/lc_glwidget.h b/common/lc_glwidget.h index 9efbce08..010e7465 100644 --- a/common/lc_glwidget.h +++ b/common/lc_glwidget.h @@ -80,12 +80,20 @@ enum class lcTrackTool Count }; +enum class lcViewType +{ + View, + Preview, + Minifig, + Count +}; + class lcGLWidget : public QObject { Q_OBJECT public: - lcGLWidget(lcModel* Model); + lcGLWidget(lcViewType ViewType, lcModel* Model); virtual ~lcGLWidget(); lcGLWidget(const lcGLWidget&) = delete; @@ -96,6 +104,11 @@ public: lcModel* GetActiveModel() const; + lcViewType GetViewType() const + { + return mViewType; + } + lcCamera* GetCamera() const { return mCamera; @@ -230,6 +243,7 @@ protected: int mWidth = 1; int mHeight = 1; bool mDeleteContext = true; + lcViewType mViewType; static lcGLWidget* mLastFocusedView; static std::vector mViews; diff --git a/common/lc_mainwindow.cpp b/common/lc_mainwindow.cpp index 466c9b03..fecacf97 100644 --- a/common/lc_mainwindow.cpp +++ b/common/lc_mainwindow.cpp @@ -770,7 +770,7 @@ void lcMainWindow::CreateToolBars() View* lcMainWindow::CreateView(lcModel* Model) { - View* NewView = new View(Model); + View* NewView = new View(lcViewType::View, Model); connect(NewView, SIGNAL(CameraChanged()), this, SLOT(ViewCameraChanged())); connect(NewView, SIGNAL(FocusReceived()), this, SLOT(ViewFocusReceived())); diff --git a/common/lc_model.cpp b/common/lc_model.cpp index 3c80a768..5026715e 100644 --- a/common/lc_model.cpp +++ b/common/lc_model.cpp @@ -1275,7 +1275,7 @@ QImage lcModel::GetStepImage(bool Zoom, int Width, int Height, lcStep Step) if (Zoom) ZoomExtents(Camera, (float)Width / (float)Height); - View View(this); + View View(lcViewType::View, this); View.SetCamera(Camera, false); View.SetContext(Context); @@ -4418,7 +4418,7 @@ void lcModel::ShowMinifigDialog() lcGroup* Group = AddGroup(tr("Minifig #"), nullptr); lcArray Pieces(LC_MFW_NUMITEMS); - lcMinifig& Minifig = Dialog.mMinifigWidget->mMinifig; + lcMinifig& Minifig = Dialog.mMinifigWizard->mMinifig; for (int PartIdx = 0; PartIdx < LC_MFW_NUMITEMS; PartIdx++) { diff --git a/common/lc_previewwidget.cpp b/common/lc_previewwidget.cpp index e67ab87f..5ac2bba5 100644 --- a/common/lc_previewwidget.cpp +++ b/common/lc_previewwidget.cpp @@ -80,7 +80,7 @@ void lcPreviewDockWidget::SetPreviewLock() } lcPreviewWidget::lcPreviewWidget() - : lcGLWidget(nullptr), mLoader(new Project(true)) + : lcGLWidget(lcViewType::Preview, nullptr), mLoader(new Project(true)) { mViewSphere = std::unique_ptr(new lcViewSphere(this)); mLoader->SetActiveModel(0); diff --git a/common/lc_viewsphere.cpp b/common/lc_viewsphere.cpp index 0fc05e89..332a17c9 100644 --- a/common/lc_viewsphere.cpp +++ b/common/lc_viewsphere.cpp @@ -32,17 +32,23 @@ void lcViewSphere::UpdateSettings() { const lcPreferences& Preferences = lcGetPreferences(); - if (!mIsPreview) + switch (mWidget->GetViewType()) { + case lcViewType::View: mSize = Preferences.mViewSphereSize; mEnabled = Preferences.mViewSphereEnabled; mLocation = Preferences.mViewSphereLocation; - } - else - { + break; + + case lcViewType::Preview: mSize = Preferences.mPreviewViewSphereSize; mEnabled = Preferences.mPreviewViewSphereEnabled; mLocation = Preferences.mPreviewViewSphereLocation; + break; + + case lcViewType::Minifig: + case lcViewType::Count: + break; } } diff --git a/common/lc_viewsphere.h b/common/lc_viewsphere.h index 4d642516..f139c7e0 100644 --- a/common/lc_viewsphere.h +++ b/common/lc_viewsphere.h @@ -42,7 +42,7 @@ protected: bool mIsPreview = false; int mSize = 1; - bool mEnabled = true; + bool mEnabled = false; lcViewSphereLocation mLocation = lcViewSphereLocation::TopRight; int mMouseDownX = 0; diff --git a/common/lc_viewwidget.cpp b/common/lc_viewwidget.cpp index 836adf4a..83a41330 100644 --- a/common/lc_viewwidget.cpp +++ b/common/lc_viewwidget.cpp @@ -19,11 +19,11 @@ static QList gWidgetList; -lcViewWidget::lcViewWidget(QWidget* Parent, lcGLWidget* Owner) +lcViewWidget::lcViewWidget(QWidget* Parent, lcGLWidget* View) : QGLWidget(Parent, gWidgetList.isEmpty() ? nullptr : gWidgetList.first()) { mWheelAccumulator = 0; - mView = Owner; + mView = View; mView->SetWidget(this); makeCurrent(); @@ -55,7 +55,7 @@ lcViewWidget::lcViewWidget(QWidget* Parent, lcGLWidget* Owner) setMouseTracking(true); - if (dynamic_cast(Owner)) + if (View->GetViewType() == lcViewType::View) { setFocusPolicy(Qt::StrongFocus); setAcceptDrops(true); diff --git a/common/minifig.cpp b/common/minifig.cpp index 7b80e158..490c76ec 100644 --- a/common/minifig.cpp +++ b/common/minifig.cpp @@ -36,19 +36,10 @@ const char* MinifigWizard::mSectionNames[LC_MFW_NUMITEMS] = }; MinifigWizard::MinifigWizard() - : lcGLWidget(nullptr) + : mModel(new lcModel(QString(), nullptr, false)) { LoadSettings(); LoadTemplates(); - - mModel = new lcModel(QString(), nullptr, false); - mCamera = new lcCamera(true); - - mRotateX = 75.0f; - mRotateZ = 180.0f; - mDistance = 10.0f; - mAutoZoom = true; - mTracking = LC_TRACK_NONE; } MinifigWizard::~MinifigWizard() @@ -59,9 +50,6 @@ MinifigWizard::~MinifigWizard() if (mMinifig.Parts[i]) Library->ReleasePieceInfo(mMinifig.Parts[i]); // todo: don't call ReleasePieceInfo here because it may release textures and they need a GL context current - delete mModel; - delete mCamera; - SaveTemplates(); } @@ -86,11 +74,8 @@ void MinifigWizard::LoadSettings() ParseSettings(MinifigFile); } -void MinifigWizard::OnInitialUpdate() +void MinifigWizard::LoadDefault() { - MakeCurrent(); - mContext->SetDefaultState(); - 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 }; @@ -315,156 +300,6 @@ void MinifigWizard::SaveTemplates() #endif } -void MinifigWizard::OnDraw() -{ - mContext->SetDefaultState(); - - mContext->SetViewport(0, 0, mWidth, mHeight); - - DrawBackground(); - - DrawViewport(); - - lcVector3 Min(FLT_MAX, FLT_MAX, FLT_MAX), Max(-FLT_MAX, -FLT_MAX, -FLT_MAX); - - for (int InfoIdx = 0; InfoIdx < LC_MFW_NUMITEMS; InfoIdx++) - { - const PieceInfo* const Info = mMinifig.Parts[InfoIdx]; - - if (!Info) - continue; - - lcVector3 Points[8]; - lcGetBoxCorners(Info->GetBoundingBox(), Points); - - for (int PointIdx = 0; PointIdx < 8; PointIdx++) - { - const lcVector3 Point = lcMul31(Points[PointIdx], mMinifig.Matrices[InfoIdx]); - - Min = lcMin(Point, Min); - Max = lcMax(Point, Max); - } - } - - const lcVector3 Center = (Min + Max) / 2.0f; - - lcVector3 Eye(0.0f, 0.0f, 1.0f); - - Eye = lcMul30(Eye, lcMatrix44RotationX(-mRotateX * LC_DTOR)); - Eye = lcMul30(Eye, lcMatrix44RotationZ(-mRotateZ * LC_DTOR)); - - const float Aspect = (float)mWidth / (float)mHeight; - const lcMatrix44 Projection = lcMatrix44Perspective(30.0f, Aspect, 1.0f, 2500.0f); - mContext->SetProjectionMatrix(Projection); - - lcMatrix44& ViewMatrix = mCamera->mWorldView; - - if (mAutoZoom) - { - lcVector3 Points[8]; - lcGetBoxCorners(Min, Max, Points); - - Eye += Center; - - const lcMatrix44 ModelView = lcMatrix44LookAt(Eye, Center, lcVector3(0, 0, 1)); - std::tie(Eye, std::ignore) = lcZoomExtents(Eye, ModelView, Projection, Points, 8); - - ViewMatrix = lcMatrix44LookAt(Eye, Center, lcVector3(0, 0, 1)); - - const lcVector3 d = Eye - Center; - mDistance = d.Length(); - } - else - { - ViewMatrix = lcMatrix44LookAt(Eye * mDistance, Center, lcVector3(0, 0, 1)); - } - - Calculate(); - - mScene->Begin(ViewMatrix); - mScene->SetAllowLOD(false); - - mModel->GetScene(mScene.get(), mCamera, false, false); - - mScene->End(); - - mScene->Draw(mContext); - - mContext->ClearResources(); -} - -void MinifigWizard::OnLeftButtonDown() -{ - if (mTracking == LC_TRACK_NONE) - { - mDownX = mMouseX; - mDownY = mMouseY; - mTracking = LC_TRACK_LEFT; - } -} - -void MinifigWizard::OnLeftButtonUp() -{ - if (mTracking == LC_TRACK_LEFT) - mTracking = LC_TRACK_NONE; -} - -void MinifigWizard::OnLeftButtonDoubleClick() -{ - mAutoZoom = true; - Redraw(); -} - -void MinifigWizard::OnRightButtonDown() -{ - if (mTracking == LC_TRACK_NONE) - { - mDownX = mMouseX; - mDownY = mMouseY; - mTracking = LC_TRACK_RIGHT; - } -} - -void MinifigWizard::OnRightButtonUp() -{ - if (mTracking == LC_TRACK_RIGHT) - mTracking = LC_TRACK_NONE; -} - -void MinifigWizard::OnMouseMove() -{ - if (mTracking == LC_TRACK_LEFT) - { - // Rotate. - mRotateZ += mMouseX - mDownX; - mRotateX += mMouseY - mDownY; - - if (mRotateX > 179.5f) - mRotateX = 179.5f; - else if (mRotateX < 0.5f) - mRotateX = 0.5f; - - mDownX = mMouseX; - mDownY = mMouseY; - - Redraw(); - } - else if (mTracking == LC_TRACK_RIGHT) - { - // Zoom. - mDistance += (float)(mDownY - mMouseY) * 0.2f; - mAutoZoom = false; - - if (mDistance < 0.5f) - mDistance = 0.5f; - - mDownX = mMouseX; - mDownY = mMouseY; - - Redraw(); - } -} - void MinifigWizard::Calculate() { float HeadOffset = 0.0f; @@ -650,7 +485,6 @@ int MinifigWizard::GetSelectionIndex(int Type) const void MinifigWizard::SetSelectionIndex(int Type, int Index) { lcPiecesLibrary* Library = lcGetPiecesLibrary(); - MakeCurrent(); if (mMinifig.Parts[Type]) Library->ReleasePieceInfo(mMinifig.Parts[Type]); diff --git a/common/minifig.h b/common/minifig.h index 20d45251..08c6f7b3 100644 --- a/common/minifig.h +++ b/common/minifig.h @@ -1,6 +1,5 @@ #pragma once -#include "lc_glwidget.h" #include "lc_math.h" enum LC_MFW_TYPES @@ -47,16 +46,19 @@ struct lcMinifigTemplate float Angles[LC_MFW_NUMITEMS]; }; -class MinifigWizard : public lcGLWidget +class MinifigWizard { public: MinifigWizard(); ~MinifigWizard(); MinifigWizard(const MinifigWizard&) = delete; - MinifigWizard(MinifigWizard&&) = delete; MinifigWizard& operator=(const MinifigWizard&) = delete; - MinifigWizard& operator=(MinifigWizard&&) = delete; + + lcModel* GetModel() const + { + return mModel.get(); + } const std::map& GetTemplates() const { @@ -68,14 +70,7 @@ public: void AddTemplatesJson(const QByteArray& TemplateData); QByteArray GetTemplatesJson() const; - void OnDraw() override; - void OnLeftButtonDown() override; - void OnLeftButtonUp() override; - void OnLeftButtonDoubleClick() override; - void OnRightButtonDown() override; - void OnRightButtonUp() override; - void OnMouseMove() override; - void OnInitialUpdate() override; + void LoadDefault(); void Calculate(); int GetSelectionIndex(int Type) const; @@ -83,26 +78,18 @@ public: void SetColor(int Type, int Color); void SetAngle(int Type, float Angle); - void ParseSettings(lcFile& Settings); - std::vector mSettings[LC_MFW_NUMITEMS]; lcMinifig mMinifig; - int mTracking; - int mDownX; - int mDownY; - - float mDistance; - float mRotateX; - float mRotateZ; - bool mAutoZoom; - protected: void LoadSettings(); + void ParseSettings(lcFile& Settings); + void LoadTemplates(); void SaveTemplates(); + std::unique_ptr mModel; std::map mTemplates; static const char* mSectionNames[LC_MFW_NUMITEMS]; }; diff --git a/common/project.h b/common/project.h index 976a018a..252cabed 100644 --- a/common/project.h +++ b/common/project.h @@ -29,13 +29,6 @@ public: bool PartsListEnd; }; -enum LC_MOUSE_TRACK -{ - LC_TRACK_NONE, - LC_TRACK_LEFT, - LC_TRACK_RIGHT -}; - struct lcInstructionsPageLayout; class Project diff --git a/common/view.cpp b/common/view.cpp index 39ec78d4..0d7f3afd 100644 --- a/common/view.cpp +++ b/common/view.cpp @@ -15,8 +15,8 @@ lcVertexBuffer View::mRotateMoveVertexBuffer; lcIndexBuffer View::mRotateMoveIndexBuffer; -View::View(lcModel* Model) - : lcGLWidget(Model) +View::View(lcViewType ViewType, lcModel* Model) + : lcGLWidget(ViewType, Model) { mViewSphere = std::unique_ptr(new lcViewSphere(this)); memset(mGridSettings, 0, sizeof(mGridSettings)); @@ -638,7 +638,7 @@ void View::OnDraw() } } - if (DrawInterface) + if (DrawInterface && mViewType == lcViewType::View) mScene->SetPreTranslucentCallback([this]() { DrawGrid(); }); mScene->End(); @@ -730,24 +730,28 @@ void View::OnDraw() mContext->SetLineWidth(1.0f); - if (Preferences.mDrawAxes) - DrawAxes(); + if (mViewType == lcViewType::View) + { + if (Preferences.mDrawAxes) + DrawAxes(); - lcTool Tool = gMainWindow->GetTool(); - lcModel* ActiveModel = GetActiveModel(); + lcTool Tool = gMainWindow->GetTool(); + lcModel* ActiveModel = GetActiveModel(); - if ((Tool == lcTool::Select || Tool == lcTool::Move) && mTrackButton == lcTrackButton::None && ActiveModel->AnyObjectsSelected()) - DrawSelectMoveOverlay(); - else if (GetCurrentTool() == lcTool::Move && mTrackButton != lcTrackButton::None) - DrawSelectMoveOverlay(); - else if ((Tool == lcTool::Rotate || (Tool == lcTool::Select && mTrackButton != lcTrackButton::None && mTrackTool >= lcTrackTool::RotateX && mTrackTool <= lcTrackTool::RotateXYZ)) && ActiveModel->AnyPiecesSelected()) - DrawRotateOverlay(); - else if ((mTrackTool == lcTrackTool::Select || mTrackTool == lcTrackTool::ZoomRegion) && mTrackButton != lcTrackButton::None) - DrawSelectZoomRegionOverlay(); - else if (Tool == lcTool::RotateView && mTrackButton == lcTrackButton::None) - DrawRotateViewOverlay(); + if ((Tool == lcTool::Select || Tool == lcTool::Move) && mTrackButton == lcTrackButton::None && ActiveModel->AnyObjectsSelected()) + DrawSelectMoveOverlay(); + else if (GetCurrentTool() == lcTool::Move && mTrackButton != lcTrackButton::None) + DrawSelectMoveOverlay(); + else if ((Tool == lcTool::Rotate || (Tool == lcTool::Select && mTrackButton != lcTrackButton::None && mTrackTool >= lcTrackTool::RotateX && mTrackTool <= lcTrackTool::RotateXYZ)) && ActiveModel->AnyPiecesSelected()) + DrawRotateOverlay(); + else if ((mTrackTool == lcTrackTool::Select || mTrackTool == lcTrackTool::ZoomRegion) && mTrackButton != lcTrackButton::None) + DrawSelectZoomRegionOverlay(); + else if (Tool == lcTool::RotateView && mTrackButton == lcTrackButton::None) + DrawRotateViewOverlay(); + + mViewSphere->Draw(); + } - mViewSphere->Draw(); DrawViewport(); } @@ -1693,6 +1697,13 @@ void View::Zoom(float Amount) void View::UpdateTrackTool() { + if (mViewType != lcViewType::View) + { + mTrackTool = lcTrackTool::None; + UpdateCursor(); + return; + } + lcTool CurrentTool = gMainWindow->GetTool(); lcTrackTool NewTrackTool = mTrackTool; int x = mMouseX; diff --git a/common/view.h b/common/view.h index 9b692bd8..7d3f7f62 100644 --- a/common/view.h +++ b/common/view.h @@ -8,7 +8,7 @@ class View : public lcGLWidget Q_OBJECT public: - View(lcModel* Model); + View(lcViewType ViewType, lcModel* Model); ~View(); View(const View&) = delete; diff --git a/qt/lc_qminifigdialog.cpp b/qt/lc_qminifigdialog.cpp index f08f4f9a..611fa23e 100644 --- a/qt/lc_qminifigdialog.cpp +++ b/qt/lc_qminifigdialog.cpp @@ -7,6 +7,8 @@ #include "lc_application.h" #include "pieceinf.h" #include "lc_library.h" +#include "view.h" +#include "camera.h" lcQMinifigDialog::lcQMinifigDialog(QWidget* Parent) : QDialog(Parent), ui(new Ui::lcQMinifigDialog) @@ -44,15 +46,19 @@ lcQMinifigDialog::lcQMinifigDialog(QWidget* Parent) QGridLayout* PreviewLayout = new QGridLayout(ui->minifigFrame); PreviewLayout->setContentsMargins(0, 0, 0, 0); - mMinifigWidget = new MinifigWizard(); + mMinifigWizard = new MinifigWizard(); + mView = new View(lcViewType::Minifig, mMinifigWizard->GetModel()); - lcViewWidget* ViewWidget = new lcViewWidget(nullptr, mMinifigWidget); + lcViewWidget* ViewWidget = new lcViewWidget(nullptr, mView); ViewWidget->setMinimumWidth(100); PreviewLayout->addWidget(ViewWidget); + mView->MakeCurrent(); + mMinifigWizard->LoadDefault(); + for (int ItemIndex = 0; ItemIndex < LC_MFW_NUMITEMS; ItemIndex++) { - std::vector& PartList = mMinifigWidget->mSettings[ItemIndex]; + std::vector& PartList = mMinifigWizard->mSettings[ItemIndex]; QStringList ItemStrings; QVector Separators; @@ -72,12 +78,12 @@ lcQMinifigDialog::lcQMinifigDialog(QWidget* Parent) ItemCombo->addItems(ItemStrings); for (int SeparatorIndex = Separators.size() - 1; SeparatorIndex >= 0; SeparatorIndex--) ItemCombo->insertSeparator(Separators[SeparatorIndex]); - ItemCombo->setCurrentIndex(mMinifigWidget->GetSelectionIndex(ItemIndex)); + ItemCombo->setCurrentIndex(mMinifigWizard->GetSelectionIndex(ItemIndex)); ItemCombo->blockSignals(false); lcQColorPicker *colorPicker = mColorPickers[ItemIndex]; colorPicker->blockSignals(true); - colorPicker->setCurrentColor(mMinifigWidget->mMinifig.Colors[ItemIndex]); + colorPicker->setCurrentColor(mMinifigWizard->mMinifig.Colors[ItemIndex]); colorPicker->blockSignals(false); } @@ -85,12 +91,16 @@ lcQMinifigDialog::lcQMinifigDialog(QWidget* Parent) ui->TemplateGroup->hide(); #endif - mMinifigWidget->OnInitialUpdate(); UpdateTemplateCombo(); + + mMinifigWizard->Calculate(); + mView->GetCamera()->SetViewpoint(lcVector3(0.0f, -270.0f, 90.0f)); + mView->ZoomExtents(); } lcQMinifigDialog::~lcQMinifigDialog() { + delete mMinifigWizard; delete ui; } @@ -98,7 +108,7 @@ void lcQMinifigDialog::UpdateTemplateCombo() { ui->TemplateComboBox->clear(); - const auto& Templates = mMinifigWidget->GetTemplates(); + const auto& Templates = mMinifigWizard->GetTemplates(); for (const auto& Template : Templates) ui->TemplateComboBox->addItem(Template.first); } @@ -106,7 +116,7 @@ void lcQMinifigDialog::UpdateTemplateCombo() void lcQMinifigDialog::on_TemplateComboBox_currentIndexChanged(const QString& TemplateName) { #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) - const auto& Templates = mMinifigWidget->GetTemplates(); + const auto& Templates = mMinifigWizard->GetTemplates(); const auto& Position = Templates.find(TemplateName); if (Position == Templates.end()) return; @@ -121,7 +131,7 @@ void lcQMinifigDialog::on_TemplateComboBox_currentIndexChanged(const QString& Te if (Info) { - for (const lcMinifigPieceInfo& MinifigPieceInfo : mMinifigWidget->mSettings[PartIdx]) + for (const lcMinifigPieceInfo& MinifigPieceInfo : mMinifigWizard->mSettings[PartIdx]) { if (Info == MinifigPieceInfo.Info) { @@ -142,6 +152,8 @@ void lcQMinifigDialog::on_TemplateComboBox_currentIndexChanged(const QString& Te if (AngleSpinBox) AngleSpinBox->setValue(Template.Angles[PartIdx]); } + + mMinifigWizard->Calculate(); #endif } @@ -172,13 +184,13 @@ void lcQMinifigDialog::on_TemplateSaveButton_clicked() for (int PartIdx = 0; PartIdx < LC_MFW_NUMITEMS; PartIdx++) { - Template.Parts[PartIdx] = mMinifigWidget->mSettings[PartIdx][mComboBoxes[PartIdx]->currentIndex()].Info->mFileName; + Template.Parts[PartIdx] = mMinifigWizard->mSettings[PartIdx][mComboBoxes[PartIdx]->currentIndex()].Info->mFileName; Template.Colors[PartIdx] = mColorPickers[PartIdx]->currentColorCode(); QDoubleSpinBox* AngleSpinBox = mSpinBoxes[PartIdx]; Template.Angles[PartIdx] = AngleSpinBox ? AngleSpinBox->value() : 0.0f; } - mMinifigWidget->SaveTemplate(TemplateName, Template); + mMinifigWizard->SaveTemplate(TemplateName, Template); ui->TemplateComboBox->blockSignals(true); UpdateTemplateCombo(); @@ -195,7 +207,7 @@ void lcQMinifigDialog::on_TemplateDeleteButton_clicked() if (QMessageBox::question(this, tr("Delete Template"), Question, QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) return; - mMinifigWidget->DeleteTemplate(Template); + mMinifigWizard->DeleteTemplate(Template); UpdateTemplateCombo(); } @@ -216,7 +228,7 @@ void lcQMinifigDialog::on_TemplateImportButton_clicked() } QByteArray FileData = File.readAll(); - mMinifigWidget->AddTemplatesJson(FileData); + mMinifigWizard->AddTemplatesJson(FileData); UpdateTemplateCombo(); } @@ -236,7 +248,7 @@ void lcQMinifigDialog::on_TemplateExportButton_clicked() return; } - QByteArray Templates = mMinifigWidget->GetTemplatesJson(); + QByteArray Templates = mMinifigWizard->GetTemplatesJson(); File.write(Templates); } @@ -247,8 +259,9 @@ void lcQMinifigDialog::TypeChanged(int Index) if (Search == mComboBoxes.end()) return; - mMinifigWidget->SetSelectionIndex(std::distance(mComboBoxes.begin(), Search), Index); - mMinifigWidget->Redraw(); + mView->MakeCurrent(); + mMinifigWizard->SetSelectionIndex(std::distance(mComboBoxes.begin(), Search), Index); + mView->Redraw(); } void lcQMinifigDialog::ColorChanged(int Index) @@ -258,8 +271,8 @@ void lcQMinifigDialog::ColorChanged(int Index) if (Search == mColorPickers.end()) return; - mMinifigWidget->SetColor(std::distance(mColorPickers.begin(), Search), Index); - mMinifigWidget->Redraw(); + mMinifigWizard->SetColor(std::distance(mColorPickers.begin(), Search), Index); + mView->Redraw(); } void lcQMinifigDialog::AngleChanged(double Value) @@ -269,6 +282,6 @@ void lcQMinifigDialog::AngleChanged(double Value) if (Search == mSpinBoxes.end()) return; - mMinifigWidget->SetAngle(std::distance(mSpinBoxes.begin(), Search), Value); - mMinifigWidget->Redraw(); + mMinifigWizard->SetAngle(std::distance(mSpinBoxes.begin(), Search), Value); + mView->Redraw(); } diff --git a/qt/lc_qminifigdialog.h b/qt/lc_qminifigdialog.h index 9db01f2e..ef88501a 100644 --- a/qt/lc_qminifigdialog.h +++ b/qt/lc_qminifigdialog.h @@ -2,6 +2,7 @@ #include "minifig.h" class lcQColorPicker; +class View; namespace Ui { class lcQMinifigDialog; @@ -15,7 +16,7 @@ public: explicit lcQMinifigDialog(QWidget* Parent); ~lcQMinifigDialog(); - MinifigWizard* mMinifigWidget; + MinifigWizard* mMinifigWizard; protected slots: void on_TemplateComboBox_currentIndexChanged(const QString& TemplateName); @@ -32,6 +33,7 @@ protected: Ui::lcQMinifigDialog* ui; + View* mView; std::array mComboBoxes; std::array mColorPickers; std::array mSpinBoxes;