[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24697] trunk/blender: More Node Editor Fixups:
Joshua Leung
aligorith at gmail.com
Fri Nov 20 07:31:51 CET 2009
Revision: 24697
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24697
Author: aligorith
Date: 2009-11-20 07:31:49 +0100 (Fri, 20 Nov 2009)
Log Message:
-----------
More Node Editor Fixups:
* Restored Mute and Hide Operators, M and H keys respectively
* Restored Make Links Operator (F). However, I can't figure out how to set the sockets so that this can be used
* Made Alt-RMB the new hotkey for breaking links by dragging, since Alt-LMB was taken for panning already
Modified Paths:
--------------
trunk/blender/release/scripts/ui/space_node.py
trunk/blender/source/blender/editors/space_node/node_edit.c
trunk/blender/source/blender/editors/space_node/node_intern.h
trunk/blender/source/blender/editors/space_node/node_ops.c
trunk/blender/source/blender/editors/space_node/node_state.c
Modified: trunk/blender/release/scripts/ui/space_node.py
===================================================================
--- trunk/blender/release/scripts/ui/space_node.py 2009-11-20 05:09:57 UTC (rev 24696)
+++ trunk/blender/release/scripts/ui/space_node.py 2009-11-20 06:31:49 UTC (rev 24697)
@@ -106,25 +106,26 @@
layout = self.layout
layout.itemO("tfm.translate")
+ layout.itemO("tfm.rotate")
layout.itemO("tfm.resize")
- layout.itemO("tfm.rotate")
-
+
layout.itemS()
layout.itemO("node.duplicate")
layout.itemO("node.delete")
- # XXX
- # layout.itemS()
- # layout.itemO("node.make_link")
layout.itemS()
+ layout.itemO("node.link_make")
+
+ layout.itemS()
layout.itemO("node.group_edit")
layout.itemO("node.group_ungroup")
layout.itemO("node.group_make")
layout.itemS()
- layout.itemO("node.visibility_toggle")
+ layout.itemO("node.hide")
+ layout.itemO("node.mute")
# XXX
# layout.itemO("node.rename")
Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2009-11-20 05:09:57 UTC (rev 24696)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c 2009-11-20 06:31:49 UTC (rev 24697)
@@ -1369,6 +1369,7 @@
}
+// XXX duplicate function
/*static*/ int do_header_node(SpaceNode *snode, bNode *node, float mx, float my)
{
rctf totr= node->totr;
@@ -1423,6 +1424,7 @@
return 0;
}
+// XXX duplicate function
/*static*/ int do_header_hidden_node(SpaceNode *snode, bNode *node, float mx, float my)
{
rctf totr= node->totr;
@@ -1578,7 +1580,7 @@
if(snode->edittree==NULL) return 0;
- /* deselect socks */
+ /* deselect sockets */
for(node= snode->edittree->nodes.first; node; node= node->next) {
for(sock= node->inputs.first; sock; sock= sock->next) {
if(sock->flag & SELECT) {
@@ -1721,34 +1723,10 @@
return node;
}
-#if 0
+/* ****************** Duplicate *********************** */
-void node_mute(SpaceNode *snode)
+static int node_duplicate_exec(bContext *C, wmOperator *op)
{
- bNode *node;
-
- /* no disabling inside of groups */
- if(node_tree_get_editgroup(snode->nodetree))
- return;
-
- for(node= snode->edittree->nodes.first; node; node= node->next) {
- if(node->flag & SELECT) {
- if(node->inputs.first && node->outputs.first) {
- if(node->flag & NODE_MUTED)
- node->flag &= ~NODE_MUTED;
- else
- node->flag |= NODE_MUTED;
- }
- }
- }
-
-
-}
-
-#endif
-
-int node_duplicate_exec(bContext *C, wmOperator *op)
-{
SpaceNode *snode= CTX_wm_space_node(C);
ntreeCopyTree(snode->edittree, 1); /* 1 == internally selected nodes */
@@ -1764,6 +1742,7 @@
{
node_duplicate_exec(C, op);
+ // todo... remove this - this is for a modal op instead!
RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
@@ -1772,7 +1751,6 @@
void NODE_OT_duplicate(wmOperatorType *ot)
{
-
/* identifiers */
ot->name= "Duplicate Nodes";
ot->description = "Duplicate the nodes.";
@@ -1791,44 +1769,6 @@
RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
}
-#if 0
-
-static void node_insert_convertor(SpaceNode *snode, bNodeLink *link)
-{
- bNode *newnode= NULL;
-
- if(link->fromsock->type==SOCK_RGBA && link->tosock->type==SOCK_VALUE) {
- if(snode->edittree->type==NTREE_SHADER)
- newnode= node_add_node(snode, SH_NODE_RGBTOBW, 0.0f, 0.0f);
- else if(snode->edittree->type==NTREE_COMPOSIT)
- newnode= node_add_node(snode, CMP_NODE_RGBTOBW, 0.0f, 0.0f);
- else
- newnode= NULL;
- }
- else if(link->fromsock->type==SOCK_VALUE && link->tosock->type==SOCK_RGBA) {
- if(snode->edittree->type==NTREE_SHADER)
- newnode= node_add_node(snode, SH_NODE_VALTORGB, 0.0f, 0.0f);
- else if(snode->edittree->type==NTREE_COMPOSIT)
- newnode= node_add_node(snode, CMP_NODE_VALTORGB, 0.0f, 0.0f);
- else
- newnode= NULL;
- }
-
- if(newnode) {
- /* dangerous assumption to use first in/out socks, but thats fine for now */
- newnode->flag |= NODE_HIDDEN;
- newnode->locx= 0.5f*(link->fromsock->locx + link->tosock->locx);
- newnode->locy= 0.5f*(link->fromsock->locy + link->tosock->locy) + HIDDEN_RAD;
-
- nodeAddLink(snode->edittree, newnode, newnode->outputs.first, link->tonode, link->tosock);
- link->tonode= newnode;
- link->tosock= newnode->inputs.first;
- }
-}
-
-
-#endif /* 0 */
-
/* *************************** add link op ******************** */
/* temp data to pass on to modal */
@@ -2073,57 +2013,57 @@
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
}
+/* ********************** Make Link operator ***************** */
-void node_hide(SpaceNode *snode)
-{
- bNode *node;
- int nothidden=0, ishidden=0;
-
- for(node= snode->edittree->nodes.first; node; node= node->next) {
- if(node->flag & SELECT) {
- if(node->flag & NODE_HIDDEN)
- ishidden++;
- else
- nothidden++;
- }
- }
- for(node= snode->edittree->nodes.first; node; node= node->next) {
- if(node->flag & SELECT) {
- if( (ishidden && nothidden) || ishidden==0)
- node->flag |= NODE_HIDDEN;
- else
- node->flag &= ~NODE_HIDDEN;
- }
- }
-}
-
-#if 0
-
/* makes a link between selected output and input sockets */
-void node_make_link(SpaceNode *snode)
+static int node_make_link_exec(bContext *C, wmOperator *op)
{
+ SpaceNode *snode= CTX_wm_space_node(C);
bNode *fromnode, *tonode;
bNodeLink *link;
bNodeSocket *outsock= snode->edittree->selout;
bNodeSocket *insock= snode->edittree->selin;
+
+ if (!insock || !outsock) {
+ BKE_report(op->reports, RPT_ERROR, "No input or output socket(s) selected");
+ return OPERATOR_CANCELLED;
+ }
+ if (nodeFindLink(snode->edittree, outsock, insock)) {
+ BKE_report(op->reports, RPT_ERROR, "There is already a link between these sockets");
+ return OPERATOR_CANCELLED;
+ }
- if(!insock || !outsock) return;
- if(nodeFindLink(snode->edittree, outsock, insock)) return;
-
- if(nodeFindNode(snode->edittree, outsock, &fromnode, NULL) &&
- nodeFindNode(snode->edittree, insock, &tonode, NULL)) {
+ if (nodeFindNode(snode->edittree, outsock, &fromnode, NULL) &&
+ nodeFindNode(snode->edittree, insock, &tonode, NULL))
+ {
link= nodeAddLink(snode->edittree, fromnode, outsock, tonode, insock);
NodeTagChanged(snode->edittree, tonode);
node_remove_extra_links(snode, insock, link);
}
- else return;
+ else
+ return OPERATOR_CANCELLED;
ntreeSolveOrder(snode->edittree);
node_tree_verify_groups(snode->nodetree);
- // XXX snode_handle_recalc(snode);
+ snode_handle_recalc(C, snode);
+
+ return OPERATOR_FINISHED;
+}
+void NODE_OT_link_make(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Make Links";
+ ot->description= "Makes a link between selected output in input sockets.";
+ ot->idname= "NODE_OT_link_make";
+
+ /* callbacks */
+ ot->exec= node_make_link_exec;
+ ot->poll= ED_operator_node_active; // XXX we need a special poll which checks that there are selected input/output sockets
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-#endif
/* ********************** Cut Link operator ***************** */
@@ -2172,7 +2112,7 @@
nodeRemLink(snode->edittree, link);
}
}
-
+
ntreeSolveOrder(snode->edittree);
node_tree_verify_groups(snode->nodetree);
snode_handle_recalc(C, snode);
@@ -2206,6 +2146,7 @@
}
/* ******************************** */
+// XXX some code needing updating to operators...
/* goes over all scenes, reads render layerss */
void node_read_renderlayers(SpaceNode *snode)
@@ -2293,7 +2234,7 @@
if(gnode->type==CMP_NODE_R_LAYERS)
break;
}
-
+
if(gnode) {
BKE_report(op->reports, RPT_ERROR, "Can not add RenderLayer in a Group");
return OPERATOR_CANCELLED;
@@ -2311,7 +2252,7 @@
}
snode_handle_recalc(C, snode);
-
+
return OPERATOR_FINISHED;
}
@@ -2330,6 +2271,142 @@
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
}
+/* ****************** Hide operator *********************** */
+
+static int node_hide_exec(bContext *C, wmOperator *op)
+{
+ SpaceNode *snode= CTX_wm_space_node(C);
+ bNode *node;
+ int nothidden=0, ishidden=0;
+
+ /* sanity checking (poll callback checks this already) */
+ if((snode == NULL) || (snode->edittree == NULL))
+ return OPERATOR_CANCELLED;
+
+ for(node= snode->edittree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ if(node->flag & NODE_HIDDEN)
+ ishidden++;
+ else
+ nothidden++;
+ }
+ }
+ for(node= snode->edittree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ if( (ishidden && nothidden) || ishidden==0)
+ node->flag |= NODE_HIDDEN;
+ else
+ node->flag &= ~NODE_HIDDEN;
+ }
+ }
+
+ snode_handle_recalc(C, snode);
+
+ return OPERATOR_FINISHED;
+}
+
+void NODE_OT_hide(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Hide Nodes";
+ ot->description= "Toggle hiding of the nodes.";
+ ot->idname= "NODE_OT_hide";
+
+ /* callbacks */
+ ot->exec= node_hide_exec;
+ ot->poll= ED_operator_node_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+/* ****************** Mute operator *********************** */
+
+static int node_mute_exec(bContext *C, wmOperator *op)
+{
+ SpaceNode *snode= CTX_wm_space_node(C);
+ bNode *node;
+
+ /* no disabling inside of groups */
+ if(node_tree_get_editgroup(snode->nodetree))
+ return OPERATOR_CANCELLED;
+
+ for(node= snode->edittree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ if(node->inputs.first && node->outputs.first) {
+ node->flag ^= NODE_MUTED;
+ }
+ }
+ }
+
+ snode_handle_recalc(C, snode);
+
+ return OPERATOR_FINISHED;
+}
+
+void NODE_OT_mute(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Mute Nodes";
+ ot->description= "Toggle muting of the nodes.";
+ ot->idname= "NODE_OT_mute";
+
+ /* callbacks */
+ ot->exec= node_mute_exec;
+ ot->poll= ED_operator_node_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+/* ****************** Delete operator ******************* */
+
+static int node_delete_exec(bContext *C, wmOperator *op)
+{
+ SpaceNode *snode= CTX_wm_space_node(C);
+ bNode *node, *next;
+ bNodeSocket *sock;
+
+ for(node= snode->edittree->nodes.first; node; node= next) {
+ next= node->next;
+ if(node->flag & SELECT) {
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list