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:
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;