void FindImageInstance::startExecution() { bool ok = true; mSource = evaluateListElement<Source>(ok, sources, QStringLiteral("source")); mImageToFind = evaluateImage(ok, QStringLiteral("imageToFind")); mIfFound = evaluateIfAction(ok, QStringLiteral("ifFound")); mIfNotFound = evaluateIfAction(ok, QStringLiteral("ifNotFound")); mPositionVariableName = evaluateVariable(ok, QStringLiteral("position")); mMethod = evaluateListElement<Method>(ok, methods, QStringLiteral("method")); mWindowRelativePosition = evaluateBoolean(ok, QStringLiteral("windowRelativePosition")); mConfidenceMinimum = evaluateInteger(ok, QStringLiteral("confidenceMinimum")); mMaximumMatches = evaluateInteger(ok, QStringLiteral("maximumMatches")); mDownPyramidCount = evaluateInteger(ok, QStringLiteral("downPyramidCount")); mSearchExpansion = evaluateInteger(ok, QStringLiteral("searchExpansion")); mConfidenceVariableName = evaluateVariable(ok, QStringLiteral("confidence")); mSearchDelay = evaluateInteger(ok, QStringLiteral("searchDelay")); if(!ok) return; validateParameterRange(ok, mConfidenceMinimum, QStringLiteral("confidenceMinimum"), tr("minimum confidence"), 0, 100); validateParameterRange(ok, mMaximumMatches, QStringLiteral("maximumMatches"), tr("maximum matches"), 1); validateParameterRange(ok, mDownPyramidCount, QStringLiteral("downPyramidCount"), tr("downsampling"), 1); validateParameterRange(ok, mSearchExpansion, QStringLiteral("searchExpansion"), tr("search expansion"), 1); if(!ok) return; if(mImageToFind.isNull()) { emit executionException(ActionTools::ActionException::InvalidParameterException, tr("Invalid image to find")); return; } startSearching(); }
void WebDownloadInstance::startExecution() { bool ok = true; QString urlString = evaluateString(ok, "url"); mDestination = evaluateListElement<Destination>(ok, destinations, "destination"); mVariable = evaluateVariable(ok, "variable"); QString file = evaluateString(ok, "file"); if(!ok) return; QUrl url(urlString); if(url.scheme() == QString()) url = QUrl("http://" + urlString, QUrl::TolerantMode); if(!url.isValid()) { setCurrentParameter("url"); emit executionException(ActionTools::ActionException::BadParameterException, tr("Invalid URL")); return; } if(mDestination == File) { mFile.setFileName(file); if(!mFile.open(QIODevice::WriteOnly)) { setCurrentParameter("file"); emit executionException(CannotOpenFileException, tr("Cannot write to file")); return; } } mReply = mNetworkAccessManager->get(QNetworkRequest(url)); connect(mReply, SIGNAL(finished()), this, SLOT(finished())); connect(mReply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(downloadProgress(qint64,qint64))); connect(mReply, SIGNAL(readyRead()), this, SLOT(readyRead())); mProgressDialog->setModal(false); mProgressDialog->setWindowTitle(tr("Downloading")); mProgressDialog->setLabelText(tr("Downloading...")); mProgressDialog->setMaximum(100); mProgressDialog->show(); }
void WindowConditionInstance::startExecution() { bool ok = true; QString title = evaluateString(ok, QStringLiteral("title")); mCondition = evaluateListElement<Condition>(ok, conditions, QStringLiteral("condition")); mIfTrue = evaluateIfAction(ok, QStringLiteral("ifTrue")); ActionTools::IfActionValue ifFalse = evaluateIfAction(ok, QStringLiteral("ifFalse")); mPosition = evaluateVariable(ok, QStringLiteral("position")); mSize = evaluateVariable(ok, QStringLiteral("size")); mXCoordinate = evaluateVariable(ok, QStringLiteral("xCoordinate")); mYCoordinate = evaluateVariable(ok, QStringLiteral("yCoordinate")); mWidth = evaluateVariable(ok, QStringLiteral("width")); mHeight = evaluateVariable(ok, QStringLiteral("height")); mProcessId = evaluateVariable(ok, QStringLiteral("processId")); if(!ok) return; mTitleRegExp = QRegExp(title, Qt::CaseSensitive, QRegExp::WildcardUnix); ActionTools::WindowHandle foundWindow = findWindow(); if((foundWindow.isValid() && mCondition == Exists) || (!foundWindow.isValid() && mCondition == DontExists)) { QString line = evaluateSubParameter(ok, mIfTrue.actionParameter()); if(!ok) return; if(mIfTrue.action() == ActionTools::IfActionValue::GOTO) setNextLine(line); else if(mIfTrue.action() == ActionTools::IfActionValue::CALLPROCEDURE) { if(!callProcedure(line)) return; } executionEnded(); } else { QString line = evaluateSubParameter(ok, ifFalse.actionParameter()); if(!ok) return; if(ifFalse.action() == ActionTools::IfActionValue::GOTO) { setNextLine(line); executionEnded(); } else if(ifFalse.action() == ActionTools::IfActionValue::CALLPROCEDURE) { if(!callProcedure(line)) return; executionEnded(); } else if(ifFalse.action() == ActionTools::IfActionValue::WAIT) { connect(&mTimer, &QTimer::timeout, this, &WindowConditionInstance::checkWindow); mTimer.setInterval(100); mTimer.start(); } else executionEnded(); } }
void MultiDataInputInstance::startExecution() { bool ok = true; QString question = evaluateString(ok, QStringLiteral("question")); mMode = evaluateListElement<Mode>(ok, modes, QStringLiteral("mode")); mItems = evaluateItemList(ok, QStringLiteral("items")); QString defaultValue = evaluateString(ok, QStringLiteral("defaultValue")); mVariable = evaluateVariable(ok, QStringLiteral("variable")); QString windowTitle = evaluateString(ok, QStringLiteral("windowTitle")); QImage windowIcon = evaluateImage(ok, QStringLiteral("windowIcon")); mMaximumChoiceCount = evaluateInteger(ok, QStringLiteral("maximumChoiceCount")); if(!ok) return; if(mDialog) delete mDialog; mDialog = new QDialog; mDialog->setWindowFlags(mDialog->windowFlags() | Qt::WindowContextHelpButtonHint); auto layout = new QVBoxLayout(mDialog); mDialog->setLayout(layout); mDialog->setWindowTitle(windowTitle); if(!windowIcon.isNull()) mDialog->setWindowIcon(QIcon(QPixmap::fromImage(windowIcon))); QLabel *questionLabel = new QLabel(mDialog); questionLabel->setText(question); layout->addWidget(questionLabel); switch(mMode) { case ComboBoxMode: case EditableComboBoxMode: { mComboBox = new QComboBox(mDialog); mComboBox->addItems(mItems); int currentItem = mComboBox->findText(defaultValue); if(currentItem == -1) currentItem = 0; mComboBox->setCurrentIndex(currentItem); mComboBox->setEditable(mMode == EditableComboBoxMode); layout->addWidget(mComboBox); } break; case ListMode: { mListWidget = new QListWidget(mDialog); if(mMaximumChoiceCount <= 1) mListWidget->setSelectionMode(QAbstractItemView::SingleSelection); else mListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); mListWidget->addItems(mItems); QList<QListWidgetItem *> defaultItem = mListWidget->findItems(defaultValue, Qt::MatchExactly); if(!defaultItem.isEmpty()) mListWidget->setCurrentItem(defaultItem.first()); layout->addWidget(mListWidget); if(mMaximumChoiceCount > 1) connect(mListWidget, &QListWidget::itemSelectionChanged, this, &MultiDataInputInstance::listItemSelectionChanged); } break; case CheckboxMode: layout->addLayout(createRadioButtonsOrCheckboxes<QCheckBox>(defaultValue, mMaximumChoiceCount <= 1)); break; case RadioButtonMode: layout->addLayout(createRadioButtonsOrCheckboxes<QRadioButton>(defaultValue, true)); break; } if(mMode != ListMode) layout->addStretch(1); QDialogButtonBox *dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, mDialog); layout->addWidget(dialogButtonBox); connect(dialogButtonBox, &QDialogButtonBox::accepted, mDialog, &QDialog::accept); connect(dialogButtonBox, &QDialogButtonBox::rejected, mDialog, &QDialog::reject); connect(mDialog, &QDialog::accepted, this, &MultiDataInputInstance::accepted); connect(mDialog, &QDialog::rejected, this, &MultiDataInputInstance::rejected); for(QLabel *label: mDialog->findChildren<QLabel*>()) label->setOpenExternalLinks(true); mDialog->show(); }