@@ -97,40 +97,27 @@ mx::NodeGraphPtr UiNode::getNodeGraph() const
9797
9898void UiNode::buildUiTokenMap ()
9999{
100- // Helper inline lambda function to avoid repeating code for mapping of tokens declared on element itself vs on element's corresponding nodedef
101- auto handleTokenMapping = [&](const mx::ConstInterfaceElementPtr& interfaceElem, mx::ElementPtr sourceElem)
102- {
103- std::vector<mx::TokenPtr> tokens = interfaceElem->getActiveTokens ();
104- for (auto token : tokens)
105- {
106- std::string key = token->getName ();
107-
108- // Insert into map, but do not allow parent values to override child values
109- _uiTokenMap.try_emplace (key, std::make_shared<UiToken>(token, sourceElem));
110- }
111- };
112-
113100 _uiTokenMap.clear (); // Assume we want clean slate
114101
115102 mx::ElementPtr currElem = getNode ();
116103 while (currElem)
117104 {
118105 if (mx::ConstInterfaceElementPtr interfaceElem = currElem->asA <mx::InterfaceElement>())
119106 {
120- handleTokenMapping ( interfaceElem, currElem);
107+ UiToken::applyTokenMapping (&_uiTokenMap, interfaceElem, currElem);
121108
122109 // If the node is a nodegraph, check for tokens on corresponding nodedef
123110 if (mx::ConstNodeGraphPtr nodegraph = currElem->asA <mx::NodeGraph>())
124111 {
125112 if (mx::NodeDefPtr nodedef = nodegraph->getNodeDef ())
126- handleTokenMapping ( nodedef, nodedef);
113+ UiToken::applyTokenMapping (&_uiTokenMap, nodedef, nodedef);
127114 }
128115
129116 // If the node is a custom node instance, check for tokens on corresponding nodedef
130117 if (mx::NodePtr node = currElem->asA <mx::Node>())
131118 {
132119 if (mx::NodeDefPtr nodedef = node->getNodeDef ())
133- handleTokenMapping ( nodedef, nodedef);
120+ UiToken::applyTokenMapping (&_uiTokenMap, nodedef, nodedef);
134121 }
135122 }
136123 currElem = currElem->getParent ();
0 commit comments