void KstChangeNptsDialogI::applyNptsChange() { KstRVectorList rvl = kstObjectSubList<KstVector,KstRVector>(KST::vectorList); for (uint i = 0; i < CurveList->count(); ++i) { if (CurveList->isSelected(i)) { KstRVectorPtr vector = *(rvl.findTag(CurveList->text(i))); if (vector) { int f0, n; vector->readLock(); KstDataSourcePtr ds = vector->dataSource(); if (_kstDataRange->isStartRelativeTime() && ds) { ds->readLock(); f0 = ds->sampleForTime(_kstDataRange->f0Value()); ds->unlock(); } else if (_kstDataRange->isStartAbsoluteTime() && ds) { ds->readLock(); f0 = ds->sampleForTime(_kstDataRange->f0DateTimeValue()); ds->unlock(); } else { f0 = int(_kstDataRange->f0Value()); } if (_kstDataRange->isRangeRelativeTime() && ds) { ds->readLock(); double nValStored = _kstDataRange->nValue(); if (_kstDataRange->CountFromEnd->isChecked()) { int frameCount = ds->frameCount(vector->field()); double msCount = ds->relativeTimeForSample(frameCount - 1); n = frameCount - 1 - ds->sampleForTime(msCount - nValStored); } else { double fTime = ds->relativeTimeForSample(f0); n = ds->sampleForTime(fTime + nValStored) - ds->sampleForTime(fTime); } ds->unlock(); } else { n = int(_kstDataRange->nValue()); } vector->unlock(); vector->writeLock(); vector->changeFrames( (_kstDataRange->CountFromEnd->isChecked() ? -1 : f0), (_kstDataRange->ReadToEnd->isChecked() ? -1 : n), _kstDataRange->Skip->value(), _kstDataRange->DoSkip->isChecked(), _kstDataRange->DoFilter->isChecked()); vector->unlock(); } } } _modifiedRange = false; // avoid re-entering the dialog QTimer::singleShot(0, this, SLOT(emitDocChanged())); }
KJS::Value KstBindDataVector::changeFrames(KJS::ExecState *exec, const KJS::List& args) { KstRVectorPtr v = makeDataVector(_d); if (!v) { KJS::Object eobj = KJS::Error::create(exec, KJS::GeneralError); exec->setException(eobj); return KJS::Undefined(); } if (args.size() > 1) { if (args[0].type() != KJS::NumberType || args[1].type() != KJS::NumberType) { KJS::Object eobj = KJS::Error::create(exec, KJS::TypeError); exec->setException(eobj); return KJS::Undefined(); } KstWriteLocker wl(v); int start = d2i(args[0].toNumber(exec)); int count = d2i(args[1].toNumber(exec)); int skip = v->doSkip() ? v->skip() : -1; bool ave = v->doAve(); if (args.size() > 2) { if (args[2].type() != KJS::NumberType) { KJS::Object eobj = KJS::Error::create(exec, KJS::TypeError); exec->setException(eobj); return KJS::Undefined(); } skip = d2i(args[2].toNumber(exec)); if (args.size() > 3) { if (args[3].type() != KJS::BooleanType) { KJS::Object eobj = KJS::Error::create(exec, KJS::TypeError); exec->setException(eobj); return KJS::Undefined(); } ave = d2i(args[3].toBoolean(exec)); } } v->changeFrames(start, count, skip, skip >= 0, ave); return KJS::Undefined(); } KJS::Object eobj = KJS::Error::create(exec, KJS::SyntaxError); exec->setException(eobj); return KJS::Undefined(); }