77
77
/* get location to add node at mouse */
78
for(ar=sa->regionbase.first; ar; ar=ar->next) {
79
if(ar->regiontype == RGN_TYPE_WINDOW) {
78
for (ar=sa->regionbase.first; ar; ar=ar->next) {
79
if (ar->regiontype == RGN_TYPE_WINDOW) {
80
80
wmWindow *win= CTX_wm_window(C);
81
81
int x= win->eventstate->x - ar->winrct.xmin;
82
82
int y= win->eventstate->y - ar->winrct.ymin;
85
85
UI_view2d_region_to_view(&ar->v2d, x, y, &snode->mx, &snode->my);
89
89
/* store selection in temp test flag */
90
for(node= snode->edittree->nodes.first; node; node= node->next) {
91
if(node->flag & NODE_SELECT) node->flag |= NODE_TEST;
90
for (node= snode->edittree->nodes.first; node; node= node->next) {
91
if (node->flag & NODE_SELECT) node->flag |= NODE_TEST;
92
92
else node->flag &= ~NODE_TEST;
95
95
/* node= */ node_add_node(snode, bmain, scene, ntemp, snode->mx, snode->my);
97
97
/* select previous selection before autoconnect */
98
for(node= snode->edittree->nodes.first; node; node= node->next) {
99
if(node->flag & NODE_TEST) node->flag |= NODE_SELECT;
98
for (node= snode->edittree->nodes.first; node; node= node->next) {
99
if (node->flag & NODE_TEST) node->flag |= NODE_SELECT;
102
102
/* deselect after autoconnection */
103
for(node= snode->edittree->nodes.first; node; node= node->next) {
104
if(node->flag & NODE_TEST) node->flag &= ~NODE_SELECT;
103
for (node= snode->edittree->nodes.first; node; node= node->next) {
104
if (node->flag & NODE_TEST) node->flag &= ~NODE_SELECT;
107
107
snode_notify(C, snode);
111
111
static void do_node_add_static(bContext *C, void *UNUSED(arg), int event)
113
Main *bmain = CTX_data_main(C);
114
Scene *scene = CTX_data_scene(C);
113
115
bNodeTemplate ntemp;
114
117
ntemp.type = event;
115
121
do_node_add(C, &ntemp);
118
124
static void do_node_add_group(bContext *C, void *UNUSED(arg), int event)
120
126
SpaceNode *snode= CTX_wm_space_node(C);
127
Main *bmain = CTX_data_main(C);
128
Scene *scene = CTX_data_scene(C);
121
129
bNodeTemplate ntemp;
143
151
if (!ntemp.ngroup)
146
157
do_node_add(C, &ntemp);
149
160
#if 0 /* disabled */
150
161
static void do_node_add_dynamic(bContext *C, void *UNUSED(arg), int event)
163
Main *bmain = CTX_data_main(C);
164
Scene *scene = CTX_data_scene(C);
152
165
bNodeTemplate ntemp;
153
167
ntemp.type = NODE_DYNAMIC;
154
172
do_node_add(C, &ntemp);
178
196
ntree = snode->nodetree;
185
if(ntree->type == NTREE_SHADER) {
186
if(scene_use_new_shading_nodes(scene))
203
if (ntree->type == NTREE_SHADER) {
204
if (scene_use_new_shading_nodes(scene))
187
205
compatibility= NODE_NEW_SHADING;
189
207
compatibility= NODE_OLD_SHADING;
197
215
/* XXX hack: negative numbers used for empty group types */
198
216
if (node_tree_has_type(ntree->type, NODE_GROUP))
199
uiItemV(layout, "New Group", 0, -NODE_GROUP);
217
uiItemV(layout, IFACE_("New Group"), 0, -NODE_GROUP);
200
218
if (node_tree_has_type(ntree->type, NODE_FORLOOP))
201
uiItemV(layout, "New For Loop", 0, -NODE_FORLOOP);
219
uiItemV(layout, IFACE_("New For Loop"), 0, -NODE_FORLOOP);
202
220
if (node_tree_has_type(ntree->type, NODE_WHILELOOP))
203
uiItemV(layout, "New While Loop", 0, -NODE_WHILELOOP);
221
uiItemV(layout, IFACE_("New While Loop"), 0, -NODE_WHILELOOP);
206
for(ngroup=bmain->nodetree.first, event=0; ngroup; ngroup= ngroup->id.next, ++event) {
224
for (ngroup=bmain->nodetree.first, event=0; ngroup; ngroup= ngroup->id.next, ++event) {
207
225
/* only use group trees */
208
226
if (ngroup->type==ntree->type && ELEM3(ngroup->nodetype, NODE_GROUP, NODE_FORLOOP, NODE_WHILELOOP)) {
209
227
uiItemV(layout, ngroup->id.name+2, 0, event);
221
239
for (ntype=ntreeGetType(ntree->type)->node_types.first; ntype; ntype=ntype->next) {
222
240
if (ntype->nclass==nodeclass && ntype->name)
223
241
if (!compatibility || (ntype->compatibility & compatibility))
224
uiItemV(layout, ntype->name, 0, ntype->type);
242
uiItemV(layout, IFACE_(ntype->name), 0, ntype->type);
229
247
static void node_menu_add_foreach_cb(void *calldata, int nclass, const char *name)
231
249
uiLayout *layout= calldata;
232
uiItemMenuF(layout, name, 0, node_add_menu, SET_INT_IN_POINTER(nclass));
250
uiItemMenuF(layout, IFACE_(name), 0, node_add_menu, SET_INT_IN_POINTER(nclass));
235
253
static void node_menu_add(const bContext *C, Menu *menu)
239
257
uiLayout *layout= menu->layout;
240
258
bNodeTreeType *ntreetype= ntreeGetType(snode->treetype);
260
if (!snode->nodetree)
243
261
uiLayoutSetActive(layout, 0);
245
if(ntreetype && ntreetype->foreach_nodeclass)
263
if (ntreetype && ntreetype->foreach_nodeclass)
246
264
ntreetype->foreach_nodeclass(scene, layout, node_menu_add_foreach_cb);