Commit: 47e3d34d94f8bee062948c89247f0c66c0915afa
Author: Bastien Montagne
Date:   Thu Mar 12 15:19:27 2015 +0100
Branches: asset-experiments
https://developer.blender.org/rB47e3d34d94f8bee062948c89247f0c66c0915afa

RNA listdir: add some more accessors, and ability to remove/clear list of 
entries (assets).

===================================================================

M       source/blender/blenkernel/BKE_asset.h
M       source/blender/blenkernel/intern/asset.c
M       source/blender/makesrna/intern/rna_asset.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_asset.h 
b/source/blender/blenkernel/BKE_asset.h
index 8a3a173..c37a1b5 100644
--- a/source/blender/blenkernel/BKE_asset.h
+++ b/source/blender/blenkernel/BKE_asset.h
@@ -42,6 +42,8 @@ struct AssetEngine;
 struct AssetEngineType;
 struct FileDirEntryArr;
 struct FileDirEntry;
+struct FileDirEntryVariant;
+struct FileDirEntryRevision;
 struct ExtensionRNA;
 struct ID;
 struct ListBase;
@@ -149,10 +151,10 @@ typedef enum FileCheckType {
        CHECK_ALL   = CHECK_DIRS | CHECK_FILES,
 } FileCheckType;
 
-#if 0  /* Unused */
+void BKE_filedir_variant_free(struct FileDirEntryVariant *var);
+
 void BKE_filedir_entry_free(struct FileDirEntry *entry);
 void BKE_filedir_entry_clear(struct FileDirEntry *entry);
-#endif
 struct FileDirEntry *BKE_filedir_entry_copy(struct FileDirEntry *entry);
 
 void BKE_filedir_entryarr_clear(struct FileDirEntryArr *array);
diff --git a/source/blender/blenkernel/intern/asset.c 
b/source/blender/blenkernel/intern/asset.c
index f451cc9..7cfae41 100644
--- a/source/blender/blenkernel/intern/asset.c
+++ b/source/blender/blenkernel/intern/asset.c
@@ -169,7 +169,17 @@ void BKE_asset_engine_load_pre(AssetEngine *engine, 
FileDirEntryArr *r_entries)
 
 /* FileDirxxx handling. */
 
