gveejayreloaded UI track switching update

git-svn-id: svn://code.dyne.org/veejay/trunk@729 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
Niels Elburg
2006-12-21 17:40:40 +00:00
parent 812d639f58
commit e8efa1dc55
5 changed files with 94 additions and 22 deletions

View File

@@ -2309,6 +2309,7 @@ void on_previewbw_toggled( GtkWidget *w , gpointer user_data)
void on_previewtoggle_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"), multitrack_toggle_preview( info->mt, -1, is_button_toggled("previewtoggle"),
glade_xml_get_widget(info->main_window, "imageA") ); glade_xml_get_widget(info->main_window, "imageA") );

View File

@@ -85,6 +85,9 @@ typedef struct
int height; int height;
int master_track; int master_track;
GdkPixbuf *logo; GdkPixbuf *logo;
GtkWidget *preview_toggle;
int pw;
int ph;
} multitracker_t; } multitracker_t;
static volatile int MAX_TRACKS = 4; static volatile int MAX_TRACKS = 4;
@@ -480,6 +483,19 @@ static gboolean update_sequence_widgets( gpointer data )
return TRUE; 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) static void sequence_preview_cb(GtkWidget *widget, gpointer user_data)
{ {
sequence_view_t *v = (sequence_view_t*) 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 ); gvr_track_toggle_preview( mt->preview, v->num,status );
float ratio = mt->width / (float)mt->height; sequence_preview_size( mt, v->num );
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;
}
if( !status ) if( !status )
{ {
@@ -762,6 +769,7 @@ void *multitrack_new(
GtkWidget *win, GtkWidget *win,
GtkWidget *box, GtkWidget *box,
GtkWidget *msg, GtkWidget *msg,
GtkWidget *preview_toggle,
gint max_w, gint max_w,
gint max_h, gint max_h,
GtkWidget *main_preview_area) GtkWidget *main_preview_area)
@@ -775,7 +783,7 @@ void *multitrack_new(
mt->main_box = box; mt->main_box = box;
mt->status_bar = msg; mt->status_bar = msg;
mt->logo = load_logo_image(); mt->logo = load_logo_image();
mt->preview_toggle = preview_toggle;
mt->scroll = gtk_scrolled_window_new(NULL,NULL); mt->scroll = gtk_scrolled_window_new(NULL,NULL);
gtk_widget_set_size_request(mt->scroll,450, 300); gtk_widget_set_size_request(mt->scroll,450, 300);
gtk_container_set_border_width(GTK_CONTAINER(mt->scroll),1); 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; int track = 0;
if(!gvr_track_connect( mt->preview, hostname, port_num, &track ) ) if(!gvr_track_connect( mt->preview, hostname, port_num, &track ) )
{
if(!gvr_track_already_open( mt->preview, hostname,port_num))
return -1; 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; 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 ); 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; 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 ) void multitrack_configure( void *data, float fps, int video_width, int video_height )
{ {
multitracker_t *mt = (multitracker_t*) data; 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 ); 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 ) void multitrack_toggle_preview( void *data, int track_id, int status, GtkWidget *img )

View File

@@ -7,6 +7,7 @@ void *multitrack_new(
GtkWidget *win, GtkWidget *win,
GtkWidget *box, GtkWidget *box,
GtkWidget *msg, GtkWidget *msg,
GtkWidget *button,
gint max_w, gint max_w,
gint max_h, gint max_h,
GtkWidget *main_preview_area); GtkWidget *main_preview_area);

View File

@@ -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 track_find( veejay_preview_t *vp );
static int veejay_process_status( veejay_preview_t *vp, veejay_track_t *v ); 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 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 ); static int gvr_preview_process_status( veejay_preview_t *vp, veejay_track_t *v );
void *gvr_preview_init(int max_tracks) 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; int i;
@@ -363,9 +363,13 @@ static int track_exists( veejay_preview_t *vp, const char *hostname, int port_nu
{ {
veejay_track_t *v = vp->tracks[i]; veejay_track_t *v = vp->tracks[i];
if( strcasecmp( hostname, v->hostname ) == 0 && v->port_num == port_num ) if( strcasecmp( hostname, v->hostname ) == 0 && v->port_num == port_num )
{
if( at_track )
*at_track = i;
return 1; return 1;
} }
} }
}
return 0; return 0;
} }
@@ -415,18 +419,27 @@ int gvr_track_get_portnum( void *preview, int num)
return 0; 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; veejay_preview_t *vp = (veejay_preview_t*) preview;
if(track_exists( vp, hostname, port_num ) ) if(track_exists( vp, hostname, port, NULL ) )
return 1;
return 0; 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 ); int track_num = track_find( vp );
if(track_num == -1) if(track_num == -1)
return 0; return 0;
if(track_exists( vp, hostname, port_num, new_track ) )
return 0;
vj_client *fd = vj_client_alloc(0,0,0); vj_client *fd = vj_client_alloc(0,0,0);
if(!vj_client_connect( fd, hostname, NULL, port_num ) ) 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; vp->tracks[ track_num ] = vt;
g_mutex_unlock( vp->mutex ); g_mutex_unlock( vp->mutex );
*new_track = track_num;
return 1; return 1;
} }
@@ -626,6 +637,13 @@ int gvr_track_configure( void *preview, int track_num, int w, int h )
return 1; 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 ) int gvr_track_toggle_preview( void *preview, int track_num, int status )
{ {
veejay_preview_t *vp = (veejay_preview_t*) preview; veejay_preview_t *vp = (veejay_preview_t*) preview;

View File

@@ -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, "gveejay_window" ),
glade_xml_get_widget_( info->main_window, "mt_box" ), glade_xml_get_widget_( info->main_window, "mt_box" ),
glade_xml_get_widget_( info->main_window, "statusbar") , glade_xml_get_widget_( info->main_window, "statusbar") ,
glade_xml_get_widget_( info->main_window, "previewtoggle"),
pw, pw,
ph, ph,
img_wid); img_wid);