/* $Id: xchange.c,v 1.1.1.1 2000/01/30 16:39:22 benediktroth Exp $ */ #include #include #include #include #include #include #include #include #include "yamt.h" #include "xchange.h" GtkWidget *xchange_box_new( ) { GtkWidget *box; GtkWidget *xchange_frame_directory; GtkWidget *xchange_table_directory; GtkWidget *xchange_label_directory; GtkWidget *xchange_buttons_select; GtkWidget *xchange_tag_frame; GtkWidget *xchange_tag_table; GtkWidget *xchange_buttons_box; GtkWidget *xchange_buttons_start; GtkWidget *xchange_buttons_quit; GtkWidget *label; gint i; xchange_tag1_genre_list=NULL; xchange_tag2_genre_list=NULL; /* The box it which everything is put */ box = gtk_vbox_new( FALSE, 0); /* Frame for directory */ xchange_frame_directory = gtk_frame_new( NULL ); gtk_box_pack_start( GTK_BOX (box), xchange_frame_directory, TRUE, FALSE, 0 ); gtk_widget_show( xchange_frame_directory ); /* Table for directory */ xchange_table_directory = gtk_table_new( 1, 1, TRUE); gtk_container_set_border_width( GTK_CONTAINER (xchange_table_directory), 5); gtk_container_add( GTK_CONTAINER (xchange_frame_directory), xchange_table_directory ); gtk_widget_show( xchange_table_directory ); /* Directory */ xchange_label_directory=gtk_label_new( _("Directory: ") ); gtk_table_attach_defaults( GTK_TABLE (xchange_table_directory), xchange_label_directory, 0, 1, 0, 1); gtk_widget_show( xchange_label_directory ); xchange_directory=gtk_label_new( _("[no dir selected]") ); gtk_table_attach_defaults( GTK_TABLE (xchange_table_directory), xchange_directory, 1, 2, 0, 1); gtk_widget_show( xchange_directory ); /* The select button */ xchange_buttons_select = gnome_stock_or_ordinary_button( GNOME_STOCK_PIXMAP_OPEN ); gtk_signal_connect( GTK_OBJECT (xchange_buttons_select), "clicked", GTK_SIGNAL_FUNC (xchange_directory_select), NULL ); gtk_table_attach_defaults( GTK_TABLE (xchange_table_directory), xchange_buttons_select, 2, 3, 0, 1); gtk_widget_show( xchange_buttons_select ); /* The exact macht button */ xchange_buttons_exact_match = gtk_check_button_new_with_label( _("Exact Match") ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON (xchange_buttons_exact_match), FALSE ); gtk_table_attach_defaults( GTK_TABLE (xchange_table_directory), xchange_buttons_exact_match, 0, 1, 1, 2); gtk_widget_show( xchange_buttons_exact_match ); /* The recursive button */ xchange_buttons_recursive = gtk_check_button_new_with_label( _("Recurse Subdirs") ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON (xchange_buttons_recursive), FALSE ); gtk_table_attach_defaults( GTK_TABLE (xchange_table_directory), xchange_buttons_recursive, 1, 2, 1, 2); gtk_widget_show( xchange_buttons_recursive ); /******************************************* ID3 TAGs *******************************************/ /* Frame for the id3 tags */ xchange_tag_frame = gtk_frame_new( NULL ); gtk_box_pack_start( GTK_BOX (box), xchange_tag_frame, TRUE, FALSE, 0 ); gtk_widget_show( xchange_tag_frame ); /* Table for id3 tags */ xchange_tag_table = gtk_table_new( 6, 6, FALSE); gtk_container_add( GTK_CONTAINER (xchange_tag_frame), xchange_tag_table); gtk_widget_show(xchange_tag_table); /*********************** TAG No.1 **********************/ /* Title */ xchange_tag1_title_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag1_title_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "t1" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag1_title_button, 0, 1, 0, 1, 0, 0, 10, 0); gtk_widget_show( xchange_tag1_title_button ); label = gtk_label_new( _("Title: ") ); gtk_misc_set_alignment( GTK_MISC (label), 1, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 1, 2, 0, 1); gtk_widget_show( label ); xchange_tag1_title = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_title), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_title), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag1_title, 2, 3, 0, 1); gtk_widget_show( xchange_tag1_title ); /* Artist */ xchange_tag1_artist_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag1_artist_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "a1" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag1_artist_button, 0, 1, 1, 2, 0, 0, 10, 0); gtk_widget_show( xchange_tag1_artist_button ); label = gtk_label_new( _("Artist: ") ); gtk_misc_set_alignment( GTK_MISC (label), 1, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 1, 2, 1, 2); gtk_widget_show( label ); xchange_tag1_artist = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_artist), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_artist), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag1_artist, 2, 3, 1, 2); gtk_widget_show( xchange_tag1_artist ); /* Album */ xchange_tag1_album_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag1_album_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "b1" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag1_album_button, 0, 1, 2, 3, 0, 0, 10, 0); gtk_widget_show( xchange_tag1_album_button ); label = gtk_label_new( _("Album: ") ); gtk_misc_set_alignment( GTK_MISC (label), 1, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 1, 2, 2, 3); gtk_widget_show( label ); xchange_tag1_album = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_album), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_album), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag1_album, 2, 3, 2, 3); gtk_widget_show( xchange_tag1_album ); /* Comment */ xchange_tag1_comment_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag1_comment_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "c1" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag1_comment_button, 0, 1, 3, 4, 0, 0, 10, 0); gtk_widget_show( xchange_tag1_comment_button ); label = gtk_label_new( _("Comment: ") ); gtk_misc_set_alignment( GTK_MISC (label), 1, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 1, 2, 3, 4); gtk_widget_show( label ); xchange_tag1_comment = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_comment), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_comment), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag1_comment, 2, 3, 3, 4); gtk_widget_show( xchange_tag1_comment ); /* Year */ xchange_tag1_year_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag1_year_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "y1" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag1_year_button, 0, 1, 4, 5, 0, 0, 10, 0); gtk_widget_show( xchange_tag1_year_button ); label = gtk_label_new( _("Year: ") ); gtk_misc_set_alignment( GTK_MISC (label), 1, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 1, 2, 4, 5); gtk_widget_show( label ); xchange_tag1_year = gtk_entry_new_with_max_length(4); gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_year), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_year), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag1_year, 2, 3, 4, 5); gtk_widget_show( xchange_tag1_year ); /* Genre */ xchange_tag1_genre_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag1_genre_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "g1" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag1_genre_button, 0, 1, 5, 6, 0, 0, 10, 0); gtk_widget_show( xchange_tag1_genre_button ); label = gtk_label_new( _("Genre: ") ); gtk_misc_set_alignment( GTK_MISC (label ), 1, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 1, 2, 5, 6); gtk_widget_show( label ); /* Create a new combo box */ xchange_tag1_genre = gtk_combo_new(); gtk_entry_set_editable( GTK_ENTRY (GTK_COMBO(xchange_tag1_genre)->entry), FALSE); /* Create the CList */ if (!xchange_tag1_genre_list) { for (i = 0; i < GENRE_MAX; i++) xchange_tag1_genre_list = g_list_append( xchange_tag1_genre_list, (gchar *) id3tag_genres_sorted[i]); xchange_tag1_genre_list = g_list_append(xchange_tag1_genre_list, ""); } /* Connect the combo and the list */ gtk_combo_set_popdown_strings(GTK_COMBO(xchange_tag1_genre), xchange_tag1_genre_list); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag1_genre, 2, 3, 5, 6); gtk_entry_set_text( GTK_ENTRY(GTK_COMBO (xchange_tag1_genre)->entry), " "); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_genre), FALSE); gtk_widget_show(xchange_tag1_genre); /* The separator */ label = gtk_vseparator_new(); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 3, 4, 1, 5); gtk_widget_show( label ); /*********************** TAG No.2 **********************/ /* Title */ label = gtk_label_new( _("Title: ") ); gtk_misc_set_alignment( GTK_MISC (label), 0, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 4, 5, 0, 1); gtk_widget_show( label ); xchange_tag2_title = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_title), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_title), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag2_title, 5, 6, 0, 1); gtk_widget_show( xchange_tag2_title ); xchange_tag2_title_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag2_title_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "t2" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag2_title_button, 6, 7, 0, 1, 0, 0, 10, 0); gtk_widget_show( xchange_tag2_title_button ); /* Artist */ label = gtk_label_new( _("Artist: ") ); gtk_misc_set_alignment( GTK_MISC (label), 0, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 4, 5, 1, 2); gtk_widget_show( label ); xchange_tag2_artist = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_artist), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_artist), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag2_artist, 5, 6, 1, 2); gtk_widget_show( xchange_tag2_artist ); xchange_tag2_artist_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag2_artist_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "a2" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag2_artist_button, 6, 7, 1, 2, 0, 0, 10, 0); gtk_widget_show( xchange_tag2_artist_button ); /* Album */ label = gtk_label_new( _("Album: ") ); gtk_misc_set_alignment( GTK_MISC (label), 0, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 4, 5, 2, 3); gtk_widget_show( label ); xchange_tag2_album = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_album), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_album), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag2_album, 5, 6, 2, 3); gtk_widget_show( xchange_tag2_album ); xchange_tag2_album_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag2_album_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "b2" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag2_album_button, 6, 7, 2, 3, 0, 0, 10, 0); gtk_widget_show( xchange_tag2_album_button ); /* Comment */ label = gtk_label_new( _("Comment: ") ); gtk_misc_set_alignment( GTK_MISC (label), 0, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 4, 5, 3, 4); gtk_widget_show( label ); xchange_tag2_comment = gtk_entry_new_with_max_length(30); gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_comment), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_comment), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag2_comment, 5, 6, 3, 4); gtk_widget_show( xchange_tag2_comment ); xchange_tag2_comment_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag2_comment_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "c2" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag2_comment_button, 6, 7, 3, 4, 0, 0, 10, 0); gtk_widget_show( xchange_tag2_comment_button ); /* Year */ label = gtk_label_new( _("Year: ") ); gtk_misc_set_alignment( GTK_MISC (label), 0, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 4, 5, 4, 5); gtk_widget_show( label ); xchange_tag2_year = gtk_entry_new_with_max_length(4); gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_year), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_year), FALSE); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag2_year, 5, 6, 4, 5); gtk_widget_show( xchange_tag2_year ); xchange_tag2_year_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag2_year_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "y2" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag2_year_button, 6, 7, 4, 5, 0, 0, 10, 0); gtk_widget_show( xchange_tag2_year_button ); /* Genre */ label = gtk_label_new( _("Genre: ") ); gtk_misc_set_alignment( GTK_MISC (label ), 0, 0.5 ); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), label, 4, 5, 5, 6); gtk_widget_show( label ); /* Create a new combo box */ xchange_tag2_genre = gtk_combo_new(); gtk_entry_set_editable( GTK_ENTRY (GTK_COMBO(xchange_tag2_genre)->entry), FALSE); /* Create the CList */ if (!xchange_tag2_genre_list) { for (i = 0; i < GENRE_MAX; i++) xchange_tag2_genre_list = g_list_append( xchange_tag2_genre_list, (gchar *) id3tag_genres_sorted[i]); xchange_tag2_genre_list = g_list_append(xchange_tag2_genre_list, ""); } /* Connect the combo and the list */ gtk_combo_set_popdown_strings(GTK_COMBO(xchange_tag2_genre), xchange_tag2_genre_list); gtk_table_attach_defaults( GTK_TABLE (xchange_tag_table), xchange_tag2_genre, 5, 6, 5, 6); gtk_entry_set_text( GTK_ENTRY(GTK_COMBO (xchange_tag2_genre)->entry), " "); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_genre), FALSE); gtk_widget_show(xchange_tag2_genre); xchange_tag2_genre_button = gtk_check_button_new(); gtk_signal_connect( GTK_OBJECT (xchange_tag2_genre_button), "clicked", GTK_SIGNAL_FUNC (xchange_write_field_button_toggled), "g2" ); gtk_table_attach( GTK_TABLE (xchange_tag_table), xchange_tag2_genre_button, 6, 7, 5, 6, 0, 0, 10, 0); gtk_widget_show( xchange_tag2_genre_button ); /* The Box for the buttons */ xchange_buttons_box = gtk_hbox_new( TRUE, 10); gtk_container_set_border_width( GTK_CONTAINER (xchange_buttons_box), 5); gtk_box_pack_start( GTK_BOX (box), xchange_buttons_box, TRUE, FALSE, 0 ); gtk_widget_show( xchange_buttons_box ); /* The Buttons */ xchange_buttons_start = gnome_stock_or_ordinary_button( GNOME_STOCK_PIXMAP_EXEC ); gtk_signal_connect( GTK_OBJECT (xchange_buttons_start), "clicked", GTK_SIGNAL_FUNC (xchange_start), NULL ); gtk_box_pack_start( GTK_BOX (xchange_buttons_box), xchange_buttons_start, TRUE, TRUE, 0 ); gtk_widget_show( xchange_buttons_start ); xchange_buttons_quit = gnome_stock_or_ordinary_button( GNOME_STOCK_PIXMAP_QUIT ); gtk_signal_connect( GTK_OBJECT (xchange_buttons_quit), "clicked", GTK_SIGNAL_FUNC (gtk_exit), NULL ); gtk_box_pack_start( GTK_BOX (xchange_buttons_box), xchange_buttons_quit, TRUE, TRUE, 0 ); gtk_widget_show( xchange_buttons_quit ); return(box); } void xchange_load_properties( void ) { gtk_label_set_text( GTK_LABEL (xchange_directory), prop_mp3_dir ); } void xchange_write_field_button_toggled( GtkWidget *widget, gchar *data ) { gboolean state; if( data[1] == '1' ) switch( data[0] ) { case 't': /* Get the current state of the button */ state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_title_button) ); /* If the button is active make the entry editable, if not then not */ if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_title), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_title), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_title), state*-1); break; case 'a': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_artist_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_artist), TRUE); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_artist), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_artist), state*-1); break; case 'b': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_album_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_album), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_album), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_album), state*-1); break; case 'c': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_comment_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_comment), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_comment), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_comment), state*-1); break; case 'y': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_year_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_year), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag1_year), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_year), state*-1); break; case 'g': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_genre_button) ); /* if( state == TRUE ) */ /* g_print("Genre TRUE\n"); */ /* else */ /* g_print("Genre FALSE\n"); */ gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag1_genre), state*-1); break; } else switch( data[0] ) { case 't': /* Get the current state of the button */ state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_title_button) ); /* If the button is active make the entry editable, if not then not */ if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_title), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_title), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_title), state*-1); break; case 'a': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_artist_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_artist), TRUE); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_artist), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_artist), state*-1); break; case 'b': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_album_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_album), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_album), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_album), state*-1); break; case 'c': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_comment_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_comment), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_comment), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_comment), state*-1); break; case 'y': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_year_button) ); if( state == TRUE ) gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_year), TRUE ); else gtk_entry_set_editable( GTK_ENTRY (xchange_tag2_year), FALSE ); gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_year), state*-1); break; case 'g': state = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_genre_button) ); /* if( state == TRUE ) */ /* g_print("Genre TRUE\n"); */ /* else */ /* g_print("Genre FALSE\n"); */ gtk_widget_set_sensitive( GTK_WIDGET(xchange_tag2_genre), state*-1); break; } } void xchange_directory_select( void ) { GtkWidget *filew; gchar *buffer; gtk_label_get( GTK_LABEL (xchange_directory), &buffer ); filew = gtk_file_selection_new( _("Select a Directory") ); gtk_file_selection_set_filename( GTK_FILE_SELECTION (filew), buffer ); gtk_signal_connect( GTK_OBJECT (filew), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroy), filew); /* Connect the ok buton to load_file */ gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button), "clicked", GTK_SIGNAL_FUNC (xchange_lf), filew); gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION (filew)->ok_button), "clicked", GTK_SIGNAL_FUNC (destroy), filew); /* Connect the cancel buton to destroy */ gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button), "clicked", GTK_SIGNAL_FUNC (destroy), filew); gtk_widget_show(filew); } /* I don't know how to pass the filename directly to load_file so I use this function */ void xchange_lf( GtkWidget *widget, GtkFileSelection *file_selection ) { gchar *filename=gtk_file_selection_get_filename( GTK_FILE_SELECTION (file_selection)); xchange_directory_load( filename ); } void xchange_directory_load( gchar *dirname ) { gtk_label_set_text( GTK_LABEL (xchange_directory),dirname); /* g_print("dir: %s\n", dirname ); */ } struct id3tag xchange_get_tag1( void ) { struct id3tag tag; gboolean active; gchar *buffer; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_title_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag1_title) ); /* To get sure the tag will be deleted */ if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.title, buffer ); } else tag.title[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_artist_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag1_artist) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.artist, buffer ); } else tag.artist[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_album_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag1_album) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.album, buffer ); } else tag.album[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_comment_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag1_comment) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.comment, buffer ); } else tag.comment[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_year_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag1_year) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.year, buffer ); } else tag.year[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag1_genre_button) ); if( active ) tag.genre = id3tag_lookup_genre( gtk_entry_get_text( GTK_ENTRY(GTK_COMBO(xchange_tag1_genre)->entry))); else tag.genre = 0xFF; strcpy( tag.tag, "TAG" ); return(tag); } struct id3tag xchange_get_tag2( void ) { struct id3tag tag; gboolean active; gchar *buffer; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_title_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag2_title) ); /* To get sure the tag will be deleted */ if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.title, buffer ); } else tag.title[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_artist_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag2_artist) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.artist, buffer ); } else tag.artist[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_album_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag2_album) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.album, buffer ); } else tag.album[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_comment_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag2_comment) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.comment, buffer ); } else tag.comment[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_year_button) ); if( active ) { buffer = gtk_entry_get_text( GTK_ENTRY (xchange_tag2_year) ); if( buffer[0] == '\0' ) { buffer[0]=' '; buffer[1]='\0'; } strcpy( tag.year, buffer ); } else tag.year[0]='\0'; active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_tag2_genre_button) ); if( active ) tag.genre = id3tag_lookup_genre( gtk_entry_get_text( GTK_ENTRY(GTK_COMBO(xchange_tag2_genre)->entry))); else tag.genre = 0xFF; strcpy( tag.tag, "TAG" ); return(tag); } void xchange_start( ) { struct id3tag tag1; struct id3tag tag2; gchar *directory; gboolean recursive; gboolean exact_match; tag1 = xchange_get_tag1(); tag2 = xchange_get_tag2(); /* g_print("TAG 1:\n"); */ /* id3tag_show(tag1); */ /* g_print("TAG 2:\n"); */ /* id3tag_show(tag2); */ gtk_label_get( GTK_LABEL (xchange_directory), &directory ); yamtlog("%s %s", _("Xchange-Directory: "), directory ); recursive = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_buttons_recursive) ); yamtlog("%s %s", _("Xchange-Recursive: "), recursive ? "TRUE" : "FALSE" ); exact_match = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON (xchange_buttons_exact_match) ); yamtlog("%s %s", _("Xchange-Exact_match: "), exact_match ? "TRUE" : "FALSE" ); xchange_go( directory, 0, recursive, exact_match, tag1, tag2); } void xchange_go( gchar *dir, gint depth, gboolean recursive, gboolean exact_match, struct id3tag tag1, struct id3tag tag2 ) { struct id3tag tag3; DIR *dp; struct dirent *entry; struct stat statbuf; struct id3tag copy; id3tag_initialize( © ); if( (dp = opendir(dir))==NULL ) { yamtlog("%s %s", _("ERROR while opening "), dir); gnome_error_dialog( _("Could not open directory!") ); return; } chdir(dir); if(dir[strlen(dir)-1]=='/') dir[strlen(dir)-1]=0; while( (entry = readdir(dp)) != NULL ) { update_progress_bar(); stat( entry->d_name, &statbuf); if( S_ISDIR(statbuf.st_mode)) { /* Shall it be recursive ? */ if( recursive == 0 ) continue; /* Found a directory, ignore "." and ".." */ if( strcmp(".", entry->d_name) == 0 || strcmp("..", entry->d_name) == 0 ) continue; /* printf("%*s%s/\n", depth, " ", entry->d_name ); */ /* Recurse but increase the indent level */ xchange_go( entry->d_name, depth+4, recursive, exact_match, tag1, tag2 ); } else { /* printf("%*s%s", depth, " ", entry->d_name ); */ if( !mp3_is_valid(entry->d_name) ) { yamtlog("%s %s", entry->d_name, " skipped"); continue; } tag3 = id3tag_get( entry->d_name ); /* If the file's tag matches exchange it*/ if( id3tag_cmp( tag1, tag3, exact_match ) == 0 ) { id3tag_set( entry->d_name, tag2 ); yamtlog("%s %s", entry->d_name, " tagged"); } else yamtlog("%s %s", entry->d_name, " not tagged"); } } chdir(".."); closedir(dp); }