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-03-08 16:14:12 +0300
committerAndrea Weikert <elubie@gmx.net>2009-03-08 16:14:12 +0300
commit403b3763a8048f88f8f589167c1f70b876999795 (patch)
treea243f78f3ff9f23cd7d8bec9e7c4567509e2a90b /source/blender/editors/space_file/filesel.c
parentc20b4d661863b62089f0819d1079920bc5f2a62d (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.c109
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