X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fdv1394app.c;h=5ccdcbec179ccb902f969fbdfe4374516408c591;hb=af456e04d9e5686a032e534f8867187a08775286;hp=6d0487bedb30fe83b036bf4357c986199ad0237f;hpb=2b74d3078e1c7e23dc617ca51ac2adbdcb65fe76;p=rugen diff --git a/src/dv1394app.c b/src/dv1394app.c index 6d0487b..5ccdcbe 100644 --- a/src/dv1394app.c +++ b/src/dv1394app.c @@ -162,6 +162,147 @@ void on_item_quit_activate( GtkMenuItem *menuitem, gpointer user_data ) gtk_main_quit( ); } +static void playlist_open(dv1394app this, char* filename) +{ + FILE* f; + + if( this->selected_unit >= 0 && this->command) + { + f = fopen(filename, "rt"); + if (f) + { + while( !feof(f) ) + { + char* s; + char l[PATH_MAX]; + + /* load string */ + fgets(l, sizeof(l), f); + + /* remove newlines */ + if( (s = strchr(l, '\n')) ) *s = 0; + if( (s = strchr(l, '\r')) ) *s = 0; + if( (s = strchr(l, '\t')) ) *s = 0; + + /* check for empty line */ + if(l[0]) + mvcp_unit_append( this->command, this->selected_unit, l, -1, -1 ); + } + + fclose(f); + } + } + +} + +static void playlist_save(dv1394app this, char* filename) +{ + int index; + mvcp_list_entry_t entry; + mvcp_list list; + FILE* f; + + if( this->selected_unit >= 0 && this->command) + { + f = fopen(filename, "wt"); + if (f) + { + list = mvcp_list_init( this->command, this->selected_unit); + + if ( list ) + { + for ( index = 0; list && index < mvcp_list_count( list ); index ++ ) + { + mvcp_list_get( list, index, &entry ); + fprintf(f, "%s\n", entry.full); + } + mvcp_list_close( list ); + } + + fclose(f); + } + } +} + +/** Main window - playlist open menu item selected. +*/ + +static void on_item_open_playlist_activate( GtkMenuItem *menuitem, gpointer user_data ) +{ + dv1394app this = user_data; + GtkWidget *dialog; + + dialog = gtk_file_chooser_dialog_new ("Open File", + GTK_WINDOW (this->window), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), + (this->playlist_folder)?this->playlist_folder:getenv("HOME")); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + char *filename; + + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + playlist_open(this, filename); + + if ( this->playlist_folder ) + g_free (this->playlist_folder); + this->playlist_folder = filename; + if ( this->playlist_folder ) + { + char* e = strrchr(this->playlist_folder, '/'); + if(e) *e = 0; + } + } + + gtk_widget_destroy (dialog); +} + +/** Main window - playlist save menu item selected. +*/ + +static void on_item_save_playlist_activate( GtkMenuItem *menuitem, gpointer user_data ) +{ + dv1394app this = user_data; + GtkWidget *dialog; + + dialog = gtk_file_chooser_dialog_new ("Save File", + GTK_WINDOW (this->window), + GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + NULL); + + gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); + + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), + (this->playlist_folder)?this->playlist_folder:getenv("HOME")); + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "Untitled document"); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + char *filename; + + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + playlist_save(this, filename); + + if ( this->playlist_folder ) + g_free (this->playlist_folder); + this->playlist_folder = filename; + if ( this->playlist_folder ) + { + char* e = strrchr(this->playlist_folder, '/'); + if(e) *e = 0; + } + } + + gtk_widget_destroy (dialog); +} + static gboolean on_page_switch_pressed( GtkWidget *button, gpointer user_data ) { dv1394app this = user_data; @@ -401,7 +542,12 @@ dv1394app dv1394app_init( GtkWidget *window, char *instance ) // gtk_signal_connect( GTK_OBJECT( widget ), "activate", GTK_SIGNAL_FUNC( on_item_quit_activate ), this ); // widget = lookup_widget( this->window, "button_quit" ); // gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_quit_activate ), this ); - + widget = lookup_widget( this->window, "button_open_playlist" ); + gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_open_playlist_activate ), this ); + widget = lookup_widget( this->window, "button_save_playlist" ); + gtk_signal_connect( GTK_OBJECT( widget ), "clicked", GTK_SIGNAL_FUNC( on_item_save_playlist_activate ), this ); + + /* Initialise the pages. */ dv1394app_register_page( this, page_operate_init( this ) ); dv1394app_register_page( this, page_command_init( this ) ); @@ -563,7 +709,7 @@ char* frames2tc( int f, float fps, char* buf ) float d; int t; - if ( fps ) + if ( fps && f >= 0) { d = f / fps; t = d;