[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