From e8efa1dc5504d39566730c4bb7826f6a9e521bbf Mon Sep 17 00:00:00 2001 From: Niels Elburg Date: Thu, 21 Dec 2006 17:40:40 +0000 Subject: [PATCH] gveejayreloaded UI track switching update git-svn-id: svn://code.dyne.org/veejay/trunk@729 eb8d1916-c9e9-0310-b8de-cf0c9472ead5 --- veejay-current/gveejay-reloaded/callback.c | 1 + veejay-current/gveejay-reloaded/multitrack.c | 79 ++++++++++++++++---- veejay-current/gveejay-reloaded/multitrack.h | 1 + veejay-current/gveejay-reloaded/sequence.c | 34 +++++++-- veejay-current/gveejay-reloaded/vj-api.c | 1 + 5 files changed, 94 insertions(+), 22 deletions(-) diff --git a/veejay-current/gveejay-reloaded/callback.c b/veejay-current/gveejay-reloaded/callback.c index 108c56fd..a4dd700a 100644 --- a/veejay-current/gveejay-reloaded/callback.c +++ b/veejay-current/gveejay-reloaded/callback.c @@ -2309,6 +2309,7 @@ void on_previewbw_toggled( GtkWidget *w , gpointer user_data) void on_previewtoggle_toggled(GtkWidget *w, gpointer user_data) { + if(!multitrack_locked( info->mt ) ) multitrack_toggle_preview( info->mt, -1, is_button_toggled("previewtoggle"), glade_xml_get_widget(info->main_window, "imageA") ); diff --git a/veejay-current/gveejay-reloaded/multitrack.c b/veejay-current/gveejay-reloaded/multitrack.c index bb63d70a..c2be77a1 100644 --- a/veejay-current/gveejay-reloaded/multitrack.c +++ b/veejay-current/gveejay-reloaded/multitrack.c @@ -85,6 +85,9 @@ typedef struct int height; int master_track; GdkPixbuf *logo; + GtkWidget *preview_toggle; + int pw; + int ph; } multitracker_t; static volatile int MAX_TRACKS = 4; @@ -480,6 +483,19 @@ static gboolean update_sequence_widgets( gpointer data ) return TRUE; }*/ +static void sequence_preview_size(multitracker_t *mt, int track_num) +{ + float ratio = mt->width / (float)mt->height; + int w = 80; + int h = ( (int)( (float)w/ratio ))/16*16; + + if(!gvr_track_configure( mt->preview, track_num,w,h ) ) + { + veejay_msg(0, "Unable to configure preview %d x %d",w , h ); + } + +} + static void sequence_preview_cb(GtkWidget *widget, gpointer user_data) { sequence_view_t *v = (sequence_view_t*) user_data; @@ -491,16 +507,7 @@ static void sequence_preview_cb(GtkWidget *widget, gpointer user_data) gvr_track_toggle_preview( mt->preview, v->num,status ); - float ratio = mt->width / (float)mt->height; - int w = 80; - int h = ( (int)( (float)w/ratio ))/16*16; - - if(!gvr_track_configure( mt->preview, v->num,w,h ) ) - { - veejay_msg(0, "Unable to configure preview %d x %d",w , h ); - status = 0; - } - + sequence_preview_size( mt, v->num ); if( !status ) { @@ -762,6 +769,7 @@ void *multitrack_new( GtkWidget *win, GtkWidget *box, GtkWidget *msg, + GtkWidget *preview_toggle, gint max_w, gint max_h, GtkWidget *main_preview_area) @@ -775,7 +783,7 @@ void *multitrack_new( mt->main_box = box; mt->status_bar = msg; mt->logo = load_logo_image(); - + mt->preview_toggle = preview_toggle; mt->scroll = gtk_scrolled_window_new(NULL,NULL); gtk_widget_set_size_request(mt->scroll,450, 300); gtk_container_set_border_width(GTK_CONTAINER(mt->scroll),1); @@ -863,12 +871,45 @@ int multrack_audoadd( void *data, char *hostname, int port_num ) int track = 0; if(!gvr_track_connect( mt->preview, hostname, port_num, &track ) ) - return -1; + { + if(!gvr_track_already_open( mt->preview, hostname,port_num)) + return -1; + } + + if(mt->pw > 0 && mt->ph > 0 ) + { + /* re-configure current master track for preview-size */ + sequence_preview_size( mt, mt->master_track ); + + /* configure master preview size */ + if(!gvr_track_configure( mt->preview, track, mt->pw,mt->ph ) ) + { + veejay_msg(0, "Unable to configure preview %d x %d",mt->pw , mt->ph ); + } + + + int preview = gvr_get_preview_status( mt->preview, mt->master_track ); + + /* set status of preview toggle button in trackview */ + if( track == 0 ) + { + mt->view[track]->status_lock=1; + gtk_toggle_button_set_active( + GTK_TOGGLE_BUTTON( mt->preview_toggle), (preview ? TRUE: FALSE ) ); + mt->view[track]->status_lock=0; + } + else + { + mt->view[track]->status_lock=1; + gtk_toggle_button_set_active( + GTK_TOGGLE_BUTTON( mt->view[track]->toggle ), (preview ? TRUE: FALSE ) ); + mt->view[track]->status_lock=0; + + } + } mt->master_track = track; - veejay_msg(VEEJAY_MSG_INFO, "Master is Track %d, Veejay Host %s: %d", - mt->master_track, hostname, port_num ); gtk_widget_set_sensitive_(GTK_WIDGET(mt->view[track]->panel), TRUE ); @@ -876,6 +917,13 @@ int multrack_audoadd( void *data, char *hostname, int port_num ) return track; } +int multitrack_locked( void *data) +{ + multitracker_t *mt = (multitracker_t*) data; + + return mt->view[mt->master_track]->status_lock; +} + void multitrack_configure( void *data, float fps, int video_width, int video_height ) { multitracker_t *mt = (multitracker_t*) data; @@ -925,6 +973,9 @@ void multitrack_set_quality( void *data , int quality ) { veejay_msg(0, "Unable to configure preview %d x %d",w , h ); } + + mt->pw = w; + mt->ph = h; } void multitrack_toggle_preview( void *data, int track_id, int status, GtkWidget *img ) diff --git a/veejay-current/gveejay-reloaded/multitrack.h b/veejay-current/gveejay-reloaded/multitrack.h index 04c10fc4..371fe574 100644 --- a/veejay-current/gveejay-reloaded/multitrack.h +++ b/veejay-current/gveejay-reloaded/multitrack.h @@ -7,6 +7,7 @@ void *multitrack_new( GtkWidget *win, GtkWidget *box, GtkWidget *msg, + GtkWidget *button, gint max_w, gint max_h, GtkWidget *main_preview_area); diff --git a/veejay-current/gveejay-reloaded/sequence.c b/veejay-current/gveejay-reloaded/sequence.c index cedad95f..4e0b4cc8 100644 --- a/veejay-current/gveejay-reloaded/sequence.c +++ b/veejay-current/gveejay-reloaded/sequence.c @@ -66,7 +66,7 @@ static int veejay_get_image_data(veejay_preview_t *vp, veejay_track_t *v ); static int track_find( veejay_preview_t *vp ); static int veejay_process_status( veejay_preview_t *vp, veejay_track_t *v ); static void gvr_preview_process_image( veejay_preview_t *vp, veejay_track_t *v ); -static int track_exists( veejay_preview_t *vp, const char *hostname, int port_num ); +static int track_exists( veejay_preview_t *vp, const char *hostname, int port_num, int *at ); static int gvr_preview_process_status( veejay_preview_t *vp, veejay_track_t *v ); void *gvr_preview_init(int max_tracks) @@ -353,7 +353,7 @@ static void gvr_preview_process_image( veejay_preview_t *vp, veejay_track_t *v ) } } -static int track_exists( veejay_preview_t *vp, const char *hostname, int port_num ) +static int track_exists( veejay_preview_t *vp, const char *hostname, int port_num, int *at_track ) { int i; @@ -363,7 +363,11 @@ static int track_exists( veejay_preview_t *vp, const char *hostname, int port_nu { veejay_track_t *v = vp->tracks[i]; if( strcasecmp( hostname, v->hostname ) == 0 && v->port_num == port_num ) + { + if( at_track ) + *at_track = i; return 1; + } } } return 0; @@ -415,18 +419,27 @@ int gvr_track_get_portnum( void *preview, int num) return 0; } -int gvr_track_connect( void *preview, const char *hostname, int port_num, int *new_track ) +int gvr_track_already_open( void *preview, const char *hostname, + int port ) { veejay_preview_t *vp = (veejay_preview_t*) preview; - if(track_exists( vp, hostname, port_num ) ) - return 0; - + if(track_exists( vp, hostname, port, NULL ) ) + return 1; + return 0; +} + +int gvr_track_connect( void *preview, const char *hostname, int port_num, int *new_track ) +{ + veejay_preview_t *vp = (veejay_preview_t*) preview; int track_num = track_find( vp ); if(track_num == -1) return 0; + if(track_exists( vp, hostname, port_num, new_track ) ) + return 0; + vj_client *fd = vj_client_alloc(0,0,0); if(!vj_client_connect( fd, hostname, NULL, port_num ) ) { @@ -451,8 +464,6 @@ int gvr_track_connect( void *preview, const char *hostname, int port_num, int * vp->tracks[ track_num ] = vt; g_mutex_unlock( vp->mutex ); - *new_track = track_num; - return 1; } @@ -626,6 +637,13 @@ int gvr_track_configure( void *preview, int track_num, int w, int h ) return 1; } +int gvr_get_preview_status( void *preview, int track_num ) +{ + veejay_preview_t *vp = (veejay_preview_t*) preview; + return vp->tracks[track_num]->preview; +} + + int gvr_track_toggle_preview( void *preview, int track_num, int status ) { veejay_preview_t *vp = (veejay_preview_t*) preview; diff --git a/veejay-current/gveejay-reloaded/vj-api.c b/veejay-current/gveejay-reloaded/vj-api.c index a081bd50..eb894e97 100644 --- a/veejay-current/gveejay-reloaded/vj-api.c +++ b/veejay-current/gveejay-reloaded/vj-api.c @@ -6540,6 +6540,7 @@ void vj_gui_init(char *glade_file, int launcher, char *hostname, int port_num) glade_xml_get_widget_( info->main_window, "gveejay_window" ), glade_xml_get_widget_( info->main_window, "mt_box" ), glade_xml_get_widget_( info->main_window, "statusbar") , + glade_xml_get_widget_( info->main_window, "previewtoggle"), pw, ph, img_wid);