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())); }
bool KstVectorDialogI::editSingleObjectRV(KstVectorPtr vcPtr) { KstRVectorPtr rvp = kst_cast<KstRVector>(vcPtr); KstDataSourcePtr file; if (_fileNameDirty) { // if there is not an active KstFile, create one KST::dataSourceList.lock().writeLock(); KstDataSourceList::Iterator it = KST::dataSourceList.findReusableFileName(_w->FileName->url()); if (it == KST::dataSourceList.end()) { file = KstDataSource::loadSource(_w->FileName->url()); if (!file || !file->isValid()) { KST::dataSourceList.lock().unlock(); KMessageBox::sorry(this, i18n("The file could not be opened.")); return false; } if (file->isEmpty()) { KST::dataSourceList.lock().unlock(); KMessageBox::sorry(this, i18n("The file does not contain data.")); return false; } KST::dataSourceList.append(file); } else { file = *it; } KST::dataSourceList.lock().unlock(); } else { KstRVectorList vcList = kstObjectSubList<KstVector,KstRVector>(KST::vectorList); for (uint i = 0; i < _editMultipleWidget->_objectList->count(); i++) { if (_editMultipleWidget->_objectList->isSelected(i)) { // get the pointer to the object KstRVectorList::Iterator vcIter = vcList.findTag(_editMultipleWidget->_objectList->text(i)); if (vcIter == vcList.end()) { return false; } KstRVectorPtr rvp = *vcIter; rvp->readLock(); file = rvp->dataSource(); rvp->unlock(); } } } file->writeLock(); if (rvp) { QString pField; if (_fileNameDirty) { pField = _w->Field->currentText(); if (!file->isValidField(pField)) { KMessageBox::sorry(this, i18n("The requested field is not defined for the requested file.")); file->unlock(); return false; } } else { pField = rvp->field(); } int f0 = 0, n = 0; if (_f0Dirty) { if (_w->_kstDataRange->isStartRelativeTime()) { f0 = file->sampleForTime(_w->_kstDataRange->f0Value()); } else if (_w->_kstDataRange->isStartAbsoluteTime()) { bool ok = false; f0 = file->sampleForTime(_w->_kstDataRange->f0DateTimeValue(), &ok); if (!ok) { file->unlock(); KMessageBox::sorry(this, i18n("The requested field or file could not use the specified date.")); return false; } } else { f0 = int(_w->_kstDataRange->f0Value()); } } if (_nDirty) { if (_w->_kstDataRange->isRangeRelativeTime()) { double nValStored = _w->_kstDataRange->nValue(); if (_w->_kstDataRange->CountFromEnd->isChecked()) { int frameCount = file->frameCount(_w->Field->currentText()); double msCount = file->relativeTimeForSample(frameCount - 1); n = frameCount - 1 - file->sampleForTime(msCount - nValStored); } else { double fTime = file->relativeTimeForSample(f0); n = file->sampleForTime(fTime + nValStored) - file->sampleForTime(fTime); } } else { n = int(_w->_kstDataRange->nValue()); } } // use existing requested start and number of frames if not dirty rvp->readLock(); if (!_f0Dirty) { f0 = rvp->reqStartFrame(); } if (!_nDirty) { n = rvp->reqNumFrames(); } // other parameters for multiple edit bool pCountFromEnd, pReadToEnd, pDoSkip, pDoFilter; int pSkip; if (_countFromEndDirty) { pCountFromEnd = _w->_kstDataRange->CountFromEnd->isChecked(); } else { pCountFromEnd = rvp->countFromEOF(); } if (_readToEndDirty) { pReadToEnd = _w->_kstDataRange->ReadToEnd->isChecked(); } else { pReadToEnd = rvp->readToEOF(); } if (_skipDirty) { pSkip = _w->_kstDataRange->Skip->value(); } else { pSkip = rvp->skip(); } if (_doSkipDirty) { pDoSkip = _w->_kstDataRange->DoSkip->isChecked(); } else { pDoSkip = rvp->doSkip(); } if (_doFilterDirty) { pDoFilter = _w->_kstDataRange->DoFilter->isChecked(); } else { pDoFilter = rvp->doAve(); } rvp->unlock(); // change the vector rvp->writeLock(); rvp->change(file, pField, rvp->tag(), pCountFromEnd ? -1 : f0, pReadToEnd ? -1 : n, pSkip, pDoSkip, pDoFilter); rvp->unlock(); } else { KstSVectorPtr svp = kst_cast<KstSVector>(_dp); if (!svp) { file->unlock(); return true; // shouldn't be needed } double x0 = _w->_xMin->text().toDouble(); double x1 = _w->_xMax->text().toDouble(); int n = _w->_N->value(); svp->writeLock(); svp->changeRange(x0, x1, n); svp->setTagName(KstObjectTag(_tagName->text(), svp->tag().context())); // FIXME: doesn't verify uniqueness, doesn't allow changing tag context svp->unlock(); } file->unlock(); return true; }
bool KstVectorDialogI::newObject() { KstDataSourcePtr file; QString tag_name = _tagName->text(); if (_w->_readFromSource->isChecked()) { tag_name.replace(defaultTag, _w->Field->currentText()); tag_name = KST::suggestVectorName(tag_name); // if there is not an active DataSource, create one { KST::dataSourceList.lock().writeLock(); KstDataSourceList::Iterator it = KST::dataSourceList.findReusableFileName(_w->FileName->url()); if (it == KST::dataSourceList.end()) { file = KstDataSource::loadSource(_w->FileName->url()); if (!file || !file->isValid()) { KST::dataSourceList.lock().unlock(); KMessageBox::sorry(this, i18n("The file could not be loaded.")); return false; } if (file->isEmpty()) { KST::dataSourceList.lock().unlock(); KMessageBox::sorry(this, i18n("The file does not contain data.")); return false; } KST::dataSourceList.append(file); } else { file = *it; } KST::dataSourceList.lock().unlock(); } file->readLock(); if (!file->isValidField(_w->Field->currentText())) { file->unlock(); KMessageBox::sorry(this, i18n("The requested field is not defined for the requested file.")); return false; } int f0, n; if (_w->_kstDataRange->isStartRelativeTime()) { f0 = file->sampleForTime(_w->_kstDataRange->f0Value()); } else if (_w->_kstDataRange->isStartAbsoluteTime()) { bool ok = false; f0 = file->sampleForTime(_w->_kstDataRange->f0DateTimeValue(), &ok); if (!ok) { file->unlock(); KMessageBox::sorry(this, i18n("The requested field or file could not use the specified date.")); return false; } } else { f0 = int(_w->_kstDataRange->f0Value()); } if (_w->_kstDataRange->isRangeRelativeTime()) { double nValStored = _w->_kstDataRange->nValue(); if (_w->_kstDataRange->CountFromEnd->isChecked()) { int frameCount = file->frameCount(_w->Field->currentText()); double msCount = file->relativeTimeForSample(frameCount - 1); n = frameCount - 1 - file->sampleForTime(msCount - nValStored); } else { double fTime = file->relativeTimeForSample(f0); n = file->sampleForTime(fTime + nValStored) - file->sampleForTime(fTime); } } else { n = int(_w->_kstDataRange->nValue()); } file->unlock(); // create the vector KstRVectorPtr vector = new KstRVector( file, _w->Field->currentText(), KstObjectTag(tag_name, file->tag(), false), _w->_kstDataRange->CountFromEnd->isChecked() ? -1 : f0, _w->_kstDataRange->ReadToEnd->isChecked() ? -1 : n, _w->_kstDataRange->Skip->value(), _w->_kstDataRange->DoSkip->isChecked(), _w->_kstDataRange->DoFilter->isChecked()); emit vectorCreated(KstVectorPtr(vector)); vector = 0L; emit modified(); } else { double x0 = _w->_xMin->text().toDouble(); double x1 = _w->_xMax->text().toDouble(); int n = _w->_N->value(); QString tagname = _tagName->text(); if (tagname == defaultTag) { tagname = KST::suggestVectorName(QString("(%1..%2)").arg(x0).arg(x1)); } KstSVectorPtr svector = new KstSVector(x0, x1, n, KstObjectTag(tagname, KstObjectTag::globalTagContext)); emit vectorCreated(KstVectorPtr(svector)); svector = 0L; emit modified(); } return true; }
bool KstVectorDialogI::edit_I() { KstDataSourcePtr file; KstRVectorList vectorList = kstObjectSubList<KstVector,KstRVector>(KST::vectorList); /* verify that the vector name is unique */ DP->readLock(); if (_tagName->text() != DP->tagName() && KST::vectorTagNameNotUnique(_tagName->text())) { DP->readUnlock(); return false; } DP->readUnlock(); /* if there is not an active KstFile, create one */ { KST::dataSourceList.lock().writeLock(); KstDataSourceList::Iterator it = KST::dataSourceList.findFileName(FileName->url()); if (it == KST::dataSourceList.end()) { file = KstDataSource::loadSource(FileName->url()); if (!file || !file->isValid()) { KST::dataSourceList.lock().writeUnlock(); KMessageBox::sorry(this, i18n("The file could not be opened.")); return false; } if (file->isEmpty()) { KST::dataSourceList.lock().writeUnlock(); KMessageBox::sorry(this, i18n("The file does not contain data.")); return false; } KST::dataSourceList.append(file); } else { file = *it; } KST::dataSourceList.lock().writeUnlock(); } file->readLock(); if (!file->isValidField(Field->currentText())) { file->readUnlock(); KMessageBox::sorry(this, i18n("The requested field is not defined for " "the requested file\n")); return false; } file->readUnlock(); int f0, n; if (_kstDataRange->isTime()) { file->readLock(); f0 = file->sampleForTime(_kstDataRange->f0Value()); n = file->sampleForTime(_kstDataRange->nValue()); file->readUnlock(); } else { f0 = _kstDataRange->f0Value(); n = _kstDataRange->nValue(); } /* change the vector */ DP->writeLock(); DP->change(file, Field->currentText(), _tagName->text(), (_kstDataRange->CountFromEnd->isChecked() ? -1 : f0), (_kstDataRange->ReadToEnd->isChecked() ? -1 : n), _kstDataRange->Skip->value(), _kstDataRange->DoSkip->isChecked(), _kstDataRange->DoFilter->isChecked()); DP->writeUnlock(); vectorList.clear(); emit modified(); return true; }
bool KstVectorDialogI::new_I() { KstDataSourcePtr file; KstRVectorList vectorList = kstObjectSubList<KstVector,KstRVector>(KST::vectorList); QString tag_name = _tagName->text(); tag_name.replace("<New_Vector>", Field->currentText()); KST::vectorList.lock().readLock(); int i_c = KST::vectorList.count() + 1; KST::vectorList.lock().readUnlock(); while (KST::vectorTagNameNotUnique(tag_name, false)) { tag_name.sprintf("V%d-", i_c); tag_name += Field->currentText(); i_c++; } vectorList.clear(); /* if there is not an active DataSource, create one */ { KST::dataSourceList.lock().writeLock(); KstDataSourceList::Iterator it = KST::dataSourceList.findFileName(FileName->url()); if (it == KST::dataSourceList.end()) { file = KstDataSource::loadSource(FileName->url()); if (!file || !file->isValid()) { KST::dataSourceList.lock().writeUnlock(); KMessageBox::sorry(this, i18n("The file could not be loaded.")); return false; } if (file->isEmpty()) { KST::dataSourceList.lock().writeUnlock(); KMessageBox::sorry(this, i18n("The file does not contain data.")); return false; } KST::dataSourceList.append(file); } else { file = *it; } KST::dataSourceList.lock().writeUnlock(); } file->readLock(); if (!file->isValidField(Field->currentText())) { file->readUnlock(); KMessageBox::sorry(this, i18n("The requested field is not defined for the requested file.")); return false; } file->readUnlock(); int f0, n; if (_kstDataRange->isTime()) { file->readLock(); f0 = file->sampleForTime(_kstDataRange->f0Value()); n = file->sampleForTime(_kstDataRange->nValue()); file->readUnlock(); } else { f0 = _kstDataRange->f0Value(); n = _kstDataRange->nValue(); } /* create the vector */ KstRVectorPtr vector = new KstRVector( file, Field->currentText(), tag_name, (_kstDataRange->CountFromEnd->isChecked() ? -1 : f0), (_kstDataRange->ReadToEnd->isChecked() ? -1 : n), _kstDataRange->Skip->value(), _kstDataRange->DoSkip->isChecked(), _kstDataRange->DoFilter->isChecked()); KST::addVectorToList(KstVectorPtr(vector)); emit vectorCreated(KstVectorPtr(vector)); vector = 0L; emit modified(); return true; }