Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Weikert <elubie@gmx.net>2009-07-27 23:06:33 +0400
committerAndrea Weikert <elubie@gmx.net>2009-07-27 23:06:33 +0400
commita869bdc44e8591b8e45c4aa3b0fac43f5ae55a26 (patch)
tree5099a76c4bb17aba0a384504c0b94e8ecc16ae87 /source/blender/editors/space_file
parenteb40d8ef0f49873a7f262af367decb7e652e7618 (diff)
2.5 file browser
New: * added filter and display to some operator properties. Now file browser opens showing only .blend files and folders on file->open and on image->open changes to image display and only shows images and movies. Fixes: * fixed stupid removal of wrong prototype in last commit * fixed a few warnings
Diffstat (limited to 'source/blender/editors/space_file')
-rw-r--r--source/blender/editors/space_file/file_panels.c5
-rw-r--r--source/blender/editors/space_file/filelist.c3
-rw-r--r--source/blender/editors/space_file/filelist.h2
-rw-r--r--source/blender/editors/space_file/filesel.c64
-rw-r--r--source/blender/editors/space_file/fsmenu.c4
-rw-r--r--source/blender/editors/space_file/space_file.c2
6 files changed, 51 insertions, 29 deletions
diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c
index 96366b9f82b..351d1619508 100644
--- a/source/blender/editors/space_file/file_panels.c
+++ b/source/blender/editors/space_file/file_panels.c
@@ -121,7 +121,10 @@ static void file_panel_operator(const bContext *C, Panel *pa)
continue;
if(strcmp(RNA_property_identifier(prop), "filename") == 0)
continue;
-
+ if(strcmp(RNA_property_identifier(prop), "display") == 0)
+ continue;
+ if(strncmp(RNA_property_identifier(prop), "filter", 6) == 0)
+ continue;
uiItemFullR(pa->layout, NULL, 0, op->ptr, prop, -1, 0, 0, 0, 0);
}
RNA_STRUCT_END;
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 60a37aac9bd..7ebc8c4338f 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -903,9 +903,6 @@ void filelist_swapselect(struct FileList* filelist)
void filelist_sort(struct FileList* filelist, short sort)
{
- struct direntry *file;
- int num;/* , act= 0; */
-
switch(sort) {
case FILE_SORT_ALPHA:
qsort(filelist->filelist, filelist->numfiles, sizeof(struct direntry), compare_name);
diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h
index 785e40d145c..dd3c2c766c1 100644
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@ -54,7 +54,7 @@ void filelist_sort(struct FileList* filelist, short sort);
int filelist_numfiles(struct FileList* filelist);
const char * filelist_dir(struct FileList* filelist);
void filelist_setdir(struct FileList* filelist, const char *dir);
-void filelist_end_edit(struct FileList* filelist, int index);
+struct direntry * filelist_file(struct FileList* filelist, int index);
void filelist_hidedot(struct FileList* filelist, short hide);
void filelist_setfilter(struct FileList* filelist, unsigned int filter);
void filelist_filter(struct FileList* filelist);
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index bd271c6fb4b..6263f9fe57f 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -73,6 +73,8 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "RNA_access.h"
+
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -95,41 +97,60 @@ static int fnmatch(const char *pattern, const char *string, int flags)
FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile)
{
if (!sfile->params) {
- ED_fileselect_set_params(sfile, "", NULL, "/", 0, FILE_SHORTDISPLAY, 0, FILE_SORT_ALPHA);
+ ED_fileselect_set_params(sfile);
}
return sfile->params;
}
-short ED_fileselect_set_params(SpaceFile *sfile, const char *title, const char *last_dir, const char *path,
- short flag, short display, short filter, short sort)
+short ED_fileselect_set_params(SpaceFile *sfile)
{
char name[FILE_MAX], dir[FILE_MAX], file[FILE_MAX];
FileSelectParams *params;
+ wmOperator *op = sfile->op;
+ /* create new parameters if necessary */
if (!sfile->params) {
sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams");
+ /* set path to most recently opened .blend */
+ BLI_strncpy(sfile->params->dir, G.sce, sizeof(sfile->params->dir));
+ BLI_split_dirfile(G.sce, dir, file);
+ BLI_strncpy(sfile->params->file, file, sizeof(sfile->params->file));
+ BLI_make_file_string(G.sce, sfile->params->dir, dir, ""); /* XXX needed ? - also solve G.sce */
}
params = sfile->params;
- params->flag = flag;
- params->display = display;
- params->filter = filter;
- params->sort = sort;
-
- BLI_strncpy(params->title, title, sizeof(params->title));
-
- if(last_dir){
- BLI_strncpy(params->dir, last_dir, sizeof(params->dir));
- }
- else {
- BLI_strncpy(name, path, sizeof(name));
- BLI_convertstringcode(name, G.sce);
-
- BLI_split_dirfile(name, dir, file);
- BLI_strncpy(params->file, file, sizeof(params->file));
- BLI_strncpy(params->dir, dir, sizeof(params->dir));
- BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */
+ /* set the parameters from the operator, if it exists */
+ if (op) {
+ BLI_strncpy(params->title, op->type->name, sizeof(params->title));
+ params->filter = 0;
+ params->filter |= RNA_boolean_get(op->ptr, "filter_folder") ? FOLDERFILE : 0;
+ params->filter |= RNA_boolean_get(op->ptr, "filter_blender") ? BLENDERFILE : 0;
+ params->filter |= RNA_boolean_get(op->ptr, "filter_image") ? IMAGEFILE : 0;
+ params->filter |= RNA_boolean_get(op->ptr, "filter_movie") ? MOVIEFILE : 0;
+ if (params->filter != 0)
+ params->flag |= FILE_FILTER;
+
+ if (RNA_property_is_set(op->ptr, "display")) {
+ params->display= RNA_int_get(op->ptr, "display");
+ } else {
+ params->display = FILE_SHORTDISPLAY;
+ }
+
+ /* if operator has path set, use it, otherwise keep the last */
+ if (RNA_property_is_set(op->ptr, "filename")) {
+ RNA_string_get(op->ptr, "filename", name);
+ BLI_convertstringcode(name, G.sce);
+ BLI_split_dirfile(name, dir, file);
+ BLI_strncpy(params->file, file, sizeof(params->file));
+ BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */
+ }
+ } else {
+ /* default values, if no operator */
+ params->flag = 0;
+ params->display = FILE_SHORTDISPLAY;
+ params->filter = 0;
+ params->sort = FILE_SORT_ALPHA;
}
return 1;
@@ -144,7 +165,6 @@ void ED_fileselect_reset_params(SpaceFile *sfile)
int ED_fileselect_layout_numfiles(FileLayout* layout, struct ARegion *ar)
{
int numfiles;
- short width, height;
if (layout->flag & FILE_LAYOUT_HOR) {
short width = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*layout->tile_border_x;
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index a87ad4c4fd8..c67a9e7a0d5 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -310,7 +310,9 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename)
if (line[len-1] == '\n') {
line[len-1] = '\0';
}
- fsmenu_insert_entry(fsmenu, category, line, 0, 1);
+ if (BLI_exist(line)) {
+ fsmenu_insert_entry(fsmenu, category, line, 0, 1);
+ }
}
}
}
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index fdc3a927c5e..a03026d0184 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -195,11 +195,11 @@ static void file_refresh(const bContext *C, ScrArea *sa)
params->active_file = -1; // added this so it opens nicer (ton)
}
filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT);
+ filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0);
if (filelist_empty(sfile->files))
{
filelist_readdir(sfile->files);
}
- filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0);
if(params->sort!=FILE_SORT_NONE) filelist_sort(sfile->files, params->sort);
if (sfile->layout) sfile->layout->dirty= 1;