Very old todo: Packed file UI

- The "ID" buttons (for browse images, for example) now show a Pack icon, for packed
  Images. Using this button allows unpack.

- Pack and unpack operations now give a Info report on what happened.

- Not restored yet: option to set "AutoPack".
This commit is contained in:
2013-01-27 14:28:45 +00:00
parent f0339c642d
commit 1a97efb1ba
6 changed files with 164 additions and 6 deletions

View File

@@ -44,9 +44,9 @@
#include "DNA_image_types.h"
#include "DNA_ID.h"
#include "DNA_packedFile_types.h"
#include "DNA_sound_types.h"
#include "DNA_vfont_types.h"
#include "DNA_packedFile_types.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
@@ -233,11 +233,13 @@ void packAll(Main *bmain, ReportList *reports)
Image *ima;
VFont *vfont;
bSound *sound;
int tot = 0;
for (ima = bmain->image.first; ima; ima = ima->id.next) {
if (ima->packedfile == NULL && ima->id.lib == NULL) {
if (ima->source == IMA_SRC_FILE) {
ima->packedfile = newPackedFile(reports, ima->name, ID_BLEND_PATH(bmain, &ima->id));
tot ++;
}
else if (ELEM(ima->source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) {
BKE_reportf(reports, RPT_WARNING, "Image '%s' skipped, movies and image sequences not supported",
@@ -246,13 +248,26 @@ void packAll(Main *bmain, ReportList *reports)
}
}
for (vfont = bmain->vfont.first; vfont; vfont = vfont->id.next)
if (vfont->packedfile == NULL && vfont->id.lib == NULL && BKE_vfont_is_builtin(vfont) == FALSE)
for (vfont = bmain->vfont.first; vfont; vfont = vfont->id.next) {
if (vfont->packedfile == NULL && vfont->id.lib == NULL && BKE_vfont_is_builtin(vfont) == FALSE) {
vfont->packedfile = newPackedFile(reports, vfont->name, bmain->name);
tot ++;
}
}
for (sound = bmain->sound.first; sound; sound = sound->id.next)
if (sound->packedfile == NULL && sound->id.lib == NULL)
for (sound = bmain->sound.first; sound; sound = sound->id.next) {
if (sound->packedfile == NULL && sound->id.lib == NULL) {
sound->packedfile = newPackedFile(reports, sound->name, bmain->name);
tot++;
}
}
if (tot == 0)
BKE_report(reports, RPT_INFO, "No files have been packed");
else
BKE_reportf(reports, RPT_INFO, "Packed %d files", tot);
}
@@ -316,6 +331,9 @@ int writePackedFile(ReportList *reports, const char *filename, PackedFile *pf, i
BKE_reportf(reports, RPT_ERROR, "Error writing file '%s'", name);
ret_value = RET_ERROR;
}
else
BKE_reportf(reports, RPT_INFO, "Saved packed file to: %s", name);
close(file);
}
else {
@@ -439,6 +457,7 @@ char *unpackFile(ReportList *reports, const char *abs_name, const char *local_na
case PF_USE_ORIGINAL:
/* if file exists use it */
if (BLI_exists(abs_name)) {
BKE_reportf(reports, RPT_INFO, "Use existing file (instead of packed): %s", abs_name);
temp = abs_name;
break;
}
@@ -604,3 +623,48 @@ void unpackAll(Main *bmain, ReportList *reports, int how)
unpackSound(bmain, reports, sound, how);
}
/* ID should be not NULL, return 1 if there's a packed file */
int BKE_pack_check(ID *id)
{
if (GS(id->name) == ID_IM) {
Image *ima = (Image *)id;
return ima->packedfile != NULL;
}
if (GS(id->name) == ID_VF) {
VFont *vf = (VFont *)id;
return vf->packedfile != NULL;
}
if (GS(id->name) == ID_SO) {
bSound *snd = (bSound *)id;
return snd->packedfile != NULL;
}
if (GS(id->name) == ID_LI) {
Library *li = (Library *)id;
return li->packedfile != NULL;
}
return 0;
}
/* ID should be not NULL */
void BKE_unpack_id(Main *bmain, ID *id, ReportList *reports, int how)
{
if (GS(id->name) == ID_IM) {
Image *ima = (Image *)id;
if (ima->packedfile)
unpackImage(reports, ima, how);
}
if (GS(id->name) == ID_VF) {
VFont *vf = (VFont *)id;
if (vf->packedfile)
unpackVFont(reports, vf, how);
}
if (GS(id->name) == ID_SO) {
bSound *snd = (bSound *)id;
if (snd->packedfile)
unpackSound(bmain, reports, snd, how);
}
if (GS(id->name) == ID_LI) {
Library *li = (Library *)id;
BKE_reportf(reports, RPT_ERROR, "Cannot unpack individual Library file, '%s'", li->name);
}
}