[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