Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Letwory <nathan@letworyinteractive.com>2008-12-29 00:41:33 +0300
committerNathan Letwory <nathan@letworyinteractive.com>2008-12-29 00:41:33 +0300
commit2529d909853931ab27cbe5653e2f61be33cf7ffc (patch)
treede72c916e8a18443c7aeaf80ab4029f853bf4f50 /source/blender/editors/space_node
parent2eaf79a53d1e878e926ed3e4e46ff91ab7ef40d2 (diff)
2.5 / Nodes
* Operator to toggle node visibility (hide/unhide)
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r--source/blender/editors/space_node/node_edit.c5
-rw-r--r--source/blender/editors/space_node/node_intern.h2
-rw-r--r--source/blender/editors/space_node/node_ops.c2
-rw-r--r--source/blender/editors/space_node/node_select.c130
-rw-r--r--source/blender/editors/space_node/node_state.c194
5 files changed, 202 insertions, 131 deletions
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index f817a8efdbf..1589c10539a 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -855,11 +855,12 @@ static void node_addgroup(SpaceNode *snode)
MEM_freeN(strp);
}
+#endif /* 0 */
/* ************************** Node generic ************** */
/* allows to walk the list in order of visibility */
-static bNode *next_node(bNodeTree *ntree)
+bNode *next_node(bNodeTree *ntree)
{
static bNode *current=NULL, *last= NULL;
@@ -912,6 +913,8 @@ static bNode *next_node(bNodeTree *ntree)
return NULL;
}
+#if 0
+
/* is rct in visible part of node? */
static bNode *visible_node(SpaceNode *snode, rctf *rct)
{
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index 05453c6d97b..93ef6e45ad6 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -53,6 +53,7 @@ void node_keymap(wmWindowManager *wm);
/* node_select.c */
void NODE_OT_select(struct wmOperatorType *ot);
void NODE_OT_extend_select(struct wmOperatorType *ot);
+void NODE_OT_toggle_visibility(struct wmOperatorType *ot);
/* drawnode.c */
void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link);
@@ -60,6 +61,7 @@ void node_draw_link_bezier(View2D *v2d, float vec[][3], int th_col1, int th_col2
void draw_nodespace_back_pix(ScrArea *sa, SpaceNode *snode);
/* node_edit.c */
+bNode *next_node(bNodeTree *ntree);
void snode_set_context(SpaceNode *snode, Scene *scene);
void scale_node(SpaceNode *snode, bNode *node);
void snode_make_group_editable(SpaceNode *snode, bNode *gnode);
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index 557c1bcc4fe..dd97d17d0fb 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -48,6 +48,7 @@ void node_operatortypes(void)
{
WM_operatortype_append(NODE_OT_select);
WM_operatortype_append(NODE_OT_extend_select);
+ WM_operatortype_append(NODE_OT_toggle_visibility);
}
void node_keymap(struct wmWindowManager *wm)
@@ -56,4 +57,5 @@ void node_keymap(struct wmWindowManager *wm)
RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, 0, 0)->ptr, "select_type", NODE_SELECT_MOUSE);
RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_extend_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select_type", NODE_SELECT_MOUSE);
+ WM_keymap_add_item(keymap, "NODE_OT_toggle_visibility", ACTIONMOUSE, KM_PRESS, 0, 0);
}
diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c
index e4951e79562..e5a631e2178 100644
--- a/source/blender/editors/space_node/node_select.c
+++ b/source/blender/editors/space_node/node_select.c
@@ -53,136 +53,6 @@
#include "node_intern.h"
-/* ************************** Node generic ************** */
-
-/* allows to walk the list in order of visibility */
-static bNode *next_node(bNodeTree *ntree)
-{
- static bNode *current=NULL, *last= NULL;
-
- if(ntree) {
- /* set current to the first selected node */
- for(current= ntree->nodes.last; current; current= current->prev)
- if(current->flag & NODE_SELECT)
- break;
-
- /* set last to the first unselected node */
- for(last= ntree->nodes.last; last; last= last->prev)
- if((last->flag & NODE_SELECT)==0)
- break;
-
- if(current==NULL)
- current= last;
-
- return NULL;
- }
- /* no nodes, or we are ready */
- if(current==NULL)
- return NULL;
-
- /* now we walk the list backwards, but we always return current */
- if(current->flag & NODE_SELECT) {
- bNode *node= current;
-
- /* find previous selected */
- current= current->prev;
- while(current && (current->flag & NODE_SELECT)==0)
- current= current->prev;
-
- /* find first unselected */
- if(current==NULL)
- current= last;
-
- return node;
- }
- else {
- bNode *node= current;
-
- /* find previous unselected */
- current= current->prev;
- while(current && (current->flag & NODE_SELECT))
- current= current->prev;
-
- return node;
- }
-
- return NULL;
-}
-
-static int do_header_node(SpaceNode *snode, bNode *node, float mx, float my)
-{
- rctf totr= node->totr;
-
- totr.ymin= totr.ymax-20.0f;
-
- totr.xmax= totr.xmin+15.0f;
- if(BLI_in_rctf(&totr, mx, my)) {
- node->flag |= NODE_HIDDEN;
- // allqueue(REDRAWNODE, 0);
- return 1;
- }
-
- totr.xmax= node->totr.xmax;
- totr.xmin= totr.xmax-18.0f;
- if(node->typeinfo->flag & NODE_PREVIEW) {
- if(BLI_in_rctf(&totr, mx, my)) {
- node->flag ^= NODE_PREVIEW;
- // allqueue(REDRAWNODE, 0);
- return 1;
- }
- totr.xmin-=18.0f;
- }
- if(node->type == NODE_GROUP) {
- if(BLI_in_rctf(&totr, mx, my)) {
- snode_make_group_editable(snode, node);
- return 1;
- }
- totr.xmin-=18.0f;
- }
- if(node->typeinfo->flag & NODE_OPTIONS) {
- if(BLI_in_rctf(&totr, mx, my)) {
- node->flag ^= NODE_OPTIONS;
- // allqueue(REDRAWNODE, 0);
- return 1;
- }
- totr.xmin-=18.0f;
- }
- /* hide unused sockets */
- if(BLI_in_rctf(&totr, mx, my)) {
- // XXX node_hide_unhide_sockets(snode, node);
- }
-
-
- totr= node->totr;
- totr.xmin= totr.xmax-10.0f;
- totr.ymax= totr.ymin+10.0f;
- if(BLI_in_rctf(&totr, mx, my)) {
- // XXX scale_node(snode, node);
- return 1;
- }
- return 0;
-}
-
-static int do_header_hidden_node(SpaceNode *snode, bNode *node, float mx, float my)
-{
- rctf totr= node->totr;
-
- totr.xmax= totr.xmin+15.0f;
- if(BLI_in_rctf(&totr, mx, my)) {
- node->flag &= ~NODE_HIDDEN;
- // allqueue(REDRAWNODE, 0);
- return 1;
- }
-
- totr.xmax= node->totr.xmax;
- totr.xmin= node->totr.xmax-15.0f;
- if(BLI_in_rctf(&totr, mx, my)) {
- scale_node(snode, node);
- return 1;
- }
- return 0;
-}
-
static void node_mouse_select(SpaceNode *snode, ARegion *ar, short *mval, short modifier)
{
bNode *node;
diff --git a/source/blender/editors/space_node/node_state.c b/source/blender/editors/space_node/node_state.c
new file mode 100644
index 00000000000..fdd1bcf1073
--- /dev/null
+++ b/source/blender/editors/space_node/node_state.c
@@ -0,0 +1,194 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation, Nathan Letwory
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdio.h>
+
+#include "DNA_node_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+
+#include "BKE_context.h"
+#include "BKE_node.h"
+#include "BKE_global.h"
+
+#include "BLI_rect.h"
+
+#include "ED_space_api.h"
+#include "ED_screen.h"
+#include "ED_types.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "UI_view2d.h"
+
+#include "node_intern.h"
+
+
+static int do_header_node(SpaceNode *snode, bNode *node, float mx, float my)
+{
+ rctf totr= node->totr;
+
+ totr.ymin= totr.ymax-20.0f;
+
+ totr.xmax= totr.xmin+15.0f;
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag |= NODE_HIDDEN;
+ return 1;
+ }
+
+ totr.xmax= node->totr.xmax;
+ totr.xmin= totr.xmax-18.0f;
+ if(node->typeinfo->flag & NODE_PREVIEW) {
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag ^= NODE_PREVIEW;
+ return 1;
+ }
+ totr.xmin-=18.0f;
+ }
+ if(node->type == NODE_GROUP) {
+ if(BLI_in_rctf(&totr, mx, my)) {
+ snode_make_group_editable(snode, node);
+ return 1;
+ }
+ totr.xmin-=18.0f;
+ }
+ if(node->typeinfo->flag & NODE_OPTIONS) {
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag ^= NODE_OPTIONS;
+ return 1;
+ }
+ totr.xmin-=18.0f;
+ }
+ /* hide unused sockets */
+ if(BLI_in_rctf(&totr, mx, my)) {
+ // XXX node_hide_unhide_sockets(snode, node);
+ }
+
+
+ totr= node->totr;
+ totr.xmin= totr.xmax-10.0f;
+ totr.ymax= totr.ymin+10.0f;
+ if(BLI_in_rctf(&totr, mx, my)) {
+ // XXX scale_node(snode, node);
+ return 1;
+ }
+ return 0;
+}
+
+static int do_header_hidden_node(SpaceNode *snode, bNode *node, float mx, float my)
+{
+ rctf totr= node->totr;
+
+ totr.xmax= totr.xmin+15.0f;
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag &= ~NODE_HIDDEN;
+ return 1;
+ }
+
+ totr.xmax= node->totr.xmax;
+ totr.xmin= node->totr.xmax-15.0f;
+ if(BLI_in_rctf(&totr, mx, my)) {
+ scale_node(snode, node);
+ return 1;
+ }
+ return 0;
+}
+
+static void node_toggle_visibility(SpaceNode *snode, ARegion *ar, short *mval)
+{
+ bNode *node;
+ float mx, my;
+
+ mx= (float)mval[0];
+ my= (float)mval[1];
+
+ UI_view2d_region_to_view(&ar->v2d, mval[0], mval[1], &mx, &my);
+
+ for(next_node(snode->edittree); (node=next_node(NULL));) {
+ if(node->flag & NODE_HIDDEN) {
+ if(do_header_hidden_node(snode, node, mx, my)) {
+ ED_region_tag_redraw(ar);
+ break;
+ }
+ }
+ else {
+ if(do_header_node(snode, node, mx, my)) {
+ ED_region_tag_redraw(ar);
+ break;
+ }
+ }
+ }
+}
+
+static int node_toggle_visibility_exec(bContext *C, wmOperator *op)
+{
+ SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C);
+ ARegion *ar= CTX_wm_region(C);
+ short mval[2];
+
+ mval[0] = RNA_int_get(op->ptr, "mx");
+ mval[1] = RNA_int_get(op->ptr, "my");
+ node_toggle_visibility(snode, ar, mval);
+
+ return OPERATOR_FINISHED;
+}
+
+static int node_toggle_visibility_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ ARegion *ar= CTX_wm_region(C);
+ short mval[2];
+
+ mval[0]= event->x - ar->winrct.xmin;
+ mval[1]= event->y - ar->winrct.ymin;
+
+ RNA_int_set(op->ptr, "mx", mval[0]);
+ RNA_int_set(op->ptr, "my", mval[1]);
+
+ return node_toggle_visibility_exec(C,op);
+}
+
+void NODE_OT_toggle_visibility(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ /* identifiers */
+ ot->name= "Toggle Visibility";
+ ot->idname= "NODE_OT_toggle_visibility";
+
+ /* api callbacks */
+ ot->invoke= node_toggle_visibility_invoke;
+ ot->poll= ED_operator_node_active;
+
+ prop = RNA_def_property(ot->srna, "mx", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(ot->srna, "my", PROP_INT, PROP_NONE);
+}