[Bf-blender-cvs] [d68be33df5a] asset-browser: Add Preferences options to set up custom asset repositories

Julian Eisel noreply at git.blender.org
Thu Oct 1 15:47:12 CEST 2020


Commit: d68be33df5af65843dce00caf34f9b4192cccf7a
Author: Julian Eisel
Date:   Thu Oct 1 15:21:28 2020 +0200
Branches: asset-browser
https://developer.blender.org/rBd68be33df5af65843dce00caf34f9b4192cccf7a

Add Preferences options to set up custom asset repositories

Can be found under the File Paths category. There already is a default
repository, called "Default" and pointing to the documents or home
directory. For most Linux users it will be ~/assets.blend, for Windows
users it will be the Documents directory.

Note that this is only the Preference part of this. The Asset-Browser
doesn't use this yet.

For now, asset repositories will be single .blend files. There are some
design questions regarding how the Asset Browser would display a
directory structure as repository.

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

M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/blenkernel/BKE_blender_version.h
A	source/blender/blenkernel/BKE_preferences.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/blender.c
M	source/blender/blenkernel/intern/blendfile.c
A	source/blender/blenkernel/intern/preferences.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_userdef.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/space_userpref/userpref_ops.c
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesrna/intern/rna_userdef.c

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

diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 40cb03acdfc..efe1823aeef 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1246,6 +1246,28 @@ class USERPREF_PT_file_paths_data(FilePathsPanel, Panel):
         col.prop(paths, "temporary_directory", text="Temporary Files")
 
 
+class USERPREF_PT_file_paths_asset_repositories(FilePathsPanel, Panel):
+    bl_label = "Asset Repositories"
+
+    def draw(self, context):
+        layout = self.layout
+        layout.use_property_split = False
+        layout.use_property_decorate = False
+
+        paths = context.preferences.filepaths
+
+        box = layout.box()
+        for i, repository in enumerate(paths.asset_repositories):
+            row = box.row()
+            split = row.split(factor=0.65)
+            split.prop(repository, "path", text="")
+            split.prop(repository, "name")
+            row.operator("preferences.asset_repository_remove", text="", icon='X', emboss=False).index = i
+
+        row = box.row()
+        row.operator("preferences.asset_repository_add", text="", icon='ADD', emboss=False)
+
+
 class USERPREF_PT_file_paths_render(FilePathsPanel, Panel):
     bl_label = "Render"
 
