Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Eisel <julian@blender.org>2020-12-14 15:50:36 +0300
committerJulian Eisel <julian@blender.org>2020-12-15 19:03:48 +0300
commit70474e1a7cc45a1b1cc08d39b3e472c88c8d3225 (patch)
tree1f973b96e0b6c78e4b30e4413517a994e59ff744 /source/blender/makesdna/DNA_space_types.h
parente413c80371c1714d80262034d0e83b4e10e6cbe5 (diff)
Asset System: Prepare File Browser backend for the Asset Browser
The Asset Browser will be a sub-editor of the File Browser. This prepares the File Browser code for that. **File-Lists** * Support loading assets with metadata read from external files into the file-list. * New main based file-list type, for the "Current File" asset library. * Refresh file-list when switching between browse modes or asset libraries. * Support empty file-lists (asset library with no assets). * Store file previews as icons, so scripts can reference them via icon-id. See previous commit. **Space Data** * Introduce "browse mode" to differeniate between file and asset browsing. * Add `FileAssetSelectParams` to `SpaceFile`, with `FileSelectParams` as base. Makes sure data is separated between asset and file browsing when switching between them. The active params can be obtained through `ED_fileselect_get_active_params()`. * `FileAssetSelectParams` stores the currently visible asset library ID. * Introduce file history abstraction so file and asset browsing can keep a separate history (previous and next directories). **General** * Option to only show asset data-blocks while file browsing (not exposed here). * Add "active_file" context member, so scripts can get and display info about the active file. * Add "active_id" context member, so `ED_OT_lib_id_load_custom_preview` can set a custom ID preview. (Only for "Current File" asset library) * Expose some of `FileDirEntry` in RNA as (non-editable). That way scripts can obtain name, preview icon and asset-data. Part of the first Asset Browser milestone. Check the #asset_browser_milestone_1 project milestone on developer.blender.org. Differential Revision: https://developer.blender.org/D9724 Reviewed by: Bastien Montagne
Diffstat (limited to 'source/blender/makesdna/DNA_space_types.h')
-rw-r--r--source/blender/makesdna/DNA_space_types.h125
1 files changed, 116 insertions, 9 deletions
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 6fd112628a1..e07f085d356 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -664,6 +664,23 @@ typedef enum eSpaceSeq_OverlayType {
/** \name File Selector
* \{ */
+/**
+ * Information to identify a asset library. May be either one of the predefined types (current
+ * 'Main', builtin library, project library), or a custom type as defined in the Preferences.
+ *
+ * If the type is set to #FILE_ASSET_LIBRARY_CUSTOM, idname must have the name to identify the
+ * custom library. Otherwise idname is not used.
+ */
+typedef struct FileSelectAssetLibraryUID {
+ short type;
+ char _pad[6];
+ /**
+ * If showing a custom asset library (#FILE_ASSET_LIBRARY_CUSTOM), this name has to be set to
+ * define which. Can be empty otherwise.
+ */
+ char custom_library_identifier[64]; /* MAX_NAME */
+} FileSelectAssetLibraryUID;
+
/* Config and Input for File Selector */
typedef struct FileSelectParams {
/** Title, also used for the text of the execute button. */
@@ -708,6 +725,7 @@ typedef struct FileSelectParams {
/** Details toggles (file size, creation date, etc.) */
char details_flags;
char _pad2[3];
+
/** Filter when (flags & FILE_FILTER) is true. */
int filter;
@@ -723,6 +741,32 @@ typedef struct FileSelectParams {
/* XXX --- end unused -- */
} FileSelectParams;
+/**
+ * File selection parameters for asset browsing mode, with #FileSelectParams as base.
+ */
+typedef struct FileAssetSelectParams {
+ FileSelectParams base_params;
+
+ FileSelectAssetLibraryUID asset_library;
+} FileAssetSelectParams;
+
+/**
+ * A wrapper to store previous and next folder lists (#FolderList) for a specific browse mode
+ * (#eFileBrowse_Mode).
+ */
+typedef struct FileFolderHistory {
+ struct FileFolderLists *next, *prev;
+
+ /** The browse mode this prev/next folder-lists are created for. */
+ char browse_mode; /* eFileBrowse_Mode */
+ char _pad[7];
+
+ /** Holds the list of previous directories to show. */
+ ListBase folders_prev;
+ /** Holds the list of next directories (pushed from previous) to show. */
+ ListBase folders_next;
+} FileFolderHistory;
+
/* File Browser */
typedef struct SpaceFile {
SpaceLink *next, *prev;
@@ -733,20 +777,42 @@ typedef struct SpaceFile {
char _pad0[6];
/* End 'SpaceLink' header. */
- char _pad1[4];
+ /** Is this a File Browser or an Asset Browser? */
+ char browse_mode; /* eFileBrowse_Mode */
+ char _pad1[1];
+
+ short tags;
+
int scroll_offset;
- /** Config and input for file select. */
- struct FileSelectParams *params;
+ /** Config and input for file select. One for each browse-mode, to keep them independent. */
+ FileSelectParams *params;
+ FileAssetSelectParams *asset_params;
- /** Holds the list of files to show. */
+ void *_pad2;
+
+ /**
+ * Holds the list of files to show.
+ * Currently recreated when browse-mode changes. Could be per browse-mode to avoid refreshes.
+ */
struct FileList *files;
- /** Holds the list of previous directories to show. */
+ /**
+ * Holds the list of previous directories to show. Owned by `folder_histories` below.
+ */
ListBase *folders_prev;
- /** Holds the list of next directories (pushed from previous) to show. */
+ /**
+ * Holds the list of next directories (pushed from previous) to show. Owned by
+ * `folder_histories` below.
+ */
ListBase *folders_next;
+ /**
+ * This actually owns the prev/next folder-lists above. On browse-mode change, the lists of the
+ * new mode get assigned to the above.
+ */
+ ListBase folder_histories; /* FileFolderHistory */
+
/* operator that is invoking fileselect
* op->exec() will be called on the 'Load' button.
* if operator provides op->cancel(), then this will be invoked
@@ -763,6 +829,30 @@ typedef struct SpaceFile {
short systemnr, system_bookmarknr;
} SpaceFile;
+/* SpaceFile.browse_mode (File Space Browsing Mode) */
+typedef enum eFileBrowse_Mode {
+ /* Regular Blender File Browser */
+ FILE_BROWSE_MODE_FILES = 0,
+ /* Asset Browser */
+ FILE_BROWSE_MODE_ASSETS = 1,
+} eFileBrowse_Mode;
+
+typedef enum eFileAssetLibrary_Type {
+ /* For the future. Display assets bundled with Blender by default. */
+ // FILE_ASSET_LIBRARY_BUNDLED = 0,
+ /** Display assets from the current session (current "Main"). */
+ FILE_ASSET_LIBRARY_LOCAL = 1,
+ /* For the future. Display assets for the current project. */
+ // FILE_ASSET_LIBRARY_PROJECT = 2,
+
+ /** Display assets from custom asset libraries, as defined in the preferences
+ * (#bUserAssetLibrary). The name will be taken from #FileSelectParams.asset_library.idname
+ * then.
+ * In RNA, we add the index of the custom library to this to identify it by index. So keep
+ * this last! */
+ FILE_ASSET_LIBRARY_CUSTOM = 100,
+} eFileAssetLibrary_Type;
+
/* FileSelectParams.display */
enum eFileDisplayType {
/** Internal (not exposed to users): Keep whatever display type was used during the last File
@@ -792,6 +882,13 @@ enum eFileSortType {
FILE_SORT_SIZE = 4,
};
+/* SpaceFile.tags */
+enum eFileTags {
+ /** Tag the space as having to update files representing or containing main data. Must be set
+ * after file read and undo/redo. */
+ FILE_TAG_REBUILD_MAIN_FILES = (1 << 0),
+};
+
/* FileSelectParams.details_flags */
enum eFileDetails {
FILE_DETAILS_SIZE = (1 << 0),
@@ -810,6 +907,7 @@ enum eFileDetails {
typedef enum eFileSelectType {
FILE_LOADLIB = 1,
FILE_MAIN = 2,
+ FILE_MAIN_ASSET = 3,
FILE_UNIX = 8,
FILE_BLENDER = 8, /* don't display relative paths */
@@ -842,6 +940,7 @@ typedef enum eFileSel_Params_Flag {
FILE_SORT_INVERT = (1 << 11),
FILE_HIDE_TOOL_PROPS = (1 << 12),
FILE_CHECK_EXISTING = (1 << 13),
+ FILE_ASSETS_ONLY = (1 << 14),
} eFileSel_Params_Flag;
/* sfile->params->rename_flag */
@@ -885,6 +984,7 @@ typedef enum eFileSel_File_Types {
FILE_TYPE_USD = (1 << 18),
FILE_TYPE_VOLUME = (1 << 19),
+ FILE_TYPE_ASSET = (1 << 28),
/** An FS directory (i.e. S_ISDIR on its path is true). */
FILE_TYPE_DIR = (1 << 30),
FILE_TYPE_BLENDERLIB = (1u << 31),
@@ -985,9 +1085,16 @@ typedef struct FileDirEntry {
/** Optional argument for shortcuts, aliases etc. */
char *redirection_path;
- /** TODO: make this a real ID pointer? */
- void *poin;
- struct ImBuf *image;
+ /** When showing local IDs (FILE_MAIN, FILE_MAIN_ASSET), ID this file represents. Note comment
+ * for FileListInternEntry.local_data, the same applies here! */
+ ID *id;
+ /** If this file represents an asset, its asset data is here. Note that we may show assets of
+ * external files in which case this is set but not the id above.
+ * Note comment for FileListInternEntry.local_data, the same applies here! */
+ struct AssetMetaData *asset_data;
+
+ /* The icon_id for the preview image. */
+ int preview_icon_id;
/* Tags are for info only, most of filtering is done in asset engine. */
char **tags;