void Executer::executeCurrentAction() { //Skip disabled actions if(mCurrentActionIndex >= 0) { while(mCurrentActionIndex < mScript->actionCount() && canExecuteAction(mCurrentActionIndex) != CanExecute) ++mCurrentActionIndex; } if(mCurrentActionIndex < 0 || mCurrentActionIndex >= mScript->actionCount()) { stopExecution(); return; } int nextLine = mCurrentActionIndex + 2; if(nextLine > mScript->actionCount()) nextLine = -1; QScriptValue script = mScriptEngine->globalObject().property("Script"); script.setProperty("nextLine", mScriptEngine->newVariant(QVariant(nextLine))); script.setProperty("line", mCurrentActionIndex + 1, QScriptValue::ReadOnly); ActionTools::ActionInstance *actionInstance = currentActionInstance(); const ActionTools::ExceptionActionInstancesHash &exceptionActionInstancesHash = actionInstance->exceptionActionInstances(); const ActionTools::ActionException::ExceptionActionInstance &exceptionAction = exceptionActionInstancesHash.value(ActionTools::ActionException::CodeErrorException); mShowDebuggerOnCodeError = (exceptionAction.action() == ActionTools::ActionException::StopExecutionExceptionAction); mExecutionWindow->setCurrentActionName(actionInstance->definition()->name()); mExecutionWindow->setCurrentActionColor(actionInstance->color()); connect(actionInstance, SIGNAL(executionEnded()), this, SLOT(actionExecutionEnded())); connect(actionInstance, SIGNAL(executionException(int,QString)), this, SLOT(executionException(int,QString))); connect(actionInstance, SIGNAL(disableAction(bool)), this, SLOT(disableAction(bool))); connect(actionInstance, SIGNAL(showProgressDialog(QString,int)), this, SLOT(showProgressDialog(QString,int))); connect(actionInstance, SIGNAL(updateProgressDialog(int)), this, SLOT(updateProgressDialog(int))); connect(actionInstance, SIGNAL(updateProgressDialog(QString)), this, SLOT(updateProgressDialog(QString))); connect(actionInstance, SIGNAL(hideProgressDialog()), this, SLOT(hideProgressDialog())); connect(actionInstance, SIGNAL(consolePrint(QString)), this, SLOT(consolePrint(QString))); connect(actionInstance, SIGNAL(consolePrintWarning(QString)), this, SLOT(consolePrintWarning(QString))); connect(actionInstance, SIGNAL(consolePrintError(QString)), this, SLOT(consolePrintError(QString))); mExecutionStatus = PrePause; mExecutionTimer.start(); mExecutionTime.start(); if(currentActionInstance()->pauseBefore() + mPauseBefore > 0) { mExecutionWindow->setProgressEnabled(true); mExecutionWindow->setProgressMinimum(0); mExecutionWindow->setProgressMaximum(currentActionInstance()->pauseBefore() + mPauseBefore); mExecutionWindow->setProgressValue(0); } else mExecutionWindow->setProgressEnabled(false); mExecutionEnded = true; }
//ChangeColorCommand ChangeColorCommand::ChangeColorCommand(const QList<int> &rows, const QColor &color, ScriptModel *model, ScriptProxyModel *proxyModel) : QUndoCommand(), mModel(model), mProxyModel(proxyModel), mRows(rows), mNew(color) { for(int row: mRows) { ActionTools::ActionInstance *actionInstance = mModel->mScript->actionAt(row); if(!actionInstance) continue; mOld << actionInstance->color(); } setText(QObject::tr("Change the color")); }
QVariant ScriptModel::data(const QModelIndex &index, int role) const { if(!index.isValid()) return QVariant(); ActionTools::ActionInstance *actionInstance = mScript->actionAt(index.row()); if(!actionInstance) return QVariant(); switch(role) { case ActionDataRole: return QVariant::fromValue(*actionInstance); case ActionIdRole: return actionInstance->definition()->id(); case Qt::BackgroundRole: { const QColor &color = actionInstance->color(); if(color.isValid()) return QBrush(color); return QBrush(); } case Qt::FontRole: { if(!actionInstance->definition()->worksUnderThisOS()) { QFont font = QApplication::font(); font.setItalic(true); return font; } return QFont(); } case Qt::ForegroundRole: { const QColor &color = actionInstance->color(); if(color.isValid()) { if(color.lightness() < 128) return QBrush(Qt::white); else return QBrush(Qt::black); } else { const QPalette &palette = QApplication::palette(); if(!actionInstance->isEnabled()) return QBrush(palette.color(QPalette::Disabled, QPalette::WindowText)); return QBrush(); } } } switch(index.column()) { case ColumnLabel: switch(role) { case Qt::CheckStateRole: return QVariant(actionInstance->isEnabled() ? Qt::Checked : Qt::Unchecked); case Qt::DisplayRole: { QString labelString = actionInstance->label(); if(!labelString.isNull() && !labelString.isEmpty()) return labelString; return QString("%1").arg(index.row() + 1, 3, 10, QChar('0')); } case Qt::EditRole: return actionInstance->label(); } break; case ColumnActionName: switch(role) { case Qt::ToolTipRole: return tr("Double-clic to edit the action"); case Qt::DisplayRole: return actionInstance->definition()->name(); case Qt::DecorationRole: return QIcon(actionInstance->definition()->icon()); case Qt::TextAlignmentRole: return Qt::AlignCenter; } break; case ColumnComment: switch(role) { case Qt::DisplayRole: case Qt::EditRole: return actionInstance->comment(); } break; } return QVariant(); }