⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui-callbacks.c

📁 一个开源的音频解码源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
		g_print ("DnD data received\n");	if ((data->length >= 0) && (data->type == gdk_atom_intern ("text/uri-list", TRUE)))	{		list = gnome_vfs_uri_list_parse (data->data);		p = list;		while (p != NULL)		{			file_list = g_slist_prepend (file_list,										gnome_vfs_uri_to_string ((const GnomeVFSURI *)(p->data),										GNOME_VFS_URI_HIDE_NONE));			p = g_list_next (p);		}		gnome_vfs_uri_list_free (list);		file_list = g_slist_reverse (file_list);				if (file_list == NULL)			return;					for (uris = file_list; uris; uris = uris->next)		{			mimetype = gnome_vfs_get_mime_type (uris->data);			if (g_ascii_strcasecmp (mimetype, "audio/x-scpls") == 0)				playlist_add_pls (uris->data);			else			{				char *t_artist = NULL, *t_title = NULL, *t_format = NULL;				long t_duration;				char *s_duration;								gap_get_metadata_uri (uris->data, &t_artist, &t_title, &t_duration);				t_format = g_strdup_printf ("%s - %s", t_artist, t_title);				s_duration = g_strdup_printf ("%d:%02d", t_duration / 60, t_duration % 60);								playlist_add_item (t_format, s_duration, uris->data);				g_free (t_format);				g_free (t_artist);				g_free (t_title);			}		}		g_slist_foreach (file_list, (GFunc) g_free, NULL);		g_slist_free (file_list);		gtk_drag_finish (context, TRUE, FALSE, time);	}		gtk_drag_finish (context, FALSE, FALSE, time);}void on_button_add_clicked (GtkButton *button, gpointer user_data){	gboolean files_added;		files_added = gap_add_files (_("Open Audio Files..."), GTK_WINDOW (main_window), FALSE);}void on_button_remove_clicked (GtkButton *button, gpointer user_data){	playlist_remove_selected (playlist_treeview);}void on_button_clear_clicked (GtkButton *button, gpointer user_data){	playlist_clear ();}gbooleancb_file_open (GtkDialog *dialog, int response_id, gboolean clear){	char *mimetype;	GSList *uri_list = NULL, *uris = NULL;	char *selected_uri;	gboolean file_added = FALSE;	if (response_id != GTK_RESPONSE_OK)	{		gtk_widget_destroy (GTK_WIDGET (dialog));		return FALSE;	}	uri_list = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog));	if (uri_list == NULL)	{		/* Nothing was returned? */		return FALSE;	}		if (clear)		playlist_clear ();		for (uris = uri_list; uris; uris = uris->next)	{		mimetype = gnome_vfs_get_mime_type (uris->data);		if (g_ascii_strcasecmp (mimetype, "audio/x-scpls") == 0)			playlist_add_pls (uris->data);		else		{			char *t_artist = NULL, *t_title = NULL, *t_format = NULL;			long t_duration;			char *s_duration;					gap_get_metadata_uri (uris->data, &t_artist, &t_title, &t_duration);			t_format = g_strdup_printf ("%s - %s", t_artist, t_title);			s_duration = g_strdup_printf ("%d:%02d", t_duration / 60, t_duration % 60);			playlist_add_item (t_format, s_duration, uris->data);			file_added = TRUE;			g_free (t_format);			g_free (t_artist);			g_free (t_title);		}	}	g_slist_foreach (uri_list, (GFunc)g_free, NULL);	g_slist_free (uri_list);	gtk_widget_destroy (GTK_WIDGET (dialog));		return file_added;}void cb_file_add (GtkWidget *widget, gpointer user_data){	GtkWidget *file_selector;	const char *mimetype;	char *selected_uri;		file_selector = (GtkWidget *) user_data;	selected_uri = gnome_vfs_get_uri_from_local_path (gtk_file_selection_get_filename (GTK_FILE_SELECTION (file_selector)));	mimetype = gnome_vfs_get_mime_type (selected_uri);	if (g_ascii_strcasecmp (mimetype, "audio/x-scpls") == 0)		playlist_add_pls (selected_uri);	else	{		playlist_add_item ("", "0:00", selected_uri);	}}void cb_playlist_load (GtkWidget *widget, gpointer user_data){	GtkWidget *file_selector;	const char *mimetype;	char *selected_uri;		file_selector = (GtkWidget *) user_data;	selected_uri = gnome_vfs_get_uri_from_local_path (gtk_file_selection_get_filename (GTK_FILE_SELECTION (file_selector)));	mimetype = gnome_vfs_get_mime_type (selected_uri);	if (g_ascii_strcasecmp (mimetype, "audio/x-scpls") == 0)		playlist_add_pls (selected_uri);}void update_time (int time){	char *current_time;	int seconds = 0, minutes = 0;		if (time > 0)	{		minutes = time / 60;		seconds = time % 60;	}	current_time = g_strdup_printf ("<span size=\"xx-large\"><b>%d:%02d</b></span>", minutes, seconds);	gtk_label_set_markup (GTK_LABEL (label_time), current_time);}void update_currently_playing (char *title, gboolean get_info){	char *currently_playing;	GnomeVFSFileInfo file_info;	if (get_info == TRUE)	{		gnome_vfs_get_file_info (title, &file_info, GNOME_VFS_FILE_INFO_DEFAULT);		currently_playing = g_strdup_printf ("<b><big>%s</big></b>", file_info.name);	}	else		currently_playing = g_strdup_printf ("<b><big>%s</big></b>", title);			g_markup_escape_text (currently_playing, strlen (currently_playing));	gtk_label_set_line_wrap (GTK_LABEL (label_current_song), FALSE);	gtk_label_set_markup (GTK_LABEL (label_current_song), currently_playing);	g_free (currently_playing);	}void cb_gap_player_eos (GAPPlayer *gp){	playlist_next ();}void cb_gap_player_tick (GAPPlayer *gp){	sync_time (gtk_range_get_adjustment (GTK_RANGE (glade_xml_get_widget (xml, "hscale_progress"))));}voidsync_time (GtkAdjustment *adjust){	int seconds;	long duration;		if (slider_dragging == TRUE)		return;			duration = gap_get_duration (gamp_gp);	seconds = gap_get_time (gamp_gp);		if (duration > -1)	{		double progress = 0.0;				if (seconds > 0)			progress = (double) ((long) seconds) / duration;					slider_locked = TRUE;		gtk_adjustment_set_value (adjust, progress);		slider_locked = FALSE;	}	else	{		slider_locked = TRUE;		gtk_adjustment_set_value (adjust, 0.0);		slider_locked = FALSE;	}	update_time (seconds);}gbooleanon_hscale_progress_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data){	slider_dragging = TRUE;		return FALSE;}gbooleanon_hscale_progress_button_release_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data){	GtkAdjustment *adjust;	long duration;	double progress, new;		if (slider_dragging == FALSE)		return;		adjust = gtk_range_get_adjustment (GTK_RANGE (widget));	progress = gtk_adjustment_get_value (adjust);	duration = gap_get_duration (gamp_gp);	new = (long) (progress * duration);	gap_set_time (gamp_gp, new);		slider_dragging = FALSE;		return FALSE;}gbooleanon_hscale_progress_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer user_data){	return FALSE;}voidon_hscale_progress_value_changed (GtkRange *range, gpointer user_data){}gbooleanchanged_idle_cb (GtkRange *range){	return FALSE;}gbooleanslider_moved_cb (GtkAdjustment *adjust){	return FALSE;}gbooleanon_window_main_drag_drop (GtkWidget *wid, GdkDragContext *context, gint x, gint y, guint time, gpointer user_data){	GdkAtom target;		g_print ("DnD signal received\n");	target = gtk_drag_dest_find_target (wid, context, NULL);	if (target != GDK_NONE)	{/*		gtk_drag_get_data (main_window, context, target, time); */				return TRUE;	}		return FALSE;}voidon_window_main_drag_data_received (GtkWidget *wid, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer user_data){	GList *list = NULL, *p = NULL;	GSList *file_list = NULL, *uris = NULL;	char *mimetype;		g_print ("DnD data received\n");	if ((data->length >= 0) && (data->type == gdk_atom_intern ("text/uri-list", TRUE)))	{		list = gnome_vfs_uri_list_parse (data->data);		p = list;		while (p != NULL)		{			file_list = g_slist_prepend (file_list,										gnome_vfs_uri_to_string ((const GnomeVFSURI *)(p->data),										GNOME_VFS_URI_HIDE_NONE));			p = g_list_next (p);		}		gnome_vfs_uri_list_free (list);		file_list = g_slist_reverse (file_list);				if (file_list == NULL)			return;					playlist_clear ();		for (uris = file_list; uris; uris = uris->next)		{			mimetype = gnome_vfs_get_mime_type (uris->data);			if (g_ascii_strcasecmp (mimetype, "audio/x-scpls") == 0)				playlist_add_pls (uris->data);			else			{				char *t_artist = NULL, *t_title = NULL, *t_format = NULL;				long t_duration;				char *s_duration;								gap_get_metadata_uri (uris->data, &t_artist, &t_title, &t_duration);				t_format = g_strdup_printf ("%s - %s", t_artist, t_title);				s_duration = g_strdup_printf ("%d:%02d", t_duration / 60, t_duration % 60);								playlist_add_item (t_format, s_duration, uris->data);				g_free (t_format);				g_free (t_artist);				g_free (t_title);			}		}		playlist_play_and_sel_first ();				g_slist_foreach (file_list, (GFunc) g_free, NULL);		g_slist_free (file_list);		gtk_drag_finish (context, TRUE, FALSE, time);	}		gtk_drag_finish (context, FALSE, FALSE, time);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -