Commit: d069dc9859eacb06821b67a3db0ab40c2627c2ed Author: Julian Eisel Date: Mon Apr 1 14:48:35 2019 +0200 Branches: filebrowser_redesign https://developer.blender.org/rBd069dc9859eacb06821b67a3db0ab40c2627c2ed
Initially split filename and directory-path into two regions =================================================================== M release/scripts/startup/bl_ui/space_filebrowser.py M source/blender/blenkernel/BKE_blender_version.h M source/blender/blenloader/intern/versioning_userdef.c M source/blender/editors/screen/area.c M source/blender/editors/space_file/file_draw.c M source/blender/editors/space_file/file_intern.h M source/blender/editors/space_file/space_file.c =================================================================== diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py index 5ab4dbfd16b..d1690a1c589 100644 --- a/release/scripts/startup/bl_ui/space_filebrowser.py +++ b/release/scripts/startup/bl_ui/space_filebrowser.py @@ -241,6 +241,54 @@ class FILEBROWSER_PT_advanced_filter(Panel): col.prop(params, "filter_id") +class FILEBROWSER_PT_directory_path(Panel): + bl_space_type = 'FILE_BROWSER' + bl_region_type = 'UI' + bl_label = "Directory Path" + bl_category = "Directory Path" + bl_options = {'HIDE_HEADER'} + + def draw(self, context): + layout = self.layout + space = context.space_data + params = space.params + + layout.scale_x = 1.3 + layout.scale_y = 1.3 + + row = layout.row() + # TODO proper directory input text field + row.prop(params, "directory", text="") + + +class FILEBROWSER_PT_file_operation(Panel): + bl_space_type = 'FILE_BROWSER' + bl_region_type = 'EXECUTE' + bl_label = "Execute File Operation" + bl_options = {'HIDE_HEADER'} + + @classmethod + def poll(cls, context): + return context.space_data.active_operator + + def draw(self, context): + layout = self.layout + space = context.space_data + params = space.params + + layout.scale_x = 1.3 + layout.scale_y = 1.3 + + row = layout.row() + sub = row.row() + sub.prop(params, "filename", text="") + sub = row.row() + sub.ui_units_x = 5 + # TODO change to "Open Directory"/"Parent Directory" based on highlight. + sub.operator("FILE_OT_execute", text=params.title) + sub.operator("FILE_OT_cancel", text="Cancel") + + class FILEBROWSER_MT_view(Menu): bl_label = "View" @@ -266,6 +314,8 @@ classes = ( FILEBROWSER_PT_bookmarks, FILEBROWSER_PT_recent_folders, FILEBROWSER_PT_advanced_filter, + FILEBROWSER_PT_directory_path, + FILEBROWSER_PT_file_operation, FILEBROWSER_MT_view, ) diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 9ae85725488..4c88410134c 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -24,7 +24,7 @@ * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ #define BLENDER_VERSION 280 -#define BLENDER_SUBVERSION 53 +#define BLENDER_SUBVERSION 54 /* Several breakages with 280, e.g. collections vs layers */ #define BLENDER_MINVERSION 280 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c index 5bff0cd1c93..b709039923a 100644 --- a/source/blender/blenloader/intern/versioning_userdef.c +++ b/source/blender/blenloader/intern/versioning_userdef.c @@ -114,6 +114,10 @@ static void do_versions_theme(UserDef *userdef, bTheme *btheme) FROM_DEFAULT_V4_UCHAR(space_info.info_info); } + if (!USER_VERSION_ATLEAST(280, 54)) { + FROM_DEFAULT_V4_UCHAR(space_file.execution_buts); + } + #undef FROM_DEFAULT_V4_UCHAR #undef USER_VERSION_ATLEAST diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 411826d79c1..2aa724728cd 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1169,9 +1169,6 @@ static void region_rect_recursive(ScrArea *sa, ARegion *ar, rcti *remainder, rct else if (ED_area_is_global(sa)) { prefsizey = ED_region_global_size_y(); } - else if (ar->regiontype == RGN_TYPE_UI && sa->spacetype == SPACE_FILE) { - prefsizey = UI_UNIT_Y * 2 + (UI_UNIT_Y / 2); - } else { prefsizey = UI_DPI_FAC * (ar->sizey > 1 ? ar->sizey + 0.5f : ar->type->prefsizey); } diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index c0aa03abece..b3f520f74d7 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -78,6 +78,7 @@ static char *file_draw_tooltip_func(bContext *UNUSED(C), void *argN, const char return BLI_strdup(dyn_tooltip); } +#if 0 /* Note: This function uses pixelspace (0, 0, winx, winy), not view2d. * The controls are laid out as follows: * @@ -91,7 +92,7 @@ static char *file_draw_tooltip_func(bContext *UNUSED(C), void *argN, const char * When there isn't enough space for all controls to be shown, they are * hidden in this order: x/-, execute/cancel, input widgets. */ -void file_draw_buttons(const bContext *C, ARegion *ar) +void file_draw_filepath_buttons(const bContext *C, ARegion *ar) { /* Button layout. */ const int max_x = ar->winx - 10; @@ -186,29 +187,80 @@ void file_draw_buttons(const bContext *C, ARegion *ar) if (sfile->files && filelist_lib(sfile->files)) UI_but_flag_enable(but, UI_BUT_DISABLED); - if ((params->flag & FILE_DIRSEL_ONLY) == 0) { - but = uiDefBut(block, UI_BTYPE_TEXT, -1, "", - min_x, line2_y, line2_w - chan_offs, btn_h, - is_active_dir ? (char *)"" : params->file, - 0.0, (float)FILE_MAXFILE, 0, 0, - TIP_(overwrite_alert ? N_("File name, overwrite existing") : N_("File name"))); - UI_but_func_complete_set(but, autocomplete_file, NULL); - UI_but_flag_enable(but, UI_BUT_NO_UTF8); - UI_but_flag_disable(but, UI_BUT_UNDO); - /* silly workaround calling NFunc to ensure this does not get called - * immediate ui_apply_but_func but only after button deactivates */ - UI_but_funcN_set(but, file_filename_enter_handle, NULL, but); + /* clear func */ + UI_block_func_set(block, NULL, NULL, NULL); + } - /* check if this overrides a file and if the operator option is used */ - if (overwrite_alert) { - UI_but_flag_enable(but, UI_BUT_REDALERT); - } + UI_block_end(C, block); + UI_block_draw(C, block); +} + +void file_draw_execute_buttons(const bContext *C, ARegion *ar) +{ + /* Button layout. */ + const int max_x = ar->winx - 10; + const int line_y = ar->winy - (IMASEL_BUTTONS_HEIGHT / 2 + IMASEL_BUTTONS_MARGIN); + const int input_minw = 20; + const int btn_h = UI_UNIT_Y; + const int btn_fn_w = UI_UNIT_X; + const int btn_minw = 80; + const int btn_margin = 20; + const int separator = 4; + + SpaceFile *sfile = CTX_wm_space_file(C); + FileSelectParams *params = ED_fileselect_get_params(sfile); + const bool is_browse_only = (sfile->op == NULL); + + char uiblockstr[32]; + int loadbutton; + int min_x = 10; + int available_w = max_x - min_x; + int line1_w = available_w; + int line2_w = available_w; + + uiBlock *block; + uiBut *but; + + /* Initialize UI block. */ + BLI_snprintf(uiblockstr, sizeof(uiblockstr), "win %p", (void *)ar); + block = UI_block_begin(C, ar, uiblockstr, UI_EMBOSS); + + if (is_browse_only) { + loadbutton = 0; + } + else { + const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; + loadbutton = UI_fontstyle_string_width(fstyle, params->title) + btn_margin; + CLAMP_MIN(loadbutton, btn_minw); + if (available_w <= loadbutton + separator + input_minw) { + loadbutton = 0; } + } - /* clear func */ - UI_block_func_set(block, NULL, NULL, NULL); + const struct FileDirEntry *file = sfile->files ? filelist_file(sfile->files, params->active_file) : NULL; + int overwrite_alert = file_draw_check_exists(sfile); + const bool is_active_dir = file && (file->typeflag & FILE_TYPE_FOLDER); + + if ((params->flag & FILE_DIRSEL_ONLY) == 0) { + but = uiDefBut(block, UI_BTYPE_TEXT, -1, "", + min_x, line_y, line2_w, btn_h, + is_active_dir ? (char *)"" : params->file, + 0.0, (float)FILE_MAXFILE, 0, 0, + TIP_(overwrite_alert ? N_("File name, overwrite existing") : N_("File name"))); + UI_but_func_complete_set(but, autocomplete_file, NULL); + UI_but_flag_enable(but, UI_BUT_NO_UTF8); + UI_but_flag_disable(but, UI_BUT_UNDO); + /* silly workaround calling NFunc to ensure this does not get called + * immediate ui_apply_but_func but only after button deactivates */ + UI_but_funcN_set(but, file_filename_enter_handle, NULL, but); + + /* check if this overrides a file and if the operator option is used */ + if (overwrite_alert) { + UI_but_flag_enable(but, UI_BUT_REDALERT); + } } +#if 0 /* Filename number increment / decrement buttons. */ if (fnumbuttons && (params->flag & FILE_DIRSEL_ONLY) == 0) { UI_block_align_begin(block); @@ -225,6 +277,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar) RNA_int_set(UI_but_operator_ptr_get(but), "increment", 1); UI_block_align_end(block); } +#endif /* Execute / cancel buttons. */ if (loadbutton) { @@ -243,17 +296,18 @@ void file_draw_buttons(const bContext *C, ARegion *ar) but = uiDefButO( block, UI_BTYPE_BUT, "FILE_OT_execute", WM_OP_EXEC_REGION_WIN, str_exec, - max_x - loadbutton, line1_y, loadbutton, btn_h, ""); + max_x - loadbutton, line_y, loadbutton, btn_h, ""); /* Just a display hint. */ UI_but_flag_enable(but, UI_BUT_ACTIVE_DEFAULT); uiDefButO(block, UI_BTYPE_BUT, "FILE_OT_cancel", WM_OP_EXEC_REGION_WIN, IFACE_("Cancel"), - max_x - loadbutton, line2_y, loadbutton, btn_h, ""); + max_x - loadbutton, line_y, loadbutton, btn_h, ""); } UI_block_end(C, block); UI_block_draw(C, block); } +#endif static void draw_tile(int sx, int sy, int width, int height, int colorid, int shade) diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h index 46e30e556d1..ef6a73bfac4 100644 --- a/source/blender/editors/space_file/file_intern.h +++ b/source/blender/editors/space_file/file_intern.h @@ -44,7 +44,10 @@ struct ARegion *file_tools_region(struct ScrArea *sa); #define SMALL_SIZE_CHECK(_size) ((_size) < 64) /* Related to FileSelectParams.thumbnail_size. */ -void file_draw_buttons(const bContext *C, ARegion *ar); +#if 0 +void file_draw_filepath_buttons(const bContext *C, ARegion *ar); +void file_draw_execute_buttons(const bContext *C, ARegion *ar); +#endif void file_calc_previews(const bContext *C, ARegion *ar); @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs