diff options
author | Andrea Weikert <elubie@gmx.net> | 2009-03-08 16:14:12 +0300 |
---|---|---|
committer | Andrea Weikert <elubie@gmx.net> | 2009-03-08 16:14:12 +0300 |
commit | 403b3763a8048f88f8f589167c1f70b876999795 (patch) | |
tree | a243f78f3ff9f23cd7d8bec9e7c4567509e2a90b /source/blender/editors/space_file/filesel.c | |
parent | c20b4d661863b62089f0819d1079920bc5f2a62d (diff) |
2.5 filebrowser
still WIP commit, so Matt can do UI design
- cleaned up filebrowser drawing and selection
- selection bugfix
Diffstat (limited to 'source/blender/editors/space_file/filesel.c')
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 109 |
1 files changed, 108 insertions, 1 deletions
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index f2eb7ad58ea..f4f512ff8c2 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -58,6 +58,8 @@ #include "BKE_screen.h" #include "BKE_global.h" +#include "DNA_userdef_types.h" + #include "ED_screen.h" #include "ED_util.h" #include "ED_fileselect.h" @@ -79,7 +81,7 @@ FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile) { if (!sfile->params) { - ED_fileselect_set_params(sfile, FILE_UNIX, "", "/", 0, 0, 0); + ED_fileselect_set_params(sfile, FILE_UNIX, "", "/", 0, FILE_SHORTDISPLAY, 0); } return sfile->params; } @@ -132,3 +134,108 @@ void ED_fileselect_reset_params(SpaceFile *sfile) sfile->params->flag = 0; sfile->params->title[0] = '\0'; } + + +int ED_fileselect_layout_offset(FileLayout* layout, int x, int y) +{ + int offsetx, offsety; + int active_file; + + offsetx = (x)/(layout->tile_w + 2*layout->tile_border_x); + offsety = (y)/(layout->tile_h + 2*layout->tile_border_y); + + if (layout->flag & FILE_LAYOUT_HOR) + active_file = layout->rows*offsetx + offsety; + else + active_file = offsetx + layout->columns*offsety; + printf("OFFSET %d %d %d %d %d\n", x,y, offsetx, offsety, active_file); + return active_file; +} + +void ED_fileselect_layout_tilepos(FileLayout* layout, int tile, short *x, short *y) +{ + if (layout->flag == FILE_LAYOUT_HOR) { + *x = layout->tile_border_x + (tile/layout->rows)*(layout->tile_w+2*layout->tile_border_x); + *y = layout->tile_border_y + (tile%layout->rows)*(layout->tile_h+2*layout->tile_border_y); + } else { + *x = layout->tile_border_x + ((tile)%layout->columns)*(layout->tile_w+2*layout->tile_border_x); + *y = layout->tile_border_y + ((tile)/layout->columns)*(layout->tile_h+2*layout->tile_border_y); + } +} + + +void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar) +{ + FileSelectParams* params = ED_fileselect_get_params(sfile); + View2D *v2d= &ar->v2d; + int width=0, height=0; + int rows, columns; + int i; + int maxlen = 0; + int numfiles = filelist_numfiles(sfile->files); + + if (sfile->layout == 0) { + sfile->layout = MEM_callocN(sizeof(struct FileLayout), "file_layout"); + } + + if (params->display == FILE_IMGDISPLAY) { + sfile->layout->prv_w = 96; + sfile->layout->prv_h = 96; + sfile->layout->tile_border_x = 4; + sfile->layout->tile_border_y = 4; + sfile->layout->prv_border_x = 4; + sfile->layout->prv_border_y = 4; + sfile->layout->tile_w = sfile->layout->prv_w + 2*sfile->layout->prv_border_x; + sfile->layout->tile_h = sfile->layout->prv_h + 4*sfile->layout->prv_border_y + U.fontsize*3/2; + sfile->layout->width= (v2d->cur.xmax - v2d->cur.xmin - 2*sfile->layout->tile_border_x); + sfile->layout->columns= sfile->layout->width / (sfile->layout->tile_w + 2*sfile->layout->tile_border_x); + if(sfile->layout->columns) + sfile->layout->rows= numfiles/sfile->layout->columns + 1; // XXX dirty, modulo is zero + else + sfile->layout->rows= numfiles + 1; // XXX dirty, modulo is zero + sfile->layout->height= sfile->layout->rows*(sfile->layout->tile_h+2*sfile->layout->tile_border_y) + sfile->layout->tile_border_y*2; + sfile->layout->flag = FILE_LAYOUT_VER; + } else if (params->display == FILE_SHORTDISPLAY) { + sfile->layout->prv_w = 0; + sfile->layout->prv_h = 0; + sfile->layout->tile_border_x = 8; + sfile->layout->tile_border_y = 2; + sfile->layout->prv_border_x = 0; + sfile->layout->prv_border_y = 0; + sfile->layout->tile_w = 240; + sfile->layout->tile_h = U.fontsize*3/2; + sfile->layout->height= v2d->cur.ymax - v2d->cur.ymin; + sfile->layout->rows = sfile->layout->height / (sfile->layout->tile_h + 2*sfile->layout->tile_border_y);; + + maxlen = filelist_maxnamelen(sfile->files); + sfile->layout->tile_w = maxlen + 100; + if(sfile->layout->rows > 0) + sfile->layout->columns = numfiles/sfile->layout->rows + 1; // XXX dirty, modulo is zero + else + sfile->layout->columns = numfiles + 1; // XXX dirty, modulo is zero + sfile->layout->width = sfile->layout->columns * (sfile->layout->tile_w + 2*sfile->layout->tile_border_x) + sfile->layout->tile_border_x*2; + sfile->layout->flag = FILE_LAYOUT_HOR; + } else { + sfile->layout->prv_w = 0; + sfile->layout->prv_h = 0; + sfile->layout->tile_border_x = 8; + sfile->layout->tile_border_y = 1; + sfile->layout->prv_border_x = 0; + sfile->layout->prv_border_y = 0; + sfile->layout->tile_w = v2d->cur.xmax - v2d->cur.xmin - 2*sfile->layout->tile_border_x; + sfile->layout->tile_h = U.fontsize*3/2; + sfile->layout->width= (v2d->cur.xmax - v2d->cur.xmin + 2*sfile->layout->tile_border_x); + sfile->layout->rows= numfiles; + sfile->layout->columns= 1; + sfile->layout->height= sfile->layout->rows*(sfile->layout->tile_h+2*sfile->layout->tile_border_y) + sfile->layout->tile_border_y*2; + sfile->layout->flag = FILE_LAYOUT_VER; + } +} + +FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar) +{ + if (!sfile->layout) { + ED_fileselect_init_layout(sfile, ar); + } + return sfile->layout; +}
\ No newline at end of file |