KstDataObjectPtr KstCPlugin::makeDuplicate(KstDataObjectDataObjectMap& duplicatedMap) { KstCPluginPtr plugin = new KstCPlugin; // 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) { KstVectorPtr v = new KstVector(iter.data()->tagName() + "'", 0, plugin.data()); plugin->outputVectors().insert(iter.key(), v); KST::addVectorToList(v); } for (KstScalarMap::ConstIterator iter = outputScalars().begin(); iter != outputScalars().end(); ++iter) { KstScalarPtr s = new KstScalar(iter.data()->tagName() + "'", plugin.data()); plugin->outputScalars().insert(iter.key(), s); } for (KstStringMap::ConstIterator iter = outputStrings().begin(); iter != outputStrings().end(); ++iter) { KstStringPtr s = new KstString(iter.data()->tagName() + "'", plugin.data()); plugin->outputStrings().insert(iter.key(), s); } // set the same plugin plugin->setPlugin(_plugin); plugin->setTagName(tagName() + "'"); duplicatedMap.insert(this, KstDataObjectPtr(plugin)); return KstDataObjectPtr(plugin); }
bool KstFilterDialogI::newObject() { QString tagName = _tagName->text(); if (KstData::self()->dataTagNameNotUnique(tagName, true, this)) { _tagName->setFocus(); return false; } else { int pitem = _w->PluginCombo->currentItem(); if (pitem >= 0 && _w->PluginCombo->count() > 0) { KstSharedPtr<Plugin> pPtr = PluginCollection::self()->plugin(_pluginList[pitem]); if (pPtr) { KstCPluginPtr plugin = new KstCPlugin; KstWriteLocker pl(plugin); plugin->setDirty(); if (saveInputs(plugin, pPtr)) { if (tagName == plugin_defaultTag) { tagName = KST::suggestPluginName(_pluginList[pitem], KstObjectTag::fromString(_yvector)); } plugin->setTagName(KstObjectTag(tagName, KstObjectTag::globalTagContext)); // FIXME: tag context always global? plugin->setPlugin(pPtr); if (saveOutputs(plugin, pPtr)) { if (plugin->isValid()) { if (!createCurve(plugin)) { KMessageBox::sorry(this, i18n("There is an error in the plugin you entered.")); return false; } else { KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(plugin.data()); KST::dataObjectList.lock().unlock(); } } else { KMessageBox::sorry(this, i18n("There is an error in the plugin you entered.")); return false; } } else { KMessageBox::sorry(this, i18n("There is an error in the outputs you entered.")); return false; } } else { KMessageBox::sorry(this, i18n("There is an error in the inputs you entered.")); return false; } } } emit modified(); } return true; }
bool KstPluginDialogI::newObject() { QString tagName = _tagName->text(); if (tagName != plugin_defaultTag && KstData::self()->dataTagNameNotUnique(tagName, true, this)) { _tagName->setFocus(); return false; } KstCPluginPtr plugin; int pitem = _w->PluginCombo->currentItem(); if (pitem >= 0 && _w->PluginCombo->count() > 0) { KstSharedPtr<Plugin> pPtr = PluginCollection::self()->plugin(_pluginList[pitem]); if (pPtr) { plugin = new KstCPlugin; KstWriteLocker pl(plugin); // set the tag name before any dependents are created if (tagName == plugin_defaultTag) { tagName = KST::suggestPluginName(_pluginList[pitem]); } plugin->setTagName(KstObjectTag(tagName, KstObjectTag::globalTagContext)); if (!saveInputs(plugin, pPtr)) { KMessageBox::sorry(this, i18n("There is an error in the inputs you entered.")); plugin = 0L; return false; } plugin->setPlugin(pPtr); if (!saveOutputs(plugin, pPtr)) { KMessageBox::sorry(this, i18n("There is an error in the outputs you entered.")); plugin = 0L; return false; } } } if (!plugin || !plugin->isValid()) { KMessageBox::sorry(this, i18n("There is an error in the plugin you entered.")); return false; } plugin->setDirty(); KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(plugin.data()); KST::dataObjectList.lock().unlock(); plugin = 0L; emit modified(); return true; }
KstDataObjectPtr KstCPlugin::makeDuplicate(KstDataObjectDataObjectMap& duplicatedMap) { KstCPluginPtr plugin = new KstCPlugin; // 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->setPlugin(_plugin); plugin->setTagName(KstObjectTag(tag().tag() + "'", tag().context())); // FIXME: unique tag generation method duplicatedMap.insert(this, KstDataObjectPtr(plugin)); return KstDataObjectPtr(plugin); }
bool KstPluginDialogI::saveOutputs(KstCPluginPtr plugin, KstSharedPtr<Plugin> p) { const QValueList<Plugin::Data::IOValue>& otable = p->data()._outputs; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = otable.begin(); it != otable.end(); ++it) { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "QLineEdit"); if (!field) { continue; // Some are unsupported } QLineEdit *li = static_cast<QLineEdit*>(field); if (li->text().isEmpty()) { li->setText((*it)._name); } QString nt = li->text(); if ((*it)._type == Plugin::Data::IOValue::TableType) { if (!KstData::self()->vectorTagNameNotUnique(nt, false)) { // Implicitly creates it if it doesn't exist KstVectorPtr v = plugin->outputVectors()[(*it)._name]; if (!v) { KstWriteLocker blockVectorUpdates(&KST::vectorList.lock()); v = new KstVector(KstObjectTag(nt, plugin->tag()), 0, plugin.data()); plugin->outputVectors().insert((*it)._name, v); } v->setTagName(KstObjectTag(nt, plugin->tag())); } else if (plugin->outputVectors()[(*it)._name]->tagName() != nt) { while (KstData::self()->vectorTagNameNotUnique(nt, false)) { nt += "'"; } KstVectorPtr v; if (plugin->outputVectors().contains((*it)._name)) { v = plugin->outputVectors()[(*it)._name]; } else { KstWriteLocker blockVectorUpdates(&KST::vectorList.lock()); v = new KstVector(KstObjectTag(nt, plugin->tag()), 0, plugin.data()); plugin->outputVectors().insert((*it)._name, v); } v->setTagName(KstObjectTag(nt, plugin->tag())); } } else if ((*it)._type == Plugin::Data::IOValue::StringType) { if (!KstData::self()->vectorTagNameNotUnique(nt, false)) { KstStringPtr s; if (plugin->outputStrings().contains((*it)._name)) { s = plugin->outputStrings()[(*it)._name]; } else { KstWriteLocker blockStringUpdates(&KST::stringList.lock()); s = new KstString(KstObjectTag(nt, plugin->tag()), plugin.data()); plugin->outputStrings().insert((*it)._name, s); } s->setTagName(KstObjectTag(nt, plugin->tag())); } else if (plugin->outputStrings()[(*it)._name]->tagName() != nt) { while (KstData::self()->vectorTagNameNotUnique(nt, false)) { nt += "'"; } KstStringPtr s; if (plugin->outputStrings().contains((*it)._name)) { s = plugin->outputStrings()[(*it)._name]; } else { KstWriteLocker blockStringUpdates(&KST::stringList.lock()); s = new KstString(KstObjectTag(nt, plugin->tag()), plugin.data()); plugin->outputStrings().insert((*it)._name, s); } s->setTagName(KstObjectTag(nt, plugin->tag())); } } else if ((*it)._type == Plugin::Data::IOValue::PidType) { // Nothing } else if ((*it)._type == Plugin::Data::IOValue::FloatType) { if (!KstData::self()->vectorTagNameNotUnique(nt, false)) { KstScalarPtr s; if (plugin->outputScalars().contains((*it)._name)) { s = plugin->outputScalars()[(*it)._name]; } else { KstWriteLocker blockScalarUpdates(&KST::scalarList.lock()); s = new KstScalar(KstObjectTag(nt, plugin->tag()), plugin.data()); plugin->outputScalars().insert((*it)._name, s); } s->setTagName(KstObjectTag(nt, plugin->tag())); } else if (plugin->outputScalars()[(*it)._name]->tagName() != nt) { while (KstData::self()->vectorTagNameNotUnique(nt, false)) { nt += "'"; } KstScalarPtr s; if (plugin->outputScalars().contains((*it)._name)) { s = plugin->outputScalars()[(*it)._name]; } else { KstWriteLocker blockScalarUpdates(&KST::scalarList.lock()); s = new KstScalar(KstObjectTag(nt, plugin->tag()), plugin.data()); plugin->outputScalars().insert((*it)._name, s); } s->setTagName(KstObjectTag(nt, plugin->tag())); } } } return true; }