bool KstPluginDialogI::saveInputs(KstCPluginPtr plugin, KstSharedPtr<Plugin> p) { bool rc = true; const QValueList<Plugin::Data::IOValue>& itable = p->data()._inputs; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = itable.begin(); it != itable.end(); ++it) { if ((*it)._type == Plugin::Data::IOValue::TableType) { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "VectorSelector"); assert(field); VectorSelector *vs = static_cast<VectorSelector*>(field); KstReadLocker vl(&KST::vectorList.lock()); KstVectorPtr v = *KST::vectorList.findTag(vs->selectedVector()); if (v) { plugin->inputVectors().insert((*it)._name, v); } else if (plugin->inputVectors().contains((*it)._name)) { plugin->inputVectors().erase((*it)._name); rc = false; } } else if ((*it)._type == Plugin::Data::IOValue::StringType) { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "StringSelector"); assert(field); StringSelector *ss = static_cast<StringSelector*>(field); KstWriteLocker sl(&KST::stringList.lock()); KstStringPtr s = *KST::stringList.findTag(ss->selectedString()); if (s == *KST::stringList.end()) { QString val = ss->_string->currentText(); KstStringPtr newString = new KstString(KstObjectTag::fromString(ss->_string->currentText()), 0L, val, true); if (!newString) { rc = false; } plugin->inputStrings().insert((*it)._name, newString); } else { plugin->inputStrings().insert((*it)._name, s); } } else if ((*it)._type == Plugin::Data::IOValue::PidType) { // Nothing } else if ((*it)._type == Plugin::Data::IOValue::FloatType) { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "ScalarSelector"); assert(field); ScalarSelector *ss = static_cast<ScalarSelector*>(field); KstWriteLocker sl(&KST::scalarList.lock()); KstScalarPtr s = *KST::scalarList.findTag(ss->selectedScalar()); if (s == *KST::scalarList.end()) { bool ok; double val = ss->_scalar->currentText().toDouble(&ok); if (ok) { KstScalarPtr newScalar = new KstScalar(KstObjectTag::fromString(ss->_scalar->currentText()), 0L, val, true, false); plugin->inputScalars().insert((*it)._name, newScalar); } else { rc = false; } } else { plugin->inputScalars().insert((*it)._name, s); } } else { } } return rc; }
void KstPluginDialogI::updateForm() { KstSharedPtr<Plugin> plugin = PluginCollection::self()->plugin(_pluginList[_w->PluginCombo->currentItem()]); if (plugin) { const QValueList<Plugin::Data::IOValue>& itable = plugin->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 = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "VectorSelector"); assert(field); if (field) { VectorSelector *vs = static_cast<VectorSelector*>(field); vs->update(); } } else if ((*it)._type == Plugin::Data::IOValue::StringType) { // string QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "StringSelector"); assert(field); if (field) { StringSelector *ss = static_cast<StringSelector*>(field); ss->update(); } } else if ((*it)._type == Plugin::Data::IOValue::PidType) { // Nothing } else { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "ScalarSelector"); assert(field); if (field) { ScalarSelector *ss = static_cast<ScalarSelector*>(field); ss->update(); } } } } }
void KstPluginDialogI::update(int new_index) { Q_UNUSED(new_index); QString selectedVector; QString selectedScalar; KstSharedPtr<Plugin> pPtr; pPtr = PluginCollection::self()->plugin(_pluginList[PluginCombo->currentItem()]); if( pPtr != NULL ) { 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); vs->update(); } } else { QObject *field = _frameWidget->child((*it)._name.latin1(), "ScalarSelector"); assert(field); if (field) { ScalarSelector *ss = static_cast<ScalarSelector*>(field); ss->update(); } } } } }
void KstBasicDialogI::createInputScalar(const QString &name, int row) { QLabel *label = new QLabel(name + ":", _w->_frame); ScalarSelector *widget = new ScalarSelector(_w->_frame, name.latin1()); connect(widget, SIGNAL(newScalarCreated()), this, SIGNAL(modified())); widget->allowDirectEntry(true); _grid->addWidget(label, row, 0); label->show(); _grid->addWidget(widget, row, 1); widget->show(); }
bool KstPluginDialogI::saveInputs(KstPluginPtr plugin, KstSharedPtr<Plugin> p) { KST::vectorList.lock().readLock(); KST::scalarList.lock().readLock(); const QValueList<Plugin::Data::IOValue>& itable = p->data()._inputs; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = itable.begin(); it != itable.end(); ++it) { if ((*it)._type == Plugin::Data::IOValue::TableType) { QObject *field = _frameWidget->child((*it)._name.latin1(), "VectorSelector"); assert(field); VectorSelector *vs = static_cast<VectorSelector*>(field); KstVectorPtr v = *KST::vectorList.findTag(vs->selectedVector()); plugin->inputVectors().insert((*it)._name, v); } else { QObject *field = _frameWidget->child((*it)._name.latin1(), "ScalarSelector"); assert(field); ScalarSelector *ss = static_cast<ScalarSelector*>(field); KstScalarPtr s = *KST::scalarList.findTag(ss->selectedScalar()); plugin->inputScalars().insert((*it)._name, s); } } KST::scalarList.lock().readUnlock(); KST::vectorList.lock().readUnlock(); return true; }
void KstPluginDialogI::generateEntries(bool input, int& cnt, QWidget *parent, QGridLayout *grid, const QValueList<Plugin::Data::IOValue>& table) { QString scalarLabelTemplate, vectorLabelTemplate, stringLabelTemplate; if (input) { stringLabelTemplate = i18n("Input string - %1:"); scalarLabelTemplate = i18n("Input scalar - %1:"); vectorLabelTemplate = i18n("Input vector - %1:"); } else { stringLabelTemplate = i18n("Output string - %1:"); scalarLabelTemplate = i18n("Output scalar - %1:"); vectorLabelTemplate = i18n("Output vector - %1:"); } for (QValueList<Plugin::Data::IOValue>::ConstIterator it = table.begin(); it != table.end(); ++it) { QString labellabel; bool scalar = false; bool string = false; switch ((*it)._type) { case Plugin::Data::IOValue::PidType: continue; case Plugin::Data::IOValue::StringType: labellabel = stringLabelTemplate.arg((*it)._name); string = true; break; case Plugin::Data::IOValue::FloatType: labellabel = scalarLabelTemplate.arg((*it)._name); scalar = true; break; case Plugin::Data::IOValue::TableType: if ((*it)._subType == Plugin::Data::IOValue::FloatSubType || (*it)._subType == Plugin::Data::IOValue::FloatNonVectorSubType) { labellabel = vectorLabelTemplate.arg((*it)._name); } else { // unsupported continue; } break; default: // unsupported continue; } QLabel *label = new QLabel(labellabel, parent, input ? "Input label" : "Output label"); QWidget *widget = 0L; if (input) { if (scalar) { ScalarSelector *w = new ScalarSelector(parent, (*it)._name.latin1()); widget = w; connect(w->_scalar, SIGNAL(activated(const QString&)), this, SLOT(updateScalarTooltip(const QString&))); connect(widget, SIGNAL(newScalarCreated()), this, SIGNAL(modified())); if (!(*it)._default.isEmpty()) { w->_scalar->insertItem((*it)._default); w->_scalar->setCurrentText((*it)._default); } KstScalarPtr p = *KST::scalarList.findTag(w->_scalar->currentText()); w->allowDirectEntry(true); if (p) { p->readLock(); QToolTip::remove(w->_scalar); QToolTip::add(w->_scalar, QString::number(p->value())); p->unlock(); } } else if (string) { StringSelector *w = new StringSelector(parent, (*it)._name.latin1()); widget = w; connect(w->_string, SIGNAL(activated(const QString&)), this, SLOT(updateStringTooltip(const QString&))); connect(widget, SIGNAL(newStringCreated()), this, SIGNAL(modified())); if (!(*it)._default.isEmpty()) { w->_string->insertItem((*it)._default); w->_string->setCurrentText((*it)._default); } KstStringPtr p = *KST::stringList.findTag(w->_string->currentText()); w->allowDirectEntry(true); if (p) { p->readLock(); QToolTip::remove(w->_string); QToolTip::add(w->_string, p->value()); p->unlock(); } } else { widget = new VectorSelector(parent, (*it)._name.latin1()); connect(widget, SIGNAL(newVectorCreated(const QString&)), this, SIGNAL(modified())); } } else {
void KstPluginDialogI::fillVectorScalarCombos(KstSharedPtr<Plugin> plugin) { bool DPvalid = false; KstCPluginPtr pp = kst_cast<KstCPlugin>(_dp); if (pp) { pp->readLock(); DPvalid = pp->isValid(); pp->unlock(); } if (plugin) { if (DPvalid) { pp->readLock(); } // Update input vector and scalar combos const QValueList<Plugin::Data::IOValue>& itable = plugin->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 = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "VectorSelector"); assert(field); if (field) { VectorSelector *vs = static_cast<VectorSelector*>(field); QString selectedVector = vs->selectedVector(); vs->update(); if (DPvalid) { vs->setSelection(pp->inputVectors()[(*it)._name]->tag().displayString()); } else { vs->setSelection(selectedVector); } } } else if ((*it)._type == Plugin::Data::IOValue::StringType) { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "StringSelector"); assert(field); if (field) { StringSelector *ss = static_cast<StringSelector*>(field); QString selectedString = ss->selectedString(); ss->update(); if (DPvalid) { ss->setSelection(pp->inputStrings()[(*it)._name]->tag().displayString()); } else { ss->setSelection(selectedString); } } } else if ((*it)._type == Plugin::Data::IOValue::PidType) { // Nothing } else { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "ScalarSelector"); assert(field); if (field) { ScalarSelector *ss = static_cast<ScalarSelector*>(field); QString selectedScalar = ss->selectedScalar(); ss->update(); if (DPvalid) { ss->setSelection(pp->inputScalars()[(*it)._name]->tag().displayString()); } else { ss->setSelection(selectedScalar); } } } } // Update output vector and scalar lineedits if (DPvalid) { const QValueList<Plugin::Data::IOValue>& otable = plugin->data()._outputs; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = otable.begin(); it != otable.end(); ++it) { QObject *field = _w->_pluginInputOutputFrame->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 = pp->outputVectors()[(*it)._name]->tagName(); } else if ((*it)._type == Plugin::Data::IOValue::PidType) { } else if ((*it)._type == Plugin::Data::IOValue::StringType) { ts = pp->outputStrings()[(*it)._name]->tagName(); } else { // scalar ts = pp->outputScalars()[(*it)._name]->tagName(); } li->setText(ts); } } pp->unlock(); } } else { // invalid plugin PluginCollection *pc = PluginCollection::self(); QString cur = _pluginList[_w->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 = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "QLineEdit"); if (field) { static_cast<QLineEdit*>(field)->setText(QString::null); } } } }
bool KstFilterDialogI::saveInputs(KstCPluginPtr plugin, KstSharedPtr<Plugin> p) { KST::vectorList.lock().readLock(); KST::scalarList.lock().writeLock(); KST::stringList.lock().writeLock(); const QValueList<Plugin::Data::IOValue>& itable = p->data()._inputs; for (QValueList<Plugin::Data::IOValue>::ConstIterator it = itable.begin(); it != itable.end(); ++it) { if ((*it)._type == Plugin::Data::IOValue::TableType) { if ((*it)._name == p->data()._filterInputVector) { KstVectorPtr v = *KST::vectorList.findTag(_yvector); plugin->inputVectors().insert((*it)._name, v); } else { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "VectorSelector"); if (field) { VectorSelector *vs = static_cast<VectorSelector*>(field); KstVectorPtr v = *KST::vectorList.findTag(vs->selectedVector()); plugin->inputVectors().insert((*it)._name, v); } } } else if ((*it)._type == Plugin::Data::IOValue::StringType) { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "StringSelector"); if (field) { StringSelector *ss = static_cast<StringSelector*>(field); KstStringPtr s = *KST::stringList.findTag(ss->selectedString()); if (s == *KST::stringList.end()) { QString val = ss->_string->currentText(); // create orphan string KstStringPtr newString = new KstString(KstObjectTag(ss->_string->currentText(), KstObjectTag::orphanTagContext), 0L, val, true); plugin->inputStrings().insert((*it)._name, newString); } else { plugin->inputStrings().insert((*it)._name, s); } } } else if ((*it)._type == Plugin::Data::IOValue::PidType) { // Nothing } else { QObject *field = _w->_pluginInputOutputFrame->child((*it)._name.latin1(), "ScalarSelector"); if (field) { ScalarSelector *ss = static_cast<ScalarSelector*>(field); KstScalarPtr s = *KST::scalarList.findTag(ss->selectedScalar()); if (s == *KST::scalarList.end()) { bool ok; double val = ss->_scalar->currentText().toDouble(&ok); if (ok) { // create orphan scalar KstScalarPtr newScalar = new KstScalar(KstObjectTag(ss->_scalar->currentText(), KstObjectTag::orphanTagContext), 0L, val, true, false); plugin->inputScalars().insert((*it)._name, newScalar); } else { plugin->inputScalars().insert((*it)._name, s); } } else { plugin->inputScalars().insert((*it)._name, s); } } } } KST::stringList.lock().unlock(); KST::scalarList.lock().unlock(); KST::vectorList.lock().unlock(); return true; }
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())); }