forked from bartvdbraak/blender
node toggle preview and hidden socket key shortcuts (Ctrl+H, Shift+H)
This commit is contained in:
parent
d9690e9295
commit
416e82b022
@ -139,8 +139,10 @@ class NODE_MT_node(bpy.types.Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("node.hide")
|
||||
layout.operator("node.mute")
|
||||
layout.operator("node.hide_toggle")
|
||||
layout.operator("node.mute_toggle")
|
||||
layout.operator("node.preview_toggle")
|
||||
layout.operator("node.hide_socket_toggle")
|
||||
|
||||
# XXX
|
||||
# layout.operator("node.rename")
|
||||
|
@ -1988,11 +1988,94 @@ void NODE_OT_group_make(wmOperatorType *ot)
|
||||
|
||||
/* ****************** Hide operator *********************** */
|
||||
|
||||
static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag)
|
||||
{
|
||||
int tot_eq= 0, tot_neq= 0;
|
||||
bNode *node;
|
||||
|
||||
for(node= snode->edittree->nodes.first; node; node= node->next) {
|
||||
if(node->flag & SELECT) {
|
||||
if(node->flag & toggle_flag)
|
||||
tot_eq++;
|
||||
else
|
||||
tot_neq++;
|
||||
}
|
||||
}
|
||||
for(node= snode->edittree->nodes.first; node; node= node->next) {
|
||||
if(node->flag & SELECT) {
|
||||
if( (tot_eq && tot_neq) || tot_eq==0)
|
||||
node->flag |= toggle_flag;
|
||||
else
|
||||
node->flag &= ~toggle_flag;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int node_hide_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceNode *snode= CTX_wm_space_node(C);
|
||||
|
||||
/* sanity checking (poll callback checks this already) */
|
||||
if((snode == NULL) || (snode->edittree == NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
node_flag_toggle_exec(snode, NODE_HIDDEN);
|
||||
|
||||
snode_notify(C, snode);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void NODE_OT_hide_toggle(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Hide";
|
||||
ot->description= "Toggle hiding of selected nodes";
|
||||
ot->idname= "NODE_OT_hide_toggle";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= node_hide_exec;
|
||||
ot->poll= ED_operator_node_active;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
static int node_preview_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceNode *snode= CTX_wm_space_node(C);
|
||||
|
||||
/* sanity checking (poll callback checks this already) */
|
||||
if((snode == NULL) || (snode->edittree == NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
node_flag_toggle_exec(snode, NODE_PREVIEW);
|
||||
|
||||
snode_notify(C, snode);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void NODE_OT_preview_toggle(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Toggle Node Preview";
|
||||
ot->description= "Toggle preview display for selected nodes";
|
||||
ot->idname= "NODE_OT_preview_toggle";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= node_preview_exec;
|
||||
ot->poll= ED_operator_node_active;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
static int node_socket_toggle_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceNode *snode= CTX_wm_space_node(C);
|
||||
bNode *node;
|
||||
int nothidden=0, ishidden=0;
|
||||
int hidden= 0;
|
||||
|
||||
/* sanity checking (poll callback checks this already) */
|
||||
if((snode == NULL) || (snode->edittree == NULL))
|
||||
@ -2000,35 +2083,35 @@ static int node_hide_exec(bContext *C, wmOperator *op)
|
||||
|
||||
for(node= snode->edittree->nodes.first; node; node= node->next) {
|
||||
if(node->flag & SELECT) {
|
||||
if(node->flag & NODE_HIDDEN)
|
||||
ishidden++;
|
||||
else
|
||||
nothidden++;
|
||||
if(node_has_hidden_sockets(node)) {
|
||||
hidden= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
node_set_hidden_sockets(snode, node, !hidden);
|
||||
}
|
||||
}
|
||||
|
||||
node_tree_verify_groups(snode->nodetree);
|
||||
|
||||
snode_notify(C, snode);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void NODE_OT_hide(wmOperatorType *ot)
|
||||
void NODE_OT_hide_socket_toggle(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Hide";
|
||||
ot->description= "Toggle hiding of the nodes";
|
||||
ot->idname= "NODE_OT_hide";
|
||||
ot->name= "Toggle Hidden Node Sockets";
|
||||
ot->description= "Toggle unused node socket display";
|
||||
ot->idname= "NODE_OT_hide_socket_toggle";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= node_hide_exec;
|
||||
ot->exec= node_socket_toggle_exec;
|
||||
ot->poll= ED_operator_node_active;
|
||||
|
||||
/* flags */
|
||||
@ -2060,12 +2143,12 @@ static int node_mute_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void NODE_OT_mute(wmOperatorType *ot)
|
||||
void NODE_OT_mute_toggle(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Mute";
|
||||
ot->name= "Toggle Node Mute";
|
||||
ot->description= "Toggle muting of the nodes";
|
||||
ot->idname= "NODE_OT_mute";
|
||||
ot->idname= "NODE_OT_mute_toggle";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= node_mute_exec;
|
||||
|
@ -90,6 +90,8 @@ bNode *node_tree_get_editgroup(bNodeTree *ntree);
|
||||
void node_tree_verify_groups(bNodeTree *nodetree);
|
||||
void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace);
|
||||
int node_has_hidden_sockets(bNode *node);
|
||||
void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set);
|
||||
|
||||
|
||||
void NODE_OT_duplicate(struct wmOperatorType *ot);
|
||||
void NODE_OT_delete(struct wmOperatorType *ot);
|
||||
@ -103,8 +105,10 @@ void NODE_OT_group_make(struct wmOperatorType *ot);
|
||||
void NODE_OT_group_ungroup(struct wmOperatorType *ot);
|
||||
void NODE_OT_group_edit(struct wmOperatorType *ot);
|
||||
|
||||
void NODE_OT_mute(struct wmOperatorType *ot);
|
||||
void NODE_OT_hide(struct wmOperatorType *ot);
|
||||
void NODE_OT_mute_toggle(struct wmOperatorType *ot);
|
||||
void NODE_OT_hide_toggle(struct wmOperatorType *ot);
|
||||
void NODE_OT_hide_socket_toggle(struct wmOperatorType *ot);
|
||||
void NODE_OT_preview_toggle(struct wmOperatorType *ot);
|
||||
|
||||
void NODE_OT_show_cyclic_dependencies(struct wmOperatorType *ot);
|
||||
void NODE_OT_link_viewer(struct wmOperatorType *ot);
|
||||
|
@ -57,8 +57,10 @@ void node_operatortypes(void)
|
||||
|
||||
WM_operatortype_append(NODE_OT_view_all);
|
||||
WM_operatortype_append(NODE_OT_visibility_toggle);
|
||||
WM_operatortype_append(NODE_OT_mute);
|
||||
WM_operatortype_append(NODE_OT_hide);
|
||||
WM_operatortype_append(NODE_OT_mute_toggle);
|
||||
WM_operatortype_append(NODE_OT_hide_toggle);
|
||||
WM_operatortype_append(NODE_OT_preview_toggle);
|
||||
WM_operatortype_append(NODE_OT_hide_socket_toggle);
|
||||
WM_operatortype_append(NODE_OT_show_cyclic_dependencies);
|
||||
|
||||
WM_operatortype_append(NODE_OT_duplicate);
|
||||
@ -143,8 +145,10 @@ void node_keymap(struct wmKeyConfig *keyconf)
|
||||
WM_keymap_add_menu(keymap, "NODE_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "NODE_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "NODE_OT_hide", HKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "NODE_OT_mute", MKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "NODE_OT_hide_toggle", HKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "NODE_OT_mute_toggle", MKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "NODE_OT_preview_toggle", HKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "NODE_OT_hide_socket_toggle", HKEY, KM_PRESS, KM_CTRL, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "NODE_OT_show_cyclic_dependencies", CKEY, KM_PRESS, 0, 0);
|
||||
|
||||
|
@ -51,12 +51,13 @@
|
||||
|
||||
/* **************** Node Header Buttons ************** */
|
||||
|
||||
static void node_hide_unhide_sockets(SpaceNode *snode, bNode *node)
|
||||
/* note: call node_tree_verify_groups(snode->nodetree) after this
|
||||
*/
|
||||
void node_set_hidden_sockets(SpaceNode *snode, bNode *node, int set)
|
||||
{
|
||||
bNodeSocket *sock;
|
||||
|
||||
/* unhide all */
|
||||
if( node_has_hidden_sockets(node) ) {
|
||||
if(set==0) {
|
||||
for(sock= node->inputs.first; sock; sock= sock->next)
|
||||
sock->flag &= ~SOCK_HIDDEN;
|
||||
for(sock= node->outputs.first; sock; sock= sock->next)
|
||||
@ -89,7 +90,11 @@ static void node_hide_unhide_sockets(SpaceNode *snode, bNode *node)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void node_hide_unhide_sockets(SpaceNode *snode, bNode *node)
|
||||
{
|
||||
node_set_hidden_sockets(snode, node, !node_has_hidden_sockets(node));
|
||||
node_tree_verify_groups(snode->nodetree);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user