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(); }
void KstPluginDialogI::updatePlugin(int new_index) { QString selectedVector; QString selectedScalar; int oldSelect = Select->currentItem(); int oldCount = Select->count(); KstPluginList pl = kstObjectSubList<KstDataObject, KstPlugin>(KST::dataObjectList); Select->clear(); for (KstPluginList::iterator it = pl.begin(); it != pl.end(); ++it) { Select->insertItem((*it)->tagName()); } if (new_index == -2 || Select->count() == 0) { Select->insertItem(i18n("P%1-%2").arg(Select->count()+1).arg(newPluginString)); Select->setCurrentItem(Select->count()-1); } else if (new_index >= 0 && new_index < Select->count()) { Select->setCurrentItem(new_index); } else if (oldCount != Select->count()) { Select->setCurrentItem(Select->count()-1); } else { Select->setCurrentItem(oldSelect < Select->count() ? oldSelect : Select->count()-1); } if (_pluginList.isEmpty()) { updatePluginList(); } KstPluginPtr plugin = pl[Select->currentItem()]; if (!plugin) { kdWarning() << "Couldn't find plugin in list: " << Select->currentItem() << endl; return; } int oldPluginIndex = PluginCombo->currentItem(); int newPluginIndex = _pluginList.findIndex(plugin->plugin()->data()._name); bool updateCombos = (newPluginIndex != oldPluginIndex); if (updateCombos) { PluginCombo->setCurrentItem(newPluginIndex); pluginChanged(PluginCombo->currentItem()); } KstSharedPtr<Plugin> pPtr = PluginCollection::self()->plugin(_pluginList[PluginCombo->currentItem()]); if( pPtr != 0 ) { // Update input vector and scalar combos const QValueList<Plugin::Data::IOValue>& itable = pPtr->data()._inputs; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = itable.begin(); it != itable.end(); ++it) { if ((*it)._type == Plugin::Data::IOValue::TableType) { // vector QObject *field = _frameWidget->child((*it)._name.latin1(), "VectorSelector"); assert(field); if (field) { VectorSelector *vs = static_cast<VectorSelector*>(field); selectedVector = vs->selectedVector(); if (!updateCombos) { vs->update(); } if (plugin.data() && plugin->isValid()) { vs->setSelection(plugin->inputVectors()[(*it)._name]->tagName()); } else { vs->setSelection(selectedVector); } } } else { QObject *field = _frameWidget->child((*it)._name.latin1(), "ScalarSelector"); assert(field); if (field) { ScalarSelector *ss = static_cast<ScalarSelector*>(field); selectedScalar = ss->selectedScalar( ); if (!updateCombos) { ss->update(); } if (plugin.data() && plugin->isValid()) { ss->setSelection(plugin->inputScalars()[(*it)._name]->tagName()); } else { ss->setSelection(selectedScalar); } } } } // Update output vector and scalar lineedits // const QValueList<Plugin::Data::IOValue>& otable = plugin->plugin()->data()._outputs; if (plugin.data() && plugin->isValid()) { const QValueList<Plugin::Data::IOValue>& otable = pPtr->data()._outputs; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = otable.begin(); it != otable.end(); ++it) { QObject *field = _frameWidget->child((*it)._name.latin1(), "QLineEdit"); assert(field); if (field) { QLineEdit *li = static_cast<QLineEdit*>(field); QString ts; if ((*it)._type == Plugin::Data::IOValue::TableType) { // vector ts = plugin->outputVectors()[(*it)._name]->tagName(); } else { // scalar ts = plugin->outputScalars()[(*it)._name]->tagName(); } li->setText(ts); } } } } else { // invalid plugin PluginCollection *pc = PluginCollection::self(); QString cur = _pluginList[PluginCombo->currentItem()]; Plugin::Data pdata = pc->pluginList()[pc->pluginNameList()[cur]]; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = pdata._outputs.begin(); it != pdata._outputs.end(); ++it) { QObject *field = _frameWidget->child((*it)._name.latin1(), "QLineEdit"); if (field) { static_cast<QLineEdit*>(field)->setText(QString::null); } } } QTimer::singleShot(0, this, SLOT(fixupLayout())); }