[Bf-blender-cvs] [c73f3af3046] asset-browser: Start preparing the Asset Browser UI

Julian Eisel noreply at git.blender.org
Tue Aug 25 03:02:18 CEST 2020


Commit: c73f3af304618c63eff1cd2cc66934d6601130c1
Author: Julian Eisel
Date:   Mon Aug 24 22:04:59 2020 +0200
Branches: asset-browser
https://developer.blender.org/rBc73f3af304618c63eff1cd2cc66934d6601130c1

Start preparing the Asset Browser UI

* Make sure exactly the wanted regions are visible
* Make sure toggling back and forth between the Asset and the File Browser
  works fine (with correct region setup and other settings)
* Hide File Browser only region contents (e.g. panels on the left)
* Use thumbnail mode as default for the Asset Browser

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

M	release/scripts/startup/bl_ui/space_filebrowser.py
M	source/blender/editors/include/ED_fileselect.h
M	source/blender/editors/space_file/filesel.c
M	source/blender/editors/space_file/space_file.c
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_screen.c
M	source/blender/makesrna/intern/rna_space.c

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

diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 2977b4c2bb9..becc8395f91 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -38,7 +38,8 @@ class FILEBROWSER_HT_header(Header):
 
         layout.separator_spacer()
 
-        layout.template_running_jobs()
+        if not context.screen.show_statusbar:
+            layout.template_running_jobs()
 
 
 class FILEBROWSER_PT_display(Panel):
@@ -171,6 +172,10 @@ def panel_poll_is_upper_region(region):
     return region.alignment in {'LEFT', 'RIGHT'}
 
 
+def panel_poll_is_asset_browsing(context):
+    return context.space_data.mode == 'ASSETS'
+
+
 class FILEBROWSER_UL_dir(UIList):
     def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index):
         direntry = item
@@ -198,7 +203,7 @@ class FILEBROWSER_PT_bookmarks_volumes(Panel):
 
     @classmethod
     def poll(cls, context):
-        return panel_poll_is_upper_region(context.region)
+        return panel_poll_is_upper_region(context.region) and not panel_poll_is_asset_browsing(context)
 
     def draw(self, context):
         layout = self.layout
@@ -218,7 +223,7 @@ class FILEBROWSER_PT_bookmarks_system(Panel):
 
     @classmethod
     def poll(cls, context):
-        return not context.preferences.filepaths.hide_system_bookmarks and panel_poll_is_upper_region(context.region)
+        return not context.preferences.filepaths.hide_system_bookmarks and panel_poll_is_upper_region(context.region) and not panel_poll_is_asset_browsing(context)
 
     def draw(self, context):
         layout = self.layout
@@ -252,7 +257,7 @@ class FILEBROWSER_PT_bookmarks_favorites(Panel):
 
     @classmethod
     def poll(cls, context):
-        return panel_poll_is_upper_region(context.region)
+        return panel_poll_is_upper_region(context.region) and not panel_poll_is_asset_browsing(context)
 
     def draw(self, context):
         layout = self.layout
@@ -289,7 +294,7 @@ class FILEBROWSER_PT_bookmarks_recents(Panel):
 
     @classmethod
     def poll(cls, context):
-        return not context.preferences.filepaths.hide_recent_locations and panel_poll_is_upper_region(context.region)
+        return not context.preferences.filepaths.hide_recent_locations and panel_poll_is_upper_region(context.region) and not panel_poll_is_asset_browsing(context)
 
     def draw(self, context):
         layout = self.layout
@@ -313,7 +318,7 @@ class FILEBROWSER_PT_advanced_filter(Panel):
     @classmethod
     def poll(cls, context):
         # only useful in append/link (library) context currently...
-        return context.space_data.params.use_library_browsing and panel_poll_is_upper_region(context.region)
+        return context.space_data.params.use_library_browsing and panel_poll_is_upper_region(context.region) and not panel_poll_is_asset_browsing(context)
 
     def draw(self, context):
         layout = self.layout
diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h
index deda0861b60..301ad020e34 100644
--- a/source/blender/editors/include/ED_fileselect.h
+++ b/source/blender/editors/include/ED_fileselect.h
@@ -141,6 +141,8 @@ void ED_fileselect_exit(struct wmWindowManager *wm,
                         struct Scene *owner_scene,
                         struct SpaceFile *sfile);
 
+bool ED_fileselect_is_asset_browser(const struct FileSelectParams *params);
+
 void ED_fileselect_window_params_get(const struct wmWindow *win,
                                      int win_size[2],
                                      bool *is_maximized);
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index 88c8c6b2939..f9a327e9eb5 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -76,9 +76,16 @@
 
 #define VERTLIST_MAJORCOLUMN_WIDTH (25 * UI_UNIT_X)
 
+static bool fileselect_needs_refresh(const SpaceFile *sfile)
+{
+  return sfile->params && (sfile->params->browse_mode != sfile->mode);
+}
+
 FileSelectParams *ED_fileselect_get_params(struct SpaceFile *sfile)
 {
-  if (!sfile->params) {
+  /* TODO maybe we should two params, one for file one for asset browsing? That way data is kept
+   * when changing between the two. */
+  if (!sfile->params || fileselect_needs_refresh(sfile)) {
     ED_fileselect_set_params(sfile);
   }
   return sfile->params;
@@ -110,6 +117,8 @@ short ED_fileselect_set_params(SpaceFile *sfile)
   }
 
   params = sfile->params;
+  /* Store which mode these params were created for. */
+  params->browse_mode = sfile->mode;
 
   /* set the parameters from the operator, if it exists */
   if (op) {
@@ -290,7 +299,8 @@ short ED_fileselect_set_params(SpaceFile *sfile)
     params->type = FILE_UNIX;
     params->flag |= U_default.file_space_data.flag;
     params->flag &= ~FILE_DIRSEL_ONLY;
-    params->display = FILE_VERTICALDISPLAY;
+    params->display = ED_fileselect_is_asset_browser(params) ? FILE_IMGDISPLAY :
+                                                               FILE_VERTICALDISPLAY;
     params->sort = FILE_SORT_ALPHA;
     params->filter = 0;
     params->filter_glob[0] = '\0';
@@ -326,6 +336,11 @@ short ED_fileselect_set_params(SpaceFile *sfile)
   return 1;
 }
 
+bool ED_fileselect_is_asset_browser(const FileSelectParams *params)
+{
+  return (params->browse_mode == FILE_BROWSE_MODE_ASSETS);
+}
+
 /* The subset of FileSelectParams.flag items we store into preferences. */
 #define PARAMS_FLAGS_REMEMBERED (FILE_HIDE_DOT | FILE_SORT_INVERT)
 
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index 04a0d341987..d6f75b0621d 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -57,6 +57,23 @@
 #include "filelist.h"
 #include "fsmenu.h"
 
+static ARegion *file_ui_region_ensure(ScrArea *area, ARegion *region_prev)
+{
+  ARegion *region;
+
+  if ((region = BKE_area_find_region_type(area, RGN_TYPE_UI)) != NULL) {
+    return region;
+  }
+
+  region = MEM_callocN(sizeof(ARegion), "execute region for file");
+  BLI_insertlinkafter(&area->regionbase, region_prev, region);
+  region->regiontype = RGN_TYPE_UI;
+  region->alignment = RGN_ALIGN_TOP;
+  region->flag = RGN_FLAG_DYNAMIC_SIZE;
+
+  return region;
+}
+
 static ARegion *file_execute_region_ensure(ScrArea *area, ARegion *region_prev)
 {
   ARegion *region;
@@ -234,15 +251,29 @@ static void file_ensure_valid_region_state(bContext *C,
                                            SpaceFile *sfile,
                                            FileSelectParams *params)
 {
-  ARegion *region_ui = BKE_area_find_region_type(area, RGN_TYPE_UI);
-  ARegion *region_props = BKE_area_find_region_type(area, RGN_TYPE_TOOL_PROPS);
-  ARegion *region_execute = BKE_area_find_region_type(area, RGN_TYPE_EXECUTE);
+  ARegion *region_tools = BKE_area_find_region_type(area, RGN_TYPE_TOOLS);
   bool needs_init = false; /* To avoid multiple ED_area_init() calls. */
 
+  BLI_assert(region_tools);
+
+  if (sfile->mode == FILE_BROWSE_MODE_ASSETS) {
+    ARegion *region_execute = file_execute_region_ensure(area, region_tools);
+    ARegion *region_props = file_tool_props_region_ensure(area, region_execute);
+
+    /* Properties are hidden by default. */
+    region_props->flag |= RGN_FLAG_HIDDEN;
+
+    ARegion *region_ui = BKE_area_find_region_type(area, RGN_TYPE_UI);
+    if (region_ui) {
+      ED_region_remove(C, area, region_ui);
+      needs_init = true;
+    }
+  }
   /* If there's an file-operation, ensure we have the option and execute region */
-  if (sfile->op && (region_props == NULL)) {
-    region_execute = file_execute_region_ensure(area, region_ui);
-    region_props = file_tool_props_region_ensure(area, region_execute);
+  else if (sfile->op) {
+    ARegion *region_ui = file_ui_region_ensure(area, region_tools);
+    ARegion *region_execute = file_execute_region_ensure(area, region_ui);
+    ARegion *region_props = file_tool_props_region_ensure(area, region_execute);
 
     if (params->flag & FILE_HIDE_TOOL_PROPS) {
       region_props->flag |= RGN_FLAG_HIDDEN;
@@ -254,12 +285,19 @@ static void file_ensure_valid_region_state(bContext *C,
     needs_init = true;
   }
   /* If there's _no_ file-operation, ensure we _don't_ have the option and execute region */
-  else if ((sfile->op == NULL) && (region_props != NULL)) {
-    BLI_assert(region_execute != NULL);
+  else {
+    ARegion *region_props = BKE_area_find_region_type(area, RGN_TYPE_TOOL_PROPS);
+    ARegion *region_execute = BKE_area_find_region_type(area, RGN_TYPE_EXECUTE);
+    ARegion *region_ui = file_ui_region_ensure(area, region_tools);
+    UNUSED_VARS(region_ui);
 
-    ED_region_remove(C, area, region_props);
-    ED_region_remove(C, area, region_execute);
-    needs_init = true;
+    if (region_props) {
+      BLI_assert(region_execute);
+
+      ED_region_remove(C, area, region_props);
+      ED_region_remove(C, area, region_execute);
+      needs_init = true;
+    }
   }
 
   if (needs_init) {
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 31d0988e0f7..bef863d5361 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -686,7 +686,10 @@ typedef struct FileSelectParams {
   int sel_first;
   int sel_last;
   unsigned short thumbnail_size;
-  char _pad1[2];
+  char _pad1[1];
+
+  /* The browse mode these params were created for (e.g. asset vs file browsing). */
+  char browse_mode; /* eFileBrowse_Mode */
 
   /* short */
   /** XXXXX for now store type here, should be moved to the operator. */
@@ -762,7 +765,7 @@ typedef enum eFileBrowse_Mode {
   /* Regular Blender File Browser */
   FILE_BROWSE_MODE_REGULAR = 0,
   /* Asset Browser */
-  FILE_BROWSE_MODE_ASSETS = 0,
+  FILE_BROWSE_MODE_ASSETS = 1,
 } eFileBrowse_Mode;
 
 /* FileSelectParams.display */
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index ab84dcb0aba..7b9f612134

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list