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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user