|
@@ -20,9 +20,10 @@
|
|
|
=============================================================================*/
|
|
=============================================================================*/
|
|
|
|
|
|
|
|
#include "ctkCmdLineModuleInstance.h"
|
|
#include "ctkCmdLineModuleInstance.h"
|
|
|
|
|
+#include "ctkCmdLineModuleDescription.h"
|
|
|
|
|
+#include "ctkCmdLineModuleParameter.h"
|
|
|
|
|
+#include "ctkCmdLineModuleParameterGroup.h"
|
|
|
#include "ctkCmdLineModuleReference.h"
|
|
#include "ctkCmdLineModuleReference.h"
|
|
|
-#include "ctkCmdLineModuleObjectHierarchyReader.h"
|
|
|
|
|
-#include "ctkCmdLineModuleObjectHierarchyReader.h"
|
|
|
|
|
#include "ctkCmdLineModuleProcess_p.h"
|
|
#include "ctkCmdLineModuleProcess_p.h"
|
|
|
|
|
|
|
|
#include "ctkException.h"
|
|
#include "ctkException.h"
|
|
@@ -30,14 +31,6 @@
|
|
|
#include <QStringList>
|
|
#include <QStringList>
|
|
|
#include <QDebug>
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
-namespace {
|
|
|
|
|
-
|
|
|
|
|
-QString normalizeFlag(const QString& flag)
|
|
|
|
|
-{
|
|
|
|
|
- return flag.trimmed().remove(QRegExp("^-*"));
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
struct ctkCmdLineModuleInstancePrivate
|
|
struct ctkCmdLineModuleInstancePrivate
|
|
|
{
|
|
{
|
|
@@ -48,59 +41,15 @@ struct ctkCmdLineModuleInstancePrivate
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- QStringList createCommandLineArgs()
|
|
|
|
|
|
|
+ QString normalizeFlag(const QString& flag)
|
|
|
{
|
|
{
|
|
|
- ctkCmdLineModuleObjectHierarchyReader reader(q->parameterValueModel());
|
|
|
|
|
-
|
|
|
|
|
- QStringList cmdLineArgs;
|
|
|
|
|
- QHash<int, QString> indexedArgs;
|
|
|
|
|
- while(reader.readNextParameter())
|
|
|
|
|
- {
|
|
|
|
|
- if (reader.index() > -1)
|
|
|
|
|
- {
|
|
|
|
|
- indexedArgs.insert(reader.index(), reader.value().toString());
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- QString argFlag;
|
|
|
|
|
- if (reader.longFlag().isEmpty())
|
|
|
|
|
- {
|
|
|
|
|
- argFlag = QString("-") + normalizeFlag(reader.flag());
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- argFlag = QString("--") + normalizeFlag(reader.longFlag());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- QStringList args;
|
|
|
|
|
- if (reader.isMultiple())
|
|
|
|
|
- {
|
|
|
|
|
- args = reader.value().toString().split(',', QString::SkipEmptyParts);
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- args.push_back(reader.value().toString());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- foreach(QString arg, args)
|
|
|
|
|
- {
|
|
|
|
|
- cmdLineArgs << argFlag << arg;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- QList<int> indexes = indexedArgs.keys();
|
|
|
|
|
- qSort(indexes.begin(), indexes.end());
|
|
|
|
|
- foreach(int index, indexes)
|
|
|
|
|
- {
|
|
|
|
|
- cmdLineArgs << indexedArgs[index];
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return cmdLineArgs;
|
|
|
|
|
|
|
+ return flag.trimmed().remove(QRegExp("^-*"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
ctkCmdLineModuleReference ModuleReference;
|
|
ctkCmdLineModuleReference ModuleReference;
|
|
|
|
|
|
|
|
|
|
+ QList<QString> ParameterNames;
|
|
|
|
|
+
|
|
|
private:
|
|
private:
|
|
|
|
|
|
|
|
ctkCmdLineModuleInstance* q;
|
|
ctkCmdLineModuleInstance* q;
|
|
@@ -117,32 +66,84 @@ ctkCmdLineModuleInstance::~ctkCmdLineModuleInstance()
|
|
|
{
|
|
{
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-QObject *ctkCmdLineModuleInstance::parameterValueModel() const
|
|
|
|
|
|
|
+QList<QString> ctkCmdLineModuleInstance::parameterNames() const
|
|
|
|
|
+{
|
|
|
|
|
+ if (!d->ParameterNames.isEmpty()) return d->ParameterNames;
|
|
|
|
|
+
|
|
|
|
|
+ foreach (ctkCmdLineModuleParameterGroup paramGroup,
|
|
|
|
|
+ moduleReference().description().parameterGroups())
|
|
|
|
|
+ {
|
|
|
|
|
+ foreach (ctkCmdLineModuleParameter param, paramGroup.parameters())
|
|
|
|
|
+ {
|
|
|
|
|
+ d->ParameterNames.push_back(param.name());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return d->ParameterNames;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+ctkCmdLineModuleReference ctkCmdLineModuleInstance::moduleReference() const
|
|
|
{
|
|
{
|
|
|
- return guiHandle();
|
|
|
|
|
|
|
+ return d->ModuleReference;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-QVariant ctkCmdLineModuleInstance::value(const QString ¶meter) const
|
|
|
|
|
|
|
+QString ctkCmdLineModuleInstance::location() const
|
|
|
{
|
|
{
|
|
|
- throw ctkException("not implemented yet");
|
|
|
|
|
|
|
+ return d->ModuleReference.location();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void ctkCmdLineModuleInstance::setValue(const QString ¶meter, const QVariant &value)
|
|
|
|
|
|
|
+QStringList ctkCmdLineModuleInstance::commandLineArguments() const
|
|
|
{
|
|
{
|
|
|
- ctkCmdLineModuleObjectHierarchyReader reader(parameterValueModel());
|
|
|
|
|
- while(reader.readNextParameter())
|
|
|
|
|
|
|
+ QStringList cmdLineArgs;
|
|
|
|
|
+ QHash<int, QString> indexedArgs;
|
|
|
|
|
+
|
|
|
|
|
+ QHash<QString,QVariant> currentValues = values();
|
|
|
|
|
+ ctkCmdLineModuleDescription description = moduleReference().description();
|
|
|
|
|
+ QHashIterator<QString,QVariant> valuesIter(currentValues);
|
|
|
|
|
+ while(valuesIter.hasNext())
|
|
|
{
|
|
{
|
|
|
- if(reader.name() == parameter && reader.value() != value)
|
|
|
|
|
|
|
+ valuesIter.next();
|
|
|
|
|
+ ctkCmdLineModuleParameter parameter = description.parameter(valuesIter.key());
|
|
|
|
|
+ if (parameter.index() > -1)
|
|
|
{
|
|
{
|
|
|
- reader.setValue(value);
|
|
|
|
|
- emit valueChanged(parameter, value);
|
|
|
|
|
|
|
+ indexedArgs.insert(parameter.index(), valuesIter.value().toString());
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ QString argFlag;
|
|
|
|
|
+ if (parameter.longFlag().isEmpty())
|
|
|
|
|
+ {
|
|
|
|
|
+ argFlag = QString("-") + d->normalizeFlag(parameter.flag());
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ argFlag = QString("--") + d->normalizeFlag(parameter.longFlag());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ QStringList args;
|
|
|
|
|
+ if (parameter.multiple())
|
|
|
|
|
+ {
|
|
|
|
|
+ args = valuesIter.value().toString().split(',', QString::SkipEmptyParts);
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ args.push_back(valuesIter.value().toString());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ foreach(QString arg, args)
|
|
|
|
|
+ {
|
|
|
|
|
+ cmdLineArgs << argFlag << arg;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
-ctkCmdLineModuleReference ctkCmdLineModuleInstance::moduleReference() const
|
|
|
|
|
-{
|
|
|
|
|
- return d->ModuleReference;
|
|
|
|
|
|
|
+ QList<int> indexes = indexedArgs.keys();
|
|
|
|
|
+ qSort(indexes.begin(), indexes.end());
|
|
|
|
|
+ foreach(int index, indexes)
|
|
|
|
|
+ {
|
|
|
|
|
+ cmdLineArgs << indexedArgs[index];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return cmdLineArgs;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
struct ctkCmdLineModuleFuture {};
|
|
struct ctkCmdLineModuleFuture {};
|
|
@@ -150,9 +151,30 @@ struct ctkCmdLineModuleFuture {};
|
|
|
ctkCmdLineModuleFuture ctkCmdLineModuleInstance::run() const
|
|
ctkCmdLineModuleFuture ctkCmdLineModuleInstance::run() const
|
|
|
{
|
|
{
|
|
|
// // TODO: manage memory
|
|
// // TODO: manage memory
|
|
|
-// QStringList args = d->createCommandLineArgs();
|
|
|
|
|
-// qDebug() << args;
|
|
|
|
|
|
|
+ QStringList args = commandLineArguments();
|
|
|
|
|
+ qDebug() << args;
|
|
|
// ctkCmdLineModuleProcessRunner* moduleProcess =
|
|
// ctkCmdLineModuleProcessRunner* moduleProcess =
|
|
|
// new ctkCmdLineModuleProcessRunner(d->ModuleReference.location(), args);
|
|
// new ctkCmdLineModuleProcessRunner(d->ModuleReference.location(), args);
|
|
|
// return moduleProcess->start();
|
|
// return moduleProcess->start();
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+QHash<QString, QVariant> ctkCmdLineModuleInstance::values() const
|
|
|
|
|
+{
|
|
|
|
|
+ QHash<QString,QVariant> result;
|
|
|
|
|
+ foreach(QString parameterName, parameterNames())
|
|
|
|
|
+ {
|
|
|
|
|
+ result.insert(parameterName, value(parameterName));
|
|
|
|
|
+ }
|
|
|
|
|
+ return result;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void ctkCmdLineModuleInstance::setValues(const QHash<QString, QVariant> &values)
|
|
|
|
|
+{
|
|
|
|
|
+ QHashIterator<QString,QVariant> iter(values);
|
|
|
|
|
+ while(iter.hasNext())
|
|
|
|
|
+ {
|
|
|
|
|
+ iter.next();
|
|
|
|
|
+ setValue(iter.key(), iter.value());
|
|
|
|
|
+ }
|
|
|
|
|
+}
|