From e04e4907b5b02aacee48ff276fd4607b33471a0c Mon Sep 17 00:00:00 2001
From: Roman Telezhynskyi <kroluku@gmail.com>
Date: Fri, 5 Apr 2019 17:20:22 +0300
Subject: [PATCH] Simplify calls to QCommandLineParser::addOption.

--HG--
branch : develop
---
 src/app/valentina/core/vcmdexport.cpp | 498 +++++++++-----------------
 src/app/valentina/core/vcmdexport.h   |  24 --
 2 files changed, 161 insertions(+), 361 deletions(-)

diff --git a/src/app/valentina/core/vcmdexport.cpp b/src/app/valentina/core/vcmdexport.cpp
index 3093d5fd0..02464e690 100644
--- a/src/app/valentina/core/vcmdexport.cpp
+++ b/src/app/valentina/core/vcmdexport.cpp
@@ -58,7 +58,7 @@ qreal Pg2Px(const QString& src, const DialogLayoutSettings& converter)
 } // anonymous namespace
 
 //---------------------------------------------------------------------------------------------------------------------
-VCommandLine::VCommandLine() : parser(), optionsUsed(), isGuiEnabled(false)
+VCommandLine::VCommandLine() : parser(), isGuiEnabled(false)
 {
     parser.setApplicationDescription(translate("VCommandLine", "Pattern making program."));
     parser.addHelpOption();
@@ -567,362 +567,186 @@ void VCommandLine::InitCommandLineOptions()
 {
     //keep in mind order here - that is how user will see it, so group-up for usability
     //=================================================================================================================
-    VCommandLineOption option =
-            VCommandLineOption(QStringList({SINGLE_OPTION_BASENAME, LONG_OPTION_BASENAME}),
-                               translate("VCommandLine", "The base filename of exported layout files. Use it to "
-                                                         "enable console export mode."),
-                               translate("VCommandLine", "The base filename of layout files"));
-    optionsUsed.insert(LONG_OPTION_BASENAME, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_DESTINATION, LONG_OPTION_DESTINATION}),
-                                translate("VCommandLine", "The path to output destination folder. By default the "
-                                                          "directory at which the application was started."),
-                                translate("VCommandLine", "The destination folder"));
-    optionsUsed.insert(LONG_OPTION_DESTINATION, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_MEASUREFILE, LONG_OPTION_MEASUREFILE}),
-                                translate("VCommandLine", "Path to custom measure file (export mode)."),
-                                translate("VCommandLine", "The measure file"));
-    optionsUsed.insert(LONG_OPTION_MEASUREFILE, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_NESTING_TIME, LONG_OPTION_NESTING_TIME}),
-                                translate("VCommandLine", "<Time> in minutes given for the algorithm to find best "
-                                                          "layout. Time must be in range from 1 minute to 60 "
-                                                          "minutes. Default value 1 minute."),
-                                translate("VCommandLine", "Time"));
-    optionsUsed.insert(LONG_OPTION_NESTING_TIME, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_EFFICIENCY_COEFFICIENT,
-                                translate("VCommandLine", "Set layout efficiency <coefficient>. Layout efficiency "
-                                                          "coefficient is the ratio of the area occupied by the pieces "
-                                                          "to the bounding rect of all pieces. If nesting reaches "
-                                                          "required level the process stops. If value is 0 no check "
-                                                          "will be made. Сoefficient must be in range from 0 to 100. "
-                                                          "Default value 0."),
-                                translate("VCommandLine", "Coefficient"));
-    optionsUsed.insert(LONG_OPTION_EFFICIENCY_COEFFICIENT, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_EXP2FORMAT, LONG_OPTION_EXP2FORMAT}),
-                                translate("VCommandLine", "Number corresponding to output format (default = 0, "
-                                                          "export mode):") +
-                                DialogSaveLayout::MakeHelpFormatList(),
-                                translate("VCommandLine", "Format number"), QChar('0'));
-    optionsUsed.insert(LONG_OPTION_EXP2FORMAT, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_BINARYDXF, translate("VCommandLine", "Export dxf in binary form."));
-    optionsUsed.insert(LONG_OPTION_BINARYDXF, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_TEXT2PATHS, translate("VCommandLine", "Export text as paths."));
-    optionsUsed.insert(LONG_OPTION_TEXT2PATHS, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_EXPORTONLYDETAILS,
-                                translate("VCommandLine", "Export only details. Export details as they positioned in "
-                                                          "the details mode. Any layout related options will be "
-                                                          "ignored."));
-    optionsUsed.insert(LONG_OPTION_EXPORTONLYDETAILS, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_EXPORTSUCHDETAILS,
-                                translate("VCommandLine", "Export only details that match a piece name regex."),
-                                translate("VCommandLine", "The name regex"));
-    optionsUsed.insert(LONG_OPTION_EXPORTSUCHDETAILS, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_GRADATIONSIZE, LONG_OPTION_GRADATIONSIZE}),
-                                translate("VCommandLine", "Set size value for pattern file, that was opened "
-                                                          "with multisize measurements (export mode). Valid "
-                                                          "values: %1cm.")
-                                                          .arg(VMeasurement::WholeListSizes(Unit::Cm)
-                                                               .join(QStringLiteral(", "))),
-                                translate("VCommandLine", "The size value"));
-    optionsUsed.insert(LONG_OPTION_GRADATIONSIZE, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_GRADATIONHEIGHT, LONG_OPTION_GRADATIONHEIGHT}),
-                                translate("VCommandLine", "Set height value for pattern file, that was opened"
-                                                          " with multisize measurements (export mode). Valid "
-                                                          "values: %1cm.")
-                                .arg(VMeasurement::WholeListHeights(Unit::Cm).join(QStringLiteral(", "))),
-                                translate("VCommandLine", "The height value"));
-    optionsUsed.insert(LONG_OPTION_GRADATIONHEIGHT, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_USER_MATERIAL,
-                                translate("VCommandLine", "Use this option to override user material defined in "
-                                                          "pattern. The value must be in form <number>@<user "
-                                                          "matrial name>. The number should be in range from 1 "
-                                                          "to %1. For example, 1@Fabric2. The key can be used "
-                                                          "multiple times. Has no effect in GUI mode.")
-                                .arg(userMaterialPlaceholdersQuantity),
-                                translate("VCommandLine", "User material"));
-    optionsUsed.insert(LONG_OPTION_USER_MATERIAL, option);
-    parser.addOption(option);
-
+    parser.addOptions({
+        {{SINGLE_OPTION_BASENAME, LONG_OPTION_BASENAME},
+         translate("VCommandLine", "The base filename of exported layout files. Use it to enable console export mode."),
+         translate("VCommandLine", "The base filename of layout files")},
+        {{SINGLE_OPTION_DESTINATION, LONG_OPTION_DESTINATION},
+         translate("VCommandLine", "The path to output destination folder. By default the directory at which the "
+         "application was started."),
+         translate("VCommandLine", "The destination folder")},
+        {{SINGLE_OPTION_MEASUREFILE, LONG_OPTION_MEASUREFILE},
+         translate("VCommandLine", "Path to custom measure file (export mode)."),
+         translate("VCommandLine", "The measure file")},
+        {{SINGLE_OPTION_NESTING_TIME, LONG_OPTION_NESTING_TIME},
+         translate("VCommandLine", "<Time> in minutes given for the algorithm to find best layout. Time must be in "
+         "range from 1 minute to 60 minutes. Default value 1 minute."),
+         translate("VCommandLine", "Time")},
+        {LONG_OPTION_EFFICIENCY_COEFFICIENT,
+         translate("VCommandLine", "Set layout efficiency <coefficient>. Layout efficiency coefficient is the ratio of "
+         "the area occupied by the pieces to the bounding rect of all pieces. If nesting reaches required level the "
+         "process stops. If value is 0 no check will be made. Сoefficient must be in range from 0 to 100. Default "
+         "value 0."),
+         translate("VCommandLine", "Coefficient")},
+        {{SINGLE_OPTION_EXP2FORMAT, LONG_OPTION_EXP2FORMAT},
+         translate("VCommandLine", "Number corresponding to output format (default = 0, export mode):") +
+         DialogSaveLayout::MakeHelpFormatList(),
+         translate("VCommandLine", "Format number"), QChar('0')},
+        {LONG_OPTION_BINARYDXF, translate("VCommandLine", "Export dxf in binary form.")},
+        {LONG_OPTION_TEXT2PATHS, translate("VCommandLine", "Export text as paths.")},
+        {LONG_OPTION_EXPORTONLYDETAILS,
+         translate("VCommandLine", "Export only details. Export details as they positioned in the details mode. Any "
+         "layout related options will be ignored.")},
+        {LONG_OPTION_EXPORTSUCHDETAILS,
+         translate("VCommandLine", "Export only details that match a piece name regex."),
+         translate("VCommandLine", "The name regex")},
+        {{SINGLE_OPTION_GRADATIONSIZE, LONG_OPTION_GRADATIONSIZE},
+         translate("VCommandLine", "Set size value for pattern file, that was opened with multisize measurements "
+         "(export mode). Valid values: %1cm.").arg(VMeasurement::WholeListSizes(Unit::Cm) .join(QStringLiteral(", "))),
+         translate("VCommandLine", "The size value")},
+        {{SINGLE_OPTION_GRADATIONHEIGHT, LONG_OPTION_GRADATIONHEIGHT},
+         translate("VCommandLine", "Set height value for pattern file, that was opened with multisize measurements "
+         "(export mode). Valid values: %1cm.").arg(VMeasurement::WholeListHeights(Unit::Cm).join(QStringLiteral(", "))),
+         translate("VCommandLine", "The height value")},
+        {LONG_OPTION_USER_MATERIAL,
+         translate("VCommandLine", "Use this option to override user material defined in pattern. The value must be in "
+         "form <number>@<user matrial name>. The number should be in range from 1 to %1. For example, 1@Fabric2. The "
+         "key can be used multiple times. Has no effect in GUI mode.").arg(userMaterialPlaceholdersQuantity),
+         translate("VCommandLine", "User material")},
     //=================================================================================================================
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_PAGETEMPLATE, LONG_OPTION_PAGETEMPLATE}),
-                                translate("VCommandLine", "Number corresponding to layout page template "
-                                                          "(default = 0, export mode):") +
-                                DialogLayoutSettings::MakeHelpTemplateList(),
-                                translate("VCommandLine", "Template number"), QChar('0'));
-    optionsUsed.insert(LONG_OPTION_PAGETEMPLATE, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_LANDSCAPE_ORIENTATION,
-                                translate("VCommandLine", "Switch page template orientation to landscape "
-                                                          "(export mode). This option has effect only for one of "
-                                                          "predefined page templates."));
-    optionsUsed.insert(LONG_OPTION_LANDSCAPE_ORIENTATION, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_PAGEW, LONG_OPTION_PAGEW}),
-                                translate("VCommandLine", "Page width in current units like 12.0 (cannot be used "
-                                                          "with \"%1\", export mode).")
-                                .arg(LONG_OPTION_PAGETEMPLATE),
-                                translate("VCommandLine", "The page width"));
-    optionsUsed.insert(LONG_OPTION_PAGEW, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_PAGEH, LONG_OPTION_PAGEH}),
-                                translate("VCommandLine", "Page height in current units like 12.0 (cannot be "
-                                                          "used with \"%1\", export mode).")
-                                .arg(LONG_OPTION_PAGETEMPLATE),
-                                translate("VCommandLine", "The page height"));
-    optionsUsed.insert(LONG_OPTION_PAGEH, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_PAGEUNITS, LONG_OPTION_PAGEUNITS}),
-                                translate("VCommandLine", "Page measure units (export mode). Valid values: %1.")
-                                .arg(VDomDocument::UnitsHelpString()),
-                                translate("VCommandLine", "The measure unit"));
-    optionsUsed.insert(LONG_OPTION_PAGEUNITS, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_IGNORE_MARGINS, LONG_OPTION_IGNORE_MARGINS}),
-                                translate("VCommandLine", "Ignore printer margins (export mode). Use if need "
-                                                          "full paper space. In case of later printing you must "
-                                                          "account for the margins himself."));
-    optionsUsed.insert(LONG_OPTION_IGNORE_MARGINS, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_LEFT_MARGIN, LONG_OPTION_LEFT_MARGIN}),
-                                translate("VCommandLine", "Page left margin in current units like 3.0 (export "
-                                                          "mode). If not set will be used value from default "
-                                                          "printer. Or 0 if none printers was found."),
-                                translate("VCommandLine", "The left margin"));
-    optionsUsed.insert(LONG_OPTION_LEFT_MARGIN, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_RIGHT_MARGIN, LONG_OPTION_RIGHT_MARGIN}),
-                                translate("VCommandLine", "Page right margin in current units like 3.0 (export "
-                                                          "mode). If not set will be used value from default "
-                                                          "printer. Or 0 if none printers was found."),
-                                translate("VCommandLine", "The right margin"));
-    optionsUsed.insert(LONG_OPTION_RIGHT_MARGIN, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_TOP_MARGIN, LONG_OPTION_TOP_MARGIN}),
-                                translate("VCommandLine", "Page top margin in current units like 3.0 (export "
-                                                          "mode). If not set will be used value from default "
-                                                          "printer. Or 0 if none printers was found."),
-                                translate("VCommandLine", "The top margin"));
-    optionsUsed.insert(LONG_OPTION_TOP_MARGIN, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_BOTTOM_MARGIN, LONG_OPTION_BOTTOM_MARGIN}),
-                                translate("VCommandLine", "Page bottom margin in current units like 3.0 (export "
-                                                          "mode). If not set will be used value from default "
-                                                          "printer. Or 0 if none printers was found."),
-                                translate("VCommandLine", "The bottom margin"));
-    optionsUsed.insert(LONG_OPTION_BOTTOM_MARGIN, option);
-    parser.addOption(option);
-
+        {{SINGLE_OPTION_PAGETEMPLATE, LONG_OPTION_PAGETEMPLATE},
+         translate("VCommandLine", "Number corresponding to layout page template (default = 0, export mode):") +
+         DialogLayoutSettings::MakeHelpTemplateList(),
+         translate("VCommandLine", "Template number"), QChar('0')},
+        {LONG_OPTION_LANDSCAPE_ORIENTATION,
+         translate("VCommandLine", "Switch page template orientation to landscape (export mode). This option has "
+         "effect only for one of predefined page templates.")},
+        {{SINGLE_OPTION_PAGEW, LONG_OPTION_PAGEW},
+         translate("VCommandLine", "Page width in current units like 12.0 (cannot be used with \"%1\", export mode).")
+         .arg(LONG_OPTION_PAGETEMPLATE),
+         translate("VCommandLine", "The page width")},
+        {{SINGLE_OPTION_PAGEH, LONG_OPTION_PAGEH},
+         translate("VCommandLine", "Page height in current units like 12.0 (cannot be used with \"%1\", export mode).")
+         .arg(LONG_OPTION_PAGETEMPLATE),
+         translate("VCommandLine", "The page height")},
+        {{SINGLE_OPTION_PAGEUNITS, LONG_OPTION_PAGEUNITS},
+         translate("VCommandLine", "Page measure units (export mode). Valid values: %1.")
+         .arg(VDomDocument::UnitsHelpString()),
+         translate("VCommandLine", "The measure unit")},
+        {{SINGLE_OPTION_IGNORE_MARGINS, LONG_OPTION_IGNORE_MARGINS},
+         translate("VCommandLine", "Ignore printer margins (export mode). Use if need full paper space. In case of "
+         "later printing you must account for the margins himself.")},
+        {{SINGLE_OPTION_LEFT_MARGIN, LONG_OPTION_LEFT_MARGIN},
+         translate("VCommandLine", "Page left margin in current units like 3.0 (export mode). If not set will be used "
+         "value from default printer. Or 0 if none printers was found."),
+         translate("VCommandLine", "The left margin")},
+        {{SINGLE_OPTION_RIGHT_MARGIN, LONG_OPTION_RIGHT_MARGIN},
+         translate("VCommandLine", "Page right margin in current units like 3.0 (export mode). If not set will be used "
+         "value from default printer. Or 0 if none printers was found."),
+         translate("VCommandLine", "The right margin")},
+        {{SINGLE_OPTION_TOP_MARGIN, LONG_OPTION_TOP_MARGIN},
+         translate("VCommandLine", "Page top margin in current units like 3.0 (export mode). If not set will be used "
+         "value from default printer. Or 0 if none printers was found."),
+         translate("VCommandLine", "The top margin")},
+        {{SINGLE_OPTION_BOTTOM_MARGIN, LONG_OPTION_BOTTOM_MARGIN},
+         translate("VCommandLine", "Page bottom margin in current units like 3.0 (export mode). If not set will be "
+         "used value from default printer. Or 0 if none printers was found."),
+         translate("VCommandLine", "The bottom margin")},
     //=================================================================================================================
