📄 file_info.cpp
字号:
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 + -