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

📄 playlistwin.c

📁 xmms-1.2.10.tar.gz学习使用的就下吧
💻 C
📖 第 1 页 / 共 5 页
字号:
		skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 26, y, (w / 2) - 50, 0, 100, 20);		/* Titlebar, right corner */		skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 153, y, w - 25, 0, 25, 20);		/* Left and right side */		for (i = 0; i < (h - 58) / 29; i++)		{			skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 0, 42, 0, (i * 29) + 20, 12, 29);			skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 32, 42, w - 19, (i * 29) + 20, 19, 29);		}		/* Bottom left corner (menu buttons) */		skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 0, 72, 0, h - 38, 125, 38);		c = (w - 275) / 25;		/* Visualization window */		if (c >= 3)		{			c -= 3;			skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 205, 0, w - 225, h - 38, 75, 38);		}		/* Bottom blank parts */		for (i = 0; i < c; i++)			skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 179, 0, (i * 25) + 125, h - 38, 25, 38);		/* Bottom right corner (playbuttons etc) */		skin_draw_pixmap(playlistwin_bg, playlistwin_gc, src, 126, 72, w - 150, h - 38, 150, 38);	}}void draw_playlist_window(gboolean force){	gboolean redraw;	GList *wl;	Widget *w;	if (force)	{		playlistwin_draw_frame();		lock_widget_list(playlistwin_wlist);		draw_widget_list(playlistwin_wlist, &redraw, TRUE);			}	else	{		lock_widget_list(playlistwin_wlist);		draw_widget_list(playlistwin_wlist, &redraw, FALSE);	}	if (redraw || force)	{		if (force)			gdk_window_clear(playlistwin->window);		else		{			wl = playlistwin_wlist;			while (wl)			{				w = (Widget *) wl->data;				if (w->redraw && w->visible)				{					gdk_window_clear_area(playlistwin->window, w->x, w->y, w->width, w->height);					w->redraw = FALSE;				}				wl = wl->next;			}		}		gdk_flush();	}	unlock_widget_list(playlistwin_wlist);}static void playlistwin_sort_menu_callback(gpointer cb_data, guint action, GtkWidget * w){	switch (action)	{		case PLAYLISTWIN_SORT_BYTITLE:			playlist_sort_by_title();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_BYFILENAME:			playlist_sort_by_filename();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_BYPATH:			playlist_sort_by_path();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_BYDATE:			playlist_sort_by_date();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_SEL_BYTITLE:			playlist_sort_selected_by_title();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_SEL_BYFILENAME:			playlist_sort_selected_by_filename();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_SEL_BYPATH:			playlist_sort_selected_by_path();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_SEL_BYDATE:			playlist_sort_selected_by_date();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_REVERSE:			playlist_reverse();			playlistwin_update_list();			break;		case PLAYLISTWIN_SORT_RANDOMIZE:			playlist_random();			playlistwin_update_list();			break;	}}static void playlistwin_sub_menu_callback(gpointer cb_data, guint action, GtkWidget * w){	switch (action)	{		case PLAYLISTWIN_REMOVE_DEAD_FILES:			playlist_remove_dead_files();			break;		case PLAYLISTWIN_PHYSICALLY_DELETE:			playlistwin_physically_delete();			break;	}}void playlistwin_hide_timer(void){	textbox_set_text(playlistwin_time_min, "   ");	textbox_set_text(playlistwin_time_sec, "  ");}void playlistwin_vis_enable(void){	playlistwin_vis_enabled = TRUE;	if (cfg.playlist_width >= 350)		show_widget(playlistwin_vis);}void playlistwin_vis_disable(void){	playlistwin_vis_enabled = FALSE;	hide_widget(playlistwin_vis);	draw_playlist_window(TRUE);}void playlistwin_set_time(int time, int length, TimerMode mode){	char *text, sign;	if (mode == TIMER_REMAINING && length != -1)	{		time = length - time;		sign = '-';	}	else		sign = ' ';	time /= 1000;	if (time < 0)		time = 0;	if (time > 99 * 60)		time /= 60;	text = g_strdup_printf("%c%-2.2d", sign, time / 60);	textbox_set_text(playlistwin_time_min, text);	g_free(text);	text = g_strdup_printf("%-2.2d", time % 60);	textbox_set_text(playlistwin_time_sec, text);	g_free(text);}static void playlistwin_drag_data_received(GtkWidget * widget,					   GdkDragContext * context,					   gint x,					   gint y,					   GtkSelectionData * selection_data,					   guint info,					   guint time,					   gpointer user_data){	guint pos;	if (selection_data->data)	{		if (inside_widget(x, y, playlistwin_list))		{			pos = ((y - ((Widget *) playlistwin_list)->y) / playlistwin_list->pl_fheight) + playlistwin_list->pl_first;			if (pos > get_playlist_length())				pos = get_playlist_length();			playlist_ins_url_string(selection_data->data, pos);		}		else			playlist_add_url_string(selection_data->data);	}}static void playlistwin_close_cb(void){	playlistwin_show(FALSE);}static void playlistwin_create_widgets(void){	playlistwin_sinfo = create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, 4, 4, cfg.playlist_width - 35, FALSE, SKIN_TEXT);	if (!cfg.playlist_shaded)		hide_widget(playlistwin_sinfo);	if (cfg.playlist_shaded)		playlistwin_shade = create_pbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 21, 3, 9, 9, 128, 45, 150, 42, playlistwin_shade_toggle, SKIN_PLEDIT);	else		playlistwin_shade = create_pbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 21, 3, 9, 9, 157, 3, 62, 42, playlistwin_shade_toggle, SKIN_PLEDIT);	playlistwin_shade->pb_allow_draw = FALSE;	playlistwin_close = create_pbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 11, 3, 9, 9, cfg.playlist_shaded ? 138 : 167, cfg.playlist_shaded ? 45 : 3, 52, 42, playlistwin_close_cb, SKIN_PLEDIT);	playlistwin_close->pb_allow_draw = FALSE;	playlistwin_list = create_playlist_list(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, 12, 20, cfg.playlist_width - 31, cfg.playlist_height - 58);	playlist_list_set_font(cfg.playlist_font);	playlistwin_slider = create_playlistslider(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 15, 20, cfg.playlist_height - 58, playlistwin_list);	playlistwin_time_min = create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 82, cfg.playlist_height - 15, 15, FALSE, SKIN_TEXT);	playlistwin_time_sec = create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 64, cfg.playlist_height - 15, 10, FALSE, SKIN_TEXT);	playlistwin_info = create_textbox(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 143, cfg.playlist_height - 28, 85, FALSE, SKIN_TEXT);	playlistwin_vis = create_vis(&playlistwin_wlist, playlistwin_bg, playlistwin->window, playlistwin_gc, cfg.playlist_width - 223, cfg.playlist_height - 26, 72, FALSE);	hide_widget(playlistwin_vis);	playlistwin_srew = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 144, cfg.playlist_height - 16, 8, 7, playlist_prev);	playlistwin_splay = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 138, cfg.playlist_height - 16, 10, 7, mainwin_play_pushed);	playlistwin_spause = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 128, cfg.playlist_height - 16, 10, 7, input_pause);	playlistwin_sstop = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 118, cfg.playlist_height - 16, 9, 7, mainwin_stop_pushed);	playlistwin_sfwd = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 109, cfg.playlist_height - 16, 8, 7, playlist_next);	playlistwin_seject = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 100, cfg.playlist_height - 16, 9, 7, mainwin_eject_pushed);	playlistwin_sscroll_up = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 14, cfg.playlist_height - 35, 8, 5, playlistwin_scroll_up_pushed);	playlistwin_sscroll_down = create_sbutton(&playlistwin_wlist, playlistwin_bg, playlistwin_gc, cfg.playlist_width - 14, cfg.playlist_height - 30, 8, 5, playlistwin_scroll_down_pushed);}static void selection_received(GtkWidget *widget, GtkSelectionData *selection_data, gpointer data){	if (selection_data->type == GDK_SELECTION_TYPE_STRING &&	    selection_data->length > 0)		playlist_add_url_string(selection_data->data);}static void playlistwin_create_gtk(void){	playlistwin = gtk_window_new(GTK_WINDOW_DIALOG);	dock_add_window(dock_window_list, playlistwin);	gtk_widget_set_app_paintable(playlistwin, TRUE);	if (cfg.show_wm_decorations)		gtk_window_set_policy(GTK_WINDOW(playlistwin), TRUE, TRUE, FALSE);	else		gtk_window_set_policy(GTK_WINDOW(playlistwin), FALSE, FALSE, TRUE);	gtk_window_set_title(GTK_WINDOW(playlistwin), _("XMMS Playlist"));	gtk_window_set_wmclass(GTK_WINDOW(playlistwin), "XMMS_Playlist", "xmms");	gtk_window_set_transient_for(GTK_WINDOW(playlistwin), GTK_WINDOW(mainwin));	if (cfg.playlist_x != -1 && cfg.save_window_position)		dock_set_uposition(playlistwin, cfg.playlist_x, cfg.playlist_y);	gtk_widget_set_usize(playlistwin, cfg.playlist_width, cfg.playlist_shaded ? 14 : cfg.playlist_height);	gtk_widget_set_events(playlistwin, GDK_FOCUS_CHANGE_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);	gtk_widget_realize(playlistwin);	hint_set_skip_winlist(playlistwin);	playlistwin_set_hints();	util_set_cursor(playlistwin);	gtk_signal_connect(GTK_OBJECT(playlistwin), "delete_event", GTK_SIGNAL_FUNC(playlistwin_delete), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "button_press_event", GTK_SIGNAL_FUNC(playlistwin_press), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "button_release_event", GTK_SIGNAL_FUNC(playlistwin_release), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "motion_notify_event", GTK_SIGNAL_FUNC(playlistwin_motion), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "focus_in_event", GTK_SIGNAL_FUNC(playlistwin_focus_in), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "focus_out_event", GTK_SIGNAL_FUNC(playlistwin_focus_out), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "configure_event", GTK_SIGNAL_FUNC(playlistwin_configure), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "client_event", GTK_SIGNAL_FUNC(playlistwin_client_event), NULL);	xmms_drag_dest_set(playlistwin);	gtk_signal_connect(GTK_OBJECT(playlistwin), "drag-data-received", GTK_SIGNAL_FUNC(playlistwin_drag_data_received), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "key-press-event", GTK_SIGNAL_FUNC(playlistwin_keypress), NULL);	gtk_signal_connect(GTK_OBJECT(playlistwin), "selection_received", GTK_SIGNAL_FUNC(selection_received), NULL);	if (!cfg.show_wm_decorations)		gdk_window_set_decorations(playlistwin->window, 0);	gdk_window_set_back_pixmap(playlistwin->window, playlistwin_bg, 0);	playlistwin_create_mask();}void playlistwin_create(void){	GtkWidget *item, *menu;	playlistwin_accel = gtk_accel_group_new();		playlistwin_sort_menu = gtk_item_factory_new(GTK_TYPE_MENU,						     "<Main>", NULL);	gtk_item_factory_set_translate_func(playlistwin_sort_menu,					    util_menu_translate, NULL, NULL);	gtk_item_factory_create_items(GTK_ITEM_FACTORY(playlistwin_sort_menu),				      playlistwin_sort_menu_entries_num,				      playlistwin_sort_menu_entries, NULL);	playlistwin_sub_menu = gtk_item_factory_new(GTK_TYPE_MENU, "<Main>", NULL);	gtk_item_factory_set_translate_func(playlistwin_sub_menu,					    util_menu_translate, NULL, NULL);	gtk_item_factory_create_items(GTK_ITEM_FACTORY(playlistwin_sub_menu),				      playlistwin_sub_menu_entries_num,				      playlistwin_sub_menu_entries, NULL);	playlistwin_bg = gdk_pixmap_new(NULL, cfg.playlist_width,					cfg.playlist_height,					gdk_rgb_get_visual()->depth);	playlistwin_popup_menu =		gtk_item_factory_new(GTK_TYPE_MENU, "<Main>", playlistwin_accel);	gtk_item_factory_set_translate_func(playlistwin_popup_menu,					    util_menu_translate, NULL, NULL);	gtk_item_factory_create_items(GTK_ITEM_FACTORY(playlistwin_popup_menu),				      playlistwin_popup_menu_entries_num,				      playlistwin_popup_menu_entries, NULL);	item = gtk_item_factory_get_widget(playlistwin_popup_menu, "/Sort");	menu = gtk_item_factory_get_widget(playlistwin_sort_menu, "");	gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);	item = gtk_item_factory_get_widget(playlistwin_popup_menu,					   "/Remove/Misc");	menu = gtk_item_factory_get_widget(playlistwin_sub_menu, "");	gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), menu);	playlistwin_save_menu =		gtk_item_factory_new(GTK_TYPE_MENU, "<Save>", NULL);	gtk_item_factory_set_translate_func(playlistwin_save_menu,					    util_menu_translate, NULL, NULL);	gtk_item_factory_create_items(GTK_ITEM_FACTORY(playlistwin_save_menu),				      playlistwin_playlist_filetypes_num,				      playlistwin_playlist_filetypes, NULL);	playlistwin_create_gtk();	playlistwin_gc = gdk_gc_new(playlistwin->window);	playlistwin_create_widgets();	playlistwin_update_info();}void playlistwin_recreate(void){	dock_window_list = g_list_remove(dock_window_list, playlistwin);	gtk_widget_destroy(playlistwin);	playlistwin_create_gtk();	vis_set_window(playlistwin_vis, playlistwin->window);}void playlistwin_show(gboolean show){	GtkWidget *widget;	widget = gtk_item_factory_get_widget(mainwin_general_menu,					     "/Playlist Editor");	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), show);}void playlistwin_real_show(void){	if (!pposition_broken && cfg.playlist_x != -1 &&	    cfg.save_window_position && cfg.show_wm_decorations)		dock_set_uposition(playlistwin, cfg.playlist_x, cfg.playlist_y);	gtk_widget_show(playlistwin);	if (pposition_broken && cfg.playlist_x != -1 && cfg.save_window_position)		dock_set_uposition(playlistwin, cfg.playlist_x, cfg.playlist_y);	gtk_widget_set_usize(playlistwin, cfg.playlist_width, PLAYLIST_HEIGHT);	gdk_flush();	draw_playlist_window(TRUE);	tbutton_set_toggled(mainwin_pl, TRUE);	cfg.playlist_visible = TRUE;	playlistwin_set_toprow(0);	playlist_check_pos_current();	hint_set_always(cfg.always_on_top);	hint_set_sticky(cfg.sticky);	hint_set_skip_winlist(playlistwin);}void playlistwin_real_hide(void){	gtk_widget_hide(playlistwin);	cfg.playlist_visible = FALSE;	tbutton_set_toggled(mainwin_pl, FALSE);}static void playlistwin_popup_menu_callback(gpointer cb_data, guint action, GtkWidget * w){	int pos = GPOINTER_TO_INT(gtk_item_factory_popup_data_from_widget(w));	switch (action)	{		case MISC_FILEINFO:			if (pos == 0)				/* We got here via an accelerator */				playlistwin_fileinfo();			else if (pos != -1)				playlist_fileinfo(pos - 1);			break;		case MISC_QUEUE:			if (pos == 0)				/* We got here via an accelerator */				playlist_queue_selected();			else if (pos != -1)				playlist_queue_position(pos - 1);			break;		case SEL_LOOKUP:			playlist_read_info_selection();			break;		default:			playlistwin_popup_handler(action);	}}

⌨️ 快捷键说明

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