static QScriptValue prototype_Score_call(QScriptContext* context, QScriptEngine*) { Q_ASSERT(context->callee().isFunction()); uint _id = context->callee().data().toUInt32(); Q_ASSERT((_id & 0xFFFF0000) == 0xBABF0000); _id &= 0xffff; Score* score = qscriptvalue_cast<Score*>(context->thisObject()); if (!score) { return context->throwError(QScriptContext::TypeError, QString::fromLatin1("Score.%0(): this object is not a Score") .arg(function_names_score[_id])); } int argc = context->argumentCount(); switch(_id) { case 0: // "title", { Text* t = score->getText(TEXT_TITLE); if (argc == 0) { QString s = t ? t->getText() : ""; return qScriptValueFromValue(context->engine(), s); } else if (argc == 1) { QString s = qscriptvalue_cast<QString>(context->argument(0)); if (t) t->setText(s); else addText(score, TEXT_TITLE, s); return context->engine()->undefinedValue(); } } break; case 1: // "subtitle", { Text* t = score->getText(TEXT_SUBTITLE); if (argc == 0) { QString s = t ? t->getText() : ""; return qScriptValueFromValue(context->engine(), s); } else if (argc == 1) { QString s = qscriptvalue_cast<QString>(context->argument(0)); if (t) t->setText(s); else addText(score, TEXT_SUBTITLE, s); return context->engine()->undefinedValue(); } } break; case 2: // "composer", { Text* t = score->getText(TEXT_COMPOSER); if (argc == 0) { QString s = t ? t->getText() : ""; return qScriptValueFromValue(context->engine(), s); } else if (argc == 1) { QString s = qscriptvalue_cast<QString>(context->argument(0)); if (t) t->setText(s); else addText(score, TEXT_COMPOSER, s); return context->engine()->undefinedValue(); } } break; case 3: // "poet", { Text* t = score->getText(TEXT_POET); if (argc == 0) { QString s = t ? t->getText() : ""; return qScriptValueFromValue(context->engine(), s); } else if (argc == 1) { QString s = qscriptvalue_cast<QString>(context->argument(0)); if (t) t->setText(s); else addText(score, TEXT_POET, s); return context->engine()->undefinedValue(); } } break; case 4: // "load", if (argc == 1) { QString s = qscriptvalue_cast<QString>(context->argument(0)); return qScriptValueFromValue(context->engine(), mscore->readScore(score, s)); } break; case 5: // "save", { QString s, ext, sf; if (argc >= 2) { s = qscriptvalue_cast<QString>(context->argument(0)); ext = qscriptvalue_cast<QString>(context->argument(1)); } if (argc == 2) { if(ext == "time") { score->updateRepeatList(true); QFile file(s); file.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&file); out << "<events>" << endl; Measure* lastMeasure = 0; foreach (const RepeatSegment* rs, *(score->repeatList())) { int startTick = rs->tick; int endTick = startTick + rs->len; int tickOffset = rs->utick - rs->tick; for (Measure* m = score->tick2measure(startTick); m; m = m->nextMeasure()) { int offset = 0; if (lastMeasure && m->isRepeatMeasure()) offset = m->tick() - lastMeasure->tick(); else lastMeasure = m; SegmentTypes st = SegGrace | SegChordRest; for (Segment* seg = lastMeasure->first(st); seg; seg = seg->next(st)) { int tick = seg->tick() + tickOffset + offset; int time = score->utick2utime(tick) * 1000; out << QString(" <event elid=\"%1\" position=\"%2\" />").arg(seg->tick()).arg(time) << endl; } if (m->tick() + m->ticks() >= endTick) break; } } out << "</events>"; file.close(); return context->engine()->undefinedValue(); } else return qScriptValueFromValue(context->engine(), mscore->saveAs(score, true, s, ext)); } else if (argc == 6 && ext == "png") {