diff --git a/src/app/dialogs/app/dialoglayoutsettings.cpp b/src/app/dialogs/app/dialoglayoutsettings.cpp index 356607f52..07de1dea8 100644 --- a/src/app/dialogs/app/dialoglayoutsettings.cpp +++ b/src/app/dialogs/app/dialoglayoutsettings.cpp @@ -32,6 +32,7 @@ #include "../../libs/ifc/xml/vdomdocument.h" #include "../../core/vsettings.h" #include "../../xml/vabstractmeasurements.h" +#include "../../libs/vlayout/vlayoutgenerator.h" #if QT_VERSION < QT_VERSION_CHECK(5, 1, 0) # include "../../../utils/vmath.h" @@ -40,11 +41,13 @@ #endif -enum class PaperSizeTemplate : char { A0, A1, A2, A3, A4, Letter, Legal }; +enum class PaperSizeTemplate : char { A0, A1, A2, A3, A4, Letter, Legal, Roll24in, Roll30in, Roll36in, Roll42in, + Roll44in}; //--------------------------------------------------------------------------------------------------------------------- -DialogLayoutSettings::DialogLayoutSettings(QWidget *parent) - : QDialog(parent), ui(new Ui::DialogLayoutSettings), oldPaperUnit(Unit::Mm), oldLayoutUnit(Unit::Mm) +DialogLayoutSettings::DialogLayoutSettings(VLayoutGenerator *generator, QWidget *parent) + : QDialog(parent), ui(new Ui::DialogLayoutSettings), oldPaperUnit(Unit::Mm), oldLayoutUnit(Unit::Mm), + generator(generator) { ui->setupUi(this); @@ -68,6 +71,9 @@ DialogLayoutSettings::DialogLayoutSettings(QWidget *parent) connect(ui->toolButtonLandscape, &QToolButton::toggled, this, &DialogLayoutSettings::Swap); connect(ui->comboBoxLayoutUnit, static_cast(&QComboBox::currentIndexChanged), this, &DialogLayoutSettings::ConvertLayoutSize); + + QPushButton *bOk = ui->buttonBox->button(QDialogButtonBox::Ok); + connect(bOk, &QPushButton::clicked, this, &DialogLayoutSettings::DialogAccepted); } //--------------------------------------------------------------------------------------------------------------------- @@ -196,6 +202,18 @@ void DialogLayoutSettings::SetIncrease(int increase) ui->comboBoxIncrease->setCurrentIndex(index); } +//--------------------------------------------------------------------------------------------------------------------- +bool DialogLayoutSettings::GetAutoCrop() const +{ + return ui->checkBoxAutoCrop->isChecked(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogLayoutSettings::SetAutoCrop(bool autoCrop) +{ + ui->checkBoxAutoCrop->setChecked(autoCrop); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogLayoutSettings::TemplateSelected() { @@ -272,6 +290,22 @@ void DialogLayoutSettings::Swap(bool checked) } } +//--------------------------------------------------------------------------------------------------------------------- +void DialogLayoutSettings::DialogAccepted() +{ + SCASSERT(generator != nullptr) + generator->SetLayoutWidth(GetLayoutWidth()); + generator->SetCaseType(GetGroup()); + generator->SetPaperHeight(GetPaperHeight()); + generator->SetPaperWidth(GetPaperWidth()); + generator->SetShift(GetShift()); + generator->SetRotate(GetRotate()); + generator->SetRotationIncrease(GetIncrease()); + generator->SetAutoCrop(GetAutoCrop()); + + accepted(); +} + //--------------------------------------------------------------------------------------------------------------------- void DialogLayoutSettings::InitPaperUnits() { @@ -311,16 +345,27 @@ void DialogLayoutSettings::InitLayoutUnits() //--------------------------------------------------------------------------------------------------------------------- void DialogLayoutSettings::InitTemplates() { - const QIcon ico("://icon/16x16/template.png"); + const QIcon icoPaper("://icon/16x16/template.png"); + const QIcon icoRoll("://icon/16x16/roll.png"); const QString pdi = QString("(%1ppi)").arg(VApplication::PrintDPI); - ui->comboBoxTemplates->addItem(ico, "A0 "+pdi, QVariant(static_cast(PaperSizeTemplate::A0))); - ui->comboBoxTemplates->addItem(ico, "A1 "+pdi, QVariant(static_cast(PaperSizeTemplate::A1))); - ui->comboBoxTemplates->addItem(ico, "A2 "+pdi, QVariant(static_cast(PaperSizeTemplate::A2))); - ui->comboBoxTemplates->addItem(ico, "A3 "+pdi, QVariant(static_cast(PaperSizeTemplate::A3))); - ui->comboBoxTemplates->addItem(ico, "A4 "+pdi, QVariant(static_cast(PaperSizeTemplate::A4))); - ui->comboBoxTemplates->addItem(ico, "Letter "+pdi, QVariant(static_cast(PaperSizeTemplate::Letter))); - ui->comboBoxTemplates->addItem(ico, "Legal "+pdi, QVariant(static_cast(PaperSizeTemplate::Legal))); + ui->comboBoxTemplates->addItem(icoPaper, "A0 "+pdi, QVariant(static_cast(PaperSizeTemplate::A0))); + ui->comboBoxTemplates->addItem(icoPaper, "A1 "+pdi, QVariant(static_cast(PaperSizeTemplate::A1))); + ui->comboBoxTemplates->addItem(icoPaper, "A2 "+pdi, QVariant(static_cast(PaperSizeTemplate::A2))); + ui->comboBoxTemplates->addItem(icoPaper, "A3 "+pdi, QVariant(static_cast(PaperSizeTemplate::A3))); + ui->comboBoxTemplates->addItem(icoPaper, "A4 "+pdi, QVariant(static_cast(PaperSizeTemplate::A4))); + ui->comboBoxTemplates->addItem(icoPaper, tr("Letter ")+pdi, QVariant(static_cast(PaperSizeTemplate::Letter))); + ui->comboBoxTemplates->addItem(icoPaper, tr("Legal ")+pdi, QVariant(static_cast(PaperSizeTemplate::Legal))); + ui->comboBoxTemplates->addItem(icoRoll, + tr("Roll 24in ")+pdi, QVariant(static_cast(PaperSizeTemplate::Roll24in))); + ui->comboBoxTemplates->addItem(icoRoll, + tr("Roll 30in ")+pdi, QVariant(static_cast(PaperSizeTemplate::Roll30in))); + ui->comboBoxTemplates->addItem(icoRoll, + tr("Roll 36in ")+pdi, QVariant(static_cast(PaperSizeTemplate::Roll36in))); + ui->comboBoxTemplates->addItem(icoRoll, + tr("Roll 42in ")+pdi, QVariant(static_cast(PaperSizeTemplate::Roll42in))); + ui->comboBoxTemplates->addItem(icoRoll, + tr("Roll 44in ")+pdi, QVariant(static_cast(PaperSizeTemplate::Roll44in))); TemplateSelected(); } @@ -343,33 +388,65 @@ QSizeF DialogLayoutSettings::Template() switch (temp) { case PaperSizeTemplate::A0: + SetAutoCrop(false); width = VAbstractMeasurements::UnitConvertor(841, Unit::Mm, paperUnit); height = VAbstractMeasurements::UnitConvertor(1189, Unit::Mm, paperUnit); return QSizeF(width, height); case PaperSizeTemplate::A1: + SetAutoCrop(false); width = VAbstractMeasurements::UnitConvertor(594, Unit::Mm, paperUnit); height = VAbstractMeasurements::UnitConvertor(841, Unit::Mm, paperUnit); return QSizeF(width, height); case PaperSizeTemplate::A2: + SetAutoCrop(false); width = VAbstractMeasurements::UnitConvertor(420, Unit::Mm, paperUnit); height = VAbstractMeasurements::UnitConvertor(594, Unit::Mm, paperUnit); return QSizeF(width, height); case PaperSizeTemplate::A3: + SetAutoCrop(false); width = VAbstractMeasurements::UnitConvertor(297, Unit::Mm, paperUnit); height = VAbstractMeasurements::UnitConvertor(420, Unit::Mm, paperUnit); return QSizeF(width, height); case PaperSizeTemplate::A4: + SetAutoCrop(false); width = VAbstractMeasurements::UnitConvertor(210, Unit::Mm, paperUnit); height = VAbstractMeasurements::UnitConvertor(297, Unit::Mm, paperUnit); return QSizeF(width, height); case PaperSizeTemplate::Letter: + SetAutoCrop(false); width = VAbstractMeasurements::UnitConvertor(8.5, Unit::Inch, paperUnit); height = VAbstractMeasurements::UnitConvertor(11, Unit::Inch, paperUnit); return QSizeF(width, height); case PaperSizeTemplate::Legal: + SetAutoCrop(false); width = VAbstractMeasurements::UnitConvertor(11, Unit::Inch, paperUnit); height = VAbstractMeasurements::UnitConvertor(17, Unit::Inch, paperUnit); return QSizeF(width, height); + case PaperSizeTemplate::Roll24in: + SetAutoCrop(true); + width = VAbstractMeasurements::UnitConvertor(24, Unit::Inch, paperUnit); + height = VAbstractMeasurements::UnitConvertor(120, Unit::Inch, paperUnit); + return QSizeF(width, height); + case PaperSizeTemplate::Roll30in: + SetAutoCrop(true); + width = VAbstractMeasurements::UnitConvertor(30, Unit::Inch, paperUnit); + height = VAbstractMeasurements::UnitConvertor(120, Unit::Inch, paperUnit); + return QSizeF(width, height); + case PaperSizeTemplate::Roll36in: + SetAutoCrop(true); + width = VAbstractMeasurements::UnitConvertor(36, Unit::Inch, paperUnit); + height = VAbstractMeasurements::UnitConvertor(120, Unit::Inch, paperUnit); + return QSizeF(width, height); + case PaperSizeTemplate::Roll42in: + SetAutoCrop(true); + width = VAbstractMeasurements::UnitConvertor(42, Unit::Inch, paperUnit); + height = VAbstractMeasurements::UnitConvertor(120, Unit::Inch, paperUnit); + return QSizeF(width, height); + case PaperSizeTemplate::Roll44in: + SetAutoCrop(true); + width = VAbstractMeasurements::UnitConvertor(44, Unit::Inch, paperUnit); + height = VAbstractMeasurements::UnitConvertor(120, Unit::Inch, paperUnit); + return QSizeF(width, height); default: break; } diff --git a/src/app/dialogs/app/dialoglayoutsettings.h b/src/app/dialogs/app/dialoglayoutsettings.h index 41d7dc940..4b46d9859 100644 --- a/src/app/dialogs/app/dialoglayoutsettings.h +++ b/src/app/dialogs/app/dialoglayoutsettings.h @@ -39,11 +39,13 @@ namespace Ui class DialogLayoutSettings; } +class VLayoutGenerator; + class DialogLayoutSettings : public QDialog { Q_OBJECT public: - explicit DialogLayoutSettings(QWidget *parent = 0); + DialogLayoutSettings(VLayoutGenerator *generator, QWidget *parent = 0); ~DialogLayoutSettings(); int GetPaperHeight() const; @@ -67,6 +69,9 @@ public: int GetIncrease() const; void SetIncrease(int increase); + bool GetAutoCrop() const; + void SetAutoCrop(bool crop); + public slots: void ConvertPaperSize(); void ConvertLayoutSize(); @@ -75,11 +80,14 @@ public slots: void PaperSizeChanged(); void Swap(bool checked); + void DialogAccepted(); + private: Q_DISABLE_COPY(DialogLayoutSettings) Ui::DialogLayoutSettings *ui; Unit oldPaperUnit; Unit oldLayoutUnit; + VLayoutGenerator *generator; void InitPaperUnits(); void InitLayoutUnits(); diff --git a/src/app/dialogs/app/dialoglayoutsettings.ui b/src/app/dialogs/app/dialoglayoutsettings.ui index 012bb3381..0667c87d6 100644 --- a/src/app/dialogs/app/dialoglayoutsettings.ui +++ b/src/app/dialogs/app/dialoglayoutsettings.ui @@ -7,7 +7,7 @@ 0 0 661 - 289 + 317 @@ -195,6 +195,13 @@ + + + + Auto crop unused length + + + @@ -522,7 +529,7 @@ - + diff --git a/src/app/share/resources/icon.qrc b/src/app/share/resources/icon.qrc index 00a80c9e9..2898d45e8 100644 --- a/src/app/share/resources/icon.qrc +++ b/src/app/share/resources/icon.qrc @@ -58,5 +58,6 @@ icon/32x32/pdf.png icon/24x24/fx.png icon/16x16/fx.png + icon/16x16/roll.png diff --git a/src/app/share/resources/icon/16x16/roll.png b/src/app/share/resources/icon/16x16/roll.png new file mode 100644 index 000000000..17057aef2 Binary files /dev/null and b/src/app/share/resources/icon/16x16/roll.png differ diff --git a/src/app/tablewindow.cpp b/src/app/tablewindow.cpp index fbe03c36e..460e40936 100644 --- a/src/app/tablewindow.cpp +++ b/src/app/tablewindow.cpp @@ -413,22 +413,15 @@ void TableWindow::PrintToPdf() //--------------------------------------------------------------------------------------------------------------------- void TableWindow::Layout() { - DialogLayoutSettings layout(this); + VLayoutGenerator lGenerator(this); + lGenerator.SetDetails(listDetails); + + DialogLayoutSettings layout(&lGenerator, this); if (layout.exec() == QDialog::Rejected) { return; } - VLayoutGenerator lGenerator(this); - lGenerator.SetDetails(listDetails); - lGenerator.SetLayoutWidth(layout.GetLayoutWidth()); - lGenerator.SetCaseType(layout.GetGroup()); - lGenerator.SetPaperHeight(layout.GetPaperHeight()); - lGenerator.SetPaperWidth(layout.GetPaperWidth()); - lGenerator.SetShift(layout.GetShift()); - lGenerator.SetRotate(layout.GetRotate()); - lGenerator.SetRotationIncrease(layout.GetIncrease()); - DialogLayoutProgress progress(listDetails.count(), this); connect(&lGenerator, &VLayoutGenerator::Start, &progress, &DialogLayoutProgress::Start); @@ -732,7 +725,7 @@ void TableWindow::PrepareSceneList() ui->listWidget->addItem(item); } - if (scenes.isEmpty() == false) + if (not scenes.isEmpty()) { ui->listWidget->setCurrentRow(0); EnableActions(true); @@ -757,7 +750,7 @@ QIcon TableWindow::ScenePreview(int i) const Qt::RoundJoin)); painter.setBrush ( QBrush ( Qt::NoBrush ) ); scenes.at(i)->render(&painter); - image.scaled(101, 146, Qt::KeepAspectRatio); + painter.end(); } else { diff --git a/src/app/tablewindow.ui b/src/app/tablewindow.ui index 456f224ab..569ff82e8 100644 --- a/src/app/tablewindow.ui +++ b/src/app/tablewindow.ui @@ -117,8 +117,8 @@ - 200 - 200 + 180 + 180 @@ -130,6 +130,12 @@ true + + QListView::Adjust + + + 3 + QListView::IconMode diff --git a/src/libs/vlayout/vlayoutgenerator.cpp b/src/libs/vlayout/vlayoutgenerator.cpp index af24b27c6..553c2a596 100644 --- a/src/libs/vlayout/vlayoutgenerator.cpp +++ b/src/libs/vlayout/vlayoutgenerator.cpp @@ -38,7 +38,8 @@ //--------------------------------------------------------------------------------------------------------------------- VLayoutGenerator::VLayoutGenerator(QObject *parent) :QObject(parent), papers(QVector()), bank(new VBank()), paperHeight(0), paperWidth(0), - stopGeneration(false), state(LayoutErrors::NoError), shift(0), rotate(true), rotationIncrease(180) + stopGeneration(false), state(LayoutErrors::NoError), shift(0), rotate(true), rotationIncrease(180), + autoCrop(false) {} //--------------------------------------------------------------------------------------------------------------------- @@ -161,7 +162,7 @@ QList VLayoutGenerator::GetPapersItems() const QList list; for (int i=0; i < papers.count(); ++i) { - list.append(papers.at(i).GetPaperItem()); + list.append(papers.at(i).GetPaperItem(autoCrop)); } return list; } @@ -184,6 +185,18 @@ void VLayoutGenerator::Abort() state = LayoutErrors::ProcessStoped; } +//--------------------------------------------------------------------------------------------------------------------- +bool VLayoutGenerator::GetAutoCrop() const +{ + return autoCrop; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VLayoutGenerator::SetAutoCrop(bool value) +{ + autoCrop = value; +} + //--------------------------------------------------------------------------------------------------------------------- // cppcheck-suppress unusedFunction int VLayoutGenerator::GetRotationIncrease() const diff --git a/src/libs/vlayout/vlayoutgenerator.h b/src/libs/vlayout/vlayoutgenerator.h index 7bc99c4ac..f1b7d6124 100644 --- a/src/libs/vlayout/vlayoutgenerator.h +++ b/src/libs/vlayout/vlayoutgenerator.h @@ -73,6 +73,9 @@ public: int GetRotationIncrease() const; void SetRotationIncrease(int value); + bool GetAutoCrop() const; + void SetAutoCrop(bool value); + signals: void Start(); void Arranged(int count); @@ -93,6 +96,7 @@ private: unsigned int shift; bool rotate; int rotationIncrease; + bool autoCrop; void CheckDetailsSize(); }; diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index 45a7f2f59..073ccb315 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -35,6 +35,7 @@ #include #include #include +#include //--------------------------------------------------------------------------------------------------------------------- VLayoutPaper::VLayoutPaper() @@ -259,10 +260,32 @@ bool VLayoutPaper::SaveResult(const VBestSquare &bestResult, const VLayoutDetail } //--------------------------------------------------------------------------------------------------------------------- -QGraphicsRectItem *VLayoutPaper::GetPaperItem() const +QGraphicsRectItem *VLayoutPaper::GetPaperItem(bool autoCrop) const { - QGraphicsRectItem *paper = new QGraphicsRectItem(QRectF(0, 0, d->globalContour.GetWidth(), - d->globalContour.GetHeight())); + QGraphicsRectItem *paper; + if (autoCrop) + { + QGraphicsScene *scene = new QGraphicsScene(); + QList list = GetDetails(); + for (int i=0; i < list.size(); ++i) + { + scene->addItem(list.at(i)); + } + const int height = scene->itemsBoundingRect().toRect().height() + static_cast(d->layoutWidth)*2; + delete scene; + if (d->globalContour.GetHeight() > height) + { + paper = new QGraphicsRectItem(QRectF(0, 0, d->globalContour.GetWidth(), height)); + } + else + { + paper = new QGraphicsRectItem(QRectF(0, 0, d->globalContour.GetWidth(), d->globalContour.GetHeight())); + } + } + else + { + paper = new QGraphicsRectItem(QRectF(0, 0, d->globalContour.GetWidth(), d->globalContour.GetHeight())); + } paper->setPen(QPen(Qt::black, 1)); paper->setBrush(QBrush(Qt::white)); return paper; diff --git a/src/libs/vlayout/vlayoutpaper.h b/src/libs/vlayout/vlayoutpaper.h index 8ff7d0698..763d15cc3 100644 --- a/src/libs/vlayout/vlayoutpaper.h +++ b/src/libs/vlayout/vlayoutpaper.h @@ -69,7 +69,7 @@ public: bool ArrangeDetail(const VLayoutDetail &detail, bool &stop); int Count() const; - QGraphicsRectItem *GetPaperItem() const; + QGraphicsRectItem *GetPaperItem(bool autoCrop) const; QList GetDetails() const; private: