51
50
static GtkWidget *drawing_area;
52
51
static GdkPixmap *digits, *signal_s, *stereo;
53
static GtkWidget *freq_scale, *vol_scale;
54
static GtkWidget *tray_icon;
52
static GtkWidget *freq_scale;
53
static GtkWidget *rec_pixmap;
56
55
static int timeout_id, bp_timeout_id = -1, bp_timeout_steps = 0;
58
void start_radio(gboolean restart)
57
static gboolean is_first_start(void)
59
GConfClient *client = gconf_client_get_default();
63
return !gconf_client_get_bool(client, "/apps/gnomeradio/first_time_flag", NULL);
66
static void set_first_time_flag(void)
68
GConfClient *client = gconf_client_get_default();
72
gconf_client_set_bool(client, "/apps/gnomeradio/first_time_flag", TRUE, NULL);
82
static gboolean initial_frequency_scan_cb(gpointer data)
84
static gfloat freq = FREQ_MIN - 4.0f/STEPS;
85
FreqScanData *fsd = data;
89
if (freq > FREQ_MAX) {
90
gtk_widget_destroy(fsd->dialog);
95
if (radio_check_station(freq)) {
96
char *text = g_strdup_printf(_("%d stations found"), g_list_length(fsd->stations) + 1);
97
gfloat *f = g_malloc(sizeof(gfloat));
98
gtk_label_set_text(GTK_LABEL(fsd->label), text);
101
g_print("%.2f is a station\n", freq);
104
fsd->stations = g_list_append(fsd->stations, f);
107
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(fsd->progress), MAX(0, (freq - FREQ_MIN)/(FREQ_MAX - FREQ_MIN)));
115
static void initial_frequency_scan(GtkWidget *app)
121
data.stations = NULL;
123
data.dialog = gtk_dialog_new_with_buttons(_("Scanning"),
124
GTK_WINDOW(app), DIALOG_FLAGS, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
125
gtk_dialog_set_has_separator(GTK_DIALOG(data.dialog), FALSE);
126
gtk_window_set_resizable(GTK_WINDOW(data.dialog), FALSE);
128
title_hdr = g_strconcat("<span weight=\"bold\">", _("Scanning for available stations:"), "</span>", NULL);
129
title = gtk_label_new(title_hdr);
130
gtk_misc_set_alignment(GTK_MISC(title), 0, 0.5);
131
gtk_label_set_use_markup(GTK_LABEL(title), TRUE);
133
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(data.dialog)->vbox), title, FALSE, FALSE, 6);
135
data.progress = gtk_progress_bar_new();
136
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(data.dialog)->vbox), data.progress, TRUE, FALSE, 6);
138
data.label = gtk_label_new(_("No stations found"));
139
gtk_misc_set_alignment(GTK_MISC(data.label), 0, 0.5);
140
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(data.dialog)->vbox), data.label, TRUE, FALSE, 6);
142
gtk_widget_show_all(data.dialog);
145
timeout_id = g_timeout_add(1000/SCAN_SPEED, (GSourceFunc)initial_frequency_scan_cb, (gpointer)&data);
146
int response = gtk_dialog_run(GTK_DIALOG(data.dialog));
150
g_source_remove(timeout_id);
152
gtk_widget_destroy(data.dialog);
154
if (g_list_length(data.stations) > 0) {
155
gfloat f = *((gfloat*)data.stations->data);
156
adj->value = f*STEPS;
163
text = g_strdup_printf(_("%d stations found. \nDo you want to add them as presets?\n"),
164
g_list_length(data.stations));
166
dialog = gtk_message_dialog_new(GTK_WINDOW(app), DIALOG_FLAGS, GTK_MESSAGE_QUESTION,
167
GTK_BUTTONS_YES_NO, text);
170
int response = gtk_dialog_run(GTK_DIALOG(dialog));
171
gtk_widget_destroy(dialog);
173
for (ptr = data.stations; ptr; ptr = ptr->next) {
174
if (response == GTK_RESPONSE_YES) {
175
preset *ps = g_malloc0(sizeof(preset));
176
ps->title = g_strdup(_("unnamed"));
177
ps->freq = *((gfloat*)ptr->data);
178
settings.presets = g_list_append(settings.presets, ps);
186
static void prefs_button_clicked_cb(GtkButton *button, gpointer app)
191
dialog = prefs_window(app);
193
/* Michael Jochum <e9725005@stud3.tuwien.ac.at> proposed to not use gnome_dialog_set_parent()
194
but following instead. */
195
gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(app));
196
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
198
/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
200
choise = GTK_RESPONSE_HELP;
201
while (choise == GTK_RESPONSE_HELP)
203
choise = gtk_dialog_run(GTK_DIALOG(dialog));
206
case GTK_RESPONSE_HELP:
207
display_help_cb("gnomeradio-settings");
210
/* We need the hide signal to get the value of the device_entry */
211
gtk_widget_hide_all(dialog);
212
gtk_widget_destroy(dialog);
217
void start_radio(gboolean restart, GtkWidget *app)
63
222
if (!radio_init(settings.device))
224
char *caption = g_strdup_printf(_("Could not open device \"%s\"!"), settings.device);
225
char *detail = g_strdup_printf(_("Check your settings and make sure that no other\n"
226
"program is using %s.\nAlso make sure that you have read-access to it."), settings.device);
227
show_error_message(caption, detail);
67
dialog = gtk_message_dialog_new(NULL, DIALOG_FLAGS, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
68
_("Could not open device \"%s\" !\n\nCheck your Settings and make sure that no other\n"
69
"program is using %s.\nMake also sure that you have read-access to it."),
70
settings.device, settings.device);
71
gtk_dialog_run (GTK_DIALOG (dialog));
72
gtk_widget_destroy (dialog);
232
prefs_button_clicked_cb(NULL, app);
76
void start_mixer(gboolean restart)
236
void start_mixer(gboolean restart, GtkWidget *app)
83
243
res = mixer_init(settings.mixer_dev, settings.mixer);
90
249
buffer = g_strdup_printf(_("Mixer source \"%s\" is not a valid source!"), settings.mixer);
92
251
buffer = g_strdup_printf(_("Could not open \"%s\"!"), settings.mixer_dev);
94
dialog = gtk_message_dialog_new(NULL, DIALOG_FLAGS, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, buffer);
95
gtk_dialog_run (GTK_DIALOG (dialog));
96
gtk_widget_destroy (dialog);
253
show_error_message(buffer, NULL);
100
257
vol = mixer_get_volume();
103
gtk_adjustment_set_value(volume, (double)vol);
259
bacon_volume_button_set_value(BACON_VOLUME_BUTTON(mute_button), vol);
260
/*gtk_adjustment_set_value(volume, (double)vol);*/
106
264
GList* get_mixer_recdev_list(void)
109
267
char **array, *dev;
110
char *gconf_path = NULL, *sndcard_name = NULL;
111
268
GList *result = NULL;
112
GConfClient *client = NULL;
114
270
array = mixer_get_rec_devices();
118
if (!gconf_is_initialized())
121
client = gconf_client_get_default();
123
sndcard_name = mixer_get_sndcard_name();
126
g_strdelimit (sndcard_name, " ", '_');
127
gconf_path = g_strdup_printf("/apps/gnome-volume-control/OSS-%s-%d/%%s/title", sndcard_name, 1);
136
char *gconf_dev = NULL;
139
if (client && gconf_path)
141
char *path = g_strdup_printf(gconf_path, dev);
142
gconf_dev = gconf_client_get_string(client, path , NULL);
147
if (strcmp(gconf_dev, dev))
148
text = g_strdup_printf("%s (%s)", dev, gconf_dev);
150
text = g_strdup(dev);
155
text = g_strdup(dev);
278
char *text = g_strdup(dev);
156
279
result = g_list_append(result, text);
158
281
dev = array[++i];
167
redraw_status_window(void)
288
static gboolean redraw_status_window(void)
170
291
GdkWindow *real_window, *window;
364
const char* get_preset(float freq, int *num)
366
GList *node = settings.presets;
372
preset *ps = (preset*)node->data;
373
if (fabs(ps->freq - freq) < 0.01)
241
383
static void adj_value_changed_cb(GtkAdjustment* data, gpointer window)
386
float freq = rint(adj->value)/STEPS;
387
const char *preset_title = get_preset(freq, &mom_ps);
389
preset_combo_set_item(mom_ps);
245
391
redraw_status_window();
247
buffer = g_strdup_printf(_("Gnomeradio - %.2f MHz"), rint(adj->value)/STEPS);
248
gtk_window_set_title (GTK_WINDOW(window), buffer);
394
buffer = g_strdup_printf(_("Gnomeradio - %s"), preset_title);
396
buffer = g_strdup_printf(_("Gnomeradio - %.2f MHz"), freq);
397
gtk_window_set_title(GTK_WINDOW(window), buffer);
398
if (tray_icon) gtk_tooltips_set_tip(tooltips, tray_icon, buffer, NULL);
251
buffer = g_strdup_printf(_("Frequency: %.2f MHz"), rint(adj->value)/STEPS);
401
buffer = g_strdup_printf(_("Frequency: %.2f MHz"), freq);
252
402
gtk_tooltips_set_tip(tooltips, freq_scale, buffer, NULL);
255
buffer = g_strdup_printf(_("Gnomeradio - %.2f MHz"), rint(adj->value)/STEPS);
256
gtk_tooltips_set_tip(tooltips, tray_icon, buffer, NULL);
259
405
radio_setfreq(adj->value/STEPS);
262
static gboolean freq_scale_focus_cb(GtkWidget *widget, GdkEventFocus *event, gpointer data)
265
preset_combo_set_item(mom_ps);
269
static void volume_value_changed_cb(GtkAdjustment* data, gpointer window)
408
static void volume_value_changed_cb(BaconVolumeButton *button, gpointer user_data)
273
mixer_set_volume((gint)volume->value);
275
text = g_strdup_printf(_("Volume: %d%%"), (gint)volume->value);
411
int vol = (int)(bacon_volume_button_get_value(BACON_VOLUME_BUTTON(mute_button)) + 0.5f);
413
mixer_set_volume(vol);
415
/* text = g_strdup_printf(_("Volume: %d%%"), vol);
276
416
gtk_tooltips_set_tip(tooltips, vol_scale, text, NULL);
420
g_signal_handler_block(G_OBJECT(mute_menuitem), mute_menuitem_toggled_cb_id);
421
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mute_menuitem), vol == 0);
422
g_signal_handler_unblock(G_OBJECT(mute_menuitem), mute_menuitem_toggled_cb_id);
484
585
exit_gnome_radio();
487
static void prefs_button_clicked_cb(GtkButton *button, gpointer app)
588
void tray_icon_items_set_sensible(gboolean sensible)
492
dialog = prefs_window();
494
/* Michael Jochum <e9725005@stud3.tuwien.ac.at> proposed to not use gnome_dialog_set_parent()
495
but following instead. */
496
gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(app));
497
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
499
/*gnome_dialog_set_parent(GNOME_DIALOG(dialog), GTK_WINDOW(app));*/
501
choise = GTK_RESPONSE_HELP;
502
while (choise == GTK_RESPONSE_HELP)
504
choise = gtk_dialog_run(GTK_DIALOG(dialog));
507
case GTK_RESPONSE_HELP:
508
display_help_cb("gnomeradio-settings");
511
/* We need the hide signal to get the value of the device_entry */
512
gtk_widget_hide_all(dialog);
513
gtk_widget_destroy(dialog);
592
int i, cnt = g_list_length(settings.presets);
595
menuitems = GTK_MENU_SHELL(tray_menu)->children;
597
g_assert(cnt + 6 == g_list_length(menuitems));
599
/* Disable the presets */
600
for (i = 0; i < cnt; i++) {
601
menuitem = g_list_nth_data(menuitems, i);
602
gtk_widget_set_sensitive(menuitem, sensible);
605
/* Disable the mute button (separator => +1) */
606
menuitem = g_list_nth_data(menuitems, cnt + 1);
607
gtk_widget_set_sensitive(menuitem, sensible);
609
/* Disable the record button */
610
menuitem = g_list_nth_data(menuitems, cnt + 2);
611
gtk_widget_set_sensitive(menuitem, sensible);
613
/* Disable the quit button */
614
menuitem = g_list_nth_data(menuitems, cnt + 5);
615
gtk_widget_set_sensitive(menuitem, sensible);
519
start_recording(const gchar *filename)
618
static int start_recording(const gchar *destination, const char* station, const char* time)
521
GIOChannel *wavioc = NULL, *mp3ioc = NULL;
522
620
GtkWidget *dialog;
621
Recording* recording;
524
624
if (!mixer_set_rec_device())
534
if (rec_settings.mp3)
535
record_as_mp3(&wavioc, &mp3ioc, filename);
537
record_as_wave(&wavioc, filename);
539
dialog = record_status_window();
541
run_status_window(wavioc, mp3ioc, filename);
634
/* You can translate the filename for a recording:
635
* args for this format are: path, station title, time
637
filename = g_strdup_printf(_("%s/%s_%s"),
641
recording = recording_start(filename);
646
tray_icon_items_set_sensible(FALSE);
648
recording->station = g_strdup(station);
649
dialog = record_status_window(recording);
651
run_status_window(recording);
546
static void rec_button_clicked_cb(GtkButton *button, gpointer app)
656
void rec_button_clicked_cb(GtkButton *button, gpointer app)
548
658
GtkWidget *dialog;
549
gchar *filename, *suffix;
550
660
char time_str[100];
553
if (!check_sox_installation())
555
dialog = gtk_message_dialog_new(GTK_WINDOW(app), DIALOG_FLAGS, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
556
_("Sox could not be detected. Please ensure"
557
" that it is installed in your PATH."));
558
gtk_dialog_run (GTK_DIALOG (dialog));
559
gtk_widget_destroy (dialog);
563
if (rec_settings.mp3) {
564
if (g_str_equal(rec_settings.encoder, "oggenc")) suffix = ".ogg";
565
else suffix = ".mp3";
566
} else suffix = ".wav";
569
664
/* consult man strftime to translate this. This is a filename, so don't use "/" or ":", please */
570
665
strftime(time_str, 100, _("%B-%d-%Y_%H-%M-%S"), localtime(&t));
572
/* Only change the "MHz" part here (if applicable) */
573
filename = g_strdup_printf(_("%s/%.2fMHz_%s%s"),
574
rec_settings.destination,
575
rint(adj->value)/STEPS,
668
station = g_strdup_printf(_("%.2f MHz"), rint(adj->value)/STEPS);
670
g_assert(mom_ps < g_list_length(settings.presets));
671
preset* ps = g_list_nth_data(settings.presets, mom_ps);
579
if (!check_filename(filename)) {
674
station = g_strdup(ps->title);
677
/* if (!check_filename(filename)) {
580
678
GtkWidget *errdialog;
581
679
errdialog = gtk_message_dialog_new(GTK_WINDOW(app), DIALOG_FLAGS, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
582
680
_("Error opening file '%s':\n%s"), filename, strerror(errno));
583
681
gtk_dialog_run (GTK_DIALOG (errdialog));
584
682
gtk_widget_destroy (errdialog);
585
} else start_recording(filename);
684
start_recording(rec_settings.destination, station, time_str);
589
void mute_button_toggled_cb(GtkButton *button, gpointer data)
688
void toggle_volume(void)
591
static gboolean muted = FALSE;
691
int vol = mixer_get_volume();
699
mixer_set_volume(vol);
700
bacon_volume_button_set_value(BACON_VOLUME_BUTTON(mute_button), vol);
701
/*gtk_adjustment_set_value(volume, vol);*/
704
static void mute_button_toggled_cb(GtkButton *button, gpointer data)
706
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(mute_button)))
708
gtk_tooltips_set_tip(tooltips, mute_button, _("Unmute"), NULL);
597
712
gtk_tooltips_set_tip(tooltips, mute_button, _("Mute"), NULL);
603
gtk_tooltips_set_tip(tooltips, mute_button, _("Unmute"), NULL);
607
717
static void about_button_clicked_cb(GtkButton *button, gpointer data)
609
719
GdkPixbuf *app_icon;
720
GtkIconTheme *icontheme;
610
721
static GtkWidget *about;
611
722
const char *authors[] = {"Jörgen Scheibengruber <mfcn@gmx.de>", NULL};
668
tray_clicked(GtkWidget *widget, GdkEventButton *event, gpointer data)
779
void toggle_mainwindow_visibility(GtkWidget *app)
670
781
static gint posx, posy;
671
GtkWidget *app = GTK_WIDGET(data);
672
switch (event->button)
675
if (event->type != GDK_BUTTON_PRESS)
677
if (GTK_WIDGET_VISIBLE(app))
679
gtk_window_get_position(GTK_WINDOW(app), &posx, &posy);
680
gtk_widget_hide(app);
684
if ((posx >= 0) && (posy >= 0))
685
gtk_window_move(GTK_WINDOW(app), posx, posy);
686
gtk_window_present(GTK_WINDOW(app));
690
if (event->type != GDK_BUTTON_PRESS)
692
/* if (tray_menu_disabled)
694
gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
695
NULL, NULL, event->button, event->time);*/
702
tray_destroyed (GtkWidget *widget, GdkEvent *event, gpointer data)
704
create_tray_icon(GTK_WIDGET(data));
708
void create_tray_icon(GtkWidget *app)
710
GdkPixbuf *pixbuf, *scaled;
711
GtkWidget *tray_icon_image;
715
tray_icon = GTK_WIDGET(egg_tray_icon_new (PACKAGE));
716
pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)radio_xpm);
717
scaled = gdk_pixbuf_scale_simple(pixbuf, 16, 16, GDK_INTERP_HYPER);
718
gdk_pixbuf_unref(pixbuf);
719
tray_icon_image = gtk_image_new_from_pixbuf(scaled);
720
gdk_pixbuf_unref(scaled);
722
eventbox = gtk_event_box_new();
723
gtk_container_add(GTK_CONTAINER(eventbox), tray_icon_image);
724
gtk_container_add (GTK_CONTAINER(tray_icon), eventbox);
726
g_signal_connect(G_OBJECT(eventbox), "button-press-event",
727
G_CALLBACK(tray_clicked), (gpointer)app);
728
g_signal_connect(G_OBJECT(tray_icon), "destroy-event",
729
G_CALLBACK(tray_destroyed), (gpointer)app);
730
gtk_widget_show_all(GTK_WIDGET(tray_icon));
732
text = g_strdup_printf(_("Gnomeradio - %.2f MHz"), adj->value/STEPS);
733
gtk_tooltips_set_tip(tooltips, tray_icon, text, NULL);
782
if (GTK_WIDGET_VISIBLE(app))
784
gtk_window_get_position(GTK_WINDOW(app), &posx, &posy);
785
gtk_widget_hide(app);
789
if ((posx >= 0) && (posy >= 0))
790
gtk_window_move(GTK_WINDOW(app), posx, posy);
791
gtk_window_present(GTK_WINDOW(app));
737
795
GtkWidget* gnome_radio_gui(void)
740
798
GtkWidget *prefs_button, *quit_button, *scfw_button, *scbw_button;
741
799
GtkWidget *stfw_button, *stbw_button, *about_button, *rec_button;
742
800
GtkWidget *prefs_pixmap, *quit_pixmap, *scfw_pixmap, *scbw_pixmap;
743
GtkWidget *stfw_pixmap, *stbw_pixmap, *about_pixmap, *mute_pixmap, *rec_pixmap;
801
GtkWidget *stfw_pixmap, *stbw_pixmap, *about_pixmap;
744
802
GtkWidget *vol_up_pixmap, *vol_down_pixmap, *freq_up_pixmap, *freq_down_pixmap;
745
803
GdkPixbuf *vol_up_pixbuf, *vol_down_pixbuf, *freq_up_pixbuf, *freq_down_pixbuf;
746
804
GtkWidget *hbox1, *hbox2, *vbox, *menubox, *freq_vol_box;
747
GtkWidget *vseparator1, *vseparator2, *vseparator3, *vseparator4;
805
GtkWidget *vseparator1, *vseparator2, *vseparator4;
748
806
GtkWidget *label;
749
807
GtkWidget *frame;
806
866
label = gtk_label_new(_("Presets:"));
808
868
freq_scale = gtk_hscale_new(adj);
809
//gtk_range_set_update_policy(GTK_RANGE(freq_scale), GTK_UPDATE_DELAYED);
810
vol_scale = gtk_hscale_new(volume);
869
/*gtk_range_set_update_policy(GTK_RANGE(freq_scale), GTK_UPDATE_DELAYED);*/
870
/*vol_scale = gtk_hscale_new(volume);*/
812
vol_up_pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)vol_up_xpm);
813
vol_down_pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)vol_down_xpm);
872
/*vol_up_pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)vol_up_xpm);
873
vol_down_pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)vol_down_xpm);*/
814
874
freq_up_pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)freq_up_xpm);
815
875
freq_down_pixbuf = gdk_pixbuf_new_from_xpm_data((const char**)freq_down_xpm);
817
vol_up_pixmap = gtk_image_new_from_pixbuf(vol_up_pixbuf);
818
vol_down_pixmap = gtk_image_new_from_pixbuf(vol_down_pixbuf);
877
/*vol_up_pixmap = gtk_image_new_from_pixbuf(vol_up_pixbuf);
878
vol_down_pixmap = gtk_image_new_from_pixbuf(vol_down_pixbuf);*/
819
879
freq_up_pixmap = gtk_image_new_from_pixbuf(freq_up_pixbuf);
820
880
freq_down_pixmap = gtk_image_new_from_pixbuf(freq_down_pixbuf);
822
//gtk_widget_set_usize(freq_scale, 160, 10);
823
gtk_widget_set_size_request(freq_scale, 160, -1);
882
/*gtk_widget_set_usize(freq_scale, 160, 10);*/
883
/*gtk_widget_set_size_request(freq_scale, 160, -1);*/
825
885
gtk_widget_realize(app);
826
886
drawing_area = gtk_drawing_area_new();
848
910
gtk_box_pack_start(GTK_BOX(hbox2), scfw_button, FALSE, FALSE, 2);
849
911
gtk_box_pack_start(GTK_BOX(hbox2), vseparator1, FALSE, FALSE, 2);
850
912
gtk_box_pack_start(GTK_BOX(hbox2), mute_button, FALSE, FALSE, 2);
851
//gtk_box_pack_start(GTK_BOX(hbox2), vseparator2, TRUE, TRUE, 3);
913
/*gtk_box_pack_start(GTK_BOX(hbox2), vseparator2, TRUE, TRUE, 3);*/
852
914
gtk_box_pack_start(GTK_BOX(hbox2), rec_button, FALSE, FALSE, 2);
853
915
gtk_box_pack_start(GTK_BOX(hbox2), vseparator4, FALSE, FALSE, 2);
854
//gtk_box_pack_start(GTK_BOX(hbox2), help_button, FALSE, FALSE, 2);
916
/*gtk_box_pack_start(GTK_BOX(hbox2), help_button, FALSE, FALSE, 2);*/
855
917
gtk_box_pack_start(GTK_BOX(hbox2), prefs_button, FALSE, FALSE, 2);
856
918
gtk_box_pack_start(GTK_BOX(hbox2), about_button, FALSE, FALSE, 2);
857
//gtk_box_pack_start(GTK_BOX(hbox2), quit_button, FALSE, FALSE, 2);
919
/*gtk_box_pack_start(GTK_BOX(hbox2), quit_button, FALSE, FALSE, 2);*/
859
921
gtk_box_pack_start(GTK_BOX(hbox1), frame, FALSE, FALSE, 3);
860
922
gtk_box_pack_start(GTK_BOX(hbox1), menubox, TRUE, TRUE, 3);
863
925
gtk_box_pack_start(GTK_BOX(menubox), preset_combo, TRUE, TRUE, 0);
865
927
gtk_box_pack_start(GTK_BOX(freq_vol_box), freq_down_pixmap, FALSE, FALSE, 2);
866
gtk_box_pack_start(GTK_BOX(freq_vol_box), freq_scale, FALSE, FALSE, 0);
928
gtk_box_pack_start(GTK_BOX(freq_vol_box), freq_scale, TRUE, TRUE, 0);
867
929
gtk_box_pack_start(GTK_BOX(freq_vol_box), freq_up_pixmap, FALSE, FALSE, 2);
868
gtk_box_pack_start(GTK_BOX(freq_vol_box), vseparator3, FALSE, FALSE, 2);
930
/*gtk_box_pack_start(GTK_BOX(freq_vol_box), vseparator3, FALSE, FALSE, 2);
869
931
gtk_box_pack_start(GTK_BOX(freq_vol_box), vol_down_pixmap, FALSE, FALSE, 2);
870
932
gtk_box_pack_start(GTK_BOX(freq_vol_box), vol_scale, TRUE, TRUE, 0);
871
gtk_box_pack_start(GTK_BOX(freq_vol_box), vol_up_pixmap, FALSE, FALSE, 2);
933
gtk_box_pack_start(GTK_BOX(freq_vol_box), vol_up_pixmap, FALSE, FALSE, 2);*/
873
935
gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 4);
874
936
gtk_box_pack_start(GTK_BOX(vbox), freq_vol_box, TRUE, TRUE, 2);
882
944
gnome_app_set_contents(GNOME_APP(app), vbox);
884
//status = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_NEVER);
946
/*status = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_NEVER);*/
886
//gnome_app_set_statusbar(GNOME_APP(app), status);
948
/*gnome_app_set_statusbar(GNOME_APP(app), status);*/
888
950
tooltips = gtk_tooltips_new();
890
952
g_signal_connect(GTK_OBJECT(app), "delete_event", GTK_SIGNAL_FUNC(delete_event_cb), NULL);
891
953
g_signal_connect(GTK_OBJECT(quit_button), "clicked", GTK_SIGNAL_FUNC(quit_button_clicked_cb), NULL);
892
954
g_signal_connect(GTK_OBJECT(adj), "value-changed", GTK_SIGNAL_FUNC(adj_value_changed_cb), (gpointer) app);
893
g_signal_connect(GTK_OBJECT(freq_scale), "button-release-event", GTK_SIGNAL_FUNC(freq_scale_focus_cb), NULL);
894
g_signal_connect(GTK_OBJECT(volume), "value-changed", GTK_SIGNAL_FUNC(volume_value_changed_cb), NULL);
955
g_signal_connect(GTK_OBJECT(mute_button), "value-changed", GTK_SIGNAL_FUNC(volume_value_changed_cb), NULL);
895
956
g_signal_connect(GTK_OBJECT(stfw_button), "pressed", GTK_SIGNAL_FUNC(step_button_pressed_cb), (gpointer)TRUE);
896
957
g_signal_connect(GTK_OBJECT(stbw_button), "pressed", GTK_SIGNAL_FUNC(step_button_pressed_cb), (gpointer)FALSE);
897
958
g_signal_connect(GTK_OBJECT(stfw_button), "clicked", GTK_SIGNAL_FUNC(step_button_clicked_cb), (gpointer)TRUE);
913
973
gtk_tooltips_set_tip(tooltips, about_button, _("About Gnomeradio"), NULL);
914
974
gtk_tooltips_set_tip(tooltips, rec_button, _("Record radio as Wave, OGG or MP3"), NULL);
915
975
gtk_tooltips_set_tip(tooltips, prefs_button, _("Edit your Preferences"), NULL);
916
gtk_tooltips_set_tip(tooltips, mute_button, _("Mute"), NULL);
976
gtk_tooltips_set_tip(tooltips, mute_button, _("Adjust the Volume"), NULL);
917
977
gtk_tooltips_set_tip(tooltips, quit_button, _("Quit"), NULL);
918
978
text = g_strdup_printf(_("Frequency: %.2f MHz"), adj->value/STEPS);
919
979
gtk_tooltips_set_tip(tooltips, freq_scale, text, NULL);
921
text = g_strdup_printf(_("Volume: %d%%"), (gint)volume->value);
981
/* text = g_strdup_printf(_("Volume: %d%%"), (gint)volume->value);
922
982
gtk_tooltips_set_tip(tooltips, vol_scale, text, NULL);
999
1059
int main(int argc, char* argv[])
1001
1061
GtkWidget* app;
1003
GdkPixbuf *app_icon;
1004
1063
GnomeClient *client;
1005
1064
GError *err = NULL;
1006
1065
int redraw_timeout_id;
1066
gboolean do_scan = FALSE;
1068
GOptionContext *ctx;
1069
const GOptionEntry entries[] = {
1070
{ "scan", 0, 0, G_OPTION_ARG_NONE, &do_scan, N_("Scan for stations"), NULL },
1008
1074
bindtextdomain(PACKAGE, GNOMELOCALEDIR);
1009
1075
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
1010
1076
textdomain(PACKAGE);
1078
g_set_application_name(_("Gnomeradio"));
1081
ctx = g_option_context_new("- Gnomeradio");
1082
g_option_context_add_main_entries(ctx, entries, GETTEXT_PACKAGE);
1083
g_option_context_add_group(ctx, gst_init_get_option_group());
1084
g_option_context_set_ignore_unknown_options(ctx, TRUE);
1012
1087
gnome_program_init(PACKAGE, VERSION,
1013
1088
LIBGNOMEUI_MODULE, argc, argv,
1014
GNOME_PROGRAM_STANDARD_PROPERTIES,
1089
GNOME_PROGRAM_STANDARD_PROPERTIES,
1091
GNOME_PARAM_GOPTION_CONTEXT, ctx,
1017
app_icon = gdk_pixbuf_new_from_xpm_data((const char**)radio_xpm);
1018
icons = g_list_append(NULL, (gpointer)app_icon);
1019
gtk_window_set_default_icon_list(icons);
1094
gtk_window_set_default_icon_name("gnomeradio");
1024
1096
app = gnome_radio_gui();
1026
gtk_widget_show_all(app);
1028
/* Create an tray icon */
1029
create_tray_icon(app);
1098
/* Initizialize GStreamer */
1099
gst_init(&argc, &argv);
1031
1101
/* Initizialize Gconf */
1032
if (!gconf_init(argc, argv, &err))
1035
dialog = gtk_message_dialog_new(NULL, DIALOG_FLAGS, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
1036
_("Failed to init GConf: %s\n"
1037
"Changes to the settings won't be saved\n"), err->message);
1038
gtk_dialog_run (GTK_DIALOG (dialog));
1039
gtk_widget_destroy (dialog);
1102
if (!gconf_init(argc, argv, &err)) {
1104
details = g_strdup_printf(_("%s\n\nChanges to the settings won't be saved."), err->message);
1105
show_warning_message(_("Failed to init GConf!"), details);
1040
1106
g_error_free(err);
1045
1110
gconf_client_set_global_default_error_handler((GConfClientErrorHandlerFunc)gconf_error_handler);
1046
1111
gconf_client_set_error_handling(gconf_client_get_default(), GCONF_CLIENT_HANDLE_ALL);
1112
gnome_media_profiles_init(gconf_client_get_default());
1049
1115
load_settings();
1116
create_tray_menu(app);
1050
1118
gtk_combo_box_append_text(GTK_COMBO_BOX(preset_combo), _("manual"));
1051
1119
for (ptr = settings.presets; ptr; ptr = g_list_next(ptr)) {
1052
1120
preset *ps = (preset*)ptr->data;
1053
1121
gtk_combo_box_append_text(GTK_COMBO_BOX(preset_combo), ps->title);
1055
1123
preset_combo_set_item(mom_ps);
1125
start_mixer(FALSE, app);
1126
start_radio(FALSE, app);
1127
if (is_first_start() || do_scan) {
1128
if (!radio_is_init()) {
1129
g_message(_("Could not scan. Radio is not initialized."));
1131
initial_frequency_scan(app);
1132
set_first_time_flag();
1135
gtk_widget_show_all(app);
1137
/* Create an tray icon */
1138
create_tray_icon(app);
1060
1140
adj_value_changed_cb(NULL, (gpointer) app);
1061
volume_value_changed_cb(NULL, NULL);
1141
/*volume_value_changed_cb(NULL, NULL);*/
1064
1143
#ifdef HAVE_LIRC
1065
1144
if(!my_lirc_init())