void pragha_application_add_location (PraghaApplication *pragha) { PraghaPlaylist *playlist; PraghaDatabase *cdbase; PraghaMusicobject *mobj; GtkWidget *dialog, *table, *uri_entry, *label_name, *name_entry; const gchar *uri = NULL, *name = NULL; gchar *clipboard_location = NULL, *real_name = NULL; GSList *list = NULL, *i = NULL; GList *mlist = NULL; guint row = 0; gint result; /* Create dialog window */ table = pragha_hig_workarea_table_new (); pragha_hig_workarea_table_add_section_title(table, &row, _("Enter the URL of an internet radio stream")); uri_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(uri_entry), 255); pragha_hig_workarea_table_add_wide_control (table, &row, uri_entry); label_name = gtk_label_new_with_mnemonic(_("Give it a name to save")); name_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(name_entry), 255); pragha_hig_workarea_table_add_row (table, &row, label_name, name_entry); /* Get item from clipboard to fill GtkEntry */ clipboard_location = totem_open_location_set_from_clipboard (uri_entry); if (clipboard_location != NULL && strcmp (clipboard_location, "") != 0) { gtk_entry_set_text (GTK_ENTRY(uri_entry), clipboard_location); g_free (clipboard_location); } dialog = gtk_dialog_new_with_buttons (_("Add a location"), GTK_WINDOW(pragha_application_get_window(pragha)), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Ok"), GTK_RESPONSE_ACCEPT, NULL); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT); gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), table); gtk_window_set_default_size(GTK_WINDOW (dialog), 450, -1); gtk_entry_set_activates_default (GTK_ENTRY(uri_entry), TRUE); gtk_entry_set_activates_default (GTK_ENTRY(name_entry), TRUE); gtk_widget_show_all(dialog); result = gtk_dialog_run(GTK_DIALOG(dialog)); switch(result) { case GTK_RESPONSE_ACCEPT: if (gtk_entry_get_text_length (GTK_ENTRY(uri_entry))) uri = gtk_entry_get_text(GTK_ENTRY(uri_entry)); playlist = pragha_application_get_playlist (pragha); if (string_is_not_empty(uri)) { if (gtk_entry_get_text_length (GTK_ENTRY(name_entry))) name = gtk_entry_get_text(GTK_ENTRY(name_entry)); #ifdef HAVE_PLPARSER list = pragha_totem_pl_parser_parse_from_uri (uri); #else list = g_slist_append (list, g_strdup(uri)); #endif for (i = list; i != NULL; i = i->next) { if (string_is_not_empty(name)) real_name = new_radio (playlist, i->data, name); mobj = new_musicobject_from_location (i->data, real_name); mlist = g_list_append(mlist, mobj); if (real_name) { g_free (real_name); real_name = NULL; } g_free(i->data); } g_slist_free(list); /* Append playlist and save on database */ pragha_playlist_append_mobj_list (playlist, mlist); g_list_free(mlist); cdbase = pragha_application_get_database (pragha); pragha_database_change_playlists_done (cdbase); } break; case GTK_RESPONSE_CANCEL: break; default: break; } gtk_widget_destroy(dialog); return; }
GtkWidget * totem_open_location_new (void) { TotemOpenLocation *open_location; char *clipboard_location; GtkEntryCompletion *completion; GtkTreeModel *model; GList *recent_items, *streams_recent_items = NULL; open_location = TOTEM_OPEN_LOCATION (g_object_new (TOTEM_TYPE_OPEN_LOCATION, NULL)); if (open_location->priv->uri_container == NULL) { g_object_unref (open_location); return NULL; } gtk_window_set_title (GTK_WINDOW (open_location), _("Open Location...")); gtk_dialog_add_buttons (GTK_DIALOG (open_location), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); gtk_dialog_set_response_sensitive (GTK_DIALOG (open_location), GTK_RESPONSE_OK, FALSE); gtk_container_set_border_width (GTK_CONTAINER (open_location), 5); gtk_dialog_set_default_response (GTK_DIALOG (open_location), GTK_RESPONSE_OK); /* Get item from clipboard to fill GtkEntry */ clipboard_location = totem_open_location_set_from_clipboard (open_location); if (clipboard_location != NULL && strcmp (clipboard_location, "") != 0) gtk_entry_set_text (open_location->priv->uri_entry, clipboard_location); g_free (clipboard_location); /* Add items in Totem's GtkRecentManager to the URI GtkEntry's GtkEntryCompletion */ completion = gtk_entry_completion_new(); model = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING)); gtk_entry_set_completion (open_location->priv->uri_entry, completion); recent_items = gtk_recent_manager_get_items (gtk_recent_manager_get_default ()); if (recent_items != NULL) { GList *p; GtkTreeIter iter; /* Filter out non-Totem items */ for (p = recent_items; p != NULL; p = p->next) { GtkRecentInfo *info = (GtkRecentInfo *) p->data; if (!gtk_recent_info_has_group (info, "TotemStreams")) { gtk_recent_info_unref (info); continue; } streams_recent_items = g_list_prepend (streams_recent_items, info); } streams_recent_items = g_list_sort (streams_recent_items, (GCompareFunc) totem_compare_recent_stream_items); /* Populate the list store for the combobox */ for (p = streams_recent_items; p != NULL; p = p->next) { GtkRecentInfo *info = (GtkRecentInfo *) p->data; gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, gtk_recent_info_get_uri (info), -1); gtk_recent_info_unref (info); } g_list_free (streams_recent_items); } g_list_free (recent_items); gtk_entry_completion_set_model (completion, model); gtk_entry_completion_set_text_column (completion, 0); gtk_entry_completion_set_match_func (completion, (GtkEntryCompletionMatchFunc) totem_open_location_match, model, NULL); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (open_location))), open_location->priv->uri_container, TRUE, /* expand */ TRUE, /* fill */ 0); /* padding */ gtk_widget_show_all (gtk_dialog_get_content_area (GTK_DIALOG (open_location))); return GTK_WIDGET (open_location); }