diff options
Diffstat (limited to 'source/blender/editors/space_file/filesel.c')
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 88 |
1 files changed, 49 insertions, 39 deletions
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index afe3f29e9bc..14b72eb8f6d 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -58,6 +58,7 @@ #include "BLI_fileops_types.h" #include "BLI_fnmatch.h" +#include "BKE_appdir.h" #include "BKE_context.h" #include "BKE_global.h" #include "BKE_main.h" @@ -116,10 +117,12 @@ short ED_fileselect_set_params(SpaceFile *sfile) BLI_strncpy_utf8(params->title, RNA_struct_ui_name(op->type->srna), sizeof(params->title)); - if (RNA_struct_find_property(op->ptr, "filemode")) - params->type = RNA_int_get(op->ptr, "filemode"); - else + if ((prop = RNA_struct_find_property(op->ptr, "filemode"))) { + params->type = RNA_property_int_get(op->ptr, prop); + } + else { params->type = FILE_SPECIAL; + } if (is_filepath && RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) { char name[FILE_MAX]; @@ -157,30 +160,30 @@ short ED_fileselect_set_params(SpaceFile *sfile) params->filter = 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_blender"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? BLENDERFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_BLENDER : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_backup"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? BLENDERFILE_BACKUP : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_BLENDER_BACKUP : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_image"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? IMAGEFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_IMAGE : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_movie"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? MOVIEFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_MOVIE : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_python"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? PYSCRIPTFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_PYSCRIPT : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_font"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FTFONTFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_FTFONT : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_sound"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? SOUNDFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_SOUND : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_text"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? TEXTFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_TEXT : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_folder"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FOLDERFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_FOLDER : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_btx"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? BTXFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_BTX : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_collada"))) - params->filter |= RNA_property_boolean_get(op->ptr, prop) ? COLLADAFILE : 0; + params->filter |= RNA_property_boolean_get(op->ptr, prop) ? FILE_TYPE_COLLADA : 0; if ((prop = RNA_struct_find_property(op->ptr, "filter_glob"))) { RNA_property_string_get(op->ptr, prop, params->filter_glob); - params->filter |= (OPERATORFILE | FOLDERFILE); + params->filter |= (FILE_TYPE_OPERATOR | FILE_TYPE_FOLDER); } else { params->filter_glob[0] = '\0'; @@ -209,12 +212,13 @@ short ED_fileselect_set_params(SpaceFile *sfile) params->flag |= RNA_boolean_get(op->ptr, "active_layer") ? FILE_ACTIVELAY : 0; } - if (RNA_struct_find_property(op->ptr, "display_type")) - params->display = RNA_enum_get(op->ptr, "display_type"); + if ((prop = RNA_struct_find_property(op->ptr, "display_type"))) { + params->display = RNA_property_enum_get(op->ptr, prop); + } if (params->display == FILE_DEFAULTDISPLAY) { if (U.uiflag & USER_SHOW_THUMBNAILS) { - if (params->filter & (IMAGEFILE | MOVIEFILE)) + if (params->filter & (FILE_TYPE_IMAGE | FILE_TYPE_MOVIE)) params->display = FILE_IMGDISPLAY; else params->display = FILE_SHORTDISPLAY; @@ -225,8 +229,10 @@ short ED_fileselect_set_params(SpaceFile *sfile) } if (is_relative_path) { - if (!RNA_struct_property_is_set_ex(op->ptr, "relative_path", false)) { - RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS); + if ((prop = RNA_struct_find_property(op->ptr, "relative_path"))) { + if (!RNA_property_is_set_ex(op->ptr, prop, false)) { + RNA_property_boolean_set(op->ptr, prop, (U.flag & USER_RELPATHS) != 0); + } } } } @@ -253,7 +259,7 @@ short ED_fileselect_set_params(SpaceFile *sfile) BLI_split_dir_part(G.main->name, sfile->params->dir, sizeof(sfile->params->dir)); } else { - const char *doc_path = BLI_getDefaultDocumentFolder(); + const char *doc_path = BKE_appdir_folder_default(); if (doc_path) { BLI_strncpy(sfile->params->dir, doc_path, sizeof(sfile->params->dir)); } @@ -444,8 +450,8 @@ float file_shorten_string(char *string, float w, int front) float file_string_width(const char *str) { - uiStyle *style = UI_GetStyle(); - uiStyleFontSet(&style->widget); + uiStyle *style = UI_style_get(); + UI_fontstyle_set(&style->widget); return BLF_width(style->widget.uifont_id, str, BLF_DRAW_STR_DUMMY_MAX); } @@ -454,13 +460,13 @@ float file_font_pointsize(void) #if 0 float s; char tmp[2] = "X"; - uiStyle *style = UI_GetStyle(); - uiStyleFontSet(&style->widget); + uiStyle *style = UI_style_get(); + UI_fontstyle_set(&style->widget); s = BLF_height(style->widget.uifont_id, tmp); return style->widget.points; #else - uiStyle *style = UI_GetStyle(); - uiStyleFontSet(&style->widget); + uiStyle *style = UI_style_get(); + UI_fontstyle_set(&style->widget); return style->widget.points * UI_DPI_FAC; #endif } @@ -596,15 +602,18 @@ FileLayout *ED_fileselect_get_layout(struct SpaceFile *sfile, ARegion *ar) return sfile->layout; } -void file_change_dir(bContext *C, int checkdir) +void ED_file_change_dir(bContext *C, const bool checkdir) { wmWindowManager *wm = CTX_wm_manager(C); SpaceFile *sfile = CTX_wm_space_file(C); if (sfile->params) { - ED_fileselect_clear(wm, sfile); + /* Clear search string, it is very rare to want to keep that filter while changing dir, + * and usually very annoying to keep it actually! */ + sfile->params->filter_search[0] = '\0'; + if (checkdir && !BLI_is_dir(sfile->params->dir)) { BLI_strncpy(sfile->params->dir, filelist_dir(sfile->files), sizeof(sfile->params->dir)); /* could return but just refresh the current dir */ @@ -616,7 +625,7 @@ void file_change_dir(bContext *C, int checkdir) folderlist_pushdir(sfile->folders_prev, sfile->params->dir); - file_draw_check_cb(C, NULL, NULL); + file_draw_check(C); } } @@ -633,8 +642,9 @@ int file_select_match(struct SpaceFile *sfile, const char *pattern, char *matche */ for (i = 0; i < n; i++) { file = filelist_file(sfile->files, i); - if (fnmatch(pattern, file->relname, 0) == 0) { - file->selflag |= SELECTED_FILE; + /* use same rule as 'FileCheckType.CHECK_FILES' */ + if (S_ISREG(file->type) && (fnmatch(pattern, file->relname, 0) == 0)) { + file->selflag |= FILE_SEL_SELECTED; if (!match) { BLI_strncpy(matched_file, file->relname, FILE_MAX); } @@ -662,10 +672,10 @@ int autocomplete_directory(struct bContext *C, char *str, void *UNUSED(arg_v)) dir = opendir(dirname); if (dir) { - AutoComplete *autocpl = autocomplete_begin(str, FILE_MAX); + AutoComplete *autocpl = UI_autocomplete_begin(str, FILE_MAX); while ((de = readdir(dir)) != NULL) { - if (strcmp(".", de->d_name) == 0 || strcmp("..", de->d_name) == 0) { + if (FILENAME_IS_CURRPAR(de->d_name)) { /* pass */ } else { @@ -676,14 +686,14 @@ int autocomplete_directory(struct bContext *C, char *str, void *UNUSED(arg_v)) if (BLI_stat(path, &status) == 0) { if (S_ISDIR(status.st_mode)) { /* is subdir */ - autocomplete_do_name(autocpl, path); + UI_autocomplete_update_name(autocpl, path); } } } } closedir(dir); - match = autocomplete_end(autocpl, str); + match = UI_autocomplete_end(autocpl, str); if (match) { if (match == AUTOCOMPLETE_FULL_MATCH) { BLI_add_slash(str); @@ -705,17 +715,17 @@ int autocomplete_file(struct bContext *C, char *str, void *UNUSED(arg_v)) /* search if str matches the beginning of name */ if (str[0] && sfile->files) { - AutoComplete *autocpl = autocomplete_begin(str, FILE_MAX); + AutoComplete *autocpl = UI_autocomplete_begin(str, FILE_MAX); int nentries = filelist_numfiles(sfile->files); int i; for (i = 0; i < nentries; ++i) { struct direntry *file = filelist_file(sfile->files, i); if (file && (S_ISREG(file->type) || S_ISDIR(file->type))) { - autocomplete_do_name(autocpl, file->relname); + UI_autocomplete_update_name(autocpl, file->relname); } } - match = autocomplete_end(autocpl, str); + match = UI_autocomplete_end(autocpl, str); } return match; |