diff --git a/pd/doc/5.reference/preset_hub-help.pd b/pd/doc/5.reference/preset_hub-help.pd index eab69bced292d2dbc9b0cf826cc9022504a63760..0c550c4288df8dc74b2ef71b4fb3c99148428676 100644 --- a/pd/doc/5.reference/preset_hub-help.pd +++ b/pd/doc/5.reference/preset_hub-help.pd @@ -1,5 +1,5 @@ -#N canvas 138 24 555 517 10; -#X obj 109 282 cnv 15 60 39 empty empty empty 20 12 0 14 -261234 -66577 +#N canvas 138 24 555 616 10; +#X obj 109 282 cnv 15 60 37 empty empty empty 20 12 0 14 -261234 -66577 0; #X obj 183 294 cnv 15 44 27 empty empty empty 20 12 0 14 -204280 -66577 0; @@ -45,7 +45,7 @@ to conform to the PDDP template for Pd version 0.42.; 0 %node% 2 54 0 %node% 1 21 %preset% 1 99 %preset% 2 23 %preset% 3 1001 %preset% 0 3 %node% 2 31 1 %preset% 1 problems %preset% 2 skidoo %preset% 3 nights %preset% 0 stooges %node% 1 33 %node% 2 39 0 %node% -1 65; +1 64; #X msg 80 125 store \$1; #X msg 80 74 recall \$1; #X msg 30 73 purge; @@ -134,9 +134,7 @@ same canvas as the abstraction:; #X text 168 418 - reset all preset node data; #X text 98 356 clear; #X text 168 356 - clears preset n for all nodes; -#X text 171 515 - OPTIONAL context for this preset (defaults to "default") -; -#X obj 479 3 preset_hub %hidden% %hidden%; +#X obj 479 3 preset_hub %hidden% %node% 2 10 1; #X obj 189 271 preset_node test; #X floatatom 189 299 5 0 0 0 - - -; #X msg 198 211 purge; @@ -146,6 +144,8 @@ same canvas as the abstraction:; #X obj 233 300 print middle_node; #X msg 232 244 set another; #X msg 311 244 set test; +#X text 171 515 - OPTIONAL scope for this preset (defaults to null +or ""); #X connect 14 0 20 0; #X connect 15 0 14 0; #X connect 16 0 14 0; @@ -172,12 +172,12 @@ same canvas as the abstraction:; #X connect 50 0 15 0; #X connect 51 0 19 0; #X connect 52 0 23 0; -#X connect 65 0 66 0; -#X connect 65 0 71 0; -#X connect 66 0 65 0; -#X connect 67 0 65 0; -#X connect 68 0 65 0; -#X connect 69 0 65 0; -#X connect 70 0 69 0; -#X connect 72 0 65 0; -#X connect 73 0 65 0; +#X connect 64 0 65 0; +#X connect 64 0 70 0; +#X connect 65 0 64 0; +#X connect 66 0 64 0; +#X connect 67 0 64 0; +#X connect 68 0 64 0; +#X connect 69 0 68 0; +#X connect 71 0 64 0; +#X connect 72 0 64 0; diff --git a/pd/doc/5.reference/preset_node-help.pd b/pd/doc/5.reference/preset_node-help.pd index 937589d9d98a5a009cd803f9f25044d3ee14a313..45e5f9685fb51c41c4697e0b3b55e63cb837607a 100644 --- a/pd/doc/5.reference/preset_node-help.pd +++ b/pd/doc/5.reference/preset_node-help.pd @@ -1,7 +1,7 @@ -#N canvas 438 24 555 517 10; +#N canvas 438 24 555 677 10; #X obj 180 291 cnv 15 44 27 empty empty empty 20 12 0 14 -204280 -66577 0; -#X obj 107 279 cnv 15 60 39 empty empty empty 20 12 0 14 -261234 -66577 +#X obj 107 279 cnv 15 60 37 empty empty empty 20 12 0 14 -261234 -66577 0; #X obj 0 655 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0 14 -228856 -66577 0; @@ -25,7 +25,7 @@ to conform to the PDDP template for Pd version 0.42.; 0 13 -228856 -1 0; #X obj 0 598 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12 0 13 -228856 -1 0; -#X obj 78 347 cnv 3 3 140 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856 +#X obj 78 347 cnv 17 3 140 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856 -162280 0; #N canvas 102 481 428 108 Related_objects 0; #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0 @@ -108,7 +108,14 @@ of message the connected object can output.; #X text 98 605 Scope- [preset_hub foo] is local to its patch and all of that patch's children (i.e. \, subpatches and abstractions).; #X obj 98 633 pddp/pddplink preset_hub-help.pd; -#N canvas 186 308 428 292 More_info 0; +#N canvas 411 177 428 483 More_info 0; +#X obj 271 378 cnv 15 39 23 empty empty empty 20 12 0 14 -261234 -66577 +0; +#X obj 275 382 hradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X obj 52 378 cnv 15 36 25 empty empty empty 20 12 0 14 -261234 -66577 +0; +#X msg 58 382 set; #X obj 30 165 cnv 15 349 98 empty \$0-pddp.cnv.subheading empty 3 12 0 14 -191407 -1 0; #X obj 31 166 cnv 15 347 96 empty \$0-pddp.cnv.subheading empty 3 12 @@ -128,6 +135,31 @@ same canvas as the abstraction:; #X text 168 205 inside it.; #X text 40 171 [preset_hub foo] <-- this won't apply to [bar] because ; +#X obj 52 430 cnv 15 44 27 empty empty empty 20 12 0 14 -204280 -66577 +0; +#X msg 213 406 store \$1; +#X obj 213 382 hradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144 +-1 -1 1; +#X msg 275 406 recall \$1; +#X msg 92 382 set some_scope; +#X obj 58 407 preset_node some_scope; +#X obj 213 433 preset_hub %hidden% %node% 2 60 17 %preset% 0 50 %preset% +1 100 %node% 2 60 19 %preset% 0 50 %preset% 1 100; +#X floatatom 58 435 5 0 0 0 - - -; +#X text 19 275 Setting node scope via "set" message allows for dynamic +scope switching. If you wish to set it to the default (also known as +null or "") scope \, you should use empty "set" message. Notice in +the example below how hub recall does not work until you click on the +"set" message which sets scope node to null as is the case with the +hub.; +#X connect 1 0 17 0; +#X connect 3 0 19 0; +#X connect 15 0 20 0; +#X connect 16 0 15 0; +#X connect 17 0 20 0; +#X connect 18 0 19 0; +#X connect 19 0 21 0; +#X connect 21 0 19 0; #X restore 459 610 pd More_info; #X text 168 386 - purge all orphaned/unused nodes (forwarded to hub) ; @@ -144,8 +176,6 @@ hub); #X text 98 346 clear; #X text 168 346 - clear this node data at preset n (forwarded to hub) ; -#X text 171 565 - OPTIONAL context for this preset (defaults to "default") -; #X text 98 447 set; #X text 168 447 - change context (hub) node is paired with; #X msg 229 242 set another; @@ -153,6 +183,8 @@ hub); #X obj 380 293 cnv 15 44 27 empty empty empty 20 12 0 14 -204280 -66577 0; #X floatatom 386 298 5 0 0 0 - - -; +#X text 171 565 - OPTIONAL scope for this preset (defaults to null +or ""); #X connect 16 0 25 0; #X connect 17 0 16 0; #X connect 18 0 16 0; @@ -178,13 +210,13 @@ hub); #X connect 39 0 41 0; #X connect 40 0 39 0; #X connect 41 0 42 0; -#X connect 44 0 77 0; +#X connect 44 0 76 0; #X connect 46 0 47 0; #X connect 47 0 46 0; #X connect 47 0 50 0; #X connect 48 0 47 0; #X connect 49 0 47 0; #X connect 51 0 47 0; +#X connect 73 0 26 0; #X connect 74 0 26 0; -#X connect 75 0 26 0; -#X connect 77 0 44 0; +#X connect 76 0 44 0; diff --git a/pd/src/x_preset.c b/pd/src/x_preset.c index 23a48183c42ea1a4306cd64c028b647409caafa9..5bfa69f917273ad3e0c39d0de5ddaf9008270601 100644 --- a/pd/src/x_preset.c +++ b/pd/src/x_preset.c @@ -543,14 +543,14 @@ void preset_node_purge(t_preset_node *x) { //==================== end functions are for interaction with the hub =====================// -static void preset_node_set(t_preset_node *x, t_symbol *s) +static void preset_node_set(t_preset_node *x, t_symbol *s, int argc, t_atom *argv) { - if(PH_DEBUG) fprintf(stderr,"preset_node_set %s\n", s->s_name); + if(PH_DEBUG) fprintf(stderr,"preset_node_set %d\n", argc); - if (!strcmp(s->s_name, "default")) - x->pn_hub_name = &s_; + if (argc == 0) + x->pn_hub_name = &s_; else - x->pn_hub_name = s; + x->pn_hub_name = (t_symbol *)atom_getsymbol(&argv[0]); if (x->pn_hub) { preset_hub_delete_a_node(x->pn_hub, x); @@ -561,11 +561,6 @@ static void preset_node_set(t_preset_node *x, t_symbol *s) preset_node_seek_hub(x); } -static void preset_node_set_null(t_preset_node *x) -{ - preset_node_set(x, &s_); -} - static void *preset_node_new(t_symbol *s, int argc, t_atom *argv) { if(PH_DEBUG) fprintf(stderr,"===preset_node_new===\n"); @@ -574,7 +569,7 @@ static void *preset_node_new(t_symbol *s, int argc, t_atom *argv) t_preset_node *x = (t_preset_node *)pd_new(preset_node_class); - // read creation arguments and substitute "default" for objects without optional arguments + // read creation arguments and substitute default for objects without optional arguments if (!(argc > 0 && argv[0].a_type == A_SYMBOL)) x->pn_hub_name = &s_; else @@ -641,7 +636,7 @@ void preset_node_setup(void) class_addmethod(preset_node_class, (t_method)preset_node_request_hub_store, gensym("store"), A_DEFFLOAT, 0); class_addmethod(preset_node_class, (t_method)preset_node_set, - gensym("set"), A_SYMBOL, 0); + gensym("set"), A_GIMME, 0); class_addmethod(preset_node_class, (t_method)preset_node_clear, gensym("clear"), A_DEFFLOAT, 0); @@ -1166,11 +1161,15 @@ static void *preset_hub_new(t_symbol *s, int argc, t_atom *argv) loc_pos = 0; pos = 0; // position within argc - // read creation arguments and substitute "default" for objects without optional arguments - if (!(argc > 0 && argv[0].a_type == A_SYMBOL)) + // read creation arguments and substitute default for objects without optional arguments + if (!(argc > 0 && argv[0].a_type == A_SYMBOL) || + (argc > 0 && argv[0].a_type == A_SYMBOL && !strcmp(atom_getsymbol(&argv[0])->s_name, "%hidden%"))) { + pos--; // we subtract one position as we are essentially missing one argument name = &s_; - else + } + else { name = (t_symbol *)atom_getsymbol(&argv[0]); + } // now check if there is already another hub on the same canvas with the same name and fail if so check = canvas->gl_phub;