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

📄 gui-callbacks.c

📁 一个开源的音频解码源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *  Callbacks and misc functions related to the GUI * *  Copyright (C) 2003 Mason Kidd <mrkidd@mrkidd.com> * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */#include <gnome.h>#include <glade/glade.h>#include <libgnomeui/gnome-about.h>#include <libgnomevfs/gnome-vfs.h>#include <libgnomevfs/gnome-vfs-mime-utils.h>#include <libgnomevfs/gnome-vfs-utils.h>#include "main.h"#include "playlist.h"#include "GAPPlayer.h"void on_open1_activate (GtkMenuItem *menuitem, gpointer user_data);void on_open_location1_activate (GtkButton *button, gpointer user_data);void on_quit1_activate (GtkMenuItem *menuitem, gpointer user_data);void on_open2_activate (GtkMenuItem *menuitem, gpointer user_data);void on_save1_activate (GtkMenuItem *menuitem, gpointer user_data);void on_clear1_activate (GtkMenuItem *menuitem, gpointer user_data);void on_add_file1_activate (GtkMenuItem *menuitem, gpointer user_data);void on_remove_file1_activate (GtkMenuItem *menuitem, gpointer user_data);void on_about1_activate (GtkMenuItem *menuitem, gpointer user_data);gboolean on_window_main_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data);void on_expander_playlist_activate (GtkExpander *expander, gpointer user_data);void on_button_previous_clicked (GtkButton *button, gpointer user_data);void on_button_play_clicked (GtkButton *button, gpointer user_data);void on_button_pause_clicked (GtkButton *button, gpointer user_data);void on_button_stop_clicked (GtkButton *button, gpointer user_data);void on_button_next_clicked (GtkButton *button, gpointer user_data);void on_button_eject_clicked (GtkButton *button, gpointer user_data);void on_togglebutton_shuffle_toggled (GtkToggleButton *togglebutton, gpointer user_data);void on_togglebutton_repeat_toggled (GtkToggleButton *togglebutton, gpointer user_data);void on_togglebutton_equalizer_toggled (GtkToggleButton *togglebutton, gpointer user_data);void on_treeview_playlist_row_activated (GtkTreeView *treeview, GtkTreePath *arg1, GtkTreeViewColumn *arg2, gpointer user_data);gboolean on_treeview_playlist_drag_drop (GtkWidget *wid, GdkDragContext *context, gint x, gint y, guint time, gpointer user_dat);void on_treeview_playlist_drag_data_received (GtkWidget *wid, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer user_dat);void on_button_add_clicked (GtkButton *button, gpointer user_data);void on_button_remove_clicked (GtkButton *button, gpointer user_data);void on_button_clear_clicked (GtkButton *button, gpointer user_data);void cb_gap_player_tick (GAPPlayer *gp);void sync_time (GtkAdjustment *adjust);gboolean on_hscale_progress_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data);gboolean on_hscale_progress_button_release_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data);gboolean on_hscale_progress_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer user_data);void on_hscale_progress_value_changed (GtkRange *range, gpointer user_data);gboolean slider_moved_cb (GtkAdjustment *adjust);gboolean changed_idle_cb (GtkRange *range);gboolean cb_file_open (GtkDialog *dialog, int response_id, gboolean clear);void cb_file_add (GtkWidget *widget, gpointer user_data);void cb_playlist_load (GtkWidget *widget, gpointer user_data);gboolean gap_add_files (char *title, GtkWindow *parent, gboolean clear_playlist);gboolean on_window_main_drag_drop (GtkWidget *wid, GdkDragContext *context, gint x, gint y, guint time, gpointer user_data);void on_window_main_drag_data_received (GtkWidget *wid, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer user_data);gboolean slider_dragging = FALSE;gboolean slider_locked = FALSE;long latest_set_time = -1;long elapsed = 0;guint slider_moved_timeout = 0;guint value_changed_update_handler = 0;static const GtkTargetEntry target_uri [] = {{ "text/uri-list", 0, 0 }};gboolean gap_add_files (char *title, GtkWindow *parent, gboolean clear_playlist){	GtkWidget *file_selector;	int response;		file_selector = gtk_file_chooser_dialog_new (title, parent,						GTK_FILE_CHOOSER_ACTION_OPEN,						GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,						GTK_STOCK_OPEN, GTK_RESPONSE_OK,						NULL);	gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (file_selector), TRUE);	gtk_dialog_set_default_response (GTK_DIALOG (file_selector), GTK_RESPONSE_OK);	gtk_window_set_transient_for (GTK_WINDOW (file_selector), GTK_WINDOW (main_window));	gtk_window_set_modal (GTK_WINDOW (file_selector), FALSE);	gtk_window_set_destroy_with_parent (GTK_WINDOW (file_selector), TRUE);/*	g_signal_connect (G_OBJECT (file_selector), "response", G_CALLBACK (cb_file_open), 			parent);	gtk_widget_show_all (file_selector); */	response = gtk_dialog_run (GTK_DIALOG (file_selector));	return cb_file_open (GTK_DIALOG (file_selector), response, clear_playlist);}void on_open1_activate (GtkMenuItem *menuitem, gpointer user_data){	if (gap_add_files (_("Open Audio Files..."), GTK_WINDOW (main_window), TRUE))	{		playlist_play_and_sel_first ();	}}void on_open_location1_activate (GtkButton *button, gpointer user_data){	GtkWidget *dialog, *entry;	GladeXML *dialog_xml;	const gchar *uri_entry;	int response;	GnomeVFSURI *vfsuri;	dialog_xml = glade_xml_new (DATADIR "/gamp/open-location.glade",					"dialog_open_location", NULL);	dialog = glade_xml_get_widget (dialog_xml, "dialog_open_location");	g_return_if_fail (dialog != NULL);	entry = glade_xml_get_widget (dialog_xml, "entry_location");	g_return_if_fail (entry != NULL);	gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);	response = gtk_dialog_run (GTK_DIALOG (dialog));	if (response == GTK_RESPONSE_OK)	{		uri_entry = gtk_entry_get_text (GTK_ENTRY (entry));		if ((uri_entry != NULL) && (strcmp (uri_entry, "") != 0))		{			vfsuri = gnome_vfs_uri_new (uri_entry);			g_printf ("uri_entry: %s\n", uri_entry);			if ((vfsuri != NULL) && (gnome_vfs_uri_exists (vfsuri)))			{				playlist_clear ();				if (gnome_vfs_uri_is_local (vfsuri))				{					char *filepath;					char *t_artist = NULL, *t_title = NULL, *t_format = NULL;					long t_duration;					char *s_duration;					filepath = gnome_vfs_get_local_path_from_uri (uri_entry);					gap_get_metadata_uri (filepath, &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, filepath);					g_free (t_format);					g_free (t_artist);					g_free (t_title);									}				else					playlist_add_item (uri_entry, "0:00", uri_entry);								playlist_play_and_sel_first ();			}			else				error_dialog ("That location does not exist");			gnome_vfs_uri_unref (vfsuri);		}	}	gtk_widget_destroy (dialog);	g_object_unref (dialog_xml);}void on_quit1_activate (GtkMenuItem *menuitem, gpointer user_data){	gtk_main_quit ();}void on_open2_activate (GtkMenuItem *menuitem, gpointer user_data){	gboolean files_added;		files_added = gap_add_files (_("Open Playlist..."), GTK_WINDOW (main_window), TRUE);}void on_save1_activate (GtkMenuItem *menuitem, gpointer user_data){}void on_clear1_activate (GtkMenuItem *menuitem, gpointer user_data){	playlist_clear ();}void on_add_file1_activate (GtkMenuItem *menuitem, gpointer user_data){	gboolean files_added;		files_added = gap_add_files (_("Open Audio Files..."), GTK_WINDOW (main_window), FALSE);}void on_remove_file1_activate (GtkMenuItem *menuitem, gpointer user_data){	playlist_remove_selected (playlist_treeview);}void on_about1_activate (GtkMenuItem *menuitem, gpointer user_data){	static GtkWidget *about = NULL;	gchar *filename;	GdkPixbuf *pixbuf = NULL;	const gchar *authors[] = {		"Mason Kidd <mrkidd@mrkidd.com>",		NULL	};	const gchar *documenters[] = {		NULL	};	const gchar *translators = _("translator_credits");	const gchar *copyright = "Copyright \xc2\xa9 2004 Mason Kidd";		if (about != NULL)	{		gtk_window_present (GTK_WINDOW (about));		return;	}	filename = gnome_program_locate_file (NULL, GNOME_FILE_DOMAIN_PIXMAP,				"gamp.png", TRUE, NULL);	if (filename != NULL)	{		pixbuf = gdk_pixbuf_new_from_file (filename, NULL);		g_free (filename);	}	about = gnome_about_new (PACKAGE, VERSION, copyright,			_("A music player for Gnome using the Gstreamer libraries"),			authors, documenters,			strcmp (translators, "translator_credits") != 0 ? translators : NULL,			pixbuf);	if (pixbuf != NULL)		g_object_unref (pixbuf);	gtk_window_set_transient_for (GTK_WINDOW (about), GTK_WINDOW (main_window));	g_signal_connect (G_OBJECT (about), "destroy", G_CALLBACK (gtk_widget_destroyed), &about);	gtk_widget_show (about);}gboolean on_window_main_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data){	gtk_main_quit ();		return FALSE;}void on_expander_playlist_activate (GtkExpander *expander, gpointer user_data){	gtk_expander_set_use_underline (expander, TRUE);		if (gtk_expander_get_expanded (expander))		gtk_expander_set_label (expander, _("Show _Playlist"));	else		gtk_expander_set_label (expander, _("Hide _Playlist"));}void on_button_previous_clicked (GtkButton *button, gpointer user_data){	playlist_previous ();}void on_button_play_clicked (GtkButton *button, gpointer user_data){	gap_play (gamp_gp);}void on_button_pause_clicked (GtkButton *button, gpointer user_data){	gap_pause (gamp_gp);}void on_button_stop_clicked (GtkButton *button, gpointer user_data){	gap_stop (gamp_gp);}void on_button_next_clicked (GtkButton *button, gpointer user_data){	playlist_next ();}void on_button_eject_clicked (GtkButton *button, gpointer user_data){}void on_togglebutton_shuffle_toggled (GtkToggleButton *togglebutton, gpointer user_data){}void on_togglebutton_repeat_toggled (GtkToggleButton *togglebutton, gpointer user_data){}void on_button_volume_clicked (GtkButton *button, gpointer user_data){}void on_treeview_playlist_row_activated (GtkTreeView *treeview, GtkTreePath *arg1, GtkTreeViewColumn *arg2, gpointer user_data){	GtkTreeIter iter;	gboolean ret_val;	GtkTreeModel *tree_model;	char *selected_uri;	char *selected_title;		tree_model = gtk_tree_view_get_model (treeview);	ret_val = gtk_tree_model_get_iter (tree_model, &iter, arg1);		gtk_tree_model_get (tree_model, &iter, 2, &selected_uri, -1);	gtk_tree_model_get (tree_model, &iter, 0, &selected_title, -1);		gap_open (gamp_gp, selected_uri);	update_currently_playing (selected_title, FALSE);	gap_play (gamp_gp);		g_free (selected_uri);}gbooleanon_treeview_playlist_drag_drop (GtkWidget *wid, GdkDragContext *context, gint x, gint y, guint time, gpointer user_dat){	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_treeview_playlist_drag_data_received (GtkWidget *wid, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, gpointer user_dat){	GList *list = NULL, *p = NULL;	GSList *file_list = NULL, *uris = NULL;	char *mimetype;

⌨️ 快捷键说明

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