@@ -2277,6 +2299,7 @@ classes = (
     USERPREF_PT_theme_collection_colors,
 
     USERPREF_PT_file_paths_data,
+    USERPREF_PT_file_paths_asset_repositories,
     USERPREF_PT_file_paths_render,
     USERPREF_PT_file_paths_applications,
     USERPREF_PT_file_paths_development,
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 23efea81e57..e43043b034f 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -39,7 +39,7 @@ extern "C" {
 
 /* Blender file format version. */
 #define BLENDER_FILE_VERSION BLENDER_VERSION
-#define BLENDER_FILE_SUBVERSION 5
+#define BLENDER_FILE_SUBVERSION 6
 
 /* Minimum Blender version that supports reading file written with the current
  * version. Older Blender versions will test this and show a warning if the file
diff --git a/source/blender/blenkernel/BKE_preferences.h b/source/blender/blenkernel/BKE_preferences.h
new file mode 100644
index 00000000000..f9e1013e45b
--- /dev/null
+++ b/source/blender/blenkernel/BKE_preferences.h
@@ -0,0 +1,46 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+/** \file
+ * \ingroup bke
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "BLI_compiler_attrs.h"
+
+struct UserDef;
+struct bUserAssetRepository;
+
+void BKE_preferences_asset_repository_free(struct bUserAssetRepository *repository) ATTR_NONNULL();
+
+struct bUserAssetRepository *BKE_preferences_asset_repository_add(struct UserDef *userdef,
+                                                                  const char *name,
+                                                                  const char *path)
+    ATTR_NONNULL(1);
+void BKE_preferences_asset_repository_remove(struct UserDef *userdef,
+                                             struct bUserAssetRepository *repository)
+    ATTR_NONNULL();
+
+void BKE_preferences_asset_repository_default_add(struct UserDef *userdef) ATTR_NONNULL();
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index cfaa457cce7..68a6ff075a4 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -209,6 +209,7 @@ set(SRC
   intern/pbvh_bmesh.c
   intern/pointcache.c
   intern/pointcloud.c
+  intern/preferences.c
   intern/report.c
   intern/rigidbody.c
   intern/scene.c
@@ -372,6 +373,7 @@ set(SRC
   BKE_persistent_data_handle.hh
   BKE_pointcache.h
   BKE_pointcloud.h
+  BKE_preferences.h
   BKE_report.h
   BKE_rigidbody.h
   BKE_scene.h
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 1ad1a821129..fc43c065351 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -295,6 +295,7 @@ void BKE_blender_userdef_data_free(UserDef *userdef, bool clear_fonts)
   }
 
   BLI_freelistN(&userdef->autoexec_paths);
+  BLI_freelistN(&userdef->asset_repositories);
 
   BLI_freelistN(&userdef->uistyles);
   BLI_freelistN(&userdef->uifonts);
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index 4ea8ae555e3..57837cd7f55 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -52,6 +52,7 @@
 #include "BKE_layer.h"
 #include "BKE_lib_id.h"
 #include "BKE_main.h"
+#include "BKE_preferences.h"
 #include "BKE_report.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h"
@@ -634,6 +635,8 @@ UserDef *BKE_blendfile_userdef_from_defaults(void)
   /* Default studio light. */
   BKE_studiolight_default(userdef->light_param, userdef->light_ambient);
 
+  BKE_preferences_asset_repository_default_add(userdef);
+
   return userdef;
 }
 
diff --git a/source/blender/blenkernel/intern/preferences.c b/source/blender/blenkernel/intern/preferences.c
new file mode 100644
index 00000000000..da337e06823
--- /dev/null
+++ b/source/blender/blenkernel/intern/preferences.c
@@ -0,0 +1,88 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** \file
+ * \ingroup bke
+ *
+ * User defined menu API.
+ */
+
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_listbase.h"
+#include "BLI_path_util.h"
+#include "BLI_string.h"
+
+#include "BKE_appdir.h"
+#include "BKE_preferences.h"
+
+#include "BLT_translation.h"
+
+#include "DNA_userdef_types.h"
+
+#define U BLI_STATIC_ASSERT(false, "Global 'U' not allowed, only use arguments passed in!")
+
+/* -------------------------------------------------------------------- */
+/** \name Asset Repositories
+ * \{ */
+
+bUserAssetRepository *BKE_preferences_asset_repository_add(UserDef *userdef,
+                                                           const char *name,
+                                                           const char *path)
+{
+  bUserAssetRepository *repository = MEM_callocN(sizeof(*repository), "bUserAssetRepository");
+
+  BLI_addtail(&userdef->asset_repositories, repository);
+
+  if (name) {
+    BLI_strncpy(repository->name, IFACE_("Default"), sizeof(repository->name));
+  }
+  if (path) {
+    BLI_strncpy(repository->path, path, sizeof(repository->path));
+  }
+
+  return repository;
+}
+
+/**
+ * Unlink and free a repository preference member.
+ * \note Free's \a repository itself.
+ */
+void BKE_preferences_asset_repository_remove(UserDef *userdef, bUserAssetRepository *repository)
+{
+  BLI_freelinkN(&userdef->asset_repositories, repository);
+}
+
+void BKE_preferences_asset_repository_default_add(UserDef *userdef)
+{
+  const char *asset_blend_name = "assets.blend";
+  const char *doc_path = BKE_appdir_folder_default();
+
+  /* No home or documents path found, not much we can do. */
+  if (!doc_path || !doc_path[0]) {
+    return;
+  }
+
+  /* Add new "Default" repository under '[doc_path]/assets.blend'. */
+
+  bUserAssetRepository *repository = BKE_preferences_asset_repository_add(
+      userdef, DATA_("Default"), NULL);
+  BLI_join_dirfile(repository->path, sizeof(repository->path), doc_path, asset_blend_name);
+}
+
+/** \} */
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index c1cc8c7900e..1a0e95bf8b1 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7147,6 +7147,7 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
   BLO_read_list(reader, &user->user_menus);
   BLO_read_list(reader, &user->addons);
   BLO_read_list(reader, &user->autoexec_paths);
+  BLO_read_list(reader, &user->asset_repositories);
 
   LISTBASE_FOREACH (wmKeyMap *, keymap, &user->user_keymaps) {
     keymap->modal_items = NULL;
diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c
index 691258a5a8c..8d1f3c9a4f3 100644
--- a/source/blender/blenloader/intern/versioning_userdef.c
+++ b/source/blender/blenloader/intern/versioning_userdef.c
@@ -43,6 +43,7 @@
 #include "BKE_idprop.h"
 #include "BKE_keyconfig.h"
 #include "BKE_main.h"
+#include "BKE_preferences.h"
 
 #include "BLO_readfile.h" /* Own include. */
 
@@ -787,6 +788,10 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef)
     }
   }
 
+  if (!USER_VERSION_ATLEAST(291, 6)) {
+    BKE_preferences_asset_repository_default_add(userdef);
+  }
+
   /**
    * Versioning code until next subversion bump goes here.
    *
diff --git a/source/blender/blenloader

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list