-    option = VCommandLineOption(LONG_OPTION_FOLLOW_GRAINLINE,
-                                translate("VCommandLine", "Order detail to follow grainline direction (export mode)."));
-    optionsUsed.insert(LONG_OPTION_FOLLOW_GRAINLINE, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_CROP, LONG_OPTION_CROP}),
-                                translate("VCommandLine", "Auto crop unused length (export mode)."));
-    optionsUsed.insert(LONG_OPTION_CROP, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_UNITE, LONG_OPTION_UNITE}),
-                                translate("VCommandLine", "Unite pages if possible (export mode). Maximum value "
-                                                          "limited by QImage that supports only a maximum of "
-                                                          "32768x32768 px images."));
-    optionsUsed.insert(LONG_OPTION_UNITE, option);
-    parser.addOption(option);
-
+        {LONG_OPTION_FOLLOW_GRAINLINE,
+         translate("VCommandLine", "Order detail to follow grainline direction (export mode).")},
+        {{SINGLE_OPTION_CROP, LONG_OPTION_CROP},
+         translate("VCommandLine", "Auto crop unused length (export mode).")},
+        {{SINGLE_OPTION_UNITE, LONG_OPTION_UNITE},
+         translate("VCommandLine", "Unite pages if possible (export mode). Maximum value limited by QImage that "
+         "supports only a maximum of 32768x32768 px images.")},
     //=================================================================================================================
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_SAVELENGTH, LONG_OPTION_SAVELENGTH}),
-                                translate("VCommandLine", "Save length of the sheet if set (export mode). The "
-                                                          "option tells the program to use as much as possible "
-                                                          "width of sheet. Quality of a layout can be worse when "
-                                                          "this option was used."));
-    optionsUsed.insert(LONG_OPTION_SAVELENGTH, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_SHIFTUNITS, LONG_OPTION_SHIFTUNITS}),
-                                translate("VCommandLine", "Layout units (as paper's one except px, export mode)."),
-                                translate("VCommandLine", "The unit"));
-    optionsUsed.insert(LONG_OPTION_SHIFTUNITS, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_GAPWIDTH, LONG_OPTION_GAPWIDTH}),
-                                translate("VCommandLine", "The layout gap width x2, measured in layout units "
-                                                          "(export mode). Set distance between details and a "
-                                                          "detail and a sheet."),
-                                translate("VCommandLine", "The gap width"));
-    optionsUsed.insert(LONG_OPTION_GAPWIDTH, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_GROUPPING, LONG_OPTION_GROUPPING}),
-                                translate("VCommandLine", "Sets layout groupping cases (export mode): %1.")
-                                .arg(DialogLayoutSettings::MakeGroupsHelp()),
-                                translate("VCommandLine", "Grouping type"), QChar('2'));
-    optionsUsed.insert(LONG_OPTION_GROUPPING, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(QStringList({SINGLE_OPTION_TEST, LONG_OPTION_TEST}),
-                                translate("VCommandLine", "Run the program in a test mode. The program in this "
-                                                          "mode loads a single pattern file and silently quit "
-                                                          "without showing the main window. The key have "
-                                                          "priority before key '%1'.")
-                                .arg(LONG_OPTION_BASENAME));
-    optionsUsed.insert(LONG_OPTION_TEST, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_PENDANTIC,
-                                translate("VCommandLine", "Make all parsing warnings into errors. Have effect "
-                                                          "only in console mode. Use to force Valentina to "
-                                                          "immediately terminate if a pattern contains a parsing "
-                                                          "warning."));
-    optionsUsed.insert(LONG_OPTION_PENDANTIC, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_NO_HDPI_SCALING,
-                                translate("VCommandLine", "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(QStringLiteral("QT_AUTO_SCREEN_SCALE_FACTOR=0")));
-    optionsUsed.insert(LONG_OPTION_NO_HDPI_SCALING, option);
-    parser.addOption(option);
-
+        {{SINGLE_OPTION_SAVELENGTH, LONG_OPTION_SAVELENGTH},
+         translate("VCommandLine", "Save length of the sheet if set (export mode). The option tells the program to use "
+         "as much as possible width of sheet. Quality of a layout can be worse when this option was used.")},
+        {{SINGLE_OPTION_SHIFTUNITS, LONG_OPTION_SHIFTUNITS},
+         translate("VCommandLine", "Layout units (as paper's one except px, export mode)."),
+         translate("VCommandLine", "The unit")},
+        {{SINGLE_OPTION_GAPWIDTH, LONG_OPTION_GAPWIDTH},
+         translate("VCommandLine", "The layout gap width x2, measured in layout units (export mode). Set distance "
+         "between details and a detail and a sheet."),
+         translate("VCommandLine", "The gap width")},
+        {{SINGLE_OPTION_GROUPPING, LONG_OPTION_GROUPPING},
+         translate("VCommandLine", "Sets layout groupping cases (export mode): %1.")
+         .arg(DialogLayoutSettings::MakeGroupsHelp()),
+         translate("VCommandLine", "Grouping type"), QChar('2')},
+        {{SINGLE_OPTION_TEST, LONG_OPTION_TEST},
+         translate("VCommandLine", "Run the program in a test mode. The program in this mode loads a single pattern "
+         "file and silently quit without showing the main window. The key have priority before key '%1'.")
+         .arg(LONG_OPTION_BASENAME)},
+        {LONG_OPTION_PENDANTIC,
+         translate("VCommandLine", "Make all parsing warnings into errors. Have effect only in console mode. Use to "
+         "force Valentina to immediately terminate if a pattern contains a parsing warning.")},
+        {LONG_OPTION_NO_HDPI_SCALING,
+         translate("VCommandLine", "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(QStringLiteral("QT_AUTO_SCREEN_SCALE_FACTOR=0"))},
     //=================================================================================================================
-    option = VCommandLineOption(LONG_OPTION_CSVWITHHEADER,
-                                translate("VCommandLine", "Export to csv with header. By default disabled."));
-    optionsUsed.insert(LONG_OPTION_CSVWITHHEADER, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_CSVCODEC,
-                                translate("VCommandLine", "Specify codec that will be used to save data. List of "
-                                                          "supported codecs provided by Qt. Default value depend "
-                                                          "from system. On Windows, the codec will be based on a "
-                                                          "system locale. On Unix systems, the codec will might "
-                                                          "fall back to using the iconv library if no builtin "
-                                                          "codec for the locale can be found. Valid values for "
-                                                          "this installation:")
-                                + DialogExportToCSV::MakeHelpCodecsList(),
-                                translate("VCommandLine", "Codec name"),
-                                QString(QTextCodec::codecForLocale()->name()));
-    optionsUsed.insert(LONG_OPTION_CSVCODEC, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_CSVSEPARATOR,
-                                translate("VCommandLine", "Specify csv separator character. Default value is "
-                                                          "'%1'. Valid characters:")
-                                .arg(VCommonSettings::GetDefCSVSeparator()) +
-                                DialogExportToCSV::MakeHelpSeparatorList(),
-                                translate("VCommandLine", "Separator character"),
-                                QString(VCommonSettings::GetDefCSVSeparator()));
-    optionsUsed.insert(LONG_OPTION_CSVSEPARATOR, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_CSVEXPORTFM,
-                                translate("VCommandLine", "Calling this command enable exporting final "
-                                                          "measurements. Specify path to csv file with final "
-                                                          "measurements. The path must contain path to directory "
-                                                          "and name of file. It can be absolute or relatetive. "
-                                                          "In case of relative path will be used current working "
-                                                          "directory to calc a destination path."),
-                                translate("VCommandLine", "Path to csv file"));
-    optionsUsed.insert(LONG_OPTION_CSVEXPORTFM, option);
-    parser.addOption(option);
-
+        {LONG_OPTION_CSVWITHHEADER,
+         translate("VCommandLine", "Export to csv with header. By default disabled.")},
+        {LONG_OPTION_CSVCODEC,
+         translate("VCommandLine", "Specify codec that will be used to save data. List of supported codecs provided by "
+         "Qt. Default value depend from system. On Windows, the codec will be based on a system locale. On Unix "
+         "systems, the codec will might fall back to using the iconv library if no builtin codec for the locale can be "
+         "found. Valid values for this installation:") + DialogExportToCSV::MakeHelpCodecsList(),
+         translate("VCommandLine", "Codec name"), QString(QTextCodec::codecForLocale()->name())},
+        {LONG_OPTION_CSVSEPARATOR,
+         translate("VCommandLine", "Specify csv separator character. Default value is '%1'. Valid characters:")
+         .arg(VCommonSettings::GetDefCSVSeparator()) + DialogExportToCSV::MakeHelpSeparatorList(),
+         translate("VCommandLine", "Separator character"), QString(VCommonSettings::GetDefCSVSeparator())},
+        {LONG_OPTION_CSVEXPORTFM,
+         translate("VCommandLine", "Calling this command enable exporting final measurements. Specify path to csv file "
+         "with final measurements. The path must contain path to directory and name of file. It can be absolute or "
+         "relatetive. In case of relative path will be used current working directory to calc a destination path."),
+         translate("VCommandLine", "Path to csv file")},
     //=================================================================================================================
-    option = VCommandLineOption(LONG_OPTION_TILED_PDF_PAGE_TEMPLATE,
-                                translate("VCommandLine", "Number corresponding to tiled pdf page template "
-                                                          "(default = 0, export mode with tiled pdf format):") +
-                                DialogLayoutSettings::MakeHelpTiledPdfTemplateList(),
-                                translate("VCommandLine", "Template number"), QChar('0'));
-    optionsUsed.insert(LONG_OPTION_TILED_PDF_PAGE_TEMPLATE, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_TILED_PDF_LEFT_MARGIN,
-                                translate("VCommandLine","Tiled page left margin in current units like 3.0 "
-                                                         "(export mode). If not set will be used default value 1 "
-                                                         "cm."),
-                                translate("VCommandLine", "The left margin"));
-    optionsUsed.insert(LONG_OPTION_TILED_PDF_LEFT_MARGIN, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_TILED_PDF_RIGHT_MARGIN,
-                                translate("VCommandLine", "Tiled page right margin in current units like 3.0 "
-                                                          "(export mode). If not set will be used default value "
-                                                          "1 cm."),
-                                translate("VCommandLine", "The right margin"));
-    optionsUsed.insert(LONG_OPTION_TILED_PDF_RIGHT_MARGIN, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_TILED_PDF_TOP_MARGIN,
-                                translate("VCommandLine", "Tiled page top margin in current units like 3.0 "
-                                                          "(export mode). If not set will be used value default "
-                                                          "value 1 cm."),
-                                translate("VCommandLine", "The top margin"));
-    optionsUsed.insert(LONG_OPTION_TILED_PDF_TOP_MARGIN, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_TILED_PDF_BOTTOM_MARGIN,
-                                translate("VCommandLine", "Tiled page bottom margin in current units like 3.0 "
-                                                          "(export mode). If not set will be used value default "
-                                                          "value 1 cm."),
-                                translate("VCommandLine", "The bottom margin"));
-    optionsUsed.insert(LONG_OPTION_TILED_PDF_BOTTOM_MARGIN, option);
-    parser.addOption(option);
-
-    option = VCommandLineOption(LONG_OPTION_TILED_PDF_LANDSCAPE,
-                                translate("VCommandLine", "Set tiled page orienatation to landscape (export "
-                                                          "mode). Default value if not set portrait."));
-    optionsUsed.insert(LONG_OPTION_TILED_PDF_LANDSCAPE, option);
-    parser.addOption(option);
+        {LONG_OPTION_TILED_PDF_PAGE_TEMPLATE,
+         translate("VCommandLine", "Number corresponding to tiled pdf page template (default = 0, export mode with "
+         "tiled pdf format):") + DialogLayoutSettings::MakeHelpTiledPdfTemplateList(),
+         translate("VCommandLine", "Template number"), QChar('0')},
+        {LONG_OPTION_TILED_PDF_LEFT_MARGIN,
+         translate("VCommandLine","Tiled page left margin in current units like 3.0 (export mode). If not set will be "
+         "used default value 1 cm."),
+         translate("VCommandLine", "The left margin")},
+        {LONG_OPTION_TILED_PDF_RIGHT_MARGIN,
+         translate("VCommandLine", "Tiled page right margin in current units like 3.0 (export mode). If not set will "
+         "be used default value 1 cm."),
+         translate("VCommandLine", "The right margin")},
+        {LONG_OPTION_TILED_PDF_TOP_MARGIN,
+         translate("VCommandLine", "Tiled page top margin in current units like 3.0 (export mode). If not set will be "
+         "used value default value 1 cm."),
+         translate("VCommandLine", "The top margin")},
+        {LONG_OPTION_TILED_PDF_BOTTOM_MARGIN,
+         translate("VCommandLine", "Tiled page bottom margin in current units like 3.0 (export mode). If not set will "
+         "be used value default value 1 cm."),
+         translate("VCommandLine", "The bottom margin")},
+        {LONG_OPTION_TILED_PDF_LANDSCAPE,
+         translate("VCommandLine", "Set tiled page orienatation to landscape (export mode). Default value if not set "
+         "portrait.")}
+    });
 }
 
 //---------------------------------------------------------------------------------------------------------------------
 bool VCommandLine::IsOptionSet(const QString &option) const
 {
-    return parser.isSet(optionsUsed.value(option));
+    return parser.isSet(option);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
 QString VCommandLine::OptionValue(const QString &option) const
 {
-    return parser.value(optionsUsed.value(option));
+    return parser.value(option);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
 QStringList VCommandLine::OptionValues(const QString &option) const
 {
-    return parser.values(optionsUsed.value(option));
+    return parser.values(option);
 }
 
 //---------------------------------------------------------------------------------------------------------------------
diff --git a/src/app/valentina/core/vcmdexport.h b/src/app/valentina/core/vcmdexport.h
index 23a4b74f0..fb8ccae89 100644
--- a/src/app/valentina/core/vcmdexport.h
+++ b/src/app/valentina/core/vcmdexport.h
@@ -42,29 +42,6 @@ class VCommandLine;
 using VCommandLinePtr = std::shared_ptr<VCommandLine>;
 using VLayoutGeneratorPtr = std::shared_ptr<VLayoutGenerator>;
 
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_GCC("-Weffc++")
-
-/**
- * @brief The VCommandLineOption class wrapper for class QCommandLineOption. Add support for containers.
- */
-class VCommandLineOption : public QCommandLineOption
-{
-public:
-    VCommandLineOption()
-        : QCommandLineOption(QStringLiteral("fakeOption")) {}
-
-    VCommandLineOption(const QString &name, const QString &description, const QString &valueName = QString(),
-                       const QString &defaultValue = QString())
-        : QCommandLineOption(name, description, valueName, defaultValue) {}
-
-    VCommandLineOption(const QStringList &names, const QString &description, const QString &valueName = QString(),
-                       const QString &defaultValue = QString())
-        : QCommandLineOption(names, description, valueName, defaultValue) {}
-};
-
-QT_WARNING_POP
-
 //@brief: class used to install export command line options and parse their values
 //QCommandLineParser* object must exists until this object alive
 class VCommandLine
@@ -163,7 +140,6 @@ private:
     Q_DISABLE_COPY(VCommandLine)
     static VCommandLinePtr instance;
     QCommandLineParser parser;
-    QMap<QString, VCommandLineOption> optionsUsed;
     bool isGuiEnabled;
     friend class VApplication;