-#if 0 /* Unused */
+void BKE_filedir_variant_free(FileDirEntryVariant *var)
+{
+       if (var->name) {
+               MEM_freeN(var->name);
+       }
+       if (var->description) {
+               MEM_freeN(var->description);
+       }
+       BLI_freelistN(&var->revisions);
+}
+
 void BKE_filedir_entry_free(FileDirEntry *entry)
 {
        if (entry->name) {
@@ -190,13 +200,7 @@ void BKE_filedir_entry_free(FileDirEntry *entry)
                FileDirEntryVariant *var;
 
                for (var = entry->variants.first; var; var = var->next) {
-                       if (var->name) {
-                               MEM_freeN(var->name);
-                       }
-                       if (var->description) {
-                               MEM_freeN(var->description);
-                       }
-                       BLI_freelistN(&var->revisions);
+                       BKE_filedir_variant_free(var);
                }
 
                BLI_freelistN(&entry->variants);
@@ -213,45 +217,6 @@ void BKE_filedir_entry_clear(FileDirEntry *entry)
        BKE_filedir_entry_free(entry);
        memset(entry, 0, sizeof(*entry));
 }
-#else
-static void BKE_filedir_entry_free(FileDirEntry *entry)
-{
-       if (entry->name) {
-               MEM_freeN(entry->name);
-       }
-       if (entry->description) {
-               MEM_freeN(entry->description);
-       }
-       if (entry->relpath) {
-               MEM_freeN(entry->relpath);
-       }
-       if (entry->image) {
-               IMB_freeImBuf(entry->image);
-       }
-       /* For now, consider FileDirEntryRevision::poin as not owned here, so 
no need to do anything about it */
-
-       if (!BLI_listbase_is_empty(&entry->variants)) {
-               FileDirEntryVariant *var;
-
-               for (var = entry->variants.first; var; var = var->next) {
-                       if (var->name) {
-                               MEM_freeN(var->name);
-                       }
-                       if (var->description) {
-                               MEM_freeN(var->description);
-                       }
-                       BLI_freelistN(&var->revisions);
-               }
-
-               BLI_freelistN(&entry->variants);
-       }
-       else if (entry->entry){
-               MEM_freeN(entry->entry);
-       }
-
-       /* TODO: tags! */
-}
-#endif
 
 /** Perform and return a full (deep) duplicate of given entry. */
 FileDirEntry *BKE_filedir_entry_copy(FileDirEntry *entry)
diff --git a/source/blender/makesrna/intern/rna_asset.c 
b/source/blender/makesrna/intern/rna_asset.c
index f3e13ee..f44ff82 100644
--- a/source/blender/makesrna/intern/rna_asset.c
+++ b/source/blender/makesrna/intern/rna_asset.c
@@ -153,16 +153,6 @@ static void rna_AssetVariant_description_set(struct 
PointerRNA *ptr, const char
 }
 
 /* Entries. */
-static FileDirEntryVariant *rna_AssetEntry_variants_add(FileDirEntry *entry/*, 
ReportList *reports,*/)
-{
-       FileDirEntryVariant *variant = MEM_callocN(sizeof(*variant), __func__);
-
-       BLI_addtail(&entry->variants, variant);
-       entry->nbr_variants++;
-
-       return variant;
-}
-
 static PointerRNA rna_AssetEntry_active_variant_get(PointerRNA *ptr)
 {
        FileDirEntry *entry = ptr->data;
@@ -177,6 +167,16 @@ static void rna_AssetEntry_active_variant_set(PointerRNA 
*ptr, PointerRNA value)
        entry->act_variant = BLI_findindex(&entry->variants, variant);
 }
 
+static FileDirEntryVariant *rna_AssetEntry_variants_add(FileDirEntry *entry/*, 
ReportList *reports,*/)
+{
+       FileDirEntryVariant *variant = MEM_callocN(sizeof(*variant), __func__);
+
+       BLI_addtail(&entry->variants, variant);
+       entry->nbr_variants++;
+
+       return variant;
+}
+
 static void rna_AssetEntry_relpath_get(struct PointerRNA *ptr, char *value)
 {
        FileDirEntry *entry = ptr->data;
@@ -256,7 +256,27 @@ static void rna_AssetEntry_description_set(struct 
PointerRNA *ptr, const char *v
 }
 
 /* Entries Array. */
-static FileDirEntry *rna_AssetList_entries_add(FileDirEntryArr *dirlist/*, 
ReportList *reports,*/)
+static PointerRNA rna_AssetList_active_entry_get(PointerRNA *ptr)
+{
+       FileDirEntryArr *arr = ptr->data;
+       return rna_pointer_inherit_refine(ptr, &RNA_AssetEntry, 
BLI_findlink(&arr->entries, 0));
+}
+
+static void rna_AssetList_active_entry_set(PointerRNA *ptr, PointerRNA value)
+{
+       FileDirEntryArr *arr = ptr->data;
+       FileDirEntry *entry = value.data;
+
+       BLI_remlink_safe(&arr->entries, entry);
+       BLI_addhead(&arr->entries, entry);
+}
+
+static int rna_AssetList_active_entry_index_get(PointerRNA *UNUSED(ptr))
+{
+       return 0;
+}
+
+static FileDirEntry *rna_AssetList_entries_add(FileDirEntryArr *dirlist)
 {
        FileDirEntry *entry = MEM_callocN(sizeof(*entry), __func__);
 
@@ -266,6 +286,23 @@ static FileDirEntry 
*rna_AssetList_entries_add(FileDirEntryArr *dirlist/*, Repor
        return entry;
 }
 
+static void rna_AssetList_entries_remove(FileDirEntryArr *dirlist, ReportList 
*reports, PointerRNA *ptr)
+{
+       FileDirEntry *entry = ptr->data;
+
+       if (!BLI_remlink_safe(&dirlist->entries, entry)) {
+               BKE_report(reports, RPT_ERROR, "Trying to remove an entry for a 
list which does not contain it!");
+               return;
+       }
+
+       BKE_filedir_entry_free(entry);
+       MEM_freeN(entry);
+}
+
+static void rna_AssetList_entries_clear(FileDirEntryArr *dirlist)
+{
+       BKE_filedir_entryarr_clear(dirlist);
+}
 
 /* AssetEngine callbacks. */
 
@@ -549,14 +586,6 @@ static void rna_def_asset_variants(BlenderRNA *brna, 
PropertyRNA *cprop)
        RNA_def_struct_sdna(srna, "FileDirEntry");
        RNA_def_struct_ui_text(srna, "Asset Entry Variants", "Collection of 
asset entry's variants");
 
-       /* Add Variant */
-       func = RNA_def_function(srna, "add", "rna_AssetEntry_variants_add");
-       RNA_def_function_ui_description(func, "Add a new variant to the entry");
-//     RNA_def_function_flag(func, FUNC_USE_REPORTS);
-       /* return arg */
-       parm = RNA_def_pointer(func, "variant", "AssetVariant", "New Variant", 
"New asset entry variant");
-       RNA_def_function_return(func, parm);
-
        prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
        RNA_def_property_struct_type(prop, "AssetVariant");
        RNA_def_property_flag(prop, PROP_EDITABLE);
@@ -567,6 +596,14 @@ static void rna_def_asset_variants(BlenderRNA *brna, 
PropertyRNA *cprop)
        prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "act_variant");
        RNA_def_property_ui_text(prop, "Active Index", "Index of asset's 
variant curently active (selected)");
+
+       /* Add Variant */
+       func = RNA_def_function(srna, "add", "rna_AssetEntry_variants_add");
+       RNA_def_function_ui_description(func, "Add a new variant to the entry");
+//     RNA_def_function_flag(func, FUNC_USE_REPORTS);
+       /* return arg */
+       parm = RNA_def_pointer(func, "variant", "AssetVariant", "New Variant", 
"New asset entry variant");
+       RNA_def_function_return(func, parm);
 }
 
 static void rna_def_asset_entry(BlenderRNA *brna)
@@ -644,51 +681,45 @@ static void rna_def_asset_entries(BlenderRNA *brna, 
PropertyRNA *cprop)
 {
        StructRNA *srna;
        FunctionRNA *func;
-       PropertyRNA *parm;
+       PropertyRNA *parm, *prop;
 
        RNA_def_property_srna(cprop, "AssetEntries");
        srna = RNA_def_struct(brna, "AssetEntries", NULL);
        RNA_def_struct_sdna(srna, "FileDirEntryArr");
        RNA_def_struct_ui_text(srna, "Asset List entries", "Collection of asset 
entries");
 
+       /* Currently, 'active' entry (i.e. the one passed to single-file arg of 
operators) is always the
+        * first of the list... */
+       prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "AssetEntry");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_pointer_funcs(prop, "rna_AssetList_active_entry_get",
+                                      "rna_AssetList_active_entry_set", NULL, 
NULL);
+       RNA_def_property_ui_text(prop, "Active Entry", "Active (selected) entry 
of the list");
+
+       prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
+       RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_int_funcs(prop, 
"rna_AssetList_active_entry_index_get", NULL, NULL);
+       RNA_def_property_ui_text(prop, "Active Index", "Index of entry curently 
active (selected)");
+
        /* Add Entry */
        func = RNA_def_function(srna, "add", "rna_AssetList_entries_add");
        RNA_def_function_ui_description(func, "Add a new asset entry to the 
list");
-//     RNA_def_function_flag(func, FUNC_USE_REPORTS);
        /* return arg */
        parm = RNA_def_pointer(func, "entry", "AssetEntry", "New Entry", "New 
asset entry");
        RNA_def_function_return(func, parm);
 
-#if 0
-       /* Remove Path */
-       func = RNA_def_function(srna, "remove", "rna_KeyingSet_paths_remove");
-       RNA_def_function_ui_description(func, "Remove the given path from the 
Keying Set");
+       /* Remove Entry */
+       func = RNA_def_function(srna, "remove", "rna_AssetList_entries_remove");
+       RNA_def_function_ui_description(func, "Remove the given entry from the 
list (entry is freeded)");
        RNA_def_function_flag(func, FUNC_USE_REPORTS);
-       /* path to remove */
-       parm = RNA_def_pointer(func, "path", "KeyingSetPath", "Path", "");
+       parm = RNA_def_pointer(func, "entry", "AssetEntry", "Entry", "");
        RNA_def_property_flag(parm, PROP_REQUIRED | PROP_NEVER_NULL | 
PROP_RNAPTR);
        RNA_def_property_clear_flag(parm, PROP_THICK_WRAP);
 
-
-       /* Remove All Paths */
-       func = RNA_def_function(srna, "clear", "rna_KeyingSet_paths_clear");
-       RNA_def_function_ui_description(func, "Remove all the paths from the 
Keying Set");
-       RNA_def_function_flag(func, FUNC_USE_REPORTS);
-
-       prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
-       RNA_def_property_struct_type(prop, "KeyingSetPath");
-       RNA_def_property_flag(prop, PROP_EDITABLE);
-       RNA_def_property_

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to