/** * Executes an operation (or workflow) and generates output * @param parameters the input and output parameters that the user filled in */ QString OperationCatalogModel::executeoperation(quint64 operationid, const QString& parameters, QVariant runparams) { try { IOperationMetaData metadata; metadata.prepare(operationid); auto opExpr = OperationExpression::createExpression(operationid, parameters); if ( metadata.isValid() && opExpr.isValid()){ if ( metadata->resource().hasProperty("runinmainthread")){ // some operations may not run in a different thread. particular operations that invoke methods from the qml which must run in the mainthread OperationWorker::run(opExpr); }else { QThread* thread = new QThread; thread->setProperty("runparameters",runparams); OperationWorker* worker = new OperationWorker(opExpr); worker->moveToThread(thread); thread->setProperty("workingcatalog", qVariantFromValue(context()->workingCatalog())); thread->connect(thread, &QThread::started, worker, &OperationWorker::process); thread->connect(worker, &OperationWorker::finished, thread, &QThread::quit); thread->connect(worker, &OperationWorker::finished, worker, &OperationWorker::deleteLater); thread->connect(thread, &QThread::finished, thread, &QThread::deleteLater); thread->connect(worker, &OperationWorker::finished, this, &OperationCatalogModel::workerFinished); thread->start(); return "TODO"; } } return sUNDEF; } catch (const ErrorObject& err){ emit error(err.message()); } return sUNDEF; }
void WorkflowModel::selectOperation(const QString& id) { IOperationMetaData op; op.prepare(id.toULongLong()); if ( op.isValid()){ _selectedOperation.clear(); _selectedOperation.append(new IlwisObjectModel(op->resource(),this)); } emit selectionChanged(); }