61        auto ret = std::make_shared<QtDataModelRegistry>();
 
   63        for (
auto const c : *classMap)
 
   67            QString str = QString::fromStdString(c.first);
 
   69            std::shared_ptr<dyno::Module> module(
dynamic_cast<dyno::Module*
>(obj));
 
   71            if (module != 
nullptr)
 
   73                QtDataModelRegistry::RegistryItemCreator creator = [str]() {
 
   75                    std::shared_ptr<dyno::Module> new_module(
dynamic_cast<dyno::Module*
>(new_obj));
 
   76                    auto dat = std::make_unique<QtModuleWidget>(new_module);
 
   80                QString category = QString::fromStdString(module->getModuleType());
 
   85        this->setRegistry(ret);
 
 
  148        std::map<dyno::ObjectId, QtNode*> moduleMap;
 
  156        auto addModuleWidget = [&](std::shared_ptr<Module> m) -> 
void 
  158            auto mId = m->objectId();
 
  160            auto type = std::make_unique<QtModuleWidget>(m);
 
  162            auto& node = this->createNode(std::move(type));
 
  164            moduleMap[mId] = &node;
 
  166            QPointF posView(m->bx(), m->by());
 
  168            node.nodeGraphicsObject().setPos(posView);
 
  170            this->nodePlaced(node);
 
  174        mStates = std::make_shared<dyno::States>();
 
  177        for (
auto field : fields)
 
  182                mStates->addOutputField(field);
 
  188        mStates->setBlockCoord(pos.x(), pos.y());
 
  192        for  (
auto m : modules)
 
  194            addModuleWidget(m.second);
 
  197        auto createModuleConnections = [&](std::shared_ptr<Module> m) -> 
void 
  199            auto inId = m->objectId();
 
  201            if (moduleMap.find(inId) != moduleMap.end()) {
 
  202                auto inBlock = moduleMap[m->objectId()];
 
  204                auto imports = m->getImportModules();
 
  206                if (m->allowImported())
 
  208                    for (
int i = 0; i < imports.size(); i++)
 
  213                            auto moduleSrc = imports[i]->getModules()[0];
 
  214                            if (moduleSrc != 
nullptr)
 
  216                                auto outId = moduleSrc->objectId();
 
  217                                if (moduleMap.find(outId) != moduleMap.end())
 
  219                                    auto outBlock = moduleMap[moduleSrc->objectId()];
 
  220                                    createConnection(*inBlock, i, *outBlock, 0);
 
  228                            auto& modules = imports[i]->getModules();
 
  230                            for (
int j = 0; j < modules.size(); j++)
 
  232                                if (modules[j] != 
nullptr)
 
  234                                    auto outId = modules[j]->objectId();
 
  235                                    if (moduleMap.find(outId) != moduleMap.end())
 
  237                                        auto outBlock = moduleMap[outId];
 
  238                                        createConnection(*inBlock, i, *outBlock, 0);
 
  248                auto fieldIn = m->getInputFields();
 
  250                for (
int i = 0; i < fieldIn.size(); i++)
 
  252                    auto fieldSrc = fieldIn[i]->getSource();
 
  253                    if (fieldSrc != 
nullptr) {
 
  254                        auto parSrc = fieldSrc->parent();
 
  255                        if (parSrc != 
nullptr)
 
  258                            if (moduleSrc == 
nullptr)
 
  266                            uint outFieldIndex = 0;
 
  267                            bool fieldFound = 
false;
 
  268                            for (
auto f : fieldsOut)
 
  280                            uint inFieldIndex = m->allowImported() ? i + imports.size() : i;
 
  282                            if (fieldFound && moduleMap.find(outId) != moduleMap.end())
 
  284                                auto outBlock = moduleMap[outId];
 
  285                                createConnection(*inBlock, inFieldIndex, *outBlock, outFieldIndex);
 
  293        for  (
auto m : modules)
 
  295            createModuleConnections(m.second);
 
  299        mOutputs = std::make_shared<dyno::Outputs>();
 
  301        auto hasModuleConnected = [&](
FBase* f) -> 
bool 
  303                bool fieldFound = 
false;
 
  304                auto fieldSrc = f->getSource();
 
  305                if (fieldSrc != 
nullptr) {
 
  306                    auto parSrc = fieldSrc->parent();
 
  307                    if (parSrc != 
nullptr)
 
  310                        if (moduleSrc == 
nullptr)
 
  318                        if (moduleMap.find(outId) != moduleMap.end())
 
  320                            for (
auto f : fieldsOut)
 
  335        for (
auto field : output_fields)
 
  343        if (
mOutputs->getInputFields().size() > 0)
 
  345            mOutputs->setBlockCoord(pos.x() + 500, pos.y());
 
 
  469        auto constructDAG = [&](std::shared_ptr<Module> m) -> 
void 
  471            if (m->allowImported())
 
  473                auto imports = m->getImportModules();
 
  474                for (
int i = 0; i < imports.size(); i++)
 
  476                    auto inId = m->objectId();
 
  480                        auto module = imports[i]->getModules()[0];
 
  481                        if (module != 
nullptr)
 
  483                            auto outId = 
module->objectId();
 
  490                        auto& modules = imports[i]->getModules();
 
  491                        for (
int j = 0; j < modules.size(); j++)
 
  493                            if (modules[j] != 
nullptr)
 
  495                                auto outId = modules[j]->objectId();
 
  505            auto outId = m->objectId();
 
  506            auto fieldOut = m->getOutputFields();
 
  507            for (
int i = 0; i < fieldOut.size(); i++)
 
  509                auto& sinks = fieldOut[i]->getSinks();
 
  510                for  (
auto sink : sinks)
 
  512                    if (sink != 
nullptr) {
 
  513                        auto parSrc = sink->parent();
 
  514                        if (parSrc != 
nullptr)
 
  518                            if (nodeSrc != 
nullptr)
 
  532        for (
auto it = mlists.begin(); it != mlists.end(); it++)
 
  541        auto& _nodes = this->nodes();
 
  542        std::map<dyno::ObjectId, QtNode*> qtNodeMapper;
 
  543        std::map<dyno::ObjectId, Module*> moduleMapper;
 
  544        for (
auto const& _node : _nodes)
 
  546            auto const& qtNode = _node.second;
 
  547            auto model = qtNode->nodeDataModel();
 
  551            if (model != 
nullptr)
 
  553                auto m = nodeData->getModule();
 
  556                    qtNodeMapper[m->objectId()] = qtNode.get();
 
  557                    moduleMapper[m->objectId()] = m.get();
 
  562        float offsetX = 0.0f;
 
  565            auto& xc = layout.
layer(l);
 
  567            float offsetY = 0.0f;
 
  569            for (
size_t index = 0; index < xc.size(); index++)
 
  572                if (qtNodeMapper.find(
id) != qtNodeMapper.end())
 
  574                    QtNode* qtNode = qtNodeMapper[id];
 
  575                    NodeGeometry& geo = qtNode->nodeGeometry();
 
  577                    float w = geo.width();
 
  578                    float h = geo.height();
 
  580                    xMax = std::max(xMax, w);
 
  582                    Module* node = moduleMapper[id];
 
  586                    offsetY += (h + 
mDy);
 
  590            offsetX += (xMax + 
mDx);
 
  601        qtNodeMapper.clear();
 
  602        moduleMapper.clear();