diff options
author | Ton Roosendaal <ton@blender.org> | 2013-01-27 18:28:45 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2013-01-27 18:28:45 +0400 |
commit | 1a97efb1ba27a1aaf452da8ef65c27ad6f739fa0 (patch) | |
tree | 7610e0d05be04a055a4a9f1fd0548b816efec53a /source/blender/blenkernel | |
parent | f0339c642d6116e4d7800330db060601da84b9f5 (diff) |
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".
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_packedFile.h | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/packedFile.c | 74 |
2 files changed, 75 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_packedFile.h b/source/blender/blenkernel/BKE_packedFile.h index 9dcbb41c7dc..b19a2092206 100644 --- a/source/blender/blenkernel/BKE_packedFile.h +++ b/source/blender/blenkernel/BKE_packedFile.h @@ -35,6 +35,7 @@ #define RET_OK 0 #define RET_ERROR 1 +struct ID; struct bSound; struct Image; struct Main; @@ -72,5 +73,10 @@ int seekPackedFile(struct PackedFile *pf, int offset, int whence); void rewindPackedFile(struct PackedFile *pf); int readPackedFile(struct PackedFile *pf, void *data, int size); +/* ID should be not NULL, return 1 if there's a packed file */ +int BKE_pack_check(struct ID *id); +/* ID should be not NULL, throws error when ID is Library */ +void BKE_unpack_id(struct Main *bmain, struct ID *id, struct ReportList *reports, int how); + #endif diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c index 9fab052f80c..288e4ccde5d 100644 --- a/source/blender/blenkernel/intern/packedFile.c +++ b/source/blender/blenkernel/intern/packedFile.c @@ -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); + } +} |