KstDataObjectPtr KstPlugin::makeDuplicate(KstDataObjectDataObjectMap& duplicatedMap) { KstPluginPtr plugin = new KstPlugin; // 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); }
void KstPluginDialogI::new_I() { KstPluginPtr plugin; QString tagName = Select->currentText(); if (KST::dataTagNameNotUnique(tagName, true, this)) { Select->setFocus(); return; } int pitem = PluginCombo->currentItem(); if (pitem >= 0 && PluginCombo->count() > 0) { KstSharedPtr<Plugin> pPtr = PluginCollection::self()->plugin(_pluginList[pitem]); if (pPtr != 0L) { plugin = new KstPlugin; if (!saveInputs(plugin, pPtr)) { return; } plugin->setPlugin(pPtr); if (tagName.endsWith(newPluginString)) { QString tmpTagName; int i = 0; do { tmpTagName = i18n("P%1-%2").arg(++i).arg(_pluginList[pitem]); } while (KST::dataTagNameNotUnique(tmpTagName, false)); tagName = tmpTagName; } plugin->setTagName(tagName); if (!saveOutputs(plugin, pPtr)) { return; } } } if (!plugin || !plugin->isValid()) { KMessageBox::sorry(this, i18n("There is an error in the plugin you entered. Please fix it.")); return; } KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(plugin.data()); KST::dataObjectList.lock().writeUnlock(); plugin = 0L; emit modified(); }
void KstPluginDialogI::edit_I() { int index = Select->currentItem(); if (Select->count() == 0 || index < 0) { new_I(); return; } QString tagName = Select->currentText(); KstPluginList pl = kstObjectSubList<KstDataObject, KstPlugin>(KST::dataObjectList); KstPluginPtr plugin = pl[index]; if (!plugin.data()) { new_I(); return; } int pitem = PluginCombo->currentItem(); if (tagName.endsWith(newPluginString)) { QString tmpTagName; int i = 0; do { tmpTagName = i18n("P%1-%2").arg(++i).arg(_pluginList[pitem]); } while (KST::dataTagNameNotUnique(tmpTagName, false)); tagName = tmpTagName; } //kdDebug() << "Apply as edit [" << tagName << "]" << endl; if (tagName != plugin->tagName()) { if (KST::dataTagNameNotUnique(tagName, true, this)) { Select->setFocus(); return; } } plugin->setTagName(tagName); plugin->inputVectors().clear(); plugin->inputScalars().clear(); KstSharedPtr<Plugin> pPtr = PluginCollection::self()->plugin(_pluginList[pitem]); // Save the vectors and scalars if (!saveInputs(plugin, pPtr)) { return; } if (pitem >= 0 && PluginCombo->count() > 0) { plugin->setPlugin(pPtr); } if (!saveOutputs(plugin, pPtr)) { return; } if (!plugin->isValid()) { KMessageBox::sorry(this, i18n("There is an error in the plugin you entered. Please fix it.")); return; } plugin = 0L; // release pl.clear(); // release emit modified(); }