Commit: 18ae49948fad586a76a824d1b74436a46a603850
Author: Julian Eisel
Date: Wed Jan 4 00:47:28 2017 +0100
Branches: workspaces
https://developer.blender.org/rB18ae49948fad586a76a824d1b74436a46a603850
Make workspaces appendable, but non-linkable
This basically adds support for data-blocks that are either linkable,
appendable or both and uses it for making workspaces appendable only. Note that
non-appendable but linkable data-blocks aren't used currently and poorly
tested, added note about this in code.
===================================================================
M source/blender/blenkernel/BKE_idcode.h
M source/blender/blenkernel/intern/idcode.c
M source/blender/blenkernel/intern/library.c
M source/blender/blenloader/BLO_readfile.h
M source/blender/blenloader/intern/readblenentry.c
M source/blender/blenloader/intern/readfile.c
M source/blender/editors/space_file/filelist.c
M source/blender/editors/space_file/filesel.c
M source/blender/makesdna/DNA_space_types.h
M source/blender/makesrna/intern/rna_space.c
M source/blender/python/intern/bpy_library_load.c
M source/blender/windowmanager/intern/wm_files_link.c
M source/blender/windowmanager/intern/wm_operator_props.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_idcode.h
b/source/blender/blenkernel/BKE_idcode.h
index 964a494..05912ef 100644
--- a/source/blender/blenkernel/BKE_idcode.h
+++ b/source/blender/blenkernel/BKE_idcode.h
@@ -37,6 +37,7 @@ const char *BKE_idcode_to_name_plural(short idcode);
const char *BKE_idcode_to_translation_context(short idcode);
short BKE_idcode_from_name(const char *name);
bool BKE_idcode_is_linkable(short idcode);
+bool BKE_idcode_is_appendable(short idcode);
bool BKE_idcode_is_valid(short idcode);
int BKE_idcode_to_idfilter(const short idcode);
diff --git a/source/blender/blenkernel/intern/idcode.c
b/source/blender/blenkernel/intern/idcode.c
index 32ad4ac..837d863 100644
--- a/source/blender/blenkernel/intern/idcode.c
+++ b/source/blender/blenkernel/intern/idcode.c
@@ -47,55 +47,58 @@ typedef struct {
const char *name, *plural;
const char *i18n_context;
-
- int flags;
-#define IDTYPE_FLAGS_ISLINKABLE (1 << 0)
+
+ bool is_linkable;
+ bool is_appendable;
} IDType;
-/* plural need to match rna_main.c's MainCollectionDef */
-/* WARNING! Keep it in sync with i18n contexts in BLT_translation.h */
+/**
+ * \note Plural need to match rna_main.c's MainCollectionDef.
+ * \note IDs that are only linkable (non-appendable) aren't used currently and
thus poorly tested.
+ *
+ * \warning Keep it in sync with i19n contexts in BLT_translation.h!
+ */
static IDType idtypes[] = {
- /** ID's directly below must all be in #Main, and be kept in sync with
#MAX_LIBARRAY (membership, not order) */
- { ID_AC, "Action", "actions",
BLT_I18NCONTEXT_ID_ACTION, IDTYPE_FLAGS_ISLINKABLE },
- { ID_AR, "Armature", "armatures",
BLT_I18NCONTEXT_ID_ARMATURE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_BR, "Brush", "brushes",
BLT_I18NCONTEXT_ID_BRUSH, IDTYPE_FLAGS_ISLINKABLE },
- { ID_CA, "Camera", "cameras",
BLT_I18NCONTEXT_ID_CAMERA, IDTYPE_FLAGS_ISLINKABLE },
- { ID_CF, "CacheFile", "cache_files",
BLT_I18NCONTEXT_ID_CACHEFILE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_CU, "Curve", "curves",
BLT_I18NCONTEXT_ID_CURVE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_GD, "GPencil", "grease_pencil",
BLT_I18NCONTEXT_ID_GPENCIL, IDTYPE_FLAGS_ISLINKABLE }, /* rename
gpencil */
- { ID_GR, "Group", "groups",
BLT_I18NCONTEXT_ID_GROUP, IDTYPE_FLAGS_ISLINKABLE },
- { ID_IM, "Image", "images",
BLT_I18NCONTEXT_ID_IMAGE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_IP, "Ipo", "ipos", "",
IDTYPE_FLAGS_ISLINKABLE }, /* deprecated */
- { ID_KE, "Key", "shape_keys",
BLT_I18NCONTEXT_ID_SHAPEKEY, 0 },
- { ID_LA, "Lamp", "lamps",
BLT_I18NCONTEXT_ID_LAMP, IDTYPE_FLAGS_ISLINKABLE },
- { ID_LI, "Library", "libraries",
BLT_I18NCONTEXT_ID_LIBRARY, 0 },
- { ID_LS, "FreestyleLineStyle", "linestyles",
BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_LT, "Lattice", "lattices",
BLT_I18NCONTEXT_ID_LATTICE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_MA, "Material", "materials",
BLT_I18NCONTEXT_ID_MATERIAL, IDTYPE_FLAGS_ISLINKABLE },
- { ID_MB, "Metaball", "metaballs",
BLT_I18NCONTEXT_ID_METABALL, IDTYPE_FLAGS_ISLINKABLE },
- { ID_MC, "MovieClip", "movieclips",
BLT_I18NCONTEXT_ID_MOVIECLIP, IDTYPE_FLAGS_ISLINKABLE },
- { ID_ME, "Mesh", "meshes",
BLT_I18NCONTEXT_ID_MESH, IDTYPE_FLAGS_ISLINKABLE },
- { ID_MSK, "Mask", "masks",
BLT_I18NCONTEXT_ID_MASK, IDTYPE_FLAGS_ISLINKABLE },
- { ID_NT, "NodeTree", "node_groups",
BLT_I18NCONTEXT_ID_NODETREE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_OB, "Object", "objects",
BLT_I18NCONTEXT_ID_OBJECT, IDTYPE_FLAGS_ISLINKABLE },
- { ID_PA, "ParticleSettings", "particles",
BLT_I18NCONTEXT_ID_PARTICLESETTINGS, IDTYPE_FLAGS_ISLINKABLE },
- { ID_PAL, "Palettes", "palettes",
BLT_I18NCONTEXT_ID_PALETTE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_PC, "PaintCurve", "paint_curves",
BLT_I18NCONTEXT_ID_PAINTCURVE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_SCE, "Scene", "scenes",
BLT_I18NCONTEXT_ID_SCENE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_SCR, "Screen", "screens",
BLT_I18NCONTEXT_ID_SCREEN, 0 },
- { ID_SEQ, "Sequence", "sequences",
BLT_I18NCONTEXT_ID_SEQUENCE, 0 }, /* not
actually ID data */
- { ID_SPK, "Speaker", "speakers",
BLT_I18NCONTEXT_ID_SPEAKER, IDTYPE_FLAGS_ISLINKABLE },
- { ID_SO, "Sound", "sounds",
BLT_I18NCONTEXT_ID_SOUND, IDTYPE_FLAGS_ISLINKABLE },
- { ID_TE, "Texture", "textures",
BLT_I18NCONTEXT_ID_TEXTURE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_TXT, "Text", "texts",
BLT_I18NCONTEXT_ID_TEXT, IDTYPE_FLAGS_ISLINKABLE },
- { ID_VF, "VFont", "fonts",
BLT_I18NCONTEXT_ID_VFONT, IDTYPE_FLAGS_ISLINKABLE },
- { ID_WO, "World", "worlds",
BLT_I18NCONTEXT_ID_WORLD, IDTYPE_FLAGS_ISLINKABLE },
- /* TODO only appendable */
- { ID_WS, "WorkSpace", "workspaces",
BLT_I18NCONTEXT_ID_WORKSPACE, IDTYPE_FLAGS_ISLINKABLE },
- { ID_WM, "WindowManager", "window_managers",
BLT_I18NCONTEXT_ID_WINDOWMANAGER, 0 },
+ /** ID's directly below must all be in #Main (membership, not order),
and be kept in sync with #MAX_LIBARRAY */
+ {ID_AC, "Action", "actions",
BLT_I18NCONTEXT_ID_ACTION, true, true },
+ {ID_AR, "Armature", "armatures",
BLT_I18NCONTEXT_ID_ARMATURE, true, true },
+ {ID_BR, "Brush", "brushes",
BLT_I18NCONTEXT_ID_BRUSH, true, true },
+ {ID_CA, "Camera", "cameras",
BLT_I18NCONTEXT_ID_CAMERA, true, true },
+ {ID_CF, "CacheFile", "cache_files",
BLT_I18NCONTEXT_ID_CACHEFILE, true, true },
+ {ID_CU, "Curve", "curves",
BLT_I18NCONTEXT_ID_CURVE, true, true },
+ {ID_GD, "GPencil", "grease_pencil",
BLT_I18NCONTEXT_ID_GPENCIL, true, true }, /* rename gpencil */
+ {ID_GR, "Group", "groups",
BLT_I18NCONTEXT_ID_GROUP, true, true },
+ {ID_IM, "Image", "images",
BLT_I18NCONTEXT_ID_IMAGE, true, true },
+ {ID_IP, "Ipo", "ipos", "",
true, true }, /* deprecated */
+ {ID_KE, "Key", "shape_keys",
BLT_I18NCONTEXT_ID_SHAPEKEY, false, false},
+ {ID_LA, "Lamp", "lamps",
BLT_I18NCONTEXT_ID_LAMP, true, true },
+ {ID_LI, "Library", "libraries",
BLT_I18NCONTEXT_ID_LIBRARY, false, false},
+ {ID_LS, "FreestyleLineStyle", "linestyles",
BLT_I18NCONTEXT_ID_FREESTYLELINESTYLE, true, true },
+ {ID_LT, "Lattice", "lattices",
BLT_I18NCONTEXT_ID_LATTICE, true, true },
+ {ID_MA, "Material", "materials",
BLT_I18NCONTEXT_ID_MATERIAL, true, true },
+ {ID_MB, "Metaball", "metaballs",
BLT_I18NCONTEXT_ID_METABALL, true, true },
+ {ID_MC, "MovieClip", "movieclips",
BLT_I18NCONTEXT_ID_MOVIECLIP, true, true },
+ {ID_ME, "Mesh", "meshes",
BLT_I18NCONTEXT_ID_MESH, true, true },
+ {ID_MSK, "Mask", "masks",
BLT_I18NCONTEXT_ID_MASK, true, true },
+ {ID_NT, "NodeTree", "node_groups",
BLT_I18NCONTEXT_ID_NODETREE, true, true },
+ {ID_OB, "Object", "objects",
BLT_I18NCONTEXT_ID_OBJECT, true, true },
+ {ID_PA, "ParticleSettings", "particles",
BLT_I18NCONTEXT_ID_PARTICLESETTINGS, true, true },
+ {ID_PAL, "Palettes", "palettes",
BLT_I18NCONTEXT_ID_PALETTE, true, true },
+ {ID_PC, "PaintCurve", "paint_curves",
BLT_I18NCONTEXT_ID_PAINTCURVE, true, true },
+ {ID_SCE, "Scene", "scenes",
BLT_I18NCONTEXT_ID_SCENE, true, true },
+ {ID_SCR, "Screen", "screens",
BLT_I18NCONTEXT_ID_SCREEN, false, false},
+ {ID_SEQ, "Sequence", "sequences",
BLT_I18NCONTEXT_ID_SEQUENCE, false, false}, /* not actually ID data */
+ {ID_SPK, "Speaker", "speakers",
BLT_I18NCONTEXT_ID_SPEAKER, true, true },
+ {ID_SO, "Sound", "sounds",
BLT_I18NCONTEXT_ID_SOUND, true, true },
+ {ID_TE, "Texture", "textures",
BLT_I18NCONTEXT_ID_TEXTURE, true, true },
+ {ID_TXT, "Text", "texts",
BLT_I18NCONTEXT_ID_TEXT, true, true },
+ {ID_VF, "VFont", "fonts",
BLT_I18NCONTEXT_ID_VFONT, true, true },
+ {ID_WO, "World", "worlds",
BLT_I18NCONTEXT_ID_WORLD, true, true },
+ {ID_WS, "WorkSpace", "workspaces",
BLT_I18NCONTEXT_ID_WORKSPACE, false, true },
+ {ID_WM, "WindowManager", "window_managers",
BLT_I18NCONTEXT_ID_WINDOWMANAGER, false, false},
/** Keep last, not an ID exactly, only include for completeness */
- { ID_ID, "ID", "ids",
BLT_I18NCONTEXT_ID_ID, 0 }, /* plural is
fake */
+ {ID_ID, "ID", "ids",
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs