📄 gui-callbacks.c
字号:
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 + -