[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19293] branches/blender2.5/blender/source /blender/editors/space_file: 2.5 filebrowser

Andrea Weikert elubie at gmx.net
Sat Mar 14 19:15:28 CET 2009


Revision: 19293
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19293
Author:   elubie
Date:     2009-03-14 19:15:28 +0100 (Sat, 14 Mar 2009)

Log Message:
-----------
2.5 filebrowser
- drawing tweak for background lines
- long and short display now behave the same, only difference is column width now.
TODO still:
- add additional columns (access rights - mode1-mode3 and owner) for non-Windows platforms

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c
    branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
    branches/blender2.5/blender/source/blender/editors/space_file/filelist.c
    branches/blender2.5/blender/source/blender/editors/space_file/filelist.h
    branches/blender2.5/blender/source/blender/editors/space_file/filesel.c
    branches/blender2.5/blender/source/blender/editors/space_file/space_file.c

Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c	2009-03-14 17:39:07 UTC (rev 19292)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c	2009-03-14 18:15:28 UTC (rev 19293)
@@ -450,19 +450,21 @@
 	if (offset<0) offset=0;
 
 	/* alternating flat shade background */
-	for (i=offset; (i <= numfiles); ++i)
+	for (i=0; (i <= layout->rows); ++i)
 	{
-		ED_fileselect_layout_tilepos(layout, i, &sx, &sy);
-		sx = v2d->tot.xmin;
-		sy = v2d->tot.ymax - (sy + layout->tile_border_y);
-		//sy = v2d->tot.ymax - sy;
+		sx = v2d->cur.xmin;
+		sy = v2d->cur.ymax - i*(layout->tile_h+2*layout->tile_border_y) - layout->tile_border_y;
 		
-		if (i % 2) UI_ThemeColor(TH_BACK);
-		else UI_ThemeColorShade(TH_BACK, -7);
-		glRectf(v2d->tot.xmin, sy, v2d->tot.xmax, sy+layout->tile_h+2*layout->tile_border_y);
+		if (i % 2) {
+			UI_ThemeColor(TH_BACK);
+		} else {
+			UI_ThemeColorShade(TH_BACK, -7);
+		}
+		glRectf(v2d->cur.xmin, sy, v2d->cur.xmax, sy+layout->tile_h+2*layout->tile_border_y);
 	}
 	
 	/* vertical column dividers */
+	sx = v2d->tot.xmin;
 	while (sx < ar->v2d.cur.xmax) {
 		sx += (sfile->layout->tile_w+2*sfile->layout->tile_border_x);
 		
@@ -490,12 +492,7 @@
 		} else if (file->flags & ACTIVE) {
 			colorid = TH_HILITE;
 			draw_tile(sx-2, sy-3, layout->tile_w+2, sfile->layout->tile_h+layout->tile_border_y, colorid,0);
-		} else {
-			/*
-			colorid = TH_PANEL;
-			draw_tile(sx, sy, sfile->tile_w, sfile->tile_h, colorid);
-			*/
-		}
+		} 
 
 		spos = sx;
 		file_draw_icon(spos, sy-3, get_file_icon(file), ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH);
@@ -503,14 +500,16 @@
 		
 		UI_ThemeColor4(TH_TEXT);
 		
-		// sw = shorten_filesize(file->size, FILE_SHORTEN_FSIZE_WIDTHONLY);
-		sw = UI_GetStringWidth(G.font, file->size, 0);
-		file_draw_string(spos, sy, file->relname, layout->tile_w - sw - 5, layout->tile_h, FILE_SHORTEN_END);
 		
-		spos += filelist_maxnamelen(sfile->files);
+		sw = UI_GetStringWidth(G.font, file->relname, 0);
+		file_draw_string(spos, sy, file->relname, sw, layout->tile_h, FILE_SHORTEN_END);
+		spos += filelist_column_len(sfile->files, COLUMN_NAME) + 10;
 		if (params->display == FILE_SHOWSHORT) {
-			if (!(file->type & S_IFDIR))
-				file_draw_string(sx + layout->tile_w - layout->tile_border_x - sw, sy, file->size, sw, layout->tile_h, FILE_SHORTEN_END);
+			if (!(file->type & S_IFDIR)) {
+				sw = UI_GetStringWidth(G.font, file->size, 0);
+				spos += filelist_column_len(sfile->files, COLUMN_SIZE) + 10 - sw;
+				file_draw_string(spos, sy, file->size, sw, layout->tile_h, FILE_SHORTEN_END);	
+			}
 		} else {
 #if 0 // XXX TODO: add this for non-windows systems
 			/* rwx rwx rwx */
@@ -531,17 +530,18 @@
 			file_draw_string(spos, sy, file->owner, sw, layout->tile_h);
 #endif
 
-			spos += 50;
+			
 			sw = UI_GetStringWidth(G.font, file->date, 0);
 			file_draw_string(spos, sy, file->date, sw, layout->tile_h, FILE_SHORTEN_END);
+			spos += filelist_column_len(sfile->files, COLUMN_DATE) + 10;
 
-			spos += 100;
 			sw = UI_GetStringWidth(G.font, file->time, 0);
 			file_draw_string(spos, sy, file->time, sw, layout->tile_h, FILE_SHORTEN_END); 
-			
+			spos += filelist_column_len(sfile->files, COLUMN_TIME) + 10;
+
 			if (!(file->type & S_IFDIR)) {
 				sw = UI_GetStringWidth(G.font, file->size, 0);
-				spos += 200-sw;
+				spos += filelist_column_len(sfile->files, COLUMN_SIZE) + 10 - sw;
 				file_draw_string(spos, sy, file->size, sw, layout->tile_h, FILE_SHORTEN_END);
 			}
 		}
