58
56
static void set_duplication (gboolean enable);
60
58
/* Prototypes for the signal blocking/unblocking in update_ui_for_album */
61
void on_title_edit_changed(GtkEditable *widget, gpointer user_data);
62
void on_artist_edit_changed(GtkEditable *widget, gpointer user_data);
63
void on_year_edit_changed(GtkEditable *widget, gpointer user_data);
64
void on_disc_number_edit_changed(GtkEditable *widget, gpointer user_data);
59
G_MODULE_EXPORT void on_title_edit_changed(GtkEditable *widget, gpointer user_data);
60
G_MODULE_EXPORT void on_artist_edit_changed(GtkEditable *widget, gpointer user_data);
61
G_MODULE_EXPORT void on_year_edit_changed(GtkEditable *widget, gpointer user_data);
62
G_MODULE_EXPORT void on_disc_number_edit_changed(GtkEditable *widget, gpointer user_data);
68
66
SjMetadataGetter *metadata;
69
67
SjExtractor *extractor;
177
175
static void error_on_start (GError *error)
179
177
GtkWidget *dialog;
180
dialog = gtk_message_dialog_new (NULL, 0,
183
"<b>%s</b>\n\n%s: %s.\n%s",
184
_("Could not start Sound Juicer"),
187
_("Please consult the documentation for assistance."));
188
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE);
178
dialog = gtk_message_dialog_new_with_markup (NULL, 0,
181
"<b>%s</b>\n\n%s: %s.\n%s",
182
_("Could not start Sound Juicer"),
185
_("Please consult the documentation for assistance."));
189
186
gtk_dialog_run (GTK_DIALOG (dialog));
195
void on_quit_activate (GtkMenuItem *item, gpointer user_data)
192
G_MODULE_EXPORT void on_quit_activate (GtkMenuItem *item, gpointer user_data)
197
194
if (on_delete_event (NULL, NULL, NULL) == FALSE) {
198
195
gtk_main_quit ();
406
404
static GtkWidget*
407
musicbrainz_submit_message_area_new (char *title, char *artist)
405
musicbrainz_submit_info_bar_new (char *title, char *artist)
409
GtkWidget *message_area, *button;
407
GtkWidget *infobar, *button;
410
408
char *primary_text;
412
410
g_return_val_if_fail (title != NULL, NULL);
413
411
g_return_val_if_fail (artist != NULL, NULL);
415
message_area = gedit_message_area_new ();
417
button = gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
420
gedit_message_area_add_button (GEDIT_MESSAGE_AREA (message_area),
422
GTK_RESPONSE_CANCEL);
413
infobar = gtk_info_bar_new_with_buttons (_("S_ubmit Album"), GTK_RESPONSE_OK,
414
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
424
417
/* Translators: title, artist */
425
418
primary_text = g_strdup_printf (_("Could not find %s by %s on MusicBrainz."), title, artist);
427
set_message_area_text_and_icon (GEDIT_MESSAGE_AREA (message_area),
430
_("You can improve the MusicBrainz database by adding this album."),
420
set_info_bar_text_and_icon (GTK_INFO_BAR (infobar),
423
_("You can improve the MusicBrainz database by adding this album."),
433
426
g_free (primary_text);
439
musicbrainz_submit_message_area_response (GeditMessageArea *message_area,
432
musicbrainz_submit_info_bar_response (GtkInfoBar *infobar,
443
436
if (response_id == GTK_RESPONSE_OK) {
444
437
on_submit_activate (NULL, NULL);
551
544
/* If album details don't come from MusicBrainz ask user to add them */
552
545
if (album->metadata_source != SOURCE_MUSICBRAINZ) {
553
GtkWidget *message_area;
555
message_area = musicbrainz_submit_message_area_new (album->title, album->artist);
557
set_message_area (message_area_eventbox, message_area);
559
g_signal_connect (message_area,
548
infobar = musicbrainz_submit_info_bar_new (album->title, album->artist);
550
set_message_area (message_area_eventbox, infobar);
552
g_signal_connect (infobar,
561
G_CALLBACK (musicbrainz_submit_message_area_response),
554
G_CALLBACK (musicbrainz_submit_info_bar_response),
564
gedit_message_area_set_default_response (GEDIT_MESSAGE_AREA (message_area),
565
GTK_RESPONSE_CANCEL);
557
gtk_info_bar_set_default_response (GTK_INFO_BAR (infobar),
558
GTK_RESPONSE_CANCEL);
567
gtk_widget_show (message_area);
560
gtk_widget_show (infobar);
614
607
GtkTreeViewColumn *column;
615
608
GtkCellRenderer *text_renderer = gtk_cell_renderer_text_new ();
617
dialog = glade_xml_get_widget (glade, "multiple_dialog");
610
dialog = GET_WIDGET ("multiple_dialog");
618
611
g_assert (dialog != NULL);
619
612
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (main_window));
620
albums_listview = glade_xml_get_widget (glade, "albums_listview");
621
ok_button = glade_xml_get_widget (glade, "ok_button");
613
albums_listview = GET_WIDGET ("albums_listview");
614
ok_button = GET_WIDGET ("ok_button");
623
616
g_signal_connect (albums_listview, "row-activated", G_CALLBACK (album_row_activated), dialog);
796
789
metadata_cb (SjMetadataGetter *m, GList *albums, GError *error)
798
gboolean realized = GTK_WIDGET_REALIZED (main_window);
791
gboolean realized = gtk_widget_get_realized (main_window);
801
gdk_window_set_cursor (main_window->window, NULL);
794
gdk_window_set_cursor (gtk_widget_get_window (main_window), NULL);
802
795
/* Clear the statusbar message */
803
796
gtk_statusbar_pop(GTK_STATUSBAR(status_bar), 0);
805
798
if (error && !(error->code == SJ_ERROR_CD_NO_MEDIA)) {
806
799
GtkWidget *dialog;
808
dialog = gtk_message_dialog_new (realized ? GTK_WINDOW (main_window) : NULL, 0,
811
"<b>%s</b>\n\n%s\n%s: %s",
812
_("Could not read the CD"),
813
_("Sound Juicer could not read the track listing on this CD."),
816
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE);
801
dialog = gtk_message_dialog_new_with_markup (realized ? GTK_WINDOW (main_window) : NULL, 0,
804
"<b>%s</b>\n\n%s\n%s: %s",
805
_("Could not read the CD"),
806
_("Sound Juicer could not read the track listing on this CD."),
817
809
gtk_dialog_run (GTK_DIALOG (dialog));
818
810
gtk_widget_destroy (dialog);
819
811
update_ui_for_album (NULL);
884
876
/* TODO: remove ignore_no_media? */
885
877
GError *error = NULL;
886
878
GdkCursor *cursor;
887
gboolean realized = GTK_WIDGET_REALIZED (main_window);
880
gboolean realized = gtk_widget_get_realized (main_window);
882
window = gtk_widget_get_window (main_window);
889
884
/* Make sure nothing is playing */
890
885
stop_playback ();
892
887
/* Set watch cursor */
894
cursor = gdk_cursor_new_for_display (gdk_drawable_get_display (main_window->window), GDK_WATCH);
895
gdk_window_set_cursor (main_window->window, cursor);
889
cursor = gdk_cursor_new_for_display (gdk_drawable_get_display (window), GDK_WATCH);
890
gdk_window_set_cursor (window, cursor);
896
891
gdk_cursor_unref (cursor);
897
gdk_display_sync (gdk_drawable_get_display (main_window->window));
892
gdk_display_sync (gdk_drawable_get_display (window));
900
895
/* Set statusbar message */
989
983
GtkWidget *dialog;
991
985
message = g_strdup_printf (_("Sound Juicer could not use the CD-ROM device '%s'"), device);
992
dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
993
GTK_DIALOG_DESTROY_WITH_PARENT,
998
_("HAL daemon may not be running."));
986
dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (main_window),
987
GTK_DIALOG_DESTROY_WITH_PARENT,
992
_("HAL daemon may not be running."));
999
993
g_free (message);
1000
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE);
1001
994
gtk_dialog_run (GTK_DIALOG (dialog));
1002
995
gtk_widget_destroy (dialog);
1022
1015
error = g_strerror (errno);
1023
1016
message = g_strdup_printf (_("Sound Juicer could not access the CD-ROM device '%s'"), device);
1025
dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
1026
GTK_DIALOG_DESTROY_WITH_PARENT,
1029
"<b>%s</b>\n\n%s\n%s: %s",
1030
_("Could not read the CD"),
1018
dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (main_window),
1019
GTK_DIALOG_DESTROY_WITH_PARENT,
1022
"<b>%s</b>\n\n%s\n%s: %s",
1023
_("Could not read the CD"),
1034
1027
g_free (message);
1036
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE);
1037
1029
gtk_dialog_run (GTK_DIALOG (dialog));
1038
1030
gtk_widget_destroy (dialog);
1114
1106
if (device == NULL) {
1115
1107
#ifndef IGNORE_MISSING_CD
1116
1108
GtkWidget *dialog;
1117
dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
1118
GTK_DIALOG_DESTROY_WITH_PARENT,
1122
_("No CD-ROM drives found"),
1123
_("Sound Juicer could not find any CD-ROM drives to read."));
1124
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE);
1109
dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (main_window),
1110
GTK_DIALOG_DESTROY_WITH_PARENT,
1114
_("No CD-ROM drives found"),
1115
_("Sound Juicer could not find any CD-ROM drives to read."));
1125
1116
gtk_dialog_run (GTK_DIALOG (dialog));
1126
1117
gtk_widget_destroy (dialog);
1234
1225
if (!gtk_show_uri (NULL, current_submit_url, GDK_CURRENT_TIME, &error)) {
1235
1226
GtkWidget *dialog;
1237
dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
1238
GTK_DIALOG_DESTROY_WITH_PARENT,
1241
"<b>%s</b>\n\n%s\n%s: %s",
1242
_("Could not open URL"),
1243
_("Sound Juicer could not open the submission URL"),
1246
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE);
1228
dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (main_window),
1229
GTK_DIALOG_DESTROY_WITH_PARENT,
1232
"<b>%s</b>\n\n%s\n%s: %s",
1233
_("Could not open URL"),
1234
_("Sound Juicer could not open the submission URL"),
1247
1237
gtk_dialog_run (GTK_DIALOG (dialog));
1248
1238
gtk_widget_destroy (dialog);
1249
1239
g_error_free (error);
1590
1580
if (!g_spawn_command_line_async (g_strconcat ("brasero -c ", device, NULL), &error)) {
1591
1581
GtkWidget *dialog;
1593
dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
1594
GTK_DIALOG_DESTROY_WITH_PARENT,
1597
"<b>%s</b>\n\n%s\n%s: %s",
1598
_("Could not duplicate disc"),
1599
_("Sound Juicer could not duplicate the disc"),
1602
gtk_label_set_use_markup (GTK_LABEL (GTK_MESSAGE_DIALOG (dialog)->label), TRUE);
1583
dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (main_window),
1584
GTK_DIALOG_DESTROY_WITH_PARENT,
1587
"<b>%s</b>\n\n%s\n%s: %s",
1588
_("Could not duplicate disc"),
1589
_("Sound Juicer could not duplicate the disc"),
1603
1592
gtk_dialog_run (GTK_DIALOG (dialog));
1604
1593
gtk_widget_destroy (dialog);
1605
1594
g_error_free (error);
1702
1691
/* init gnome-media-profiles */
1703
1692
gnome_media_profiles_init (gconf_client);
1706
if (g_file_test (SOURCE_GLADE, G_FILE_TEST_EXISTS) != FALSE) {
1707
glade = glade_xml_new (SOURCE_GLADE, NULL, NULL);
1694
builder = gtk_builder_new ();
1695
if (g_file_test (SOURCE_BUILDER, G_FILE_TEST_EXISTS) != FALSE) {
1696
gtk_builder_add_from_file (builder, SOURCE_BUILDER, &error);
1709
glade = glade_xml_new (INSTALLED_GLADE, NULL, NULL);
1698
gtk_builder_add_from_file (builder, INSTALLED_BUILDER, &error);
1711
if (glade == NULL) {
1712
error = g_error_new (g_quark_from_static_string ("sound-juicer"),
1713
1, /* this is made up */
1714
_("The interface file for Sound Juicer could not be read."));
1701
if (error != NULL) {
1715
1702
error_on_start (error);
1716
1703
g_error_free (error);
1719
glade_xml_signal_autoconnect (glade);
1721
main_window = glade_xml_get_widget (glade, "main_window");
1722
message_area_eventbox = glade_xml_get_widget (glade, "message_area_eventbox");
1723
select_all_menuitem = glade_xml_get_widget (glade, "select_all");
1724
deselect_all_menuitem = glade_xml_get_widget (glade, "deselect_all");
1725
submit_menuitem = glade_xml_get_widget (glade, "submit");
1726
title_entry = glade_xml_get_widget (glade, "title_entry");
1727
artist_entry = glade_xml_get_widget (glade, "artist_entry");
1728
duration_label = glade_xml_get_widget (glade, "duration_label");
1729
genre_entry = glade_xml_get_widget (glade, "genre_entry");
1730
year_entry = glade_xml_get_widget (glade, "year_entry");
1731
disc_number_entry = glade_xml_get_widget (glade, "disc_number_entry");
1732
track_listview = glade_xml_get_widget (glade, "track_listview");
1733
extract_button = glade_xml_get_widget (glade, "extract_button");
1734
extract_menuitem = glade_xml_get_widget (glade, "extract_menuitem");
1735
play_button = glade_xml_get_widget (glade, "play_button");
1736
play_menuitem = glade_xml_get_widget (glade, "play_menuitem");
1737
next_menuitem = glade_xml_get_widget (glade, "next_track_menuitem");
1738
prev_menuitem = glade_xml_get_widget (glade, "previous_track_menuitem");
1739
status_bar = glade_xml_get_widget (glade, "status_bar");
1740
duplicate = glade_xml_get_widget (glade, "duplicate_menuitem");
1741
eject = glade_xml_get_widget (glade, "eject");
1707
gtk_builder_connect_signals (builder, NULL);
1709
main_window = GET_WIDGET ("main_window");
1710
message_area_eventbox = GET_WIDGET ("message_area_eventbox");
1711
select_all_menuitem = GET_WIDGET ("select_all");
1712
deselect_all_menuitem = GET_WIDGET ("deselect_all");
1713
submit_menuitem = GET_WIDGET ("submit");
1714
title_entry = GET_WIDGET ("title_entry");
1715
artist_entry = GET_WIDGET ("artist_entry");
1716
duration_label = GET_WIDGET ("duration_label");
1717
genre_entry = GET_WIDGET ("genre_entry");
1718
year_entry = GET_WIDGET ("year_entry");
1719
disc_number_entry = GET_WIDGET ("disc_number_entry");
1720
track_listview = GET_WIDGET ("track_listview");
1721
extract_button = GET_WIDGET ("extract_button");
1722
extract_menuitem = GET_WIDGET ("extract_menuitem");
1723
play_button = GET_WIDGET ("play_button");
1724
play_menuitem = GET_WIDGET ("play_menuitem");
1725
next_menuitem = GET_WIDGET ("next_track_menuitem");
1726
prev_menuitem = GET_WIDGET ("previous_track_menuitem");
1727
status_bar = GET_WIDGET ("status_bar");
1728
duplicate = GET_WIDGET ("duplicate_menuitem");
1729
eject = GET_WIDGET ("eject");
1743
1731
{ /* ensure that the play/pause button's size is constant */
1744
1732
GtkWidget *fake_button1, *fake_button2;