#include "lc_global.h" #include "lc_instructionsdialog.h" #include "lc_pagesetupdialog.h" #include "project.h" #include "lc_model.h" #include "lc_view.h" #include "lc_collapsiblewidget.h" lcInstructionsStepImageItem::lcInstructionsStepImageItem(QGraphicsItem* Parent, lcInstructions* Instructions, lcModel* Model, lcStep Step) : QGraphicsPixmapItem(Parent), mInstructions(Instructions), mModel(Model), mStep(Step) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable); } void lcInstructionsStepImageItem::Update() { lcView View(lcViewType::View, mModel); View.SetOffscreenContext(); View.MakeCurrent(); View.SetBackgroundColorOverride(lcRGBAFromQColor(mInstructions->GetColorProperty(lcInstructionsPropertyType::StepBackgroundColor, mModel, mStep))); View.SetSize(mWidth, mHeight); std::vector Images = View.GetStepImages(mStep, mStep); if (!Images.empty()) setPixmap(QPixmap::fromImage(Images.front())); } lcInstructionsStepNumberItem::lcInstructionsStepNumberItem(QGraphicsItem* Parent, lcInstructions* Instructions, lcModel* Model, lcStep Step) : QGraphicsSimpleTextItem(Parent), mInstructions(Instructions), mModel(Model), mStep(Step) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable); } void lcInstructionsStepNumberItem::Update() { bool Visible = mInstructions->GetBoolProperty(lcInstructionsPropertyType::ShowStepNumber, mModel, mStep); setVisible(Visible); QFont StepNumberFont = mInstructions->GetFontProperty(lcInstructionsPropertyType::StepNumberFont, mModel, mStep); setFont(StepNumberFont); setBrush(QBrush(mInstructions->GetColorProperty(lcInstructionsPropertyType::StepNumberColor, mModel, mStep))); setText(QString::number(mStep)); } lcInstructionsPartsListItem::lcInstructionsPartsListItem(QGraphicsItem* Parent, lcInstructions* Instructions, lcModel* Model, lcStep Step) : QGraphicsPixmapItem(Parent), mInstructions(Instructions), mModel(Model), mStep(Step) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable); } void lcInstructionsPartsListItem::Update() { bool Visible = mInstructions->GetBoolProperty(lcInstructionsPropertyType::ShowStepPLI, mModel, mStep); setVisible(Visible); if (!Visible) return; QColor BackgroundColor = mInstructions->GetColorProperty(lcInstructionsPropertyType::PLIBackgroundColor, mModel, mStep); QFont Font = mInstructions->GetFontProperty(lcInstructionsPropertyType::PLIFont, mModel, mStep); QColor TextColor = mInstructions->GetColorProperty(lcInstructionsPropertyType::PLITextColor, mModel, mStep); QImage PartsImage = mModel->GetPartsListImage(300, mStep, lcRGBAFromQColor(BackgroundColor), Font, TextColor); setPixmap(QPixmap::fromImage(PartsImage)); } lcInstructionsPageWidget::lcInstructionsPageWidget(QWidget* Parent, lcInstructions* Instructions, lcInstructionsPropertiesWidget* PropertiesWidget) : QGraphicsView(Parent), mInstructions(Instructions), mPropertiesWidget(PropertiesWidget) { QGraphicsScene* Scene = new QGraphicsScene(); setScene(Scene); connect(mInstructions, &lcInstructions::StepSettingsChanged, this, &lcInstructionsPageWidget::StepSettingsChanged); connect(Scene, &QGraphicsScene::selectionChanged, this, &lcInstructionsPageWidget::SelectionChanged); } void lcInstructionsPageWidget::StepSettingsChanged(lcModel* Model, lcStep Step) { QGraphicsScene* Scene = scene(); QList Items = Scene->items(); for (QGraphicsItem* Item : Items) { lcInstructionsStepImageItem* ImageItem = dynamic_cast(Item); if (ImageItem) { if (!Model || (ImageItem->GetModel() == Model && ImageItem->GetStep() == Step)) ImageItem->Update(); continue; } lcInstructionsStepNumberItem* NumberItem = dynamic_cast(Item); if (NumberItem) { if (!Model || (NumberItem->GetModel() == Model && NumberItem->GetStep() == Step)) NumberItem->Update(); continue; } lcInstructionsPartsListItem* PartsItem = dynamic_cast(Item); if (PartsItem) { if (!Model || (PartsItem->GetModel() == Model && PartsItem->GetStep() == Step)) PartsItem->Update(); continue; } } } void lcInstructionsPageWidget::SelectionChanged() { QGraphicsScene* Scene = qobject_cast(sender()); QGraphicsItem* Focus = nullptr; if (Scene) { QList SelectedItems = Scene->selectedItems(); if (!SelectedItems.isEmpty()) Focus = SelectedItems.first(); } mPropertiesWidget->SelectionChanged(Focus); } static void lcUpdateInstructionsPageScene(lcInstructions* Instructions, const lcInstructionsPage* Page, QGraphicsScene* Scene) { Scene->clear(); if (!Page) return; const lcInstructionsPageSetup& PageSetup = Instructions->mPageSetup; // Scene->setSceneRect(0, 0, mInstructions->mPageSetup.Width, mInstructions->mPageSetup.Height); QGraphicsRectItem* PageItem = Scene->addRect(QRectF(0.0f, 0.0f, PageSetup.Width, PageSetup.Height), QPen(Qt::black), QBrush(Qt::white)); PageItem->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); QRectF MarginsRect(PageSetup.MarginLeft, PageSetup.MarginTop, PageSetup.Width - PageSetup.MarginLeft - PageSetup.MarginRight, PageSetup.Height - PageSetup.MarginTop - PageSetup.MarginBottom); for (const lcInstructionsStep& Step : Page->Steps) { lcInstructionsStepImageItem* StepImageItem = new lcInstructionsStepImageItem(PageItem, Instructions, Step.Model, Step.Step); StepImageItem->setPos(MarginsRect.left() + MarginsRect.width() * Step.Rect.x(), MarginsRect.top() + MarginsRect.height() * Step.Rect.y()); StepImageItem->SetImageSize(MarginsRect.width() * Step.Rect.width(), MarginsRect.height() * Step.Rect.height()); StepImageItem->Update(); lcInstructionsStepNumberItem* StepNumberItem = new lcInstructionsStepNumberItem(StepImageItem, Instructions, Step.Model, Step.Step); StepNumberItem->Update(); lcInstructionsPartsListItem* PartsImageItem = new lcInstructionsPartsListItem(StepImageItem, Instructions, Step.Model, Step.Step); PartsImageItem->setPos(StepNumberItem->boundingRect().topRight()); PartsImageItem->Update(); } } void lcInstructionsPageWidget::SetCurrentPage(const lcInstructionsPage* Page) { QGraphicsScene* Scene = scene(); lcUpdateInstructionsPageScene(mInstructions, Page, Scene); } lcInstructionsPageListWidget::lcInstructionsPageListWidget(QWidget* Parent, lcInstructions* Instructions) : QDockWidget(Parent), mInstructions(Instructions) { QWidget* CentralWidget = new QWidget(this); setWidget(CentralWidget); setWindowTitle(tr("Pages")); QVBoxLayout* Layout = new QVBoxLayout(CentralWidget); Layout->setContentsMargins(0, 0, 0, 0); QHBoxLayout* ButtonsLayout = new QHBoxLayout(); ButtonsLayout->setContentsMargins(0, 0, 0, 0); Layout->addLayout(ButtonsLayout); QToolButton* PageSetupButton = new QToolButton(); PageSetupButton->setText(tr("Page Setup")); ButtonsLayout->addWidget(PageSetupButton); connect(PageSetupButton, SIGNAL(clicked()), this, SLOT(ShowPageSetupDialog())); ButtonsLayout->addStretch(1); /* lcCollapsibleWidget* SetupWidget = new lcCollapsibleWidget(tr("Page Setup"), CentralWidget); Layout->addWidget(SetupWidget); // QVBoxLayout* SetupLayout = new QVBoxLayout(); // SetupWidget->SetChildLayout(SetupLayout); QGridLayout* SetupLayout = new QGridLayout(); SetupWidget->SetChildLayout(SetupLayout); // lcCollapsibleWidget* SizeWidget = new lcCollapsibleWidget(tr("Size")); QGroupBox* SizeWidget = new QGroupBox(tr("Size")); SetupLayout->addWidget(SizeWidget); QGridLayout* SizeLayout = new QGridLayout(); // SizeWidget->SetChildLayout(SizeLayout); SizeWidget->setLayout(SizeLayout); mWidthEdit = new lcSmallLineEdit(); SizeLayout->addWidget(new QLabel(tr("Width:")), 1, 0); SizeLayout->addWidget(mWidthEdit, 1, 1); mHeightEdit = new lcSmallLineEdit(); SizeLayout->addWidget(new QLabel(tr("Height:")), 1, 2); SizeLayout->addWidget(mHeightEdit, 1, 3); mUnitsComboBox = new QComboBox(); mUnitsComboBox->addItems(QStringList() << tr("Pixels") << tr("Centimeters") << tr("Inches")); SizeLayout->addWidget(new QLabel(tr("Units:")), 4, 0); SizeLayout->addWidget(mUnitsComboBox, 4, 1, 1, -1); mSizeComboBox = new QComboBox(); SizeLayout->addWidget(new QLabel(tr("Preset:")), 5, 0); SizeLayout->addWidget(mSizeComboBox, 5, 1, 1, -1); // lcCollapsibleWidget* OrientationWidget = new lcCollapsibleWidget(tr("Orientation")); // SetupLayout->addWidget(OrientationWidget); // // QVBoxLayout* OrientationLayout = new QVBoxLayout(); // OrientationWidget->SetChildLayout(OrientationLayout); // // mPortraitButton = new QRadioButton(tr("Portrait")); // OrientationLayout->addWidget(mPortraitButton); // mLandscapeButton = new QRadioButton(tr("Landscape")); // OrientationLayout->addWidget(mLandscapeButton); QGroupBox* MarginsWidget = new QGroupBox(tr("Margins")); // lcCollapsibleWidget* MarginsWidget = new lcCollapsibleWidget(tr("Margins")); SetupLayout->addWidget(MarginsWidget); QGridLayout* MarginsLayout = new QGridLayout(); // MarginsWidget->SetChildLayout(MarginsLayout); MarginsWidget->setLayout(MarginsLayout); mLeftMarginEdit = new lcSmallLineEdit(); MarginsLayout->addWidget(new QLabel(tr("Left:")), 2, 0); MarginsLayout->addWidget(mLeftMarginEdit, 2, 1); mRightMarginEdit = new lcSmallLineEdit(); MarginsLayout->addWidget(new QLabel(tr("Right:")), 2, 2); MarginsLayout->addWidget(mRightMarginEdit, 2, 3); mTopMarginEdit = new lcSmallLineEdit(); MarginsLayout->addWidget(new QLabel(tr("Top:")), 3, 0); MarginsLayout->addWidget(mTopMarginEdit, 3, 1); mBottomMarginEdit = new lcSmallLineEdit(); MarginsLayout->addWidget(new QLabel(tr("Bottom:")), 3, 2); MarginsLayout->addWidget(mBottomMarginEdit, 3, 3); // lcCollapsibleWidget* UnitsWidget = new lcCollapsibleWidget(tr("Units")); // SetupLayout->addWidget(UnitsWidget); // // QVBoxLayout* UnitsLayout = new QVBoxLayout(); // UnitsWidget->SetChildLayout(UnitsLayout); // SetupWidget->Collapse(); */ mThumbnailsWidget = new QListWidget(CentralWidget); Layout->addWidget(mThumbnailsWidget); } void lcInstructionsPageListWidget::ShowPageSetupDialog() { lcPageSetupDialog Dialog(this, &mInstructions->mPageSetup); if (Dialog.exec() != QDialog::Accepted) return; } lcInstructionsPropertiesWidget::lcInstructionsPropertiesWidget(QWidget* Parent, lcInstructions* Instructions) : QDockWidget(Parent), mInstructions(Instructions) { QWidget* CentralWidget = new QWidget(this); setWidget(CentralWidget); setWindowTitle(tr("Properties")); QGridLayout* Layout = new QGridLayout(CentralWidget); Layout->setContentsMargins(0, 0, 0, 0); QComboBox* ScopeComboBox = new QComboBox(CentralWidget); ScopeComboBox->addItems(QStringList() << tr("Default") << tr("Current Model") << tr("Current Step Only") << tr("Current Step Forward")); Layout->addWidget(new QLabel(tr("Scope:")), 0, 0); Layout->addWidget(ScopeComboBox, 0, 1); QComboBox* PresetComboBox = new QComboBox(CentralWidget); Layout->addWidget(new QLabel(tr("Preset:")), 1, 0); Layout->addWidget(PresetComboBox, 1, 1); Layout->setRowStretch(3, 1); } void lcInstructionsPropertiesWidget::AddBoolProperty(lcInstructionsPropertyType Type) { const QString Label = mInstructions->GetPropertyLabel(Type); const int Row = mPropertiesLayout->rowCount(); QCheckBox* CheckBox = new QCheckBox(Label); mPropertiesLayout->addWidget(CheckBox, Row, 0, 1, -1); bool Enabled = mInstructions->GetBoolProperty(Type, mModel, mStep); CheckBox->setChecked(Enabled); connect(CheckBox, &QToolButton::toggled, [this, Type](bool Checked) { mInstructions->SetDefaultBool(Type, Checked); } ); } void lcInstructionsPropertiesWidget::AddColorProperty(lcInstructionsPropertyType Type) { const QString Label = mInstructions->GetPropertyLabel(Type); const int Row = mPropertiesLayout->rowCount(); mPropertiesLayout->addWidget(new QLabel(Label), Row, 0); QToolButton* ColorButton = new QToolButton(); mPropertiesLayout->addWidget(ColorButton, Row, 1); auto UpdateButton = [this, Type, ColorButton]() { QPixmap Pixmap(12, 12); QColor Color = mInstructions->GetColorProperty(Type, mModel, mStep); Pixmap.fill(Color); ColorButton->setIcon(Pixmap); }; UpdateButton(); connect(ColorButton, &QToolButton::clicked, [this, Type, UpdateButton]() { QString Title; switch (Type) { case lcInstructionsPropertyType::StepNumberColor: Title = tr("Select Step Number Color"); break; case lcInstructionsPropertyType::StepBackgroundColor: Title = tr("Select Step Background Color"); break; case lcInstructionsPropertyType::PLIBackgroundColor: Title = tr("Select Parts List Background Color"); break; case lcInstructionsPropertyType::PLIBorderColor: Title = tr("Select Parts List Border Color"); break; case lcInstructionsPropertyType::PLITextColor: Title = tr("Select Parts List Text Color"); break; case lcInstructionsPropertyType::ShowStepNumber: case lcInstructionsPropertyType::ShowStepPLI: case lcInstructionsPropertyType::StepNumberFont: case lcInstructionsPropertyType::PLIFont: // case lcInstructionsPropertyType::StepPLIBorderWidth: // case lcInstructionsPropertyType::StepPLIBorderRound: case lcInstructionsPropertyType::Count: break; } QColor Color = mInstructions->GetColorProperty(Type, mModel, mStep); Color = QColorDialog::getColor(Color, this, Title); if (Color.isValid()) { mInstructions->SetDefaultColor(Type, Color); UpdateButton(); } }); } void lcInstructionsPropertiesWidget::AddFontProperty(lcInstructionsPropertyType Type) { const QString Label = mInstructions->GetPropertyLabel(Type); const int Row = mPropertiesLayout->rowCount(); mPropertiesLayout->addWidget(new QLabel(Label), Row, 0); QToolButton* FontButton = new QToolButton(); mPropertiesLayout->addWidget(FontButton, Row, 1); auto UpdateButton = [this, Type, FontButton]() { QFont Font = mInstructions->GetFontProperty(Type, mModel, mStep); QString FontName = QString("%1 %2").arg(Font.family(), QString::number(Font.pointSize())); FontButton->setText(FontName); }; UpdateButton(); connect(FontButton, &QToolButton::clicked, [this, Type, UpdateButton]() { QString Title; switch (Type) { case lcInstructionsPropertyType::StepNumberFont: Title = tr("Select Step Number Font"); break; case lcInstructionsPropertyType::PLIFont: Title = tr("Select Parts List Font"); break; case lcInstructionsPropertyType::ShowStepNumber: case lcInstructionsPropertyType::ShowStepPLI: case lcInstructionsPropertyType::StepNumberColor: case lcInstructionsPropertyType::StepBackgroundColor: case lcInstructionsPropertyType::PLIBackgroundColor: case lcInstructionsPropertyType::PLITextColor: case lcInstructionsPropertyType::PLIBorderColor: case lcInstructionsPropertyType::Count: break; } bool Ok = false; QFont Font = mInstructions->GetFontProperty(Type, mModel, mStep); Font = QFontDialog::getFont(&Ok, Font, this, tr("Select Step Number Font")); if (Ok) { UpdateButton(); mInstructions->SetDefaultFont(Type, Font); } }); } void lcInstructionsPropertiesWidget::SelectionChanged(QGraphicsItem* FocusItem) { if (mFocusItem == FocusItem) return; delete mWidget; mWidget = nullptr; mFocusItem = FocusItem; mModel = nullptr; mStep = 1; if (!FocusItem) return; auto CreatePropertyWidget = [this](const QString& Title) { mWidget = new lcCollapsibleWidget(Title); // todo: disable collapse QGridLayout* WidgetLayout = qobject_cast(widget()->layout()); WidgetLayout->addWidget(mWidget, 2, 0, 1, -1); mPropertiesLayout = new QGridLayout(); mWidget->SetChildLayout(mPropertiesLayout); }; lcInstructionsStepImageItem* ImageItem = dynamic_cast(FocusItem); if (ImageItem) { CreatePropertyWidget(tr("Step Properties")); mModel = ImageItem->GetModel(); mStep = ImageItem->GetStep(); AddBoolProperty(lcInstructionsPropertyType::ShowStepNumber); AddBoolProperty(lcInstructionsPropertyType::ShowStepPLI); AddColorProperty(lcInstructionsPropertyType::StepBackgroundColor); return; } lcInstructionsStepNumberItem* NumberItem = dynamic_cast(FocusItem); if (NumberItem) { CreatePropertyWidget(tr("Step Number Properties")); mModel = NumberItem->GetModel(); mStep = NumberItem->GetStep(); AddFontProperty(lcInstructionsPropertyType::StepNumberFont); AddColorProperty(lcInstructionsPropertyType::StepNumberColor); return; } lcInstructionsPartsListItem* PartsItem = dynamic_cast(FocusItem); if (PartsItem) { CreatePropertyWidget(tr("Parts List Properties")); mModel = PartsItem->GetModel(); mStep = PartsItem->GetStep(); AddColorProperty(lcInstructionsPropertyType::PLIBackgroundColor); AddFontProperty(lcInstructionsPropertyType::PLIFont); AddColorProperty(lcInstructionsPropertyType::PLITextColor); AddColorProperty(lcInstructionsPropertyType::PLIBorderColor); // PLIBorderWidth, // PLIBorderRound, return; } } lcInstructionsDialog::lcInstructionsDialog(QWidget* Parent, Project* Project) : QMainWindow(Parent), mProject(Project) { setWindowTitle(tr("Instructions")); mInstructions = mProject->GetInstructions(); mPropertiesWidget = new lcInstructionsPropertiesWidget(this, mInstructions); mPropertiesWidget->setObjectName("InstructionsProperties"); addDockWidget(Qt::RightDockWidgetArea, mPropertiesWidget); mPageWidget = new lcInstructionsPageWidget(this, mInstructions, mPropertiesWidget); setCentralWidget(mPageWidget); mPageListWidget = new lcInstructionsPageListWidget(this, mInstructions); mPageListWidget->setObjectName("InstructionsPageList"); addDockWidget(Qt::LeftDockWidgetArea, mPageListWidget); mPageSettingsToolBar = addToolBar(tr("Page Settings")); mPageSettingsToolBar->setObjectName("PageSettings"); mPageSettingsToolBar->setFloatable(false); mPageSettingsToolBar->setMovable(false); mPrintAction = mPageSettingsToolBar->addAction(tr("Print")); mVerticalPageAction = mPageSettingsToolBar->addAction(tr("Vertical")); mVerticalPageAction->setCheckable(true); mHorizontalPageAction = mPageSettingsToolBar->addAction(tr("Horizontal")); mHorizontalPageAction->setCheckable(true); mRowsSpinBox = new QSpinBox(mPageSettingsToolBar); mPageSettingsToolBar->addWidget(mRowsSpinBox); mColumnsSpinBox = new QSpinBox(mPageSettingsToolBar); mPageSettingsToolBar->addWidget(mColumnsSpinBox); QActionGroup* PageDirectionGroup = new QActionGroup(mPageSettingsToolBar); PageDirectionGroup->addAction(mVerticalPageAction); PageDirectionGroup->addAction(mHorizontalPageAction); for (size_t PageNumber = 0; PageNumber < mInstructions->mPages.size(); PageNumber++) mPageListWidget->mThumbnailsWidget->addItem(QString(tr("Page %1")).arg(PageNumber + 1)); connect(mPageListWidget->mThumbnailsWidget, SIGNAL(currentRowChanged(int)), this, SLOT(CurrentThumbnailChanged(int))); mPageListWidget->mThumbnailsWidget->setCurrentRow(0); connect(mPrintAction, &QAction::triggered, this, &lcInstructionsDialog::ShowPrintDialog); connect(mVerticalPageAction, SIGNAL(toggled(bool)), this, SLOT(UpdatePageSettings())); connect(mHorizontalPageAction, SIGNAL(toggled(bool)), this, SLOT(UpdatePageSettings())); connect(mRowsSpinBox, SIGNAL(valueChanged(int)), this, SLOT(UpdatePageSettings())); connect(mColumnsSpinBox, SIGNAL(valueChanged(int)), this, SLOT(UpdatePageSettings())); } void lcInstructionsDialog::ShowPrintDialog() { #ifndef QT_NO_PRINTER int PageCount = static_cast(mInstructions->mPages.size()); QPrinter Printer(QPrinter::HighResolution); Printer.setFromTo(1, PageCount + 1); QPrintDialog PrintDialog(&Printer, this); if (PrintDialog.exec() == QDialog::Accepted) Print(&Printer); #endif } void lcInstructionsDialog::Print(QPrinter* Printer) { #ifndef QT_NO_PRINTER int DocCopies; int PageCopies; const int PageCount = static_cast(mInstructions->mPages.size()); if (Printer->collateCopies()) { DocCopies = 1; PageCopies = Printer->supportsMultipleCopies() ? 1 : Printer->copyCount(); } else { DocCopies = Printer->supportsMultipleCopies() ? 1 : Printer->copyCount(); PageCopies = 1; } int FromPage = Printer->fromPage(); int ToPage = Printer->toPage(); bool Ascending = true; if (FromPage == 0 && ToPage == 0) { FromPage = 1; ToPage = PageCount; } FromPage = qMax(1, FromPage); ToPage = qMin(PageCount, ToPage); if (ToPage < FromPage) return; if (Printer->pageOrder() == QPrinter::LastPageFirst) { std::swap(FromPage, ToPage); Ascending = false; } QGraphicsScene* Scene = new QGraphicsScene(); QPainter Painter(Printer); bool FirstPage = true; for (int DocCopy = 0; DocCopy < DocCopies; DocCopy++) { int Page = FromPage; for (;;) { for (int PageCopy = 0; PageCopy < PageCopies; PageCopy++) { if (Printer->printerState() == QPrinter::Aborted || Printer->printerState() == QPrinter::Error) return; if (!FirstPage) Printer->newPage(); else FirstPage = false; const lcInstructionsPage* InstructionsPage = &mInstructions->mPages[Page - 1]; lcUpdateInstructionsPageScene(mInstructions, InstructionsPage, Scene); Scene->render(&Painter); } if (Page == ToPage) break; if (Ascending) Page++; else Page--; } } delete Scene; #endif } void lcInstructionsDialog::UpdatePageSettings() { lcInstructionsPageSettings PageSettings; PageSettings.Rows = mRowsSpinBox->value(); PageSettings.Columns = mColumnsSpinBox->value(); if (mHorizontalPageAction->isChecked()) PageSettings.Direction = lcInstructionsDirection::Horizontal; else PageSettings.Direction = lcInstructionsDirection::Vertical; mInstructions->SetDefaultPageSettings(PageSettings); // lcInstructionsPage* Page = &mInstructions.mPages[mThumbnailsWidget->currentIndex().row()]; mPageListWidget->mThumbnailsWidget->clear(); for (size_t PageNumber = 0; PageNumber < mInstructions->mPages.size(); PageNumber++) mPageListWidget->mThumbnailsWidget->addItem(QString("Page %1").arg(PageNumber + 1)); // mThumbnailsWidget->setCurrentRow(0); // mPageWidget->SetCurrentPage(Page); } void lcInstructionsDialog::CurrentThumbnailChanged(int Index) { if (Index < 0 || Index >= static_cast(mInstructions->mPages.size())) { mPageWidget->SetCurrentPage(nullptr); return; } const lcInstructionsPage* Page = &mInstructions->mPages[Index]; // const lcInstructionsPageSettings& PageSettings = Page->Settings; const lcInstructionsPageSettings& PageSettings = mInstructions->mPageSettings; mPageWidget->SetCurrentPage(Page); if (PageSettings.Direction == lcInstructionsDirection::Horizontal) { mHorizontalPageAction->blockSignals(true); mHorizontalPageAction->setChecked(true); mHorizontalPageAction->blockSignals(false); } else { mVerticalPageAction->blockSignals(true); mVerticalPageAction->setChecked(true); mVerticalPageAction->blockSignals(false); } mRowsSpinBox->blockSignals(true); mRowsSpinBox->setValue(PageSettings.Rows); mRowsSpinBox->blockSignals(false); mColumnsSpinBox->blockSignals(true); mColumnsSpinBox->setValue(PageSettings.Columns); mColumnsSpinBox->blockSignals(false); }