📄 playlistwin.c
字号:
playlistwin_list->pl_first += num; playlistwin_update_list();}static void playlistwin_scroll_up_pushed(void){ playlistwin_list->pl_first -= 3; playlistwin_update_list();}static void playlistwin_scroll_down_pushed(void){ playlistwin_list->pl_first += 3; playlistwin_update_list();}static void playlistwin_select_all(void){ playlist_select_all(TRUE); playlistwin_list->pl_prev_selected = 0; playlistwin_list->pl_prev_min = 0; playlistwin_list->pl_prev_max = get_playlist_length()-1; playlistwin_update_list();}static void playlistwin_select_none(void){ playlist_select_all(FALSE); playlistwin_list->pl_prev_selected = -1; playlistwin_list->pl_prev_min = -1; playlistwin_update_list();}static void playlistwin_inverse_selection(void){ playlist_select_invert_all(); playlistwin_list->pl_prev_selected=-1; playlistwin_list->pl_prev_min=-1; playlistwin_update_list();}static void playlistwin_resize(int width, int height){ int bx, by, nw, nh; GdkPixmap *oldbg; gboolean dummy; bx = (width - 275) / 25; nw = (bx * 25) + 275; if (nw < 275) nw = 275; if (!cfg.playlist_shaded) { by = (height - 58) / 29; nh = (by * 29) + 58; if (nh < 116) nh = 116; } else nh = cfg.playlist_height; if (nw == cfg.playlist_width && nh == cfg.playlist_height) return; cfg.playlist_width = nw; cfg.playlist_height = nh; resize_widget(playlistwin_list, cfg.playlist_width - 31, cfg.playlist_height - 58); move_widget(playlistwin_slider, cfg.playlist_width - 15, 20); resize_widget(playlistwin_sinfo, cfg.playlist_width - 35, 14); playlistwin_update_sinfo(); move_widget(playlistwin_shade, cfg.playlist_width - 21, 3); move_widget(playlistwin_close, cfg.playlist_width - 11, 3); move_widget(playlistwin_time_min, cfg.playlist_width - 82, cfg.playlist_height - 15); move_widget(playlistwin_time_sec, cfg.playlist_width - 64, cfg.playlist_height - 15); move_widget(playlistwin_info, cfg.playlist_width - 143, cfg.playlist_height - 28); move_widget(playlistwin_srew, cfg.playlist_width - 144, cfg.playlist_height - 16); move_widget(playlistwin_splay, cfg.playlist_width - 138, cfg.playlist_height - 16); move_widget(playlistwin_spause, cfg.playlist_width - 128, cfg.playlist_height - 16); move_widget(playlistwin_sstop, cfg.playlist_width - 118, cfg.playlist_height - 16); move_widget(playlistwin_sfwd, cfg.playlist_width - 109, cfg.playlist_height - 16); move_widget(playlistwin_seject, cfg.playlist_width - 100, cfg.playlist_height - 16); move_widget(playlistwin_sscroll_up, cfg.playlist_width - 14, cfg.playlist_height - 35); move_widget(playlistwin_sscroll_down, cfg.playlist_width - 14, cfg.playlist_height - 30); resize_widget(playlistwin_slider, 8, cfg.playlist_height - 58); if (cfg.playlist_width >= 350) { move_widget(playlistwin_vis, cfg.playlist_width - 223, cfg.playlist_height - 26); if (playlistwin_vis_enabled) show_widget(playlistwin_vis); } else hide_widget(playlistwin_vis); oldbg = playlistwin_bg; playlistwin_bg = gdk_pixmap_new(playlistwin->window, cfg.playlist_width, cfg.playlist_height, gdk_rgb_get_visual()->depth); widget_list_change_pixmap(playlistwin_wlist, playlistwin_bg); playlistwin_create_mask(); playlistwin_draw_frame(); draw_widget_list(playlistwin_wlist, &dummy, TRUE); clear_widget_list_redraw(playlistwin_wlist); gdk_window_set_back_pixmap(playlistwin->window, playlistwin_bg, 0); gdk_window_clear(playlistwin->window); gdk_pixmap_unref(oldbg);}static gboolean playlistwin_resize_handler(gpointer data){ GDK_THREADS_ENTER(); playlistwin_resize(playlistwin_resizeq.w, playlistwin_resizeq.h); playlistwin_resizeq.w = -1; playlistwin_resizeq.h = -1; GDK_THREADS_LEAVE(); return FALSE;}static void playlistwin_queue_resize(int width, int height){ if (playlistwin_resizeq.w == -1) g_idle_add_full(G_PRIORITY_HIGH_IDLE, playlistwin_resize_handler, NULL, NULL); playlistwin_resizeq.w = width; playlistwin_resizeq.h = height;}static void playlistwin_motion(GtkWidget * widget, GdkEventMotion * event, gpointer callback_data){ XEvent ev; if (playlistwin_resizing) { playlistwin_resize(event->x + playlistwin_resize_x, event->y + playlistwin_resize_y); gdk_window_set_hints(playlistwin->window, 0, 0, cfg.playlist_width, PLAYLIST_HEIGHT, cfg.playlist_width, PLAYLIST_HEIGHT, GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE); gdk_window_resize(playlistwin->window, cfg.playlist_width, PLAYLIST_HEIGHT); gtk_widget_set_usize(playlistwin, cfg.playlist_width, PLAYLIST_HEIGHT); } else if (dock_is_moving(playlistwin)) { dock_move_motion(playlistwin, event); } else { handle_motion_cb(playlistwin_wlist, widget, event); draw_playlist_window(FALSE); } gdk_flush(); while (XCheckMaskEvent(GDK_DISPLAY(), ButtonMotionMask, &ev)) ;}static void playlistwin_show_filebrowser(void){ static GtkWidget *filebrowser; if (filebrowser != NULL) return; filebrowser = util_create_filebrowser(FALSE); gtk_signal_connect(GTK_OBJECT(filebrowser), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &filebrowser);}static void playlistwin_url_ok_clicked(GtkWidget * w, GtkWidget * entry){ char *text, *temp; text = gtk_entry_get_text(GTK_ENTRY(entry)); if (text && *text) { g_strstrip(text); if(strstr(text, ":/") == NULL && text[0] != '/') temp = g_strconcat("http://", text, NULL); else temp = g_strdup(text); playlist_add_url_string(temp); g_free(temp); } gtk_widget_destroy(playlistwin_url_window);}void playlistwin_show_add_url_window(void){ if(!playlistwin_url_window) { playlistwin_url_window = util_create_add_url_window(_("Enter URL to add:"), GTK_SIGNAL_FUNC(playlistwin_url_ok_clicked), NULL); gtk_window_set_transient_for(GTK_WINDOW(playlistwin_url_window), GTK_WINDOW(playlistwin)); gtk_signal_connect(GTK_OBJECT(playlistwin_url_window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &playlistwin_url_window); gtk_widget_show(playlistwin_url_window); }}static void playlistwin_add_dir_handler(char * dir){ g_free(cfg.filesel_path); cfg.filesel_path = g_strdup(dir); playlist_add_dir(dir);}static void playlistwin_show_dirbrowser(void){ static GtkWidget *dir_browser; if (dir_browser) return; dir_browser = xmms_create_dir_browser(_("Select directory to add:"), cfg.filesel_path, GTK_SELECTION_EXTENDED, playlistwin_add_dir_handler); gtk_signal_connect(GTK_OBJECT(dir_browser), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &dir_browser); gtk_window_set_transient_for(GTK_WINDOW(dir_browser), GTK_WINDOW(playlistwin)); gtk_widget_show(dir_browser);}static void playlistwin_fileinfo(void){ /* * Show the first selected file, or the * current file if nothing is selected */ GList *list = playlist_get_selected(); if (list != NULL) { playlist_fileinfo(GPOINTER_TO_INT(list->data)); g_list_free(list); } else playlist_fileinfo_current();}static void playlistwin_set_sensitive_popupmenu(void){ GtkWidget *w; gboolean set; set = playlist_get_num_selected() > 0; w = gtk_item_factory_get_widget(playlistwin_popup_menu, "/Remove/Selected"); gtk_widget_set_sensitive(w, set); w = gtk_item_factory_get_widget(playlistwin_popup_menu, "/Selection/Read Extended Info"); gtk_widget_set_sensitive(w, set); w = gtk_item_factory_get_widget(playlistwin_sub_menu, "/Physically Delete Files"); gtk_widget_set_sensitive(w, set);}static void playlistwin_set_sensitive_sortmenu(void){ GtkWidget *w; gboolean set; set = playlist_get_num_selected() > 1; w = gtk_item_factory_get_widget(playlistwin_sort_menu, "/Sort Selection/By Title"); gtk_widget_set_sensitive(w, set); w = gtk_item_factory_get_widget(playlistwin_sort_menu, "/Sort Selection/By Filename"); gtk_widget_set_sensitive(w, set); w = gtk_item_factory_get_widget(playlistwin_sort_menu, "/Sort Selection/By Path + Filename"); gtk_widget_set_sensitive(w, set); w = gtk_item_factory_get_widget(playlistwin_sort_menu, "/Sort Selection/By Date"); gtk_widget_set_sensitive(w, set);}static void playlistwin_save_playlist_error(char* path, GtkWidget *filesel){ GtkWidget *dialog, *label, *bbox, *close; char *text; dialog = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(dialog), _("Unable to write playlist!")); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(filesel)); text = g_strdup_printf(_("Error writing playlist \"%s\": %s"), path, strerror(errno)); label = gtk_label_new(text); g_free(text); gtk_misc_set_padding(GTK_MISC(label), 10, 10); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), bbox, FALSE, FALSE, 0); close = gtk_button_new_with_label(_("Ok")); gtk_signal_connect_object(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog)); GTK_WIDGET_SET_FLAGS(close, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bbox), close, FALSE, FALSE, 0); gtk_widget_grab_default(close); gtk_widget_show_all(dialog);} static void playlistwin_check_overwrite_cb(GtkButton *w, gpointer user_data){ struct overwrite_data *odata = user_data; if (!playlist_save(odata->filename, odata->pls)) playlistwin_save_playlist_error(odata->filename, odata->fsel); else { gtk_widget_hide(odata->fsel); g_free(user_data); }}static void playlistwin_check_overwrite(GtkWidget *filesel, char *filename, int pls){ GtkWidget *dialog, *label, *bbox, *overwrite, *cancel; char *text; struct overwrite_data *data; data = g_malloc0(sizeof (*data)); data->filename = filename; data->pls = pls; data->fsel = filesel; dialog = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(dialog), _("File exists!")); gtk_window_set_transient_for(GTK_WINDOW(dialog), GTK_WINDOW(filesel)); text = g_strdup_printf(_("%s already exists."), filename); label = gtk_label_new(text); gtk_misc_set_padding(GTK_MISC(label), 10, 10); g_free(text); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, 0); bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_SPREAD); gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), bbox, FALSE, FALSE, 0); overwrite = gtk_button_new_with_label(_("Overwrite")); gtk_signal_connect(GTK_OBJECT(overwrite), "clicked", GTK_SIGNAL_FUNC(playlistwin_check_overwrite_cb), data); gtk_signal_connect_object(GTK_OBJECT(overwrite), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog)); GTK_WIDGET_SET_FLAGS(overwrite, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bbox), overwrite, FALSE, FALSE, 0); cancel = gtk_button_new_with_label(_("Cancel")); gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(g_free), (GtkObject*) data); gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(dialog)); GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(bbox), cancel, FALSE, FALSE, 0); gtk_widget_grab_default(overwrite); gtk_widget_show_all(dialog);}static void playlistwin_save_filesel_ok(GtkWidget * w, GtkFileSelection * filesel){ char *filename, *slash; struct stat statd; int len; gboolean pls = FALSE; if (util_filebrowser_is_dir(filesel)) return; filename = gtk_file_selection_get_filename(filesel); if ((slash = strrchr(filename, '/')) != NULL) len = slash - filename + 1; else len = strlen(filename); if (playlistwin_save_type == PLAYLISTWIN_SAVE_EXTENSION) { char *ext; int error = FALSE; if ((ext = strrchr(filename, '.')) != NULL && ext > slash) { if (!strcmp(ext, ".pls")) pls = TRUE; else if (strcmp(ext, ".m3u")) error = TRUE; } else error = TRUE; if (error) { char *m; GtkWidget *w; m = g_strdup_printf(_("Unknown file type for %s"), filename); w = xmms_show_message(_("Unable to save playlist"), m,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -