diff --git a/veejay-current/veejay-client/src/callback.c b/veejay-current/veejay-client/src/callback.c index d5eb0acb..84e76189 100644 --- a/veejay-current/veejay-client/src/callback.c +++ b/veejay-current/veejay-client/src/callback.c @@ -3612,11 +3612,12 @@ static clipboard_t *last_clipboard = NULL; static void do_clipboard(clipboard_t *c, int id, int entry_id) { char msg[1024]; - snprintf( msg, sizeof(msg), "%03d:%d %d %d %s;", + snprintf( msg, sizeof(msg), "%03d:%d %d %d %d %s;", VIMS_CHAIN_ENTRY_SET_PRESET, id, entry_id, c->fx_id, + c->enabled, c->parameters ); diff --git a/veejay-current/veejay-client/src/vj-api.c b/veejay-current/veejay-client/src/vj-api.c index 1e2f75ee..ea7967e4 100644 --- a/veejay-current/veejay-client/src/vj-api.c +++ b/veejay-current/veejay-client/src/vj-api.c @@ -4193,6 +4193,14 @@ gboolean view_fx_selection_func (GtkTreeSelection *selection, return TRUE; /* allow selection state to change */ } +static int effectlist_key_down = 0; + +gboolean on_effectlist_row_key_pressed (GtkWidget *widget, GdkEventKey *event, gpointer user_data) +{ + effectlist_key_down = !(event->state & GDK_SHIFT_MASK ); + return FALSE; +} + void on_effectlist_row_activated(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col, @@ -4207,14 +4215,13 @@ void on_effectlist_row_activated(GtkTreeView *treeview, gint gid =0; gchar *name = NULL; gtk_tree_model_get(model,&iter, FX_STRING, &name, -1); - if(vevo_property_get( fx_list_, name, 0, &gid ) == 0 ) { - multi_vims(VIMS_CHAIN_ENTRY_SET_EFFECT, "%d %d %d", - 0, info->uc.selected_chain_entry,gid ); + multi_vims(VIMS_CHAIN_ENTRY_SET_EFFECT, "%d %d %d %d", + 0, info->uc.selected_chain_entry,gid, !effectlist_key_down ); info->uc.reload_hint[HINT_ENTRY] = 1; char trip[100]; - snprintf(trip,sizeof(trip), "%03d:%d %d %d;", VIMS_CHAIN_ENTRY_SET_EFFECT,0,info->uc.selected_chain_entry, gid ); + snprintf(trip,sizeof(trip), "%03d:%d %d %d %d;", VIMS_CHAIN_ENTRY_SET_EFFECT,0,info->uc.selected_chain_entry, gid, effectlist_key_down ); vj_midi_learning_vims( info->midi, NULL, trip, 0 ); update_label_str( "value_friendlyname", FX_PARAMETER_VALUE_DEFAULT_HINT ); info->uc.reload_hint[HINT_CHAIN] = 1; @@ -4222,6 +4229,8 @@ void on_effectlist_row_activated(GtkTreeView *treeview, g_free(name); } + effectlist_key_down = 0; + } gint sort_iter_compare_func( GtkTreeModel *model, @@ -4330,6 +4339,8 @@ void setup_effectlist_info() GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(trees[i])); gtk_tree_selection_set_select_function(selection, view_fx_selection_func, NULL, NULL); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); + + g_signal_connect( G_OBJECT(trees[i]), "key_press_event", G_CALLBACK( on_effectlist_row_key_pressed ), NULL ); } } diff --git a/veejay-current/veejay-server/veejay/vj-event.c b/veejay-current/veejay-server/veejay/vj-event.c index 983af6cb..ee11a7dc 100644 --- a/veejay-current/veejay-server/veejay/vj-event.c +++ b/veejay-current/veejay-server/veejay/vj-event.c @@ -81,6 +81,8 @@ #include +#define MAX_ARGUMENTS (SAMPLE_MAX_PARAMETERS + 8) + static int use_bw_preview_ = 0; static int _last_known_num_args = 0; static hash_t *BundleHash = NULL; @@ -5257,7 +5259,7 @@ void vj_event_chain_entry_set_defaults(void *ptr, const char format[], va_list a void vj_event_chain_entry_set(void *ptr, const char format[], va_list ap) { veejay_t *v = (veejay_t*)ptr; - int args[3]; + int args[4]; char *str = NULL; P_A(args,str,format,ap); @@ -5279,6 +5281,8 @@ void vj_event_chain_entry_set(void *ptr, const char format[], va_list ap) if(sample_chain_add(args[0],args[1],args[2])) { v->uc->chain_changed = 1; + + sample_set_chain_status( args[0],args[1], args[3] ); } else { @@ -5302,11 +5306,14 @@ void vj_event_chain_entry_set(void *ptr, const char format[], va_list ap) if(vj_tag_set_effect(args[0],args[1], args[2])) { v->uc->chain_changed = 1; - } + + vj_tag_set_chain_status( args[0], args[1], args[3] ); + } else { veejay_msg(VEEJAY_MSG_ERROR, "Cannot set effect %d on stream %d chain %d",args[2],args[0],args[1]); } + } } } @@ -5408,12 +5415,12 @@ void vj_event_entry_down(void *ptr, const char format[] ,va_list ap) void vj_event_chain_entry_set_narg_val(void *ptr,const char format[], va_list ap) { - int args[SAMPLE_MAX_PARAMETERS]; + int args[MAX_ARGUMENTS]; char str[4096]; int value = 0; veejay_t *v = (veejay_t*)ptr; - veejay_memset(args,0,sizeof(int) * SAMPLE_MAX_PARAMETERS); + veejay_memset(args,0,sizeof(int) * MAX_ARGUMENTS); P_A(args,str,format,ap); @@ -5493,12 +5500,12 @@ void vj_event_chain_entry_preset(void *ptr,const char format[], va_list ap) { long int tmp = 0; int base = 10; - int index = 3; // sample, chain, fx_id - int args[SAMPLE_MAX_PARAMETERS]; + int index = 4; // sample, chain, fx_id, status + int args[MAX_ARGUMENTS]; char str[1024]; char *end = str; veejay_t *v = (veejay_t*)ptr; - veejay_memset(args,0,sizeof(int) * SAMPLE_MAX_PARAMETERS); + veejay_memset(args,0,sizeof(int) * MAX_ARGUMENTS); P_A(args,str,format,ap); @@ -5528,8 +5535,10 @@ void vj_event_chain_entry_preset(void *ptr,const char format[], va_list ap) if(sample_chain_add( args[0],args[1],args[2])) { - int args_offset = 3; + int args_offset = 4; + sample_set_chain_status( args[0],args[1], args[3] ); + for(i=0; i < num_p; i++) { if(vj_effect_valid_value(real_id,i,args[(i+args_offset)]) ) @@ -5565,22 +5574,26 @@ void vj_event_chain_entry_preset(void *ptr,const char format[], va_list ap) if(vj_tag_set_effect(args[0],args[1], args[2]) ) { + int args_offset = 4; + + vj_tag_set_chain_status( args[0], args[1], args[3] ); + for(i=0; i < num_p; i++) { - if(vj_effect_valid_value(real_id, i, args[i+3]) ) + if(vj_effect_valid_value(real_id, i, args[i+args_offset]) ) { - if(vj_tag_set_effect_arg(args[0],args[1],i,args[i+3])) + if(vj_tag_set_effect_arg(args[0],args[1],i,args[i+args_offset])) { veejay_msg(VEEJAY_MSG_DEBUG, "Changed parameter %d to %d (%s)", i, - args[i+3], + args[i+args_offset], vj_effect_get_description(real_id)); } } else { veejay_msg(VEEJAY_MSG_ERROR, "Parameter %d value %d is invalid for effect %d (%d-%d)", - i,args[(i+3)], real_id, + i,args[(i+args_offset)], real_id, vj_effect_get_min_limit(real_id,i), vj_effect_get_max_limit(real_id,i)); } @@ -7871,7 +7884,7 @@ void vj_event_create_effect_bundle(veejay_t * v, char *buf, int key_id, int key_ { char bundle[512]; int np = vj_effect_get_num_params(y); - sprintf(bundle, "%03d:0 %d %d", VIMS_CHAIN_ENTRY_SET_PRESET,i, effect_id ); + sprintf(bundle, "%03d:0 %d %d 1", VIMS_CHAIN_ENTRY_SET_PRESET,i, effect_id ); for (j = 0; j < np; j++) { char svalue[32]; @@ -8601,7 +8614,7 @@ void vj_event_send_stream_args ( void *ptr, const char format[], va_list ap ) STREAM_DEFAULTS(args[0]); if( vj_tag_get_type(args[0]) == VJ_TAG_TYPE_GENERATOR ) { - int tagargs[SAMPLE_MAX_PARAMETERS]; + int tagargs[MAX_ARGUMENTS]; int n_args = 0; int id = 0; veejay_memset( tagargs, 0, sizeof(tagargs)); @@ -9343,7 +9356,7 @@ void vj_event_set_stream_arg( void *ptr, const char format[], va_list ap) long int tmp = 0; int base = 10; int index = 1; - int args[1 + SAMPLE_MAX_PARAMETERS]; + int args[MAX_ARGUMENTS]; char str[1024]; char *end = str; veejay_t *v = (veejay_t*)ptr; diff --git a/veejay-current/veejay-server/veejay/vj-eventman.c b/veejay-current/veejay-server/veejay/vj-eventman.c index 99167f66..0c52b694 100644 --- a/veejay-current/veejay-server/veejay/vj-eventman.c +++ b/veejay-current/veejay-server/veejay/vj-eventman.c @@ -1475,11 +1475,11 @@ void vj_init_vevo_events(void) 0, NULL ); index_map_[VIMS_CHAIN_ENTRY_SET_EFFECT] = _new_event( - "%d %d %d", + "%d %d %d %d", VIMS_CHAIN_ENTRY_SET_EFFECT, "Add effect to chain entry with default values", vj_event_chain_entry_set, - 3, + 4, VIMS_REQUIRE_ALL_PARAMS, SAMPLE_STREAM_ID_HELP, 0, @@ -1487,13 +1487,15 @@ void vj_init_vevo_events(void) -1, "Effect ID", 0, + "Effect enabled (1) or disabled (0)", + 1, NULL ); index_map_[VIMS_CHAIN_ENTRY_SET_PRESET] = _new_event( - "%d %d %d %s", + "%d %d %d %d %s", VIMS_CHAIN_ENTRY_SET_PRESET, "Preset effect on chain entry", vj_event_chain_entry_preset, - 4, + 5, VIMS_LONG_PARAMS, SAMPLE_STREAM_ID_HELP, 0, @@ -1501,6 +1503,8 @@ void vj_init_vevo_events(void) -1, "Effect ID", 0, + "Effect enabled (1) or disabled (0)", + 1, "space separated value string", NULL, NULL );