From 1862bc53805aba6e7079ab48a3cb6d89332a0cb1 Mon Sep 17 00:00:00 2001 From: Dan Dennedy Date: Tue, 31 May 2011 20:43:08 -0700 Subject: [PATCH] Add loop and pause buttons. Patch supplied by Maksym Veremeyenko. --- pixmaps/eof-loop-16.png | Bin 0 -> 522 bytes pixmaps/eof-pause-16.png | Bin 0 -> 538 bytes src/dv1394app.c | 15 ++- src/dv1394app.h | 5 +- src/interface.c | 301 ++++++++++++++++------------------------------ src/page_status.c | 6 + 6 files changed, 124 insertions(+), 203 deletions(-) create mode 100644 pixmaps/eof-loop-16.png create mode 100644 pixmaps/eof-pause-16.png diff --git a/pixmaps/eof-loop-16.png b/pixmaps/eof-loop-16.png new file mode 100644 index 0000000000000000000000000000000000000000..aad4dccbe79c6910d503ccc3ee05f25795528b48 GIT binary patch literal 522 zc-rd>@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)R(T#CD{+yB`aq$c64!_l=ltB< z)VvY~-_*QP-Qvuu)D(rxA@P?hbUG#J zmQ3ys)I~EJvwhy%iLD~EZcXHqkv_LW@m%w zg9fGv?{{}GaVPBaeDv?Zo4IW^ws!NoPc$>JJ$UzRU)jf}SC96WF|E(nPl^1N|MBF< zm(%7u%zIvPt58{+?L_k|t$WpbzVobaS6nAoH#0+_OKDE=(oGu`?_E9Um~pkKeC>zT zTbG5g|GIv-=;z57X)F%gudDiAzRR?#%W&!HlO-{?5AD)QSet9Zd{f19(i_twYrp0+ oF%$-h{I$)pcS$LGA@zY(#Y$VkTV?rGpzj$xUHx3vIVCg!09seX>;M1& literal 0 Hc-jL100001 diff --git a/pixmaps/eof-pause-16.png b/pixmaps/eof-pause-16.png new file mode 100644 index 0000000000000000000000000000000000000000..bec56584b0af387c8e9efc05e8b9b05c83ff5774 GIT binary patch literal 538 zc-rd>@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)R(T#?#g;6|CZJGHiEBiObAE1a zYF-J0Z)#qtZgFN+YKlT;a(*6{EgW!hX(VeZ7#SECD|jVlmnJEwXJzK*CMK&Z1ec^{ z=A{q8{;a!ZRdlQR-?a`cj`xVVywQWHyn#+GN6WGIwmq$;?3`UdF0 zw3L^Z>!oMr7U<;{rKfitcL(~8$`5su^PV61 zIN{)fic*KUCcZOc{78w?K3_<=boQ5`;)H> z*Gr?#1-J!S4*n8;b$>H2lR;=`Yj(x`7J>fRc1-uL-mzTyY~3?`U@S3sy85}Sb4q9e E08Sdk7ytkO literal 0 Hc-jL100001 diff --git a/src/dv1394app.c b/src/dv1394app.c index 801ae90..995539a 100644 --- a/src/dv1394app.c +++ b/src/dv1394app.c @@ -192,7 +192,7 @@ static gboolean on_transport_pressed( GtkWidget *button, gpointer data ) mvcp dv = dv1394app_get_command( this ); int unit = dv1394app_get_selected_unit( this ); - for ( index = 0; index < 11; index ++ ) + for ( index = 0; index < TRANSPORT_BUTTONS_COUNT; index ++ ) if ( this->buttons[ index ] == button ) break; @@ -242,6 +242,14 @@ static gboolean on_transport_pressed( GtkWidget *button, gpointer data ) mvcp_unit_clip_goto( dv, unit, mvcp_absolute, 9999, -1 ); break; + case 11: + mvcp_unit_set( dv, unit, "eof", "loop"); + break; + + case 12: + mvcp_unit_set( dv, unit, "eof", "pause"); + break; + default: break; } @@ -305,6 +313,9 @@ void dv1394app_show_status( dv1394app this, mvcp_status status ) trim_adj[TRIM_ADJ_POS]->value = status->position; gtk_signal_emit_by_name( GTK_OBJECT(trim_adj[TRIM_ADJ_POS]), "value_changed" ); } + + gtk_widget_set_sensitive( lookup_widget( dv1394app_get_widget( this ), "transport_11" ), this->eof == 'p' ); + gtk_widget_set_sensitive( lookup_widget( dv1394app_get_widget( this ), "transport_12" ), this->eof == 'l' ); } static gboolean trim_pressed( GtkWidget *button, GdkEventButton *event, gpointer user_data ) @@ -403,7 +414,7 @@ dv1394app dv1394app_init( GtkWidget *window, char *instance ) int index; GtkAccelGroup *accel_group = gtk_accel_group_new( ); - for ( index = 0; index < 11; index ++ ) + for ( index = 0; index < TRANSPORT_BUTTONS_COUNT; index ++ ) { char name[ 256 ]; sprintf( name, "transport_%d", index ); diff --git a/src/dv1394app.h b/src/dv1394app.h index 6b22e18..70671be 100644 --- a/src/dv1394app.h +++ b/src/dv1394app.h @@ -24,6 +24,8 @@ #include #include +#define TRANSPORT_BUTTONS_COUNT 13 + typedef struct page_t *page; typedef struct @@ -38,7 +40,7 @@ typedef struct int selected_unit; // TODO: This comes out later - GtkWidget *buttons[ 12 ]; + GtkWidget *buttons[ TRANSPORT_BUTTONS_COUNT ]; int trim_in_use; int seek_flag; @@ -46,6 +48,7 @@ typedef struct int trim_in; int trim_out; int guard; + int eof; } *dv1394app, dv1394app_t; diff --git a/src/interface.c b/src/interface.c index fdabe07..5fc0aab 100644 --- a/src/interface.c +++ b/src/interface.c @@ -26,6 +26,106 @@ #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) +static void create_buttons_transport(GtkWidget *top, GtkWidget *parent_box) +{ + int i; + GtkWidget *hbox; + gchar name[32]; + const static struct + { + gchar* tooltip; + gchar* filename; + } buttons[] = + { + { + "Beginning of playlist", + "stock_media-begin-16.png" + }, + { + "Start of clip", + "stock_media-prev-16.png" + }, + { + "Rewind", + "stock_media-rew-16.png" + }, + { + "Previous frame", + "stock_media-prev-frame-16.png" + }, + { + "Pause", + "stock_media-pause-16.png" + }, + { + "Play", + "stock_media-play-16.png" + }, + { + "Stop", + "stock_media-stop-16.png" + }, + { + "Next frame", + "stock_media-next-frame-16.png" + }, + { + "Fast forward", + "stock_media-fwd-16.png" + }, + { + "Next clip", + "stock_media-next-16.png" + }, + { + "End of playlist", + "stock_media-end-16.png" + }, + { + "Loop On", + "eof-loop-16.png" + }, + { + "Loop Off", + "eof-pause-16.png" + }, + { + NULL, + NULL + } + }; + + hbox = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (parent_box), hbox, FALSE, TRUE, 0); + + + for(i = 0; buttons[i].filename; i++) + { + GtkWidget *transport, *image; + + transport = gtk_button_new (); + gtk_widget_show (transport); + gtk_box_pack_start (GTK_BOX (hbox), transport, TRUE, FALSE, 0); + gtk_widget_set_size_request (transport, 34, 25); + GTK_WIDGET_UNSET_FLAGS (transport, GTK_CAN_FOCUS); + gtk_button_set_relief (GTK_BUTTON (transport), GTK_RELIEF_NONE); + gtk_widget_set_tooltip_text (transport, buttons[i].tooltip); + + image = gtk_image_new_from_pixbuf(create_pixbuf(buttons[i].filename)); + gtk_widget_show (image); + gtk_container_add (GTK_CONTAINER (transport), image); + + snprintf(name, sizeof(name), "transport_%d", i); + GLADE_HOOKUP_OBJECT (top, transport, name); + + snprintf(name, sizeof(name), "transport_image_%d", i); + GLADE_HOOKUP_OBJECT (top, image, name); + }; + + GLADE_HOOKUP_OBJECT (top, hbox, "buttons_transport_hbox"); +}; + GtkWidget* create_gdv1394d (void) { @@ -55,32 +155,6 @@ create_gdv1394d (void) GtkWidget *label40; GtkWidget *hbox20; GtkWidget *label46; - GtkWidget *hbox16; - GtkWidget *transport_0; - GtkWidget *image19; - GtkWidget *transport_1; - GtkWidget *image18; - GtkWidget *transport_2; - GtkWidget *image17; - GtkWidget *transport_3; - GtkWidget *image12; - GtkWidget *transport_4; - GtkWidget *image11; - GtkWidget *transport_5; - GtkWidget *image9; - GtkWidget *transport_6; - GtkWidget *alignment9; - GtkWidget *hbox17; - GtkWidget *image10; - GtkWidget *label41; - GtkWidget *transport_7; - GtkWidget *image13; - GtkWidget *transport_8; - GtkWidget *image14; - GtkWidget *transport_9; - GtkWidget *image15; - GtkWidget *transport_10; - GtkWidget *image16; GtkWidget *label47; GtkWidget *vbox_trim; GtkWidget *statusbar; @@ -216,154 +290,7 @@ create_gdv1394d (void) gtk_box_pack_start (GTK_BOX (hbox20), label46, TRUE, TRUE, 0); gtk_label_set_justify (GTK_LABEL (label46), GTK_JUSTIFY_LEFT); - hbox16 = gtk_hbox_new (FALSE, 0); - gtk_widget_show (hbox16); - gtk_box_pack_start (GTK_BOX (hbox20), hbox16, FALSE, TRUE, 0); - - transport_0 = gtk_button_new (); - gtk_widget_show (transport_0); - gtk_box_pack_start (GTK_BOX (hbox16), transport_0, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_0, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_0, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_0), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_0, _("Beginning of playlist")); - - image19 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-begin-16.png") ); - gtk_widget_show (image19); - gtk_container_add (GTK_CONTAINER (transport_0), image19); - - transport_1 = gtk_button_new (); - gtk_widget_show (transport_1); - gtk_box_pack_start (GTK_BOX (hbox16), transport_1, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_1, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_1, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_1), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_1, _("Start of clip")); - - image18 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-prev-16.png") ); - gtk_widget_show (image18); - gtk_container_add (GTK_CONTAINER (transport_1), image18); - - transport_2 = gtk_button_new (); - gtk_widget_show (transport_2); - gtk_box_pack_start (GTK_BOX (hbox16), transport_2, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_2, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_2, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_2), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_2, _("Rewind")); - - image17 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-rew-16.png") ); - gtk_widget_show (image17); - gtk_container_add (GTK_CONTAINER (transport_2), image17); - - transport_3 = gtk_button_new (); - gtk_widget_show (transport_3); - gtk_box_pack_start (GTK_BOX (hbox16), transport_3, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_3, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_3, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_3), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_3, _("Previous frame")); - - image12 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-prev-frame-16.png") ); - gtk_widget_show (image12); - gtk_container_add (GTK_CONTAINER (transport_3), image12); - - transport_4 = gtk_button_new (); - gtk_widget_show (transport_4); - gtk_box_pack_start (GTK_BOX (hbox16), transport_4, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_4, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_4, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_4), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_4, _("Pause")); - - image11 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-pause-16.png") ); - gtk_widget_show (image11); - gtk_container_add (GTK_CONTAINER (transport_4), image11); - - transport_5 = gtk_button_new (); - gtk_widget_show (transport_5); - gtk_box_pack_start (GTK_BOX (hbox16), transport_5, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_5, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_5, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_5), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_5, _("Play")); - - image9 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-play-16.png") ); - gtk_widget_show (image9); - gtk_container_add (GTK_CONTAINER (transport_5), image9); - - transport_6 = gtk_button_new (); - gtk_widget_show (transport_6); - gtk_box_pack_start (GTK_BOX (hbox16), transport_6, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_6, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_6, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_6), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_6, _("Stop")); - - alignment9 = gtk_alignment_new (0.5, 0.5, 0, 0); - gtk_widget_show (alignment9); - gtk_container_add (GTK_CONTAINER (transport_6), alignment9); - - hbox17 = gtk_hbox_new (FALSE, 2); - gtk_widget_show (hbox17); - gtk_container_add (GTK_CONTAINER (alignment9), hbox17); - - image10 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-stop-16.png") ); - gtk_widget_show (image10); - gtk_box_pack_start (GTK_BOX (hbox17), image10, FALSE, FALSE, 0); - - label41 = gtk_label_new_with_mnemonic (""); - gtk_widget_show (label41); - gtk_box_pack_start (GTK_BOX (hbox17), label41, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (label41), GTK_JUSTIFY_LEFT); - - transport_7 = gtk_button_new (); - gtk_widget_show (transport_7); - gtk_box_pack_start (GTK_BOX (hbox16), transport_7, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_7, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_7, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_7), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_7, _("Next frame")); - - image13 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-next-frame-16.png") ); - gtk_widget_show (image13); - gtk_container_add (GTK_CONTAINER (transport_7), image13); - - transport_8 = gtk_button_new (); - gtk_widget_show (transport_8); - gtk_box_pack_start (GTK_BOX (hbox16), transport_8, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_8, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_8, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_8), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_8, _("Fast forward")); - - image14 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-fwd-16.png") ); - gtk_widget_show (image14); - gtk_container_add (GTK_CONTAINER (transport_8), image14); - - transport_9 = gtk_button_new (); - gtk_widget_show (transport_9); - gtk_box_pack_start (GTK_BOX (hbox16), transport_9, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_9, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_9, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_9), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_9, _("Next clip")); - - image15 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-next-16.png") ); - gtk_widget_show (image15); - gtk_container_add (GTK_CONTAINER (transport_9), image15); - - transport_10 = gtk_button_new (); - gtk_widget_show (transport_10); - gtk_box_pack_start (GTK_BOX (hbox16), transport_10, TRUE, FALSE, 0); - gtk_widget_set_size_request (transport_10, 34, 25); - GTK_WIDGET_UNSET_FLAGS (transport_10, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (transport_10), GTK_RELIEF_NONE); - gtk_widget_set_tooltip_text (transport_10, _("End of playlist")); - - image16 = gtk_image_new_from_pixbuf( create_pixbuf ("stock_media-end-16.png") ); - gtk_widget_show (image16); - gtk_container_add (GTK_CONTAINER (transport_10), image16); + create_buttons_transport(gdv1394d, hbox20); label47 = gtk_label_new (""); gtk_widget_show (label47); @@ -403,32 +330,6 @@ create_gdv1394d (void) GLADE_HOOKUP_OBJECT (gdv1394d, label40, "label40"); GLADE_HOOKUP_OBJECT (gdv1394d, hbox20, "hbox20"); GLADE_HOOKUP_OBJECT (gdv1394d, label46, "label46"); - GLADE_HOOKUP_OBJECT (gdv1394d, hbox16, "hbox16"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_0, "transport_0"); - GLADE_HOOKUP_OBJECT (gdv1394d, image19, "image19"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_1, "transport_1"); - GLADE_HOOKUP_OBJECT (gdv1394d, image18, "image18"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_2, "transport_2"); - GLADE_HOOKUP_OBJECT (gdv1394d, image17, "image17"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_3, "transport_3"); - GLADE_HOOKUP_OBJECT (gdv1394d, image12, "image12"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_4, "transport_4"); - GLADE_HOOKUP_OBJECT (gdv1394d, image11, "image11"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_5, "transport_5"); - GLADE_HOOKUP_OBJECT (gdv1394d, image9, "image9"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_6, "transport_6"); - GLADE_HOOKUP_OBJECT (gdv1394d, alignment9, "alignment9"); - GLADE_HOOKUP_OBJECT (gdv1394d, hbox17, "hbox17"); - GLADE_HOOKUP_OBJECT (gdv1394d, image10, "image10"); - GLADE_HOOKUP_OBJECT (gdv1394d, label41, "label41"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_7, "transport_7"); - GLADE_HOOKUP_OBJECT (gdv1394d, image13, "image13"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_8, "transport_8"); - GLADE_HOOKUP_OBJECT (gdv1394d, image14, "image14"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_9, "transport_9"); - GLADE_HOOKUP_OBJECT (gdv1394d, image15, "image15"); - GLADE_HOOKUP_OBJECT (gdv1394d, transport_10, "transport_10"); - GLADE_HOOKUP_OBJECT (gdv1394d, image16, "image16"); GLADE_HOOKUP_OBJECT (gdv1394d, label47, "label47"); GLADE_HOOKUP_OBJECT (gdv1394d, vbox_trim, "vbox_trim"); GLADE_HOOKUP_OBJECT (gdv1394d, statusbar, "statusbar"); diff --git a/src/page_status.c b/src/page_status.c index 0799353..6ea5661 100644 --- a/src/page_status.c +++ b/src/page_status.c @@ -211,10 +211,16 @@ static void *status_thread( void *arg ) { if ( mvcp_notifier_wait( notifier, &status ) != -1 ) { + char buf[32]; + if ( status.status == unit_disconnected ) break; if ( show_status( this, &status ) ) show_units( this, TRUE ); + if ( mvcp_unit_get( this->app->command, this->app->selected_unit, "eof", buf, sizeof(buf) ) != -1) + this->app->eof = buf[0]; + else + this->app->eof = 0; } } -- 1.7.4.4