[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28657] trunk/blender/source/blender: bugfix [#22276] filemanager autocompleate based on current path
Campbell Barton
ideasman42 at gmail.com
Sat May 8 01:34:03 CEST 2010
Revision: 28657
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28657
Author: campbellbarton
Date: 2010-05-08 01:34:03 +0200 (Sat, 08 May 2010)
Log Message:
-----------
bugfix [#22276] filemanager autocompleate based on current path
also added autocomp to filename in fileselector
Modified Paths:
--------------
trunk/blender/source/blender/blenlib/intern/bpath.c
trunk/blender/source/blender/editors/space_file/file_draw.c
trunk/blender/source/blender/editors/space_file/file_intern.h
trunk/blender/source/blender/editors/space_file/file_ops.c
trunk/blender/source/blender/editors/space_file/filesel.c
Modified: trunk/blender/source/blender/blenlib/intern/bpath.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/bpath.c 2010-05-07 22:04:48 UTC (rev 28656)
+++ trunk/blender/source/blender/blenlib/intern/bpath.c 2010-05-07 23:34:03 UTC (rev 28657)
@@ -622,7 +622,7 @@
while ((de = readdir(dir)) != NULL) {
- if (strncmp(".", de->d_name, 2)==0 || strncmp("..", de->d_name, 3)==0)
+ if (strcmp(".", de->d_name)==0 || strcmp("..", de->d_name)==0)
continue;
BLI_join_dirfile(path, dirname, de->d_name);
Modified: trunk/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_draw.c 2010-05-07 22:04:48 UTC (rev 28656)
+++ trunk/blender/source/blender/editors/space_file/file_draw.c 2010-05-07 23:34:03 UTC (rev 28657)
@@ -180,10 +180,11 @@
params->dir, 0.0, (float)FILE_MAX-1, 0, 0,
"File path.");
uiButSetCompleteFunc(but, autocomplete_directory, NULL);
- uiDefBut(block, TEX, B_FS_FILENAME, "",
+ but = uiDefBut(block, TEX, B_FS_FILENAME, "",
min_x, line2_y, line2_w-chan_offs, btn_h,
params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0,
"File name.");
+ uiButSetCompleteFunc(but, autocomplete_file, NULL);
}
/* Filename number increment / decrement buttons. */
Modified: trunk/blender/source/blender/editors/space_file/file_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_intern.h 2010-05-07 22:04:48 UTC (rev 28656)
+++ trunk/blender/source/blender/editors/space_file/file_intern.h 2010-05-07 23:34:03 UTC (rev 28657)
@@ -90,6 +90,7 @@
void file_change_dir(bContext *C, int checkdir);
int file_select_match(struct SpaceFile *sfile, const char *pattern);
void autocomplete_directory(struct bContext *C, char *str, void *arg_v);
+void autocomplete_file(struct bContext *C, char *str, void *arg_v);
/* file_panels.c */
void file_panels_register(struct ARegionType *art);
Modified: trunk/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_ops.c 2010-05-07 22:04:48 UTC (rev 28656)
+++ trunk/blender/source/blender/editors/space_file/file_ops.c 2010-05-07 23:34:03 UTC (rev 28657)
@@ -816,26 +816,15 @@
int file_directory_exec(bContext *C, wmOperator *unused)
{
- char tmpstr[FILE_MAX];
-
SpaceFile *sfile= CTX_wm_space_file(C);
if(sfile->params) {
if ( sfile->params->dir[0] == '~' ) {
- if (sfile->params->dir[1] == '\0') {
- BLI_strncpy(sfile->params->dir, BLI_gethome(), sizeof(sfile->params->dir) );
- } else {
- /* replace ~ with home */
- char homestr[FILE_MAX];
- char *d = &sfile->params->dir[1];
-
- while ( (*d == '\\') || (*d == '/') )
- d++;
- BLI_strncpy(homestr, BLI_gethome(), FILE_MAX);
- BLI_join_dirfile(tmpstr, homestr, d);
- BLI_strncpy(sfile->params->dir, tmpstr, sizeof(sfile->params->dir));
- }
+ char tmpstr[sizeof(sfile->params->dir)-1];
+ strncpy(tmpstr, sfile->params->dir+1, sizeof(tmpstr));
+ BLI_join_dirfile(sfile->params->dir, BLI_gethome(), tmpstr);
}
+
#ifdef WIN32
if (sfile->params->dir[0] == '\0')
get_default_root(sfile->params->dir);
Modified: trunk/blender/source/blender/editors/space_file/filesel.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filesel.c 2010-05-07 22:04:48 UTC (rev 28656)
+++ trunk/blender/source/blender/editors/space_file/filesel.c 2010-05-07 23:34:03 UTC (rev 28657)
@@ -42,6 +42,15 @@
#include <sys/times.h>
#endif
+/* path/file handeling stuff */
+#ifndef WIN32
+ #include <dirent.h>
+ #include <unistd.h>
+#else
+ #include <io.h>
+ #include "BLI_winstuff.h"
+#endif
+
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
#include "DNA_userdef_types.h"
@@ -432,33 +441,70 @@
return match;
}
-
void autocomplete_directory(struct bContext *C, char *str, void *arg_v)
{
- char tmp[FILE_MAX];
SpaceFile *sfile= CTX_wm_space_file(C);
/* search if str matches the beginning of name */
if(str[0] && sfile->files) {
+ char dirname[FILE_MAX];
+
+ DIR *dir;
+ struct dirent *de;
+
+ BLI_split_dirfile(str, dirname, NULL);
+
+ dir = opendir(dirname);
+
+ if(dir) {
+ AutoComplete *autocpl= autocomplete_begin(str, FILE_MAX);
+
+ while ((de = readdir(dir)) != NULL) {
+ if (strcmp(".", de->d_name)==0 || strcmp("..", de->d_name)==0) {
+ /* pass */
+ }
+ else {
+ char path[FILE_MAX];
+ struct stat status;
+
+ BLI_join_dirfile(path, dirname, de->d_name);
+
+ if (stat(path, &status) == 0) {
+ if (S_ISDIR(status.st_mode)) { /* is subdir */
+ autocomplete_do_name(autocpl, path);
+ }
+ }
+ }
+ }
+ closedir(dir);
+
+ autocomplete_end(autocpl, str);
+ if (BLI_exists(str)) {
+ BLI_add_slash(str);
+ } else {
+ BLI_make_exist(str);
+ }
+ }
+ }
+}
+
+void autocomplete_file(struct bContext *C, char *str, void *arg_v)
+{
+ SpaceFile *sfile= CTX_wm_space_file(C);
+
+ /* search if str matches the beginning of name */
+ if(str[0] && sfile->files) {
AutoComplete *autocpl= 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);
- const char* dir = filelist_dir(sfile->files);
- if (file && S_ISDIR(file->type)) {
- // BLI_make_file_string(G.sce, tmp, dir, file->relname);
- BLI_join_dirfile(tmp, dir, file->relname);
- autocomplete_do_name(autocpl,tmp);
+ if (file && S_ISREG(file->type)) {
+ autocomplete_do_name(autocpl, file->relname);
}
}
autocomplete_end(autocpl, str);
- if (BLI_exists(str)) {
- BLI_add_slash(str);
- } else {
- BLI_make_exist(str);
- }
}
}
More information about the Bf-blender-cvs
mailing list