diff --git a/veejay-current/veejay-client/src/callback.c b/veejay-current/veejay-client/src/callback.c index 18c95d601..902377176 100644 --- a/veejay-current/veejay-client/src/callback.c +++ b/veejay-current/veejay-client/src/callback.c @@ -2959,42 +2959,47 @@ void on_curve_toggleentry_param_toggled( GtkWidget *widget, gpointer user_data) vj_msg(VEEJAY_MSG_INFO, "%s FX parameter %d", (k==0 ? "Disabled" : "Enabled"), i ); } +void curve_toggleentry_activate( int selected_chain_entry, int active) +{ + int curve_type = 0; + if( is_button_toggled("curve_typespline")) { + curve_type = 1; + } else if ( is_button_toggled("curve_typefreehand")) { + curve_type = 2; + } else if (is_button_toggled("curve_typelinear")) { + curve_type = 0; + } + + multi_vims( VIMS_SAMPLE_KF_STATUS, "%d %d %d", + selected_chain_entry, active, curve_type ); + + //update anim mode + GtkTreeView *view = GTK_TREE_VIEW(glade_xml_get_widget_(info->main_window, "tree_chain")); + GtkTreeModel *model = gtk_tree_view_get_model( view ); + GtkTreeIter iter; + + GtkTreePath *path = gtk_tree_path_new_from_indices(selected_chain_entry, -1); + if(gtk_tree_model_get_iter(model, &iter, path)) + { + GdkPixbuf *kf_toggle = update_pixmap_entry( active ); + gtk_list_store_set (GTK_LIST_STORE( model ), &iter, FXC_KF, kf_toggle, FXC_KF_STATUS, active, -1); + } + gtk_tree_path_free(path); +} + void curve_toggleentry_toggled( GtkWidget *widget, gpointer user_data) { if(info->status_lock) return; - int selected_chain_entry = info->uc.selected_chain_entry; + int selected_chain_entry = info->uc.selected_chain_entry; if( selected_chain_entry == -1 ) { vj_msg(VEEJAY_MSG_INFO,"No parameter selected for animation"); return; } int active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(widget) ); - int curve_type = 0; - if( is_button_toggled("curve_typespline")) { - curve_type = 1; - } else if ( is_button_toggled("curve_typefreehand")) { - curve_type = 2; - } else if (is_button_toggled("curve_typelinear")) { - curve_type = 0; - } - - multi_vims( VIMS_SAMPLE_KF_STATUS, "%d %d %d", - selected_chain_entry, active, curve_type ); - - //update anim mode - GtkTreeView *view = GTK_TREE_VIEW(glade_xml_get_widget_(info->main_window, "tree_chain")); - GtkTreeModel *model = gtk_tree_view_get_model( view ); - GtkTreeIter iter; - - GtkTreePath *path = gtk_tree_path_new_from_indices(selected_chain_entry, -1); - if(gtk_tree_model_get_iter(model, &iter, path)) - { - GdkPixbuf *kf_toggle = update_pixmap_entry( active ); - gtk_list_store_set (GTK_LIST_STORE( model ), &iter, FXC_KF, kf_toggle, -1); - } - gtk_tree_path_free(path); + curve_toggleentry_activate(selected_chain_entry, active); } void curve_panel_toggleentry_toggled( GtkWidget *widget, gpointer user_data) @@ -3505,42 +3510,61 @@ void on_add_file1_activate(GtkWidget *w, gpointer user_data) * * Signal handler over the effect chain. * - * Catch button press event on shift+click to toogle chain state. + * Catch button press event on shift+click to toogle fx state. + * Catch button press event on ctrl+click to toogle fx anim state. * NOTA : works over the FULL row * ******************************************************/ gboolean on_effectchain_button_pressed (GtkWidget *tree, GdkEventButton *event, gpointer userdata) { - /* shift key + single click with the left mouse button? */ - if (event->state & GDK_SHIFT_MASK) + //filter events over ctrl and shift + int state_modifier = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK); + + if (state_modifier && (event->type == GDK_BUTTON_PRESS) && (event->button == 1)) { - if (event->type == GDK_BUTTON_PRESS && event->button == 1) + GtkTreePath *path; + GtkTreeViewColumn *column; + gint cell_x, cell_y; + + if(gtk_tree_view_get_path_at_pos( GTK_TREE_VIEW( tree ), + (gint) event->x, + (gint) event->y, + &path, &column, &cell_x, &cell_y )) + { - GtkTreePath *path; - GtkTreeViewColumn *column; - gint cell_x, cell_y; - - if(gtk_tree_view_get_path_at_pos( GTK_TREE_VIEW( tree ), - (gint) event->x, - (gint) event->y, - &path, &column, &cell_x, &cell_y )) - - { - /* compare iter from tree selection and clicked path */ - GtkTreeIter iter; - gint fxcid = 0; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW( tree )); - - gtk_tree_model_get_iter(model, &iter, path); - gtk_tree_model_get(model,&iter, FXC_ID, &fxcid, -1 ); - - /* user can click on all row, uncomment and fix accordingly the test to check particular column */ - //guint column_num = get_treeview_col_number_from_column ( column ); - //if(column_num != -1) + /* get iter from clicked path */ + GtkTreeIter iter; + gint fxcid = 0; + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW( tree )); + + gtk_tree_model_get_iter(model, &iter, path); + gtk_tree_model_get(model,&iter, FXC_ID, &fxcid, -1 ); + + switch (state_modifier){ + case GDK_SHIFT_MASK: + { + /* user can click on all row, uncomment and fix accordingly the test to check particular column */ + //guint column_num = get_treeview_col_number_from_column ( column ); + //if(column_num != -1) + { + multi_vims(VIMS_CHAIN_ENTRY_SET_STATE, "%d %d",0, fxcid); + info->uc.reload_hint[HINT_HISTORY] = 1; + } + } + break; + + case GDK_CONTROL_MASK: { - multi_vims(VIMS_CHAIN_ENTRY_SET_STATE, "%d %d",0, fxcid); - info->uc.reload_hint[HINT_HISTORY] = 1; + /* user can click on all row, uncomment and fix accordingly the test to check particular column */ + //guint column_num = get_treeview_col_number_from_column ( column ); + //if(column_num != -1) + { + int active; + gtk_tree_model_get ( model, &iter, FXC_KF_STATUS, &active, -1); + curve_toggleentry_activate(fxcid, !active); + } } + break; } } } diff --git a/veejay-current/veejay-client/src/vj-api.c b/veejay-current/veejay-client/src/vj-api.c index 2524d7c49..30a49a0b6 100644 --- a/veejay-current/veejay-client/src/vj-api.c +++ b/veejay-current/veejay-client/src/vj-api.c @@ -719,7 +719,7 @@ static struct {"Select a SRT sequence to edit"}, {"Double click: add effect to current entry in chain list,\n [+] Shift L: add disabled,\n [+] Ctrl L: add to selected sample"}, {"Filter the effects list by any string"}, - {"Shift + Mouse left : Toogle selected fx chain"}, + {"Shift + Mouse left : Toogle selected fx,\nControl + Mouse left : Toogle selected fx anim"}, {NULL}, }; @@ -1146,7 +1146,8 @@ enum FXC_KF = 3, FXC_MIXING = 4, FXC_SUBRENDER = 5, - FXC_N_COLS = 6, + FXC_KF_STATUS = 6, + FXC_N_COLS = 7, }; enum { @@ -3824,8 +3825,9 @@ static gboolean chain_update_row(GtkTreeModel * model, } gchar *mixing = _utf8str(tmp); + int kf_status = gui->uc.entry_tokens[ENTRY_KF_STATUS]; GdkPixbuf *toggle = update_pixmap_entry( gui->uc.entry_tokens[ENTRY_VIDEO_ENABLED] ); - GdkPixbuf *kf_toggle = update_pixmap_entry( gui->uc.entry_tokens[ENTRY_KF_STATUS] ); + GdkPixbuf *kf_toggle = update_pixmap_entry( kf_status ); GdkPixbuf *subrender_toggle = update_pixmap_entry( gui->uc.entry_tokens[ENTRY_SUBRENDER_ENTRY]); gtk_list_store_set( GTK_LIST_STORE(model),iter, FXC_ID, entry, @@ -3834,6 +3836,7 @@ static gboolean chain_update_row(GtkTreeModel * model, FXC_KF, kf_toggle, FXC_MIXING, mixing, FXC_SUBRENDER, subrender_toggle, + FXC_KF_STATUS, kf_status, -1 ); g_free(descr); g_free(mixing); @@ -4829,7 +4832,7 @@ static void load_generator_info() static void setup_effectchain_info( void ) { GtkWidget *tree = glade_xml_get_widget_( info->main_window, "tree_chain"); - GtkListStore *store = gtk_list_store_new( FXC_N_COLS, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF,GDK_TYPE_PIXBUF,G_TYPE_STRING, GDK_TYPE_PIXBUF ); + GtkListStore *store = gtk_list_store_new( FXC_N_COLS, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF,GDK_TYPE_PIXBUF,G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_INT); gtk_tree_view_set_model( GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store)); g_object_unref( G_OBJECT( store )); @@ -4953,8 +4956,9 @@ static void load_effectchain_info() gchar *mixing = _utf8str(tmp); gtk_list_store_append( store, &iter ); + int kf_status = arr[7]; GdkPixbuf *toggle = update_pixmap_entry( arr[3] ); - GdkPixbuf *kf_togglepf = update_pixmap_entry( arr[7] ); + GdkPixbuf *kf_togglepf = update_pixmap_entry( kf_status ); GdkPixbuf *subrender_toggle = update_pixmap_entry(arr[8]); gtk_list_store_set( store, &iter, FXC_ID, arr[0], @@ -4962,7 +4966,9 @@ static void load_effectchain_info() FXC_FXSTATUS, toggle, FXC_KF, kf_togglepf, FXC_MIXING,mixing, - FXC_SUBRENDER, subrender_toggle, -1 ); + FXC_SUBRENDER, subrender_toggle, + FXC_KF_STATUS, kf_status, + -1 ); last_index ++; g_free(utf8_name); g_free(mixing);