@@ -583,9 +583,9 @@
 			}
 			if (fsmenu_is_selected(fsmenu, category, i) ) {
 				UI_ThemeColor(TH_HILITE);
-				/* uiSetRoundBox(15);	
-				 * uiRoundBox(sx, sy - linestep, sx + bmwidth, sy, 4.0f); */
-				glRectf(ar->v2d.cur.xmin, sy-linestep, ar->v2d.cur.xmax + 2*TILE_BORDER_X, sy);
+				//uiSetRoundBox(15);	
+				uiRoundBox(sx, sy - linestep, ar->v2d.cur.xmax - TILE_BORDER_X, sy, 4.0f);
+				// glRectf(ar->v2d.cur.xmin, sy-linestep, ar->v2d.cur.xmax + 2*TILE_BORDER_X, sy);
 				UI_ThemeColor(TH_TEXT);
 			} else {
 				UI_ThemeColor(TH_TEXT_HI);

Modified: branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c	2009-03-14 17:39:07 UTC (rev 19292)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c	2009-03-14 18:15:28 UTC (rev 19293)
@@ -117,17 +117,19 @@
 	}
 }
 
-static void file_select(SpaceFile* sfile, FileSelectParams* params, ARegion* ar, const rcti* rect, short val)
+static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short val)
 {
 	int first_file = -1;
 	int last_file = -1;
 	int act_file;
 	short selecting = (val == LEFTMOUSE);
+	FileSelectParams *params = ED_fileselect_get_params(sfile);
+	FileLayout *layout = ED_fileselect_get_layout(sfile, ar);
 
 	int numfiles = filelist_numfiles(sfile->files);
 
 	params->selstate = NOTACTIVE;
-	if  ( (params->display == FILE_IMGDISPLAY) || (params->display == FILE_LONGDISPLAY) ) {
+	if  ( (layout->flag == FILE_LAYOUT_HOR) ) {
 		first_file = find_file_mouse_hor(sfile, ar, rect->xmin, rect->ymax);
 		last_file = find_file_mouse_hor(sfile, ar, rect->xmax, rect->ymin);
 	} else {
@@ -250,7 +252,7 @@
 
 		/* single select, deselect all selected first */
 		file_deselect_all(sfile);
-		file_select(sfile, sfile->params, ar, &rect, val );
+		file_select(sfile, ar, &rect, val );
 		WM_event_add_notifier(C, NC_WINDOW, NULL);
 	}
 	return OPERATOR_FINISHED;
@@ -446,20 +448,22 @@
 int file_hilight_set(SpaceFile *sfile, ARegion *ar, int mx, int my)
 {
 	FileSelectParams* params;
+	FileLayout* layout;
 	int numfiles, actfile;
 	
 	if(sfile==NULL || sfile->files==NULL) return 0;
 	
 	numfiles = filelist_numfiles(sfile->files);
 	params = ED_fileselect_get_params(sfile);
-	
-	if ( (params->display == FILE_IMGDISPLAY) || (params->display == FILE_LONGDISPLAY)) {
+	layout = ED_fileselect_get_layout(sfile, ar);
+
+	if ( (layout->flag == FILE_LAYOUT_HOR)) {
 		actfile = find_file_mouse_hor(sfile, ar, mx , my);
 	} else {
 		actfile = find_file_mouse_vert(sfile, ar, mx, my);
 	}
 	
-	if (actfile >= 0 && actfile < numfiles ) {
+	if (params && (actfile >= 0) && (actfile < numfiles) ) {
 		params->active_file=actfile;
 		return 1;
 	}

Modified: branches/blender2.5/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/filelist.c	2009-03-14 17:39:07 UTC (rev 19292)
+++ branches/blender2.5/blender/source/blender/editors/space_file/filelist.c	2009-03-14 18:15:28 UTC (rev 19293)
@@ -120,7 +120,7 @@
 	short hide_dot;
 	unsigned int filter;
 	short changed;
-	int maxnamelen;
+	int columns[MAX_FILE_COLUMN];
 	ListBase loadimages;
 	ListBase threads;
 } FileList;
@@ -659,9 +659,9 @@
 	filelist->filter = filter;
 }
 
-int	filelist_maxnamelen(struct FileList* filelist)
+int	filelist_column_len(struct FileList* filelist, FileListColumns column)
 {
-	return filelist->maxnamelen;
+	return filelist->columns[column];
 }
 
 void filelist_readdir(struct FileList* filelist)
@@ -688,13 +688,31 @@
 		BLI_init_threads(&filelist->threads, exec_loadimages, 2);
 	}
 
-	filelist->maxnamelen = 0;
+	for (i=0; i<MAX_FILE_COLUMN; ++i) {
+		filelist->columns[i] = 0;
+	}
+
 	for (i=0; (i < filelist->numfiles); ++i)
 	{
 		struct direntry* file = filelist_file(filelist, i);	
 		if (file) {
-			int len = UI_GetStringWidth(G.font, file->relname,0)+UI_GetStringWidth(G.font, file->size,0);
-			if (len > filelist->maxnamelen) filelist->maxnamelen = len;
+			int len;
+			len = UI_GetStringWidth(G.font, file->relname,0);
+			if (len > filelist->columns[COLUMN_NAME]) filelist->columns[COLUMN_NAME] = len;
+			len = UI_GetStringWidth(G.font, file->date,0);
+			if (len > filelist->columns[COLUMN_DATE]) filelist->columns[COLUMN_DATE] = len;
+			len = UI_GetStringWidth(G.font, file->time,0);
+			if (len > filelist->columns[COLUMN_TIME]) filelist->columns[COLUMN_TIME] = len;
+			len = UI_GetStringWidth(G.font, file->size,0);
+			if (len > filelist->columns[COLUMN_SIZE]) filelist->columns[COLUMN_SIZE] = len;
+			len = UI_GetStringWidth(G.font, file->mode1,0);
+			if (len > filelist->columns[COLUMN_MODE1]) filelist->columns[COLUMN_MODE1] = len;
+			len = UI_GetStringWidth(G.font, file->mode2,0);
+			if (len > filelist->columns[COLUMN_MODE2]) filelist->columns[COLUMN_MODE2] = len;
+			len = UI_GetStringWidth(G.font, file->mode3,0);
+			if (len > filelist->columns[COLUMN_MODE3]) filelist->columns[COLUMN_MODE3] = len;
+			len = UI_GetStringWidth(G.font, file->owner,0);
+			if (len > filelist->columns[COLUMN_OWNER]) filelist->columns[COLUMN_OWNER] = len;
 		}
 	}
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_file/filelist.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/filelist.h	2009-03-14 17:39:07 UTC (rev 19292)
+++ branches/blender2.5/blender/source/blender/editors/space_file/filelist.h	2009-03-14 18:15:28 UTC (rev 19293)
@@ -42,6 +42,19 @@
 struct BlendHandle;
 struct Scene;
 
+#define MAX_FILE_COLUMN 8
+
+typedef enum FileListColumns {
+	COLUMN_NAME = 0,
+	COLUMN_DATE,
+	COLUMN_TIME,
+	COLUMN_SIZE,
+	COLUMN_MODE1,
+	COLUMN_MODE2,
+	COLUMN_MODE3,
+	COLUMN_OWNER
+} FileListColumns;
+
 struct FileList *	filelist_new();
 void				filelist_init_icons();
 void				filelist_free_icons();
@@ -65,7 +78,7 @@
 struct ImBuf *		filelist_geticon(struct FileList* filelist, int index);
 short				filelist_changed(struct FileList* filelist);
 void				filelist_readdir(struct FileList* filelist);
-int					filelist_maxnamelen(struct FileList* filelist);
+int					filelist_column_len(struct FileList* filelist, FileListColumns column);
 
 int					filelist_empty(struct FileList* filelist);
 void				filelist_parent(struct FileList* filelist);

Modified: branches/blender2.5/blender/source/blender/editors/space_file/filesel.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_file/filesel.c	2009-03-14 17:39:07 UTC (rev 19292)
+++ branches/blender2.5/blender/source/blender/editors/space_file/filesel.c	2009-03-14 18:15:28 UTC (rev 19293)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list