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

📄 file_info.cpp

📁 Aqualung is an advanced music player primarily targeted for the GNU/Linux operating system, but als
💻 CPP
📖 第 1 页 / 共 5 页
字号:
intbuild_oxc_page(save_basic_t * save_basic, int edit_mode, TagLib::Ogg::XiphComment * oxc) {	int cnt = 0;	GtkWidget * table;	TagLib::Tag * tag = dynamic_cast<TagLib::Tag *>(oxc);	save_basic->oxc = oxc;	int page_no = build_simple_page(save_basic, tag, &cnt, &table, edit_mode, _("Ogg comments"));	TagLib::Ogg::FieldListMap m = oxc->fieldListMap();	for (TagLib::Ogg::FieldListMap::Iterator i = m.begin(); i != m.end(); ++i) {		for (TagLib::StringList::Iterator j = (*i).second.begin(); j != (*i).second.end(); ++j) {			char key[MAXLEN];			char val[MAXLEN];			char c;			int k;			/* skip comments that are handled by the simple mode */			if ((strcmp("TITLE", (*i).first.toCString(true)) == 0) ||			    (strcmp("ARTIST", (*i).first.toCString(true)) == 0) ||			    (strcmp("ALBUM", (*i).first.toCString(true)) == 0) ||			    (strcmp("DATE", (*i).first.toCString(true)) == 0) ||			    (strcmp("COMMENT", (*i).first.toCString(true)) == 0) ||			    (strcmp("TRACKNUMBER", (*i).first.toCString(true)) == 0) ||			    (strcmp("GENRE", (*i).first.toCString(true)) == 0)) {				continue;			}			for (k = 0; ((c = (*i).first.toCString(true)[k]) != '\0') && (k < MAXLEN-1); k++) {				key[k] = (k == 0) ? toupper(c) : tolower(c);			}			key[k++] = ':';			key[k] = '\0';			for (k = 0; ((c = (*j).toCString(true)[k]) != '\0') && (k < MAXLEN-1); k++) {				val[k] = c;			}			val[k] = '\0';			insert_oxc(save_basic->nb, table, &cnt, save_basic->mode, key, val);		}	}	insert_oxc(save_basic->nb, table, &cnt, save_basic->mode, _("Vendor:"),		   (char *)oxc->vendorID().toCString(true));	gtk_widget_show_all(GTK_WIDGET(save_basic->nb));	return page_no;}void build_tag_buttons(save_basic_t * save_basic);voidcreate_remove_handler(GtkWidget * widget, gpointer data) {	tagbutton_data_t * tdata = (tagbutton_data_t *)data;	save_basic_t * save_basic = tdata->save_basic;	int tags;	switch (tdata->flags) {	case CREATE_ID3v2:		if (save_basic->taglib_mpeg_file != NULL) {			save_basic->id3v2_tag = save_basic->taglib_mpeg_file->ID3v2Tag(true);			save_basic->id3v2_tag->setTitle(" ");			tags = TagLib::MPEG::File::ID3v2;			if (save_basic->id3v1_tag != NULL)				tags |= TagLib::MPEG::File::ID3v1;			if (save_basic->ape_tag != NULL)				tags |= TagLib::MPEG::File::APE;			save_basic->taglib_mpeg_file->save(tags, false);			/* close & reopen file to workaround buggy TagLib */			{				char buf[MAXLEN];				strncpy(buf, save_basic->taglib_mpeg_file->name(), MAXLEN-1);				save_basic->taglib_mpeg_file->~File();				save_basic->taglib_mpeg_file = new TagLib::MPEG::File(buf, false);			}			/* if we have an ID3v1 page, re-create it in read-only mode */			if (save_basic->id3v1_page_no != -1) {				gtk_notebook_remove_page(save_basic->nb, save_basic->id3v1_page_no);				save_basic->id3v1_page_no = -1;				save_basic->id3v1_page_no =					build_id3v1_page(save_basic, false, save_basic->taglib_mpeg_file->ID3v1Tag());			}			save_basic->id3v2_page_no =				build_id3v2_page(save_basic, true, save_basic->taglib_mpeg_file->ID3v2Tag());			save_basic->flags &= ~CREATE_ID3v2;			save_basic->flags |= REMOVE_ID3v2;			build_tag_buttons(save_basic);		}		break;	case CREATE_APE:		if (save_basic->taglib_mpc_file != NULL) {			save_basic->ape_tag = save_basic->taglib_mpc_file->APETag(true);			save_basic->ape_tag->setTitle(" ");			save_basic->taglib_mpc_file->save();			/* close & reopen file to workaround buggy TagLib */			{				char buf[MAXLEN];				strncpy(buf, save_basic->taglib_mpc_file->name(), MAXLEN-1);				save_basic->taglib_mpc_file->~File();				save_basic->taglib_mpc_file = new TagLib::MPC::File(buf, false);			}			save_basic->ape_page_no =				build_ape_page(save_basic, true, save_basic->taglib_mpc_file->APETag());			save_basic->flags &= ~CREATE_APE;			save_basic->flags |= REMOVE_APE;			build_tag_buttons(save_basic);		}		break;	case REMOVE_ID3v1:		if (save_basic->taglib_mpeg_file != NULL) {			save_basic->taglib_mpeg_file->strip(TagLib::MPEG::File::ID3v1);			save_basic->id3v1_tag = NULL;			tags = 0;			if (save_basic->id3v2_tag != NULL)				tags |= TagLib::MPEG::File::ID3v2;			if (save_basic->ape_tag != NULL)				tags |= TagLib::MPEG::File::APE;			save_basic->taglib_mpeg_file->save(tags, true);		}		if (save_basic->taglib_mpc_file != NULL) {			save_basic->taglib_mpc_file->remove(TagLib::MPC::File::ID3v1);			save_basic->taglib_mpc_file->save();		}		if (save_basic->id3v2_page_no > save_basic->id3v1_page_no)			save_basic->id3v2_page_no -= 1;		if (save_basic->ape_page_no > save_basic->id3v1_page_no)			save_basic->ape_page_no -= 1;		if (save_basic->oxc_page_no > save_basic->id3v1_page_no)			save_basic->oxc_page_no -= 1;		gtk_notebook_remove_page(save_basic->nb, save_basic->id3v1_page_no);		save_basic->id3v1_page_no = -1;		save_basic->flags &= ~REMOVE_ID3v1;		build_tag_buttons(save_basic);		break;	case REMOVE_ID3v2:		if (save_basic->taglib_mpeg_file == NULL)			break;		save_basic->taglib_mpeg_file->strip(TagLib::MPEG::File::ID3v2);		save_basic->id3v2_tag = NULL;		tags = 0;		if (save_basic->id3v1_tag != NULL)			tags |= TagLib::MPEG::File::ID3v1;		if (save_basic->ape_tag != NULL)			tags |= TagLib::MPEG::File::APE;		save_basic->taglib_mpeg_file->save(tags, true);		if (save_basic->id3v1_page_no > save_basic->id3v2_page_no)			save_basic->id3v1_page_no -= 1;		if (save_basic->ape_page_no > save_basic->id3v2_page_no)			save_basic->ape_page_no -= 1;		if (save_basic->oxc_page_no > save_basic->id3v2_page_no)			save_basic->oxc_page_no -= 1;				gtk_notebook_remove_page(save_basic->nb, save_basic->id3v2_page_no);		save_basic->id3v2_page_no = -1;		save_basic->flags &= ~REMOVE_ID3v2;		save_basic->flags |= CREATE_ID3v2;		build_tag_buttons(save_basic);		break;	case REMOVE_APE:		if (save_basic->taglib_mpeg_file != NULL) {			save_basic->taglib_mpeg_file->strip(TagLib::MPEG::File::APE);			tags = 0;			if (save_basic->id3v1_tag != NULL)				tags |= TagLib::MPEG::File::ID3v1;			if (save_basic->id3v2_tag != NULL)				tags |= TagLib::MPEG::File::ID3v2;			save_basic->taglib_mpeg_file->save(tags, true);		}		if (save_basic->taglib_mpc_file != NULL) {			save_basic->taglib_mpc_file->remove(TagLib::MPC::File::APE);			save_basic->taglib_mpc_file->save();		}		save_basic->ape_tag = NULL;		if (save_basic->id3v1_page_no > save_basic->ape_page_no)			save_basic->id3v1_page_no -= 1;		if (save_basic->id3v2_page_no > save_basic->ape_page_no)			save_basic->id3v2_page_no -= 1;		if (save_basic->oxc_page_no > save_basic->ape_page_no)			save_basic->oxc_page_no -= 1;		gtk_notebook_remove_page(save_basic->nb, save_basic->ape_page_no);		save_basic->ape_page_no = -1;		save_basic->flags &= ~REMOVE_APE;		if (save_basic->taglib_mpc_file != NULL) {			save_basic->flags |= CREATE_APE;		}		build_tag_buttons(save_basic);		break;	}}voidbuild_tag_buttons(save_basic_t * save_basic) {	tagbutton_data_t * tdata = NULL;	GtkWidget * button;	GtkWidget * hbox;	if (save_basic->hbox_inner != NULL) {		gtk_widget_destroy(save_basic->hbox_inner);	}	save_basic->hbox_inner = gtk_hbox_new(FALSE, 0);	gtk_widget_show(save_basic->hbox_inner);	gtk_container_add(GTK_CONTAINER(save_basic->hbox), save_basic->hbox_inner);	hbox = save_basic->hbox_inner;	if (save_basic->flags & REMOVE_ID3v1) {                button = gui_stock_label_button(_("Remove ID3v1"), GTK_STOCK_REMOVE);		gtk_widget_show(button);		tdata = tagbutton_data_new();		trashlist_add(fileinfo_trash, tdata);		tdata->flags |= REMOVE_ID3v1;		tdata->save_basic = save_basic;		g_signal_connect(G_OBJECT(button), "clicked",				 G_CALLBACK(create_remove_handler), (gpointer)tdata);		gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 3);	}	if (save_basic->flags & CREATE_ID3v2) {                button = gui_stock_label_button(_("Create ID3v2"), GTK_STOCK_ADD);		gtk_widget_show(button);		tdata = tagbutton_data_new();		trashlist_add(fileinfo_trash, tdata);		tdata->flags |= CREATE_ID3v2;		tdata->save_basic = save_basic;		g_signal_connect(G_OBJECT(button), "clicked",				 G_CALLBACK(create_remove_handler), (gpointer)tdata);		gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 3);	}	if (save_basic->flags & REMOVE_ID3v2) {                button = gui_stock_label_button(_("Remove ID3v2"), GTK_STOCK_REMOVE);		gtk_widget_show(button);		tdata = tagbutton_data_new();		trashlist_add(fileinfo_trash, tdata);		tdata->flags |= REMOVE_ID3v2;		tdata->save_basic = save_basic;		g_signal_connect(G_OBJECT(button), "clicked",				 G_CALLBACK(create_remove_handler), (gpointer)tdata);		gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 3);	}	if (save_basic->flags & CREATE_APE) {                button = gui_stock_label_button(_("Create APE"), GTK_STOCK_ADD);		gtk_widget_show(button);		tdata = tagbutton_data_new();		trashlist_add(fileinfo_trash, tdata);		tdata->flags |= CREATE_APE;		tdata->save_basic = save_basic;		g_signal_connect(G_OBJECT(button), "clicked",				 G_CALLBACK(create_remove_handler), (gpointer)tdata);		gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 3);	}	if (save_basic->flags & REMOVE_APE) {                button = gui_stock_label_button(_("Remove APE"), GTK_STOCK_REMOVE);		gtk_widget_show(button);		tdata = tagbutton_data_new();		trashlist_add(fileinfo_trash, tdata);		tdata->flags |= REMOVE_APE;		tdata->save_basic = save_basic;		g_signal_connect(G_OBJECT(button), "clicked",				 G_CALLBACK(create_remove_handler), (gpointer)tdata);		gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 3);	}}#ifdef HAVE_FLACvoidbuild_nb_pages_flac(metadata * meta, GtkNotebook * nb, GtkWidget * hbox, fileinfo_mode_t mode) {	TagLib::FLAC::File * taglib_flac_file =		reinterpret_cast<TagLib::FLAC::File *>(meta->taglib_file);#ifdef HAVE_METAEDIT	TagLib::File * taglib_file =		dynamic_cast<TagLib::File *>(taglib_flac_file);	int edit_mode = taglib_file->readOnly() ? EDITABLE_NO : EDITABLE_YES;#else	int edit_mode = EDITABLE_NO;#endif /* HAVE_METAEDIT */	save_basic_t * save_basic = save_basic_new();	trashlist_add(fileinfo_trash, save_basic);	save_basic->taglib_flac_file = taglib_flac_file;	save_basic->nb = nb;	save_basic->hbox = hbox;	save_basic->mode = mode;	if (taglib_flac_file->ID3v1Tag() && !taglib_flac_file->ID3v1Tag()->isEmpty()) {		save_basic->id3v1_page_no =		    build_id3v1_page(save_basic, EDITABLE_NO, taglib_flac_file->ID3v1Tag());	}	if (taglib_flac_file->ID3v2Tag() && !taglib_flac_file->ID3v2Tag()->isEmpty()) {		save_basic->id3v2_page_no =		    build_id3v2_page(save_basic, EDITABLE_NO, taglib_flac_file->ID3v2Tag());	}	if (taglib_flac_file->xiphComment()) {		save_basic->oxc_page_no =		    build_oxc_page(save_basic, edit_mode, taglib_flac_file->xiphComment());	}	if (edit_mode) {		build_tag_buttons(save_basic);	}}#endif /* HAVE_FLAC */#ifdef HAVE_OGG_VORBISvoidbuild_nb_pages_oggv(metadata * meta, GtkNotebook * nb, GtkWidget * hbox, fileinfo_mode_t mode) {	TagLib::Ogg::Vorbis::File * taglib_oggv_file =		reinterpret_cast<TagLib::Ogg::Vorbis::File *>(meta->taglib_file);#ifdef HAVE_METAEDIT	TagLib::File * taglib_file =		dynamic_cast<TagLib::File *>(taglib_oggv_file);	int edit_mode = taglib_file->readOnly() ? EDITABLE_NO : EDITABLE_YES;#else	int edit_mode = EDITABLE_NO;#endif /* HAVE_METAEDIT */	save_basic_t * save_basic = save_basic_new();	trashlist_add(fileinfo_trash, save_basic);	save_basic->taglib_oggv_file = taglib_oggv_file;	save_basic->nb = nb;	save_basic->hbox = hbox;	save_basic->mode = mode;	if (taglib_oggv_file->tag()) {		save_basic->oxc_page_no =		    build_oxc_page(save_basic, edit_mode, taglib_oggv_file->tag());	}	if (edit_mode) {		build_tag_buttons(save_basic);	}}#endif /* HAVE_OGG_VORBIS */#ifdef HAVE_MPEGvoidbuild_nb_pages_mpeg(metadata * meta, GtkNotebook * nb, GtkWidget * hbox, fileinfo_mode_t mode) {	TagLib::MPEG::File * taglib_mpeg_file =		reinterpret_cast<TagLib::MPEG::File *>(meta->taglib_file);#ifdef HAVE_METAEDIT	TagLib::File * taglib_file =		dynamic_cast<TagLib::File *>(taglib_mpeg_file);	int edit_mode = taglib_file->readOnly() ? EDITABLE_NO : EDITABLE_YES;#else	int edit_mode = EDITABLE_NO;#endif /* HAVE_METAEDIT */	save_basic_t * save_basic = save_basic_new();	trashlist_add(fileinfo_trash, save_basic);	save_basic->taglib_mpeg_file = taglib_mpeg_file;	save_basic->nb = nb;	save_basic->hbox = hbox;	save_basic->mode = mode;	if (taglib_mpeg_file->ID3v1Tag() && !taglib_mpeg_file->ID3v1Tag()->isEmpty()) {		/* allow editing only if there is no id3v2 tag */		int id3v1_edit_mode = edit_mode;		if ((id3v1_edit_mode == EDITABLE_YES) && taglib_mpeg_file->ID3v2Tag()) {			id3v1_edit_mode = taglib_mpeg_file->ID3v2Tag()->isEmpty() ? EDITABLE_YES : EDITABLE_NO;		}		if (id3v1_edit_mode == EDITABLE_YES) {			id3v1_edit_mode = EDITABLE_GENRE;		}		save_basic->id3v1_page_no =		    build_id3v1_page(save_basic, id3v1_edit_mode, taglib_mpeg_file->ID3v1Tag());		save_basic->flags |= REMOVE_ID3v1;	}	if (taglib_mpeg_file->ID3v2Tag() && !taglib_mpeg_file->ID3v2Tag()->isEmpty()) {		save_basic->id3v2_page_no =		    build_id3v2_page(save_basic, edit_mode, taglib_mpeg_file->ID3v2Tag());		save_basic->flags |= REMOVE_ID3v2;	} else {		save_basic->flags |= CREATE_ID3v2;	}	if (taglib_mpeg_file->APETag()) {		save_basic->ape_page_no =		    build_ape_page(save_basic, EDITABLE_NO, taglib_mpeg_file->APETag());		save_basic->flags |= REMOVE_APE;	}	if (edit_mode) {		build_tag_buttons(save_basic);	}

⌨️ 快捷键说明

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