QString NodeCreationDialog::getNodeName(int *major) const { QString name = _imp->textEdit->text(); for (PluginsMap::iterator it = _imp->items.begin(); it != _imp->items.end(); ++it) { if (it->second.size() == 1) { if ( ( *it->second.begin() )->generateUserFriendlyPluginID() == name ) { Plugin* p = ( *it->second.begin() ); *major = p->getMajorVersion(); const QString& ret = p->getPluginID(); incrementPluginWeight(ret, *major); return ret; } } else { for (PluginMajorsOrdered::reverse_iterator it2 = it->second.rbegin(); it2 != it->second.rend(); ++it2) { if ( it2 == it->second.rbegin() ) { if ( (*it2)->generateUserFriendlyPluginID() == name ) { *major = (*it2)->getMajorVersion(); const QString& ret = (*it2)->getPluginID(); incrementPluginWeight(ret, *major); return ret; } } else { if ( (*it2)->generateUserFriendlyPluginIDMajorEncoded() == name ) { *major = (*it2)->getMajorVersion(); const QString& ret = (*it2)->getPluginID(); incrementPluginWeight(ret, *major); return ret; } } } } } return QString(); }
NodeCreationDialog::NodeCreationDialog(const QString& initialFilter, QWidget* parent) : QDialog(parent) , _imp( new NodeCreationDialogPrivate() ) { setWindowTitle( tr("Node Creation Tool") ); setWindowFlags(Qt::Window | Qt::CustomizeWindowHint); setObjectName( QString::fromUtf8("nodeCreationDialog") ); setAttribute(Qt::WA_DeleteOnClose, false); _imp->layout = new QVBoxLayout(this); _imp->layout->setContentsMargins(0, 0, 0, 0); CompleterLineEdit::PluginsNamesMap pluginsMap; QString initialFilterName; std::string stdInitialFilter = initialFilter.toStdString(); int i = 0; for (PluginsMap::iterator it = _imp->items.begin(); it != _imp->items.end(); ++it) { if ( it->second.empty() ) { continue; } if (it->second.size() == 1) { std::pair<QString, QString> idNamePair; Plugin* p = ( *it->second.begin() ); if ( !p->getIsUserCreatable() ) { continue; } idNamePair.second = p->generateUserFriendlyPluginID(); int indexOfBracket = idNamePair.second.lastIndexOf( QString::fromUtf8(" [") ); if (indexOfBracket != -1) { idNamePair.first = idNamePair.second.left(indexOfBracket); } int weight = getPluginWeight( p->getPluginID(), p->getMajorVersion() ); pluginsMap.insert( std::make_pair(weight, idNamePair) ); if (it->first == stdInitialFilter) { initialFilterName = idNamePair.first; } ++i; } else { QString bestMajorName; for (PluginMajorsOrdered::reverse_iterator it2 = it->second.rbegin(); it2 != it->second.rend(); ++it2) { if ( !(*it2)->getIsUserCreatable() ) { continue; } std::pair<QString, QString> idNamePair; if ( it2 == it->second.rbegin() ) { idNamePair.second = (*it2)->generateUserFriendlyPluginID(); bestMajorName = idNamePair.second; } else { idNamePair.second = (*it2)->generateUserFriendlyPluginIDMajorEncoded(); } int indexOfBracket = idNamePair.second.lastIndexOf( QString::fromUtf8(" [") ); if (indexOfBracket != -1) { idNamePair.first = idNamePair.second.left(indexOfBracket); } ++i; int weight = getPluginWeight( (*it2)->getPluginID(), (*it2)->getMajorVersion() ); pluginsMap.insert( std::make_pair(weight, idNamePair) ); } if (it->first == stdInitialFilter) { initialFilterName = bestMajorName; } } } _imp->textEdit = new CompleterLineEdit(pluginsMap, true, this); if ( !initialFilterName.isEmpty() ) { _imp->textEdit->setText(initialFilterName); } QPoint global = QCursor::pos(); QSize sizeH = sizeHint(); global.rx() -= sizeH.width() / 2; global.ry() -= sizeH.height() / 2; move( global.x(), global.y() ); _imp->layout->addWidget(_imp->textEdit); _imp->textEdit->setFocus(); _imp->textEdit->selectAll(); QTimer::singleShot( 20, _imp->textEdit, SLOT(showCompleter()) ); }