puzzle command line initial options
This commit is contained in:
parent
186a855cbd
commit
b88e23697e
|
@ -7,7 +7,7 @@
|
||||||
# File with common stuff for whole project
|
# File with common stuff for whole project
|
||||||
include(../../../common.pri)
|
include(../../../common.pri)
|
||||||
|
|
||||||
QT += core gui widgets network xml xmlpatterns printsupport
|
QT += core gui widgets network xml xmlpatterns printsupport testlib
|
||||||
|
|
||||||
# Name of binary file
|
# Name of binary file
|
||||||
TARGET = puzzle
|
TARGET = puzzle
|
||||||
|
|
|
@ -1,13 +1,125 @@
|
||||||
#include "vpuzzlecommandline.h"
|
#include "vpuzzlecommandline.h"
|
||||||
|
#include "../vmisc/commandoptions.h"
|
||||||
|
#include "../vmisc/vsysexits.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QTest>
|
||||||
|
|
||||||
|
std::shared_ptr<VPuzzleCommandLine> VPuzzleCommandLine::instance = nullptr;
|
||||||
|
|
||||||
|
#define translate(context, source) QCoreApplication::translate((context), source)
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------------------------
|
||||||
|
bool VPuzzleCommandLine::IsExportEnabled() const
|
||||||
|
{
|
||||||
|
const bool result = IsOptionSet(QStringLiteral("destination"));
|
||||||
|
int argSize = parser.positionalArguments().size();
|
||||||
|
if (result && argSize != 1)
|
||||||
|
{
|
||||||
|
qCritical() << translate("Puzzle", "Export options can be used with single input file only.") << "/n";
|
||||||
|
const_cast<VPuzzleCommandLine*>(this)->parser.showHelp(V_EX_USAGE);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------
|
||||||
|
QString VPuzzleCommandLine::OptionBaseName() const
|
||||||
|
{
|
||||||
|
QString path;
|
||||||
|
if (IsExportEnabled())
|
||||||
|
{
|
||||||
|
path = OptionValue(QStringLiteral("destination"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------
|
||||||
|
bool VPuzzleCommandLine::IsTestModeEnabled() const
|
||||||
|
{
|
||||||
|
const bool r = IsOptionSet(QStringLiteral("test"));
|
||||||
|
if (r && parser.positionalArguments().size() != 1)
|
||||||
|
{
|
||||||
|
qCritical() << translate("VCommandLine", "Test option can be used with single input file only.") << "/n";
|
||||||
|
const_cast<VPuzzleCommandLine*>(this)->parser.showHelp(V_EX_USAGE);
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------
|
||||||
|
bool VPuzzleCommandLine::IsGuiEnabled() const
|
||||||
|
{
|
||||||
|
return isGuiEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------
|
||||||
|
QStringList VPuzzleCommandLine::OptionFileNames() const
|
||||||
|
{
|
||||||
|
return parser.positionalArguments();
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------------------
|
||||||
VPuzzleCommandLine::VPuzzleCommandLine():
|
VPuzzleCommandLine::VPuzzleCommandLine():
|
||||||
parser(),
|
parser(),
|
||||||
isGuiEnabled(false)
|
isGuiEnabled(false)
|
||||||
{
|
{
|
||||||
parser.setApplicationDescription(tr("Valentina's manual layout editor."));
|
parser.setApplicationDescription(translate("Puzzle", "Valentina's manual layout editor."));
|
||||||
parser.addHelpOption();
|
parser.addHelpOption();
|
||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
parser.addPositionalArgument("filename", tr("The raw layout file."));
|
|
||||||
|
InitCommandLineOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------
|
||||||
|
std::shared_ptr<VPuzzleCommandLine> VPuzzleCommandLine::Instance(const QCoreApplication &app)
|
||||||
|
{
|
||||||
|
if (instance == nullptr)
|
||||||
|
{
|
||||||
|
instance.reset(new VPuzzleCommandLine);
|
||||||
|
}
|
||||||
|
instance->parser.process(app);
|
||||||
|
|
||||||
|
instance->isGuiEnabled = not (instance->IsGuiEnabled() || instance->IsExportEnabled());
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------
|
||||||
|
void VPuzzleCommandLine::InitCommandLineOptions()
|
||||||
|
{
|
||||||
|
if (IsExportEnabled())
|
||||||
|
{
|
||||||
|
QStringList args = parser.positionalArguments();
|
||||||
|
parser.setSingleDashWordOptionMode(
|
||||||
|
QCommandLineParser::SingleDashWordOptionMode(args.takeFirst().toInt()));
|
||||||
|
QString source = args.isEmpty() ? QString() : args.at(0);
|
||||||
|
QString destination = args.isEmpty() ? QString() : args.at(1);
|
||||||
|
parser.clearPositionalArguments();
|
||||||
|
parser.addPositionalArgument(source,
|
||||||
|
translate("Puzzle", "The raw layout input file."));
|
||||||
|
parser.addPositionalArgument(destination,
|
||||||
|
translate("Puzzle", "The destination folder"));
|
||||||
|
}
|
||||||
|
|
||||||
|
QCommandLineOption forceOption(QStringList() << "f" << "force",
|
||||||
|
translate("Puzzle", "Overwrite existing files."));
|
||||||
|
parser.addOption(forceOption);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------
|
||||||
|
bool VPuzzleCommandLine::IsOptionSet(const QString &option) const
|
||||||
|
{
|
||||||
|
return parser.isSet(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------
|
||||||
|
QString VPuzzleCommandLine::OptionValue(const QString &option) const
|
||||||
|
{
|
||||||
|
return parser.value(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------
|
||||||
|
QStringList VPuzzleCommandLine::OptionValues(const QString &option) const
|
||||||
|
{
|
||||||
|
return parser.values(option);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
#define VPUZZLECOMMANDLINE_H
|
#define VPUZZLECOMMANDLINE_H
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
|
||||||
#include <QTextStream>
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QCommandLineParser>
|
#include <QCommandLineParser>
|
||||||
|
|
||||||
|
@ -32,7 +30,7 @@ public:
|
||||||
/**
|
/**
|
||||||
* @brief the file name which should be loaded
|
* @brief the file name which should be loaded
|
||||||
*/
|
*/
|
||||||
QString OptionFileName() const;
|
QStringList OptionFileNames() const;
|
||||||
protected:
|
protected:
|
||||||
VPuzzleCommandLine();
|
VPuzzleCommandLine();
|
||||||
/**
|
/**
|
||||||
|
@ -49,6 +47,7 @@ private:
|
||||||
* @brief add options to the QCommandLineParser that there are in the cmd can be
|
* @brief add options to the QCommandLineParser that there are in the cmd can be
|
||||||
*/
|
*/
|
||||||
void InitCommandLineOptions();
|
void InitCommandLineOptions();
|
||||||
|
|
||||||
bool IsOptionSet(const QString &option)const;
|
bool IsOptionSet(const QString &option)const;
|
||||||
QString OptionValue(const QString &option) const;
|
QString OptionValue(const QString &option) const;
|
||||||
QStringList OptionValues(const QString &option) const;
|
QStringList OptionValues(const QString &option) const;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user