KstDataObjectPtr KstBasicPlugin::makeDuplicate(KstDataObjectDataObjectMap &map) { KstBasicPluginPtr plugin = kst_cast<KstBasicPlugin>(KstDataObject::createPlugin(propertyString())); // use same inputs for (KstVectorMap::ConstIterator iter = _inputVectors.begin(); iter != _inputVectors.end(); ++iter) { plugin->inputVectors().insert(iter.key(), iter.data()); } for (KstScalarMap::ConstIterator iter = _inputScalars.begin(); iter != _inputScalars.end(); ++iter) { plugin->inputScalars().insert(iter.key(), iter.data()); } for (KstStringMap::ConstIterator iter = _inputStrings.begin(); iter != _inputStrings.end(); ++iter) { plugin->inputStrings().insert(iter.key(), iter.data()); } // create new outputs for (KstVectorMap::ConstIterator iter = outputVectors().begin(); iter != outputVectors().end(); ++iter) { KstWriteLocker blockVectorUpdates(&KST::vectorList.lock()); KstVectorPtr v = new KstVector(KstObjectTag(iter.data()->tag().tag() + "'", iter.data()->tag().context()), 0, plugin.data()); // FIXME: unique tag generation plugin->outputVectors().insert(iter.key(), v); } for (KstScalarMap::ConstIterator iter = outputScalars().begin(); iter != outputScalars().end(); ++iter) { KstScalarPtr s = new KstScalar(KstObjectTag(iter.data()->tag().tag() + "'", iter.data()->tag().context()), plugin.data()); // FIXME: unique tag generation plugin->outputScalars().insert(iter.key(), s); } for (KstStringMap::ConstIterator iter = outputStrings().begin(); iter != outputStrings().end(); ++iter) { KstStringPtr s = new KstString(KstObjectTag(iter.data()->tag().tag() + "'", iter.data()->tag().context()), plugin.data()); // FIXME: unique tag generation plugin->outputStrings().insert(iter.key(), s); } // set the same plugin plugin->setTagName(KstObjectTag(tag().tag() + "'", tag().context())); // FIXME: unique tag generation method map.insert(this, KstDataObjectPtr(plugin)); return KstDataObjectPtr(plugin); }
void KstBasicDialogI::init() { KstBasicPluginPtr ptr; if (_newDialog) { ptr = kst_cast<KstBasicPlugin>(KstDataObject::plugin(_pluginName)); } else { ptr = kst_cast<KstBasicPlugin>(findObject(_pluginName)); } Q_ASSERT(ptr); //shouldn't happen if (_grid) { //reset QLayoutIterator it = _grid->iterator(); while(QLayoutItem *item = it.takeCurrent()) { delete item->widget(); delete item; } delete _grid; _grid = 0; } int cnt = 0; int numInputOutputs = ptr->inputVectorList().count() + ptr->inputScalarList().count() + ptr->inputStringList().count() + ptr->outputVectorList().count() + ptr->outputScalarList().count() + ptr->outputStringList().count(); _grid = new QGridLayout(_w->_frame, numInputOutputs + 1, 2, 0, 8); _grid->setColStretch(1,1); _grid->setColStretch(0,0); //create input widgets //First, the inputVectors... QStringList iv = ptr->inputVectorList(); QStringList::ConstIterator ivI = iv.begin(); for (; ivI != iv.end(); ++ivI) { createInputVector(*ivI, ++cnt); } //Now, the inputScalars... QStringList is = ptr->inputScalarList(); QStringList::ConstIterator isI = is.begin(); for (; isI != is.end(); ++isI) { createInputScalar(*isI, ++cnt); } //Finally, the inputStrings... QStringList istr = ptr->inputStringList(); QStringList::ConstIterator istrI = istr.begin(); for (; istrI != istr.end(); ++istrI) { createInputString(*istrI, ++cnt); } //create sep cnt++; QFrame* line = new QFrame(_w->_frame); line->setFrameShadow(QFrame::Sunken); line->setFrameShape(QFrame::HLine); _grid->addMultiCellWidget(line, cnt, cnt, 0, 1); line->show(); cnt++; //create output widgets //output vectors... QStringList ov = ptr->outputVectorList(); QStringList::ConstIterator ovI = ov.begin(); for (; ovI != ov.end(); ++ovI) { createOutputWidget(*ovI, ++cnt); } //output scalars... QStringList os = ptr->outputScalarList(); QStringList::ConstIterator osI = os.begin(); for (; osI != os.end(); ++osI) { createOutputWidget(*osI, ++cnt); } //ouput strings... QStringList ostr = ptr->outputStringList(); QStringList::ConstIterator ostrI = ostr.begin(); for (; ostrI != ostr.end(); ++ostrI) { createOutputWidget(*ostrI, ++cnt); } }
void KstBasicDialogI::fillFieldsForEdit() { KstBasicPluginPtr ptr = kst_cast<KstBasicPlugin>(_dp); if (!ptr) return; //shouldn't happen ptr->readLock(); _tagName->setText(ptr->tagName()); _legendText->setText(defaultTag); //FIXME? //Update the various widgets... //input vectors... QStringList iv = ptr->inputVectorList(); QStringList::ConstIterator ivI = iv.begin(); for (; ivI != iv.end(); ++ivI) { KstVectorPtr p = ptr->inputVector(*ivI); QString t = p ? p->tagName() : QString::null; if (VectorSelector *w = vector(*ivI)) { w->setSelection(t); } } //input scalars... QStringList is = ptr->inputScalarList(); QStringList::ConstIterator isI = is.begin(); for (; isI != is.end(); ++isI) { KstScalarPtr p = ptr->inputScalar(*isI); QString t = p ? p->tagName() : QString::null; if (ScalarSelector *w = scalar(*isI)) { w->setSelection(t); } } //input strings... QStringList istr = ptr->inputStringList(); QStringList::ConstIterator istrI = istr.begin(); for (; istrI != istr.end(); ++istrI) { KstStringPtr p = ptr->inputString(*istrI); QString t = p ? p->tagName() : QString::null; if (StringSelector *w = string(*istrI)) { w->setSelection(t); } } //output vectors... QStringList ov = ptr->outputVectorList(); QStringList::ConstIterator ovI = ov.begin(); for (; ovI != ov.end(); ++ovI) { KstVectorPtr p = ptr->outputVector(*ovI); QString t = p ? p->tagName() : QString::null; if (QLineEdit *w = output(*ovI)) { w->setText(t); w->setEnabled(false); } } //output scalars... QStringList os = ptr->outputScalarList(); QStringList::ConstIterator osI = os.begin(); for (; osI != os.end(); ++osI) { KstScalarPtr p = ptr->outputScalar(*osI); QString t = p ? p->tagName() : QString::null; if (QLineEdit *w = output(*osI)) { w->setText(t); w->setEnabled(false); } } //ouput strings... QStringList ostr = ptr->outputStringList(); QStringList::ConstIterator ostrI = ostr.begin(); for (; ostrI != ostr.end(); ++ostrI) { KstStringPtr p = ptr->outputString(*ostrI); QString t = p ? p->tagName() : QString::null; if (QLineEdit *w = output(*ostrI)) { w->setText(t); w->setEnabled(false); } } ptr->unlock(); adjustSize(); resize(minimumSizeHint()); setFixedHeight(height()); }
bool KstBasicDialogI::editSingleObject(KstBasicPluginPtr ptr) { KST::vectorList.lock().readLock(); KST::scalarList.lock().readLock(); KST::stringList.lock().readLock(); { // leave this scope here to destroy the iterators //input vectors... KstVectorList::Iterator v; QStringList iv = ptr->inputVectorList(); QStringList::ConstIterator ivI = iv.begin(); for (; ivI != iv.end(); ++ivI) { if (VectorSelector *w = vector(*ivI)) { v = KST::vectorList.findTag(w->selectedVector()); if (v != KST::vectorList.end()) { ptr->setInputVector(*ivI, *v); } } } //input scalars... KstScalarList::Iterator s; QStringList is = ptr->inputScalarList(); QStringList::ConstIterator isI = is.begin(); for (; isI != is.end(); ++isI) { if (ScalarSelector *w = scalar(*isI)) { s = KST::scalarList.findTag(w->selectedScalar()); if (s != KST::scalarList.end()) { ptr->setInputScalar(*isI, *s); } else { //Deal with direct entry bool ok; double val = w->_scalar->currentText().toDouble(&ok); if (ok) { ptr->setInputScalar(*isI, new KstScalar(w->_scalar->currentText(), 0L, val, true, false, false)); } else { //deal with error... } } } } //input strings... KstStringList::Iterator str; QStringList istr = ptr->inputStringList(); QStringList::ConstIterator istrI = istr.begin(); for (; istrI != istr.end(); ++istrI) { if (StringSelector *w = string(*istrI)) { str = KST::stringList.findTag(w->selectedString()); if (str != KST::stringList.end()) { ptr->setInputString(*istrI, *str); } } } } KST::stringList.lock().unlock(); KST::scalarList.lock().unlock(); KST::vectorList.lock().unlock(); return true; }
bool KstBasicDialogI::editObject() { //called upon clicking 'ok' in 'edit' mode //return false if the specified objects can't be editted, otherwise true KstBasicPluginPtr ptr = kst_cast<KstBasicPlugin>(_dp); Q_ASSERT(ptr); //should never happen... ptr->writeLock(); if (_tagName->text() != ptr->tagName() && KstData::self()->dataTagNameNotUnique(_tagName->text())) { _tagName->setFocus(); ptr->unlock(); return false; } ptr->setTagName(_tagName->text()); // Must unlock before clear() for (KstVectorMap::Iterator i = ptr->inputVectors().begin(); i != ptr->inputVectors().end(); ++i) { (*i)->unlock(); } for (KstScalarMap::Iterator i = ptr->inputScalars().begin(); i != ptr->inputScalars().end(); ++i) { (*i)->unlock(); } for (KstStringMap::Iterator i = ptr->inputStrings().begin(); i != ptr->inputStrings().end(); ++i) { (*i)->unlock(); } ptr->inputVectors().clear(); ptr->inputScalars().clear(); ptr->inputStrings().clear(); ptr->unlock(); // Save the vectors and scalars if (!editSingleObject(ptr) || !ptr->isValid()) { KMessageBox::sorry(this, i18n("There is an error in the values you entered.")); return false; } ptr->setDirty(); emit modified(); return true; }
bool KstBasicDialogI::newObject() { //called upon clicking 'ok' in 'new' mode //return false if the specified objects can't be made, otherwise true //Need to create a new object rather than use the one in KstDataObject pluginList KstBasicPluginPtr ptr = kst_cast<KstBasicPlugin>( KstDataObject::createPlugin(_pluginName)); Q_ASSERT(ptr); //should never happen... ptr->writeLock(); QString tagName = _tagName->text(); if (tagName != defaultTag && KstData::self()->dataTagNameNotUnique(tagName, true, this)) { _tagName->setFocus(); return false; } if (tagName == defaultTag) { tagName = KST::suggestPluginName(ptr->propertyString()); } ptr->setTagName(tagName); ptr->unlock(); // Save the vectors and scalars if (!editSingleObject(ptr) || !ptr->isValid()) { KMessageBox::sorry(this, i18n("There is an error in the values you entered.")); return false; } //set the outputs //output vectors... QStringList ov = ptr->outputVectorList(); QStringList::ConstIterator ovI = ov.begin(); for (; ovI != ov.end(); ++ovI) { if (QLineEdit *w = output(*ovI)) { ptr->setOutputVector(*ovI, w->text()); } } //output scalars... QStringList os = ptr->outputScalarList(); QStringList::ConstIterator osI = os.begin(); for (; osI != os.end(); ++osI) { if (QLineEdit *w = output(*osI)) { ptr->setOutputScalar(*osI, w->text()); } } //ouput strings... QStringList ostr = ptr->outputStringList(); QStringList::ConstIterator ostrI = ostr.begin(); for (; ostrI != ostr.end(); ++ostrI) { if (QLineEdit *w = output(*ostrI)) { ptr->setOutputString(*ostrI, w->text()); } } if (!ptr || !ptr->isValid()) { KMessageBox::sorry(this, i18n("There is an error in the plugin you entered.")); return false; } ptr->setDirty(); KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(ptr.data()); KST::dataObjectList.lock().unlock(); ptr = 0L; // drop the reference emit modified(); return true; }