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

📄 playlistwin.c

📁 xmms-1.2.10.tar.gz学习使用的就下吧
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 + -