814
818
gtk_widget_set_sensitive(save_button, sel);
821
static void list_view_scroll_to_active_preset_cb(GtkWidget *widget, gpointer data)
823
GtkTreePath *path = NULL;
827
if (settings.presets == NULL) {
828
gtk_widget_grab_focus(add_button);
832
active = gtk_combo_box_get_active(GTK_COMBO_BOX(preset_combo)) - 1;
835
gtk_widget_grab_focus(add_button);
839
if (!gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(list_store), &iter, NULL, active))
842
path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
844
gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW (list_view), path, NULL, FALSE, 0, 0);
845
gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
846
gtk_tree_path_free(path);
848
gtk_widget_grab_focus(list_view);
817
851
static void free_presets_list (gpointer data)
819
853
preset *ps = (preset *) data;
972
1006
xmlNodePtr current;
973
1007
xmlChar *title, *freq, *position;
974
1008
GtkTreeModel *model;
1009
GtkTreePath *path = NULL;
975
1010
GtkTreeIter iter;
1011
GtkAdjustment* v_scb;
976
1012
GList* menuitems;
977
1013
GtkWidget *menuitem;
979
1015
/* load the file */
980
1016
doc = xmlParseFile(filename);
981
1017
/* get the root item */
982
1021
current = xmlDocGetRootElement(doc);
1022
if (current == NULL) {
984
if (doc == NULL || current == NULL || xmlStrcmp(current->name, (guchar*)"gnomeradio"))
1027
if (xmlStrcmp(current->name, (guchar*)"gnomeradio")) {
986
1028
xmlFreeDoc(doc);
987
char *caption = g_strdup_printf(_("Cannot parsing file \"%s\"."), filename);
988
char *detail = g_strdup_printf(_("To create FM radio station presets use \"Add preset\" button"));
989
show_error_message(caption, detail);
995
1032
/* remove previous presets */
996
1033
if (settings.presets != NULL) {
997
g_list_free_full (settings.presets, free_presets_list);
998
settings.presets = NULL;
1000
gtk_list_store_clear(GTK_LIST_STORE(list_store));
1002
1034
if (main_visible) {
1003
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(preset_combo));
1004
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), _("manual"));
1005
mom_ps = g_list_length(settings.presets) - 1;
1006
preset_combo_set_item(mom_ps);
1008
menuitems = gtk_container_get_children(GTK_CONTAINER(tray_menu));
1011
count = g_list_length(menuitems);
1037
count = g_list_length (settings.presets);
1038
for (i = 0; i < count; i++)
1039
gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(preset_combo), 1);
1041
menuitems = gtk_container_get_children (GTK_CONTAINER (tray_menu));
1043
count = g_list_length (menuitems);
1012
1044
for (i = 0; i < count - 6; i++) {
1013
menuitem = g_list_nth_data(menuitems, i);
1014
gtk_widget_destroy(menuitem);
1045
menuitem = g_list_nth_data (menuitems, i);
1046
gtk_widget_destroy (menuitem);
1050
gtk_list_store_clear(GTK_LIST_STORE(list_store));
1052
g_list_free_full (settings.presets, free_presets_list);
1053
settings.presets = NULL;
1019
1056
/* get the tree view's model */
1022
1059
/* iterate through the root's children items */
1023
1060
current = current->xmlChildrenNode;
1026
/* check for the proper element name */
1027
if (!xmlStrcmp(current->name, (guchar*)"station"))
1029
/* get the saved properties */
1030
title = xmlGetProp(current, (guchar*)"name");
1031
freq = xmlGetProp(current, (guchar*)"freq");
1032
position = xmlGetProp(current, (guchar*)"position");
1034
preset *ps = g_malloc0(sizeof(preset));
1035
ps->title = g_strdup((gchar*)title);
1036
ps->freq = atof((gchar*)freq);
1038
settings.presets = g_list_prepend(settings.presets, ps);
1040
/* make sure that the path exists */
1041
gtk_tree_model_generate_path(model, (gchar*)position);
1042
/* get an iter to the path */
1043
gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
1045
gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
1048
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), ps->title);
1049
mom_ps = g_list_length(settings.presets) - 1;
1050
preset_combo_set_item(mom_ps);
1052
menuitem = gtk_menu_item_new_with_label(ps->title);
1054
gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
1055
g_signal_connect(G_OBJECT(menuitem), "activate", (GCallback)preset_menuitem_activate_cb, GINT_TO_POINTER (mom_ps));
1056
gtk_widget_show(menuitem);
1062
if(!xmlIsBlankNode(current)) {
1063
/* check for the proper element name */
1064
if (!xmlStrcmp(current->name, (guchar*)"station")) {
1065
/* get the saved properties */
1066
title = xmlGetProp(current, (guchar*)"name");
1067
freq = xmlGetProp(current, (guchar*)"freq");
1068
position = xmlGetProp(current, (guchar*)"position");
1070
if( title && freq && position ) {
1071
preset *ps = g_malloc0(sizeof(preset));
1072
ps->title = g_strdup((gchar*)title);
1073
ps->freq = atof((gchar*)freq);
1075
settings.presets = g_list_append(settings.presets, ps);
1077
/* make sure that the path exists */
1078
gtk_tree_model_generate_path(model, (gchar*)position);
1079
/* get an iter to the path */
1080
gtk_tree_model_get_iter_from_string(model, &iter, (gchar*)position);
1082
gtk_list_store_set(GTK_LIST_STORE(list_store), &iter, 0, title, 1, freq, -1);
1084
gtk_tree_selection_unselect_all(selection);
1086
v_scb = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(list_view));
1087
gtk_adjustment_set_value(v_scb, gtk_adjustment_get_upper(v_scb));
1090
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(preset_combo), title);
1091
mom_ps = g_list_length(settings.presets) - 1;
1092
preset_combo_set_item(mom_ps);
1094
menuitem = gtk_menu_item_new_with_label(title);
1096
gtk_menu_shell_insert(GTK_MENU_SHELL(tray_menu), menuitem, mom_ps);
1097
g_signal_connect(G_OBJECT(menuitem), "activate",
1098
(GCallback)preset_menuitem_activate_cb,
1099
GINT_TO_POINTER (mom_ps));
1100
gtk_widget_show(menuitem);
1108
current = current->next;
1063
current = current->next;
1065
1111
/* free the doc node */
1066
1112
xmlFreeDoc(doc);
1068
settings.presets = g_list_reverse(settings.presets);
1114
if (settings.presets == NULL)
1117
path = gtk_tree_model_get_path(GTK_TREE_MODEL(list_store), &iter);
1119
gtk_tree_view_set_cursor(GTK_TREE_VIEW (list_view), path, NULL, FALSE );
1120
gtk_tree_path_free(path);
1122
gtk_widget_grab_focus(list_view);
1124
list_view_cursor_changed_cb(list_view, NULL);
1070
1125
gtk_widget_set_sensitive(save_button, TRUE);
1071
gtk_widget_set_sensitive(remove_button, FALSE);
1072
gtk_widget_set_sensitive(move_up_button, FALSE);
1073
gtk_widget_set_sensitive(move_down_button, FALSE);
1126
gtk_widget_set_sensitive(remove_button, TRUE);
1076
1129
/* Callback for the "Load from file" button; calls load_from_file */