Skip to content

Commit 3644bd6

Browse files
committed
Move inline lambda token mapping handler to static member of UiToken class
Signed-off-by: mialana <aliu@amyliu.dev>
1 parent 33fe3a7 commit 3644bd6

2 files changed

Lines changed: 18 additions & 18 deletions

File tree

source/MaterialXGraphEditor/UiNode.cpp

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -97,40 +97,27 @@ mx::NodeGraphPtr UiNode::getNodeGraph() const
9797

9898
void 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();

source/MaterialXGraphEditor/UiNode.h

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ namespace ed = ax::NodeEditor;
1818

1919
class UiNode;
2020
class UiPin;
21+
class UiToken;
2122

2223
using UiNodePtr = std::shared_ptr<UiNode>;
2324
using UiPinPtr = std::shared_ptr<UiPin>;
25+
using UiTokenPtr = std::shared_ptr<UiToken>;
2426

2527
// An edge between two UiNodes, storing the two nodes and connecting input.
2628
class UiEdge
@@ -194,6 +196,19 @@ class UiToken
194196
}
195197

196198
const std::vector<mx::InputPtr>& getAffectedInputs() const { return _affectedInputs; };
199+
200+
// Handle update of given map pointer by iterating through active tokens of an interface element
201+
static void applyTokenMapping(std::unordered_map<std::string, UiTokenPtr>* uiTokenMapPtr, const mx::ConstInterfaceElementPtr& interfaceElem, mx::ElementPtr sourceElem)
202+
{
203+
std::vector<mx::TokenPtr> tokens = interfaceElem->getActiveTokens();
204+
for (auto token : tokens)
205+
{
206+
std::string key = token->getName();
207+
208+
// Insert into map, but do not allow parent values to override child values
209+
uiTokenMapPtr->try_emplace(key, std::make_shared<UiToken>(token, sourceElem));
210+
}
211+
}
197212

198213
private:
199214
const mx::TokenPtr _tokenPtr;
@@ -220,8 +235,6 @@ class UiToken
220235
}
221236
};
222237

223-
using UiTokenPtr = std::shared_ptr<UiToken>;
224-
225238
// The visual representation of a node in a graph.
226239
class UiNode
227240
{

0 commit comments

Comments
 (0)