void FF7Font::openTxt(const QString &data) { int tableCount = _windowBinFile->tableCount(); QStringList lines = data.split(QRegExp("\\s*(\\r\\n|\\r|\\n)\\s*"), QString::SkipEmptyParts); QRegExp nameRegExp("#NAME\\s+(\\S.*)"), letterRegExp("\\s*\"([^\"]*|\\\"*)\"\\s*,?\\s*"); // nameRegExp: #NAME blah blah blah // letterRegExp: "Foo", "Foo","Foo" QStringList table; if(tableCount < 1) { qWarning() << "invalid windowBinFile!"; return; } foreach(const QString &line, lines) { if(line.startsWith("#")) { if(nameRegExp.indexIn(line) != -1) { QStringList capturedTexts = nameRegExp.capturedTexts(); _name = capturedTexts.at(1).trimmed(); } } else { int offset=0; while((offset = letterRegExp.indexIn(line, offset)) != -1) { QStringList capturedTexts = letterRegExp.capturedTexts(); table.append(capturedTexts.at(1)); offset += capturedTexts.first().size(); if(table.size() == 224) { _tables.append(table); if(_tables.size() > tableCount) { //print(); return; } table = QStringList(); } } } } if(!table.isEmpty()) { if(table.size() < 224) { for(int i=table.size() ; i<224 ; ++i) { table.append(QString()); } } _tables.append(table); } //print(); }
SnapshotNameDialog::SnapshotNameDialog( bool displayOldName, const QString oldName, QWidget* parent ) : QDialog( parent, Qt::Dialog )//|Qt::FramelessWindowHint) { setModal( true ); setWindowTitle( "Enter Snapshotname:" ); layout = new QVBoxLayout(); nameLayout = new QHBoxLayout(); buttonsLayout = new QHBoxLayout(); nameLabel = new QLabel( "Name" ); nameLE = new QLineEdit(); okButton = new QPushButton( "OK" ); cancelButton = new QPushButton( "Cancel" ); nameLayout->addWidget( nameLabel ); nameLayout->addWidget( nameLE ); buttonsLayout->addWidget( okButton ); buttonsLayout->addWidget( cancelButton ); layout->addLayout( nameLayout ); layout->addLayout( buttonsLayout ); setLayout( layout ); //Connect Signals and Slots connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); connect( cancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) ); connect( nameLE, SIGNAL( textEdited( const QString& ) ), this, SLOT( enableOKButton() ) ); connect( this, SIGNAL( accepted() ), this, SLOT( readName() ) ); //Set Validators to limit the length of the name to 15 characters QRegExp nameRegExp( ".{1,15}" ); nameLE->setValidator( new QRegExpValidator( nameRegExp,this ) ); okButton->setDisabled( true ); if( displayOldName ) { if( ! oldName.isEmpty() ) { nameLE->setText( oldName ); enableOKButton(); } } }
MergeContactsDialog::MergeContactsDialog(IMetaContacts *AMetaContacts, IMetaRoster *AMetaRoster, const QList<QString> AMetaIds, QWidget *AParent) : QDialog(AParent) { ui.setupUi(this); StyleStorage::staticStorage(RSR_STORAGE_STYLESHEETS)->insertAutoStyle(this,STS_METACONTACTS_MERGECONTACTSDIALOG); GraphicsEffectsStorage::staticStorage(RSR_STORAGE_GRAPHICSEFFECTS)->installGraphicsEffect(this, GFX_LABELS); FBorder = CustomBorderStorage::staticStorage(RSR_STORAGE_CUSTOMBORDER)->addBorder(this, CBS_DIALOG); if (FBorder) { FBorder->setResizable(false); FBorder->setMinimizeButtonVisible(false); FBorder->setMaximizeButtonVisible(false); FBorder->setAttribute(Qt::WA_DeleteOnClose,true); FBorder->setWindowTitle(ui.lblCaption->text()); connect(this, SIGNAL(accepted()), FBorder, SLOT(closeWidget())); connect(this, SIGNAL(rejected()), FBorder, SLOT(closeWidget())); connect(FBorder, SIGNAL(closeClicked()), SLOT(reject())); setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); } else { ui.lblCaption->setVisible(false); setAttribute(Qt::WA_DeleteOnClose,true); } #ifdef Q_WS_MAC ui.buttonsLayout->setSpacing(16); ui.buttonsLayout->addWidget(ui.pbtMerge); setWindowGrowButtonEnabled(this->window(), false); #endif ui.lneName->setAttribute(Qt::WA_MacShowFocusRect, false); FMetaRoster = AMetaRoster; FMetaContacts = AMetaContacts; FMetaIds = AMetaIds; ui.lblNotice->setText(tr("These %n contacts will be merged into one:","",AMetaIds.count())); QString name; int nameCapCount = 0; QRegExp nameRegExp(tr("([a-z])","From first letter to last of alphabet"),Qt::CaseInsensitive); QSet<Jid> items; ui.ltContacts->addStretch(); foreach(QString metaId, FMetaIds) { IMetaContact contact = FMetaRoster->metaContact(metaId); items += contact.items; QImage avatar = FMetaRoster->metaAvatarImage(metaId,false,false).scaled(24, 24, Qt::KeepAspectRatio,Qt::SmoothTransformation); QString itemName = FMetaContacts->metaContactName(contact); int pos = 0; int itemNameCapCount = 0; while ((pos = nameRegExp.indexIn(itemName, pos)) != -1) { itemNameCapCount++; pos += nameRegExp.matchedLength(); } if (nameCapCount < itemNameCapCount) { name = itemName; nameCapCount = itemNameCapCount; } else if (name.isEmpty()) { name = itemName.trimmed(); } QHBoxLayout *itemLayout = new QHBoxLayout(); itemLayout->setContentsMargins(0, 0, 0, 0); itemLayout->setSpacing(8); QLabel *avatarLabel = new QLabel(this); avatarLabel->setFixedSize(24, 24); avatarLabel->setPixmap(QPixmap::fromImage(avatar)); avatarLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); itemLayout->addWidget(avatarLabel); QLabel *nameLabel = new QLabel(this); nameLabel->setText(itemName); itemLayout->addWidget(nameLabel); ui.ltContacts->addItem(itemLayout); }
void ScriptParametersDialog::accept() { int rowCount = ui->parameterTable->rowCount(); QScriptEngine scriptEngine; mScript->removeAllParameters(); for(int row = 0; row < rowCount; ++row) { QWidget *widget = ui->parameterTable->cellWidget(row, 0); if(!widget) continue; QLineEdit *nameLineEdit = qobject_cast<QLineEdit *>(widget); widget = ui->parameterTable->cellWidget(row, 1); if(!widget) continue; if(nameLineEdit->text().isEmpty()) continue; QRegExp nameRegExp("[a-z_][a-z0-9_]*", Qt::CaseInsensitive); if(!nameRegExp.exactMatch(nameLineEdit->text())) { QMessageBox::warning(this, tr("Script parameter error"), tr("Incorrect parameter name \"%1\".") .arg(nameLineEdit->text())); nameLineEdit->setFocus(); return; } bool isCode = false; QString value; switch(mParameterTypes.at(row)) { case ActionTools::ScriptParameter::Text: { ActionTools::CodeLineEdit *valueWidget = qobject_cast<ActionTools::CodeLineEdit *>(widget); isCode = valueWidget->isCode(); value = valueWidget->text(); } break; case ActionTools::ScriptParameter::Number: { ActionTools::CodeSpinBox *valueWidget = qobject_cast<ActionTools::CodeSpinBox *>(widget); isCode = valueWidget->isCode(); value = valueWidget->text(); } break; case ActionTools::ScriptParameter::Window: { ActionTools::WindowEdit *valueWidget = qobject_cast<ActionTools::WindowEdit *>(widget); isCode = valueWidget->isCode(); value = valueWidget->text(); } break; case ActionTools::ScriptParameter::File: { ActionTools::FileEdit *valueWidget = qobject_cast<ActionTools::FileEdit *>(widget); isCode = valueWidget->isCode(); value = valueWidget->text(); } break; case ActionTools::ScriptParameter::Line: { ActionTools::LineComboBox *valueWidget = qobject_cast<ActionTools::LineComboBox *>(widget); isCode = valueWidget->isCode(); value = valueWidget->codeLineEdit()->text(); } break; } if(isCode) { QScriptSyntaxCheckResult result = scriptEngine.checkSyntax(value); if(result.state() != QScriptSyntaxCheckResult::Valid) { QMessageBox::warning(this, tr("Script parameter error"), tr("The script parameter named \"%1\" contains an error: \"%2\", please correct it.") .arg(nameLineEdit->text()) .arg(result.errorMessage())); widget->setFocus(); return; } } mScript->addParameter(ActionTools::ScriptParameter(nameLineEdit->text(), value, isCode, mParameterTypes.at(row))); } QDialog::accept(); }
void cleanupXML(QTextStream &input, QTextStream &output) { QRegExp filenameRegExp("filename=\"[^\"]*\""), nameRegExp("name=\"[^\"]*\""), tagRegExp("^\\s*<([a-zA-Z]+) "), leadingSpaces("^ *"), closeTag("^\\s*</"); bool inComment = false, hasContents = false; while (!input.atEnd()) { QString line = input.readLine(); bool startComment = line.contains("<!--"); bool endComment = line.contains("-->"); if (startComment) inComment = true; if (endComment) inComment = false; if (inComment || endComment) { if (startComment) { /* Turn leading spaces into tabs */ if (leadingSpaces.indexIn(line) == 0) line = QString('\t').repeated(leadingSpaces.matchedLength()) + line.mid(leadingSpaces.matchedLength()); } output << line << endl; continue; } /* Make sure that the name attribute is always the first one */ int tagMatch = tagRegExp.indexIn(line), tagLength = tagRegExp.matchedLength(); int nameMatch = nameRegExp.indexIn(line), filenameMatch = filenameRegExp.indexIn(line), nameLength = nameRegExp.matchedLength(); if (tagMatch != -1 && nameMatch != -1 && filenameMatch == -1) { QString a = line.mid(tagLength, nameMatch-tagLength).trimmed(), b = line.mid(nameMatch+nameLength).trimmed(); line = line.left(tagLength) + line.mid(nameMatch, nameLength); if (a.length() > 0) line += " " + a; if (b.length() > 0) line += " " + b; } /* Add an extra newline if this is an object tag, and if there have been siblings before it */ if (tagMatch != -1) { const QString &el = tagRegExp.cap(1); bool isObject = true; isObject &= (el != "string"); isObject &= (el != "integer"); isObject &= (el != "float"); isObject &= (el != "boolean"); isObject &= (el != "vector"); isObject &= (el != "point"); isObject &= (el != "transform"); isObject &= (el != "spectrum"); isObject &= (el != "rgb"); isObject &= (el != "scale"); isObject &= (el != "translate"); isObject &= (el != "rotate"); isObject &= (el != "lookAt"); isObject &= (el != "matrix"); if (isObject && hasContents) { output << endl; hasContents = false; } if (!isObject) hasContents = true; } /* Turn leading spaces into tabs */ if (leadingSpaces.indexIn(line) == 0) line = QString('\t').repeated(leadingSpaces.matchedLength()) + line.mid(leadingSpaces.matchedLength()); /* Remove ugly spaces */ if (line.endsWith(" />")) { line = line.left(line.size()-4) + QString("/>"); hasContents = true; } else if (line.endsWith(" />")) { line = line.left(line.size()-3) + QString("/>"); hasContents = true; } else if (line.endsWith("/>")) { hasContents = true; } else if (line.endsWith(" >")) { line = line.left(line.size()-2) + QString(">"); } else if (line.endsWith("?>")) { hasContents = true; } if (closeTag.indexIn(line) == 0) hasContents = true; output << line << endl; } }
bool Executer::startExecution(bool onlySelection) { Q_ASSERT(mScriptAgent); Q_ASSERT(mScriptEngine); #ifdef ACT_PROFILE Tools::HighResolutionTimer timer("Executer::startExecution"); #endif Code::CodeTools::addClassToScriptEngine<CodeActiona>("Actiona", mScriptEngine); CodeActiona::setActExec(mIsActExec); CodeActiona::setActionaVersion(mActionaVersion); CodeActiona::setScriptVersion(mScriptVersion); Code::CodeTools::addClassGlobalFunctionToScriptEngine("Actiona", &CodeActiona::version, "version", mScriptEngine); Code::CodeTools::addClassGlobalFunctionToScriptEngine("Actiona", &CodeActiona::scriptVersion, "scriptVersion", mScriptEngine); Code::CodeTools::addClassGlobalFunctionToScriptEngine("Actiona", &CodeActiona::isActExec, "isActExec", mScriptEngine); Code::CodeTools::addClassGlobalFunctionToScriptEngine("Actiona", &CodeActiona::isActiona, "isActiona", mScriptEngine); mScriptAgent->setContext(ScriptAgent::ActionInit); CodeInitializer::initialize(mScriptEngine, mScriptAgent, mActionFactory); mScriptAgent->setContext(ScriptAgent::Parameters); QScriptValue script = mScriptEngine->newObject(); mScriptEngine->globalObject().setProperty("Script", script, QScriptValue::ReadOnly); script.setProperty("nextLine", 1); script.setProperty("line", 1, QScriptValue::ReadOnly); QScriptValue callProcedureFun = mScriptEngine->newFunction(callProcedureFunction); callProcedureFun.setData(mScriptEngine->newQObject(this)); script.setProperty("callProcedure", callProcedureFun); QScriptValue console = mScriptEngine->newObject(); mScriptEngine->globalObject().setProperty("Console", console, QScriptValue::ReadOnly); QScriptValue function = mScriptEngine->newFunction(printFunction); function.setData(mScriptEngine->newQObject(this)); console.setProperty("print", function); function = mScriptEngine->newFunction(printWarningFunction); function.setData(mScriptEngine->newQObject(this)); console.setProperty("printWarning", function); function = mScriptEngine->newFunction(printErrorFunction); function.setData(mScriptEngine->newQObject(this)); console.setProperty("printError", function); function = mScriptEngine->newFunction(clearConsoleFunction); function.setData(mScriptEngine->newQObject(this)); console.setProperty("clear", function); mExecuteOnlySelection = onlySelection; mCurrentActionIndex = 0; mActiveActionsCount = 0; mExecutionPaused = false; bool initSucceeded = true; int lastBeginProcedure = -1; mScript->clearProcedures(); mScript->clearCallStack(); const QHash<QString, ActionTools::Resource> &resources = mScript->resources(); for(const QString &key: resources.keys()) { const ActionTools::Resource &resource = resources.value(key); QScriptValue value; switch(resource.type()) { case ActionTools::Resource::BinaryType: case ActionTools::Resource::TypeCount: value = Code::RawData::constructor(resource.data(), mScriptEngine); break; case ActionTools::Resource::TextType: value = QString::fromUtf8(resource.data(), resource.data().size()); break; case ActionTools::Resource::ImageType: { QImage image; if(!image.loadFromData(resource.data())) { mConsoleWidget->addResourceLine(tr("Invalid image resource"), key, ActionTools::ConsoleWidget::Error); return false; } value = Code::Image::constructor(image, mScriptEngine); } break; } mScriptEngine->globalObject().setProperty(key, value, QScriptValue::ReadOnly | QScriptValue::Undeletable); } for(int actionIndex = 0; actionIndex < mScript->actionCount(); ++actionIndex) { ActionTools::ActionInstance *actionInstance = mScript->actionAt(actionIndex); actionInstance->reset(); actionInstance->clearRuntimeParameters(); actionInstance->setupExecution(mScriptEngine, mScript, actionIndex); mActionEnabled.append(true); qint64 currentActionRuntimeId = -1; if(actionInstance) currentActionRuntimeId = actionInstance->runtimeId(); if(canExecuteAction(actionIndex) == CanExecute) { ++mActiveActionsCount; if(actionInstance->definition()->id() == "ActionBeginProcedure") { if(lastBeginProcedure != -1) { mConsoleWidget->addActionLine(tr("Invalid Begin procedure action, you have to end the previous procedure before starting another one"), currentActionRuntimeId, QString(), QString(), -1, -1, ActionTools::ConsoleWidget::Error); return false; } lastBeginProcedure = actionIndex; const ActionTools::SubParameter &nameParameter = actionInstance->subParameter("name", "value"); const QString &procedureName = nameParameter.value().toString(); if(procedureName.isEmpty()) { mConsoleWidget->addActionLine(tr("A procedure name cannot be empty"), currentActionRuntimeId, QString(), QString(), -1, -1, ActionTools::ConsoleWidget::Error); return false; } if(mScript->findProcedure(procedureName) != -1) { mConsoleWidget->addActionLine(tr("A procedure with the name \"%1\" has already been declared").arg(procedureName), currentActionRuntimeId, QString(), QString(), -1, -1, ActionTools::ConsoleWidget::Error); return false; } mScript->addProcedure(procedureName, actionIndex); } else if(actionInstance->definition()->id() == "ActionEndProcedure") { if(lastBeginProcedure == -1) { mConsoleWidget->addActionLine(tr("Invalid End procedure"), currentActionRuntimeId, QString(), QString(), -1, -1, ActionTools::ConsoleWidget::Error); return false; } ActionTools::ActionInstance *beginProcedureActionInstance = mScript->actionAt(lastBeginProcedure); actionInstance->setRuntimeParameter("procedureBeginLine", lastBeginProcedure); beginProcedureActionInstance->setRuntimeParameter("procedureEndLine", actionIndex); lastBeginProcedure = -1; } } } if(lastBeginProcedure != -1) { ActionTools::ActionInstance *actionInstance = mScript->actionAt(lastBeginProcedure); qint64 actionRuntimeId = -1; if(actionInstance) actionRuntimeId = actionInstance->runtimeId(); mConsoleWidget->addActionLine(tr("Begin procedure action without end procedure"), actionRuntimeId, QString(), QString(), -1, -1, ActionTools::ConsoleWidget::Error); return false; } for(int parameterIndex = 0; parameterIndex < mScript->parameterCount(); ++parameterIndex) { mScriptAgent->setCurrentParameter(parameterIndex); const ActionTools::ScriptParameter &scriptParameter = mScript->parameter(parameterIndex); QRegExp nameRegExp("[a-z_][a-z0-9_]*", Qt::CaseInsensitive); if(!nameRegExp.exactMatch(scriptParameter.name())) { mConsoleWidget->addScriptParameterLine(tr("Incorrect parameter name: \"%1\"").arg(scriptParameter.name()), parameterIndex, -1, -1, ActionTools::ConsoleWidget::Error); initSucceeded = false; continue; } QString value; if(scriptParameter.isCode()) { QScriptValue result = mScriptEngine->evaluate(scriptParameter.value()); if(result.isError()) { mConsoleWidget->addScriptParameterLine(tr("Error while evaluating parameter \"%1\", error message: \"%2\"") .arg(scriptParameter.name()) .arg(result.toString()), parameterIndex, -1, -1, ActionTools::ConsoleWidget::Error); initSucceeded = false; continue; } else value = result.toString(); } else value = scriptParameter.value(); mScriptEngine->globalObject().setProperty(scriptParameter.name(), value, QScriptValue::ReadOnly | QScriptValue::Undeletable); } if(!initSucceeded || mScript->actionCount() == 0) return false; if(mShowExecutionWindow) { QRect screenRect = QApplication::desktop()->availableGeometry(mExecutionWindowScreen); QPoint position; if(mExecutionWindowPosition >= 0 && mExecutionWindowPosition <= 2)//Left position.setX(screenRect.left()); else if(mExecutionWindowPosition >= 3 && mExecutionWindowPosition <= 5)//HCenter position.setX(screenRect.left() + screenRect.width() / 2 - mExecutionWindow->width() / 2); else if(mExecutionWindowPosition >= 6 && mExecutionWindowPosition <= 8)//Right position.setX(screenRect.left() + screenRect.width() - mExecutionWindow->width()); if(mExecutionWindowPosition == 0 || mExecutionWindowPosition == 3 || mExecutionWindowPosition == 6)//Up position.setY(screenRect.top()); else if(mExecutionWindowPosition == 1 || mExecutionWindowPosition == 4 || mExecutionWindowPosition == 7)//VCenter position.setY(screenRect.top() + screenRect.height() / 2 - mExecutionWindow->height() / 2); else if(mExecutionWindowPosition == 2 || mExecutionWindowPosition == 5 || mExecutionWindowPosition == 8)//Down position.setY(screenRect.top() + screenRect.height() - mExecutionWindow->height()); mExecutionWindow->setPauseStatus(false); mExecutionWindow->move(position); mExecutionWindow->show(); } if(mShowConsoleWindow) { QRect screenRect = QApplication::desktop()->availableGeometry(mConsoleWindowScreen); QPoint position; if(mConsoleWindowPosition >= 0 && mConsoleWindowPosition <= 2)//Left position.setX(screenRect.left()); else if(mConsoleWindowPosition >= 3 && mConsoleWindowPosition <= 5)//HCenter position.setX(screenRect.left() + screenRect.width() / 2 - mConsoleWidget->width() / 2); else if(mConsoleWindowPosition >= 6 && mConsoleWindowPosition <= 8)//Right position.setX(screenRect.left() + screenRect.width() - mConsoleWidget->width()); if(mConsoleWindowPosition == 0 || mConsoleWindowPosition == 3 || mConsoleWindowPosition == 6)//Up position.setY(screenRect.top()); else if(mConsoleWindowPosition == 1 || mConsoleWindowPosition == 4 || mConsoleWindowPosition == 7)//VCenter position.setY(screenRect.top() + screenRect.height() / 2 - mConsoleWidget->height() / 2); else if(mConsoleWindowPosition == 2 || mConsoleWindowPosition == 5 || mConsoleWindowPosition == 8)//Down position.setY(screenRect.top() + screenRect.height() - mConsoleWidget->height()); mConsoleWidget->move(position); mConsoleWidget->show(); } mExecutionStarted = true; mScriptAgent->setContext(ScriptAgent::Actions); mHasExecuted = true; executeCurrentAction(); return true; }