From 20675a081a46a954d7b6368b69ce1ada747fc4af Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Sat, 3 Oct 2020 07:33:56 +0300 Subject: [PATCH] Changes to CLI. --- dist/debian/tape.1 | 20 ++- src/app/tape/mapplication.cpp | 228 ++++++++++++++++++++-------------- src/app/tape/tmainwindow.cpp | 113 ++++++++++------- src/app/tape/tmainwindow.h | 41 +++--- 4 files changed, 231 insertions(+), 171 deletions(-) diff --git a/dist/debian/tape.1 b/dist/debian/tape.1 index 83d3dfc27..97e240551 100644 --- a/dist/debian/tape.1 +++ b/dist/debian/tape.1 @@ -1,6 +1,6 @@ .\" Manpage for tape. .\" Contact dismine@gmail.com to correct errors. -.TH tape 1 "10 March, 2017" "tape man page" +.TH tape 1 "3 October, 2020" "tape man page" .SH NAME Tape \- Valentina's measurements editor. .SH SYNOPSIS @@ -20,12 +20,14 @@ is a part of Valentina. And used for creating and editing measurement files. Displays this help. .IP "-v, --version" Displays version information. -.IP "-e, --height " -Open with the base height. Valid values: 92, 98, 104, 110, 116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200cm. -.IP "-s, --size " -Open with the base size. Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56cm. -.IP "-u, --unit " -Set pattern file unit: cm, mm, inch. +.IP "-a, --dimensionA " +Set base for dimension A in the table units. +.IP "-b, --dimensionB " +Set base for dimension B in the table units. +.IP "-c, --dimensionA " +Set base for dimension C in the table units. +.IP "-u, --units " +Set pattern file units: cm, mm, inch. .IP "--test" Use for unit testing. Run the program and open a file without showing the main window. .IP "--no-scaling" @@ -35,9 +37,5 @@ Disable high dpi scaling. Call this option if has problem with scaling (by defau \- the measurement file. .SH AUTHOR .RI "This manual page was written by Roman Telezhynskyi <" dismine@gmail.com ">" -.SH "SEE ALSO" -.RB "Full " "User Manual" " is availiable in" -.UR https://bitbucket.org/dismine/valentina/wiki/manual/Content -.UE .BR valentina (1) diff --git a/src/app/tape/mapplication.cpp b/src/app/tape/mapplication.cpp index f69427993..2773da8ce 100644 --- a/src/app/tape/mapplication.cpp +++ b/src/app/tape/mapplication.cpp @@ -599,96 +599,46 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument("filename", tr("The measurement file.")); - //----- - QCommandLineOption heightOption(QStringList() << "e" << "height", - tr("Open with the base height. Valid values: %1cm.") - .arg(VMeasurement::WholeListHeights(Unit::Cm).join(", ")), - tr("The base height")); - parser.addOption(heightOption); - //----- - QCommandLineOption sizeOption(QStringList() << "s" << "size", - tr("Open with the base size. Valid values: %1cm.").arg(VMeasurement::WholeListSizes(Unit::Cm).join(", ")), - tr("The base size")); - parser.addOption(sizeOption); - //----- - QCommandLineOption unitOption(QStringList() << "u" << "unit", - tr("Set pattern file unit: cm, mm, inch."), - tr("The pattern unit")); - parser.addOption(unitOption); - //----- - QCommandLineOption testOption(QStringList() << "test", - tr("Use for unit testing. Run the program and open a file without showing the main window.")); - parser.addOption(testOption); - //----- - QCommandLineOption scalingOption(QStringList() << LONG_OPTION_NO_HDPI_SCALING, - tr("Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). " - "Alternatively you can use the %1 environment variable.").arg("QT_AUTO_SCREEN_SCALE_FACTOR=0")); - parser.addOption(scalingOption); - //----- + + const QString LONG_OPTION_DIMENSION_A = QStringLiteral("dimensionA"); + const QString SINGLE_OPTION_DIMENSION_A = QChar('a'); + + const QString LONG_OPTION_DIMENSION_B = QStringLiteral("dimensionB"); + const QString SINGLE_OPTION_DIMENSION_B = QChar('b'); + + const QString LONG_OPTION_DIMENSION_C = QStringLiteral("dimensionC"); + const QString SINGLE_OPTION_DIMENSION_C = QChar('c'); + + const QString LONG_OPTION_UNITS = QStringLiteral("units"); + const QString SINGLE_OPTION_UNITS = QChar('u'); + + const QString LONG_OPTION_TEST = QStringLiteral("test"); + + parser.addOptions( + { + {{SINGLE_OPTION_DIMENSION_A, LONG_OPTION_DIMENSION_A}, tr("Set base for dimension A in the table units."), + tr("The dimension A base")}, + + {{SINGLE_OPTION_DIMENSION_B, LONG_OPTION_DIMENSION_B}, tr("Set base for dimension B in the table units."), + tr("The dimension B base")}, + + {{SINGLE_OPTION_DIMENSION_C, LONG_OPTION_DIMENSION_C}, tr("Set base for dimension C in the table units."), + tr("The dimension C base")}, + + {{SINGLE_OPTION_UNITS, LONG_OPTION_UNITS}, tr("Set pattern file units: cm, mm, inch."), + tr("The pattern units")}, + + {LONG_OPTION_TEST, + tr("Use for unit testing. Run the program and open a file without showing the main window.")}, + + {LONG_OPTION_NO_HDPI_SCALING, + tr("Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). " + "Alternatively you can use the %1 environment variable.").arg("QT_AUTO_SCREEN_SCALE_FACTOR=0")}, + }); + parser.process(arguments); - bool flagHeight = false; - bool flagSize = false; - bool flagUnit = false; - - int size = 0; - int height = 0; - Unit unit = Unit::Cm; - - if (parser.isSet(heightOption)) - { - const QString heightValue = parser.value(heightOption); - if (VMeasurement::IsGradationHeightValid(heightValue)) - { - flagHeight = true; - height = heightValue.toInt(); - } - else - { - qCCritical(mApp, "%s\n", - qPrintable(tr("Invalid base height argument. Must be %1cm.") - .arg(VMeasurement::WholeListHeights(Unit::Cm).join(", ")))); - parser.showHelp(V_EX_USAGE); - } - } - - if (parser.isSet(sizeOption)) - { - const QString sizeValue = parser.value(sizeOption); - if (VMeasurement::IsGradationSizeValid(sizeValue)) - { - flagSize = true; - size = sizeValue.toInt(); - } - else - { - qCCritical(mApp, "%s\n", - qPrintable(tr("Invalid base size argument. Must be %1cm.") - .arg(VMeasurement::WholeListSizes(Unit::Cm).join(", ")))); - parser.showHelp(V_EX_USAGE); - } - } - - { - const QString unitValue = parser.value(unitOption); - if (not unitValue.isEmpty()) - { - - const QStringList units = QStringList() << unitMM << unitCM << unitINCH; - if (units.contains(unitValue)) - { - flagUnit = true; - unit = StrToUnits(unitValue); - } - else - { - qCCritical(mApp, "%s\n", qPrintable(tr("Invalid base size argument. Must be cm, mm or inch."))); - parser.showHelp(V_EX_USAGE); - } - } - } - - testMode = parser.isSet(testOption); + testMode = parser.isSet(LONG_OPTION_TEST); if (not testMode && connection == SocketConnection::Client) { @@ -737,6 +687,84 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS parser.showHelp(V_EX_USAGE); } + bool flagDimensionA = false; + bool flagDimensionB = false; + bool flagDimensionC = false; + bool flagUnits = false; + + int dimensionAValue = 0; + int dimensionBValue = 0; + int dimensionCValue = 0; + Unit unit = Unit::Cm; + + if (parser.isSet(LONG_OPTION_DIMENSION_A)) + { + const QString value = parser.value(LONG_OPTION_DIMENSION_A); + + bool ok = false; + dimensionAValue = value.toInt(&ok); + if(ok && dimensionAValue > 0) + { + flagDimensionA = true; + } + else + { + qCCritical(mApp, "%s\n", qPrintable(tr("Invalid dimension A base value."))); + parser.showHelp(V_EX_USAGE); + } + } + + if (parser.isSet(LONG_OPTION_DIMENSION_B)) + { + const QString value = parser.value(LONG_OPTION_DIMENSION_B); + + bool ok = false; + dimensionBValue = value.toInt(&ok); + if(ok && dimensionBValue > 0) + { + flagDimensionB = true; + } + else + { + qCCritical(mApp, "%s\n", qPrintable(tr("Invalid dimension B base value."))); + parser.showHelp(V_EX_USAGE); + } + } + + if (parser.isSet(LONG_OPTION_DIMENSION_C)) + { + const QString value = parser.value(LONG_OPTION_DIMENSION_C); + + bool ok = false; + dimensionCValue = value.toInt(&ok); + if(ok && dimensionCValue > 0) + { + flagDimensionC = true; + } + else + { + qCCritical(mApp, "%s\n", qPrintable(tr("Invalid dimension C base value."))); + parser.showHelp(V_EX_USAGE); + } + } + + { + const QString unitValue = parser.value(LONG_OPTION_UNITS); + if (not unitValue.isEmpty()) + { + if (QStringList{unitMM, unitCM, unitINCH}.contains(unitValue)) + { + flagUnits = true; + unit = StrToUnits(unitValue); + } + else + { + qCCritical(mApp, "%s\n", qPrintable(tr("Invalid base size argument. Must be cm, mm or inch."))); + parser.showHelp(V_EX_USAGE); + } + } + } + for (auto &arg : args) { NewMainWindow(); @@ -750,17 +778,31 @@ void MApplication::ParseCommandLine(const SocketConnection &connection, const QS continue; } - if (flagSize) + if (flagDimensionA) { - MainWindow()->SetBaseMSize(size); + if (not MainWindow()->SetDimensionABase(dimensionAValue)) + { + parser.showHelp(V_EX_USAGE); + } } - if (flagHeight) + if (flagDimensionB) { - MainWindow()->SetBaseMHeight(height); + if (MainWindow()->SetDimensionBBase(dimensionBValue)) + { + parser.showHelp(V_EX_USAGE); + } } - if (flagUnit) + if (flagDimensionC) + { + if (MainWindow()->SetDimensionCBase(dimensionCValue)) + { + parser.showHelp(V_EX_USAGE); + } + } + + if (flagUnits) { MainWindow()->SetPUnit(unit); } diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index 342cafa84..115ced42a 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -87,24 +87,7 @@ enum {ColumnName = 0, ColumnFullName, ColumnCalcValue, ColumnFormula, ColumnBase TMainWindow::TMainWindow(QWidget *parent) : VAbstractMainWindow(parent), ui(new Ui::TMainWindow), - m(nullptr), - data(nullptr), - mUnit(Unit::Cm), - pUnit(Unit::Cm), - mType(MeasurementsType::Individual), - curFile(), - gradationHeights(nullptr), - gradationSizes(nullptr), - comboBoxUnits(nullptr), - formulaBaseHeight(0), - lock(nullptr), - search(), - labelGradationHeights(nullptr), - labelGradationSizes(nullptr), - labelPatternUnit(nullptr), - isInitialized(false), - mIsReadOnly(false), - hackedWidgets() + formulaBaseHeight(0) { ui->setupUi(this); @@ -173,45 +156,79 @@ void TMainWindow::RetranslateTable() } //--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::SetBaseMHeight(int height) +bool TMainWindow::SetDimensionABase(int base) { - if (m != nullptr) + const QList dimensions = m->Dimensions().values(); + + if (dimensions.isEmpty()) { - if (mType == MeasurementsType::Multisize) - { - const int row = ui->tableWidget->currentRow(); - currentDimensionA = UnitConvertor(height, Unit::Cm, mUnit); - - gradationHeights->blockSignals(true); - SetDefaultHeight(static_cast(currentDimensionA)); - gradationHeights->blockSignals(false); - - RefreshData(); - search->RefreshList(ui->lineEditFind->text()); - ui->tableWidget->selectRow(row); - } + qCCritical(tMainWindow, "%s\n", qPrintable(tr("The table doesn't provide dimensions"))); + return false; } + + const qint32 i = gradationDimensionA->findData(base); + if (i != -1) + { + gradationDimensionA->setCurrentIndex(i); + } + + if (base != currentDimensionA) + { + qCCritical(tMainWindow, "%s\n", qPrintable(tr("Invalid base value for dimension A"))); + return false; + } + return true; } //--------------------------------------------------------------------------------------------------------------------- -void TMainWindow::SetBaseMSize(int size) +bool TMainWindow::SetDimensionBBase(int base) { - if (m != nullptr) + const QList dimensions = m->Dimensions().values(); + + if (dimensions.size() <= 1) { - if (mType == MeasurementsType::Multisize) - { - const int row = ui->tableWidget->currentRow(); - currentDimensionB = UnitConvertor(size, Unit::Cm, mUnit); - - gradationSizes->blockSignals(true); - SetDefaultSize(static_cast(currentDimensionB)); - gradationSizes->blockSignals(false); - - RefreshData(); - search->RefreshList(ui->lineEditFind->text()); - ui->tableWidget->selectRow(row); - } + qCCritical(tMainWindow, "%s\n", qPrintable(tr("The table doesn't support dimension B"))); + return false; } + + const qint32 i = gradationDimensionB->findData(base); + if (i != -1) + { + gradationDimensionB->setCurrentIndex(i); + } + + if (base != currentDimensionB) + { + qCCritical(tMainWindow, "%s\n", qPrintable(tr("Invalid base value for dimension B"))); + return false; + } + + return true; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool TMainWindow::SetDimensionCBase(int base) +{ + const QList dimensions = m->Dimensions().values(); + + if (dimensions.size() <= 2) + { + qCCritical(tMainWindow, "%s\n", qPrintable(tr("The table doesn't support dimension C"))); + return false; + } + + const qint32 i = gradationDimensionC->findData(base); + if (i != -1) + { + gradationDimensionC->setCurrentIndex(i); + } + + if (base != currentDimensionC) + { + qCCritical(tMainWindow, "%s\n", qPrintable(tr("Invalid base value for dimension C"))); + return false; + } + return true; } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/tape/tmainwindow.h b/src/app/tape/tmainwindow.h index f96367ea4..e115f7a75 100644 --- a/src/app/tape/tmainwindow.h +++ b/src/app/tape/tmainwindow.h @@ -57,8 +57,9 @@ public: void RetranslateTable(); - void SetBaseMHeight(int height); - void SetBaseMSize(int size); + bool SetDimensionABase(int base); + bool SetDimensionBBase(int base); + bool SetDimensionCBase(int base); void SetPUnit(Unit unit); bool LoadFile(const QString &path); @@ -132,29 +133,31 @@ private slots: private: Q_DISABLE_COPY(TMainWindow) Ui::TMainWindow *ui; - VMeasurements *m; - VContainer *data; - Unit mUnit; - Unit pUnit; - MeasurementsType mType; + VMeasurements *m{nullptr}; + VContainer *data{nullptr}; + Unit mUnit{Unit::Cm}; + Unit pUnit{Unit::Cm}; + MeasurementsType mType{MeasurementsType::Individual}; int currentDimensionA{0}; int currentDimensionB{0}; int currentDimensionC{0}; - QString curFile; - QComboBox *gradationHeights; - QComboBox *gradationSizes; - QComboBox *comboBoxUnits; + QString curFile{}; + QComboBox *gradationDimensionA{nullptr}; + QComboBox *gradationDimensionB{nullptr}; + QComboBox *gradationDimensionC{nullptr}; + QComboBox *comboBoxUnits{nullptr}; int formulaBaseHeight; - QSharedPointer> lock; - QSharedPointer search; - QLabel *labelGradationHeights; - QLabel *labelGradationSizes; - QLabel *labelPatternUnit; - bool isInitialized; - bool mIsReadOnly; + QSharedPointer> lock{nullptr}; + QSharedPointer search{}; + QLabel *labelGradationDimensionA{nullptr}; + QLabel *labelGradationDimensionB{nullptr}; + QLabel *labelGradationDimensionC{nullptr}; + QLabel *labelPatternUnit{nullptr}; + bool isInitialized{false}; + bool mIsReadOnly{false}; QAction *actionFullCircumference{nullptr}; - QVector hackedWidgets; + QVector hackedWidgets{}; void SetupMenu(); void InitWindow();