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); }
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; }