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

Andrea Weikert elubie at gmx.net
Wed Mar 11 00:14:41 CET 2009


Revision: 19249
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19249
Author:   elubie
Date:     2009-03-11 00:14:41 +0100 (Wed, 11 Mar 2009)

Log Message:
-----------
2.5 filebrowser
(WIP commit)
- added categories SYSTEM, BOOKMARKS and RECENT to left panel (recent files not filled yet)
- selection for bookmarks now works by storing draw position, might do that for the file list too
- removed fsmenu button and Bookmark button from UI region

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/fsmenu.c
    branches/blender2.5/blender/source/blender/editors/space_file/fsmenu.h
    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-10 18:10:24 UTC (rev 19248)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_draw.c	2009-03-10 23:14:41 UTC (rev 19249)
@@ -36,6 +36,7 @@
 
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
+#include "BMF_Api.h"
 
 #include "BKE_colortools.h"
 #include "BKE_context.h"
@@ -88,6 +89,9 @@
 	B_FS_PARENT,
 } eFile_ButEvents;
 
+/* XXX very bad, need to check font code */
+static gFontsize=12;
+
 static void do_file_buttons(bContext *C, void *arg, int event)
 {
 	switch(event) {
@@ -114,8 +118,6 @@
 	char *menu;
 	float slen;
 	float button_width = 20.0f;
-	float fsmenubut_width = 0.0f;
-	float bookmarkbut_width = button_width;
 
 	int filebuty1, filebuty2;
 
@@ -146,15 +148,8 @@
 		loadbutton= 0;
 	}
 
-	/* XXX to channel region */
-	menu= fsmenu_build_menu();
-
-	if (menu[0]&& (params->type != FILE_MAIN)) {
-		fsmenubut_width = button_width;
-	}
-
-	uiDefBut(block, TEX, 0 /* XXX B_FS_FILENAME */,"",	xmin+bookmarkbut_width+2, filebuty1, xmax-xmin-loadbutton-bookmarkbut_width-4, 21, params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
-	uiDefBut(block, TEX, 0 /* XXX B_FS_DIRNAME */,"",	xmin+fsmenubut_width+2, filebuty2, xmax-xmin-loadbutton-fsmenubut_width-4, 21, params->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
+	uiDefBut(block, TEX, 0 /* XXX B_FS_FILENAME */,"",	xmin+2, filebuty1, xmax-xmin-loadbutton-4, 21, params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
+	uiDefBut(block, TEX, 0 /* XXX B_FS_DIRNAME */,"",	xmin+2, filebuty2, xmax-xmin-loadbutton-4, 21, params->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
 	
 	if(loadbutton) {
 		uiSetCurFont(block, UI_HELV);
@@ -162,6 +157,7 @@
 		uiDefBut(block, BUT, B_FS_CANCEL, "Cancel",		xmax-loadbutton, filebuty1, loadbutton, 21, params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
 	}
 
+#if 0
 	/* menu[0] = NULL happens when no .Bfs is there, and first time browse
 	   disallow external directory browsing for databrowse */
 
@@ -171,7 +167,9 @@
 	}
 
 	MEM_freeN(menu);
+#endif
 
+
 	uiEndBlock(C, block);
 	uiDrawBlock(C, block);
 }
@@ -192,24 +190,49 @@
 	uiRoundBox(sx, sy - height, sx + width, sy, 6);
 }
 
-static float shorten_string(char* string, float w)
+#define FILE_SHORTEN_END 0
+#define FILE_SHORTEN_FRONT 1
+
+
+static float shorten_string(char* string, float w, int flag)
 {	
+	char temp[FILE_MAX];
 	short shortened = 0;
 	float sw = 0;
-	
+	float pad = 0;
+
 	sw = UI_GetStringWidth(G.font, string,0);
-	while (sw>w) {
-		int slen = strlen(string);
-		string[slen-1] = '\0';
-		sw = UI_GetStringWidth(G.font, string,0);
-		shortened = 1;
-	}
-	if (shortened) {
-		int slen = strlen(string);
-		if (slen > 3) {
-			BLI_strncpy(string+slen-3, "...", 4);				
+	if (flag == FILE_SHORTEN_FRONT) {
+		char *s = string;
+		BLI_strncpy(temp, "...", 4);
+		pad = UI_GetStringWidth(G.font, temp,0);
+		while (s && (sw+pad>w)) {
+			s++;
+			sw = UI_GetStringWidth(G.font, s,0);
+			shortened = 1;
 		}
+		if (shortened) {
+			int slen = strlen(s);			
+			BLI_strncpy(temp+3, s, slen+1);
+			temp[slen+4] = '\0';
+			BLI_strncpy(string, temp, slen+4);
+		}
+	} else {
+		char *s = string;
+		while (sw>w) {
+			int slen = strlen(string);
+			string[slen-1] = '\0';
+			sw = UI_GetStringWidth(G.font, s,0);
+			shortened = 1;
+		}
+		if (shortened) {
+			int slen = strlen(string);
+			if (slen > 3) {
+				BLI_strncpy(string+slen-3, "...", 4);				
+			}
+		}
 	}
+	
 	return sw;
 }
 
@@ -244,7 +267,7 @@
 	UI_icon_draw_aspect_blended(x, y, icon, 1.f, blend);
 }
 
-static void file_draw_string(short sx, short sy, char* string, short width, short height)
+static void file_draw_string(short sx, short sy, char* string, short width, short height, int flag)
 {
 	short soffs;
 	char fname[FILE_MAXFILE];
@@ -252,7 +275,7 @@
 	float x,y;
 
 	BLI_strncpy(fname,string, FILE_MAXFILE);
-	sw = shorten_string(fname, width );
+	sw = shorten_string(fname, width, flag );
 	soffs = (width - sw) / 2;
 	x = (float)(sx);
 	y = (float)(sy-height);
@@ -402,7 +425,7 @@
 				}
 			}
 		}
-		file_draw_string(sx + layout->prv_border_x, sy+4, file->relname, layout->tile_w, layout->tile_h);
+		file_draw_string(sx + layout->prv_border_x, sy+4, file->relname, layout->tile_w, layout->tile_h, FILE_SHORTEN_END);
 
 		if (!sfile->loadimage_timer)
 			sfile->loadimage_timer= WM_event_add_window_timer(CTX_wm_window(C), TIMER1, 1.0/30.0);	/* max 30 frames/sec. */
@@ -493,7 +516,7 @@
 		UI_ThemeColor4(TH_TEXT);
 		
 		sw = UI_GetStringWidth(G.font, file->size, 0);
-		file_draw_string(spos, sy, file->relname, layout->tile_w - sw - 5, layout->tile_h);
+		file_draw_string(spos, sy, file->relname, layout->tile_w - sw - 5, layout->tile_h, FILE_SHORTEN_END);
 		
 		spos += filelist_maxnamelen(sfile->files);
 		if (params->display != FILE_SHOWSHORT) {
@@ -518,43 +541,44 @@
 
 			spos += 50;
 			sw = UI_GetStringWidth(G.font, file->date, 0);
-			file_draw_string(spos, sy, file->date, sw, layout->tile_h);
+			file_draw_string(spos, sy, file->date, sw, layout->tile_h, FILE_SHORTEN_END);
 
 			spos += 100;
 			sw = UI_GetStringWidth(G.font, file->time, 0);
-			file_draw_string(spos, sy, file->time, sw, layout->tile_h); 
+			file_draw_string(spos, sy, file->time, sw, layout->tile_h, FILE_SHORTEN_END); 
 			
 			sw = UI_GetStringWidth(G.font, file->size, 0);
 			spos += 200-sw;
-			file_draw_string(spos, sy, file->size, sw, layout->tile_h);
+			file_draw_string(spos, sy, file->size, sw, layout->tile_h, FILE_SHORTEN_END);
 		} else {
-			file_draw_string(sx + layout->tile_w - 2*layout->tile_border_x - sw - 4, sy, file->size, layout->tile_w - layout->tile_border_x - sw - 5, layout->tile_h);
+			file_draw_string(sx + layout->tile_w - 2*layout->tile_border_x - sw - 4, sy, file->size, layout->tile_w - layout->tile_border_x - sw - 5, layout->tile_h, FILE_SHORTEN_END);
 		}
 	}
 }
 
-void file_draw_fsmenu(const bContext *C, ARegion *ar)
+static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCategory category, const char* category_name, short *starty)
 {
 	SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
 	FileSelectParams* params = ED_fileselect_get_params(sfile);
 	char bookmark[FILE_MAX];
-	int nentries = fsmenu_get_nentries();
-	int linestep = U.fontsize*2.0f;
+	int nentries = fsmenu_get_nentries(category);
+	int linestep = gFontsize*2.0f;
+	short sx, sy, xpos, ypos;
+	int bmwidth = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*TILE_BORDER_X - ICON_DEFAULT_WIDTH - 4;
+	int fontsize = gFontsize;
 	int i;
-	short sx, sy, xpos, ypos;
-	int bmwidth = ar->v2d.cur.xmax - ar->v2d.cur.xmin - TILE_BORDER_X;
-	int fontsize = U.fontsize;
 
+	
 	sx = ar->v2d.cur.xmin + TILE_BORDER_X;
-	sy = ar->v2d.cur.ymax-2*TILE_BORDER_Y;
-	
+	sy = *starty;
+
 	UI_ThemeColor(TH_TEXT_HI);
-	file_draw_string(sx, sy, "BOOKMARKS", bmwidth, fontsize);
+	file_draw_string(sx, sy, category_name, bmwidth, fontsize, FILE_SHORTEN_END);
 	
 	sy -= linestep;
-	
+
 	for (i=0; i< nentries && (sy > ar->v2d.cur.ymin) ;++i) {
-		char *fname = fsmenu_get_entry(i);
+		char *fname = fsmenu_get_entry(category, i);
 
 		if (fname) {
 			int sl;
@@ -565,7 +589,7 @@
 				bookmark[sl] = '\0';
 				sl--;
 			}
-			if (params->active_bookmark == i ) {
+			if (fsmenu_is_selected(category, i) ) {
 				UI_ThemeColor(TH_HILITE);
 				/* uiSetRoundBox(15);	
 				 * uiRoundBox(sx, sy - linestep, sx + bmwidth, sy, 4.0f); */
@@ -580,16 +604,29 @@
 			
 			file_draw_icon(xpos, ypos, ICON_FILE_FOLDER, ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH);
 			xpos += ICON_DEFAULT_WIDTH + 4;
-			file_draw_string(xpos, ypos, bookmark, bmwidth, fontsize);
+			file_draw_string(xpos, ypos, bookmark, bmwidth, fontsize, FILE_SHORTEN_FRONT);
 			sy -= linestep;
-		} else {
-			UI_ThemeColorShade(TH_PANEL, 30);
-			sdrawline(sx, sy-1-fontsize/2, sx + bmwidth, sy-1-fontsize/2); 
-			UI_ThemeColorShade(TH_PANEL, -30);
-			sdrawline(sx, sy-fontsize/2, sx + bmwidth, sy - fontsize/2);
-			
-			sy -= linestep;
+			fsmenu_set_pos(category, i, xpos, ypos);
 		}
 	}
 
+	*starty = sy;
 }
+
+void file_draw_fsmenu(const bContext *C, ARegion *ar)
+{
+	int linestep = gFontsize*2.0f;
+	
+	short sx, sy, xpos, ypos;
+	int fontsize = gFontsize;
+
+	sx = ar->v2d.cur.xmin + TILE_BORDER_X;
+	sy = ar->v2d.cur.ymax-2*TILE_BORDER_Y;
+	
+	file_draw_fsmenu_category(C, ar, FS_CATEGORY_SYSTEM, "SYSTEM", &sy);
+	sy -= linestep;
+	file_draw_fsmenu_category(C, ar, FS_CATEGORY_BOOKMARKS, "BOOKMARKS", &sy);
+	sy -= linestep;
+	file_draw_fsmenu_category(C, ar, FS_CATEGORY_RECENT, "RECENT", &sy);
+	
+}

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-10 18:10:24 UTC (rev 19248)
+++ branches/blender2.5/blender/source/blender/editors/space_file/file_ops.c	2009-03-10 23:14:41 UTC (rev 19249)
@@ -247,10 +247,13 @@
 	rect.ymin = rect.ymax = event->y - ar->winrct.ymin;
 	val = event->val;
 
-	/* single select, deselect all selected first */
-	file_deselect_all(sfile);
-	file_select(sfile, sfile->params, ar, &rect, val );
-	WM_event_add_notifier(C, NC_WINDOW, NULL);
+	if (BLI_in_rcti(&ar->v2d.mask, rect.xmin, rect.ymin)) { 
+
+		/* single select, deselect all selected first */
+		file_deselect_all(sfile);
+		file_select(sfile, sfile->params, ar, &rect, val );
+		WM_event_add_notifier(C, NC_WINDOW, NULL);
+	}
 	return OPERATOR_FINISHED;
 }
 
@@ -316,7 +319,7 @@
 
 static void set_active_bookmark(FileSelectParams* params, struct ARegion* ar, short x, short y)
 {
-	int nentries = fsmenu_get_nentries();
+	int nentries = fsmenu_get_nentries(FS_CATEGORY_BOOKMARKS);
 	float fx, fy;
 	short posy;
 
@@ -331,22 +334,58 @@
 	}
 }
 
+static int file_select_bookmark_category(SpaceFile* sfile, ARegion* ar, short x, short y, FSMenuCategory category)
+{
+	int nentries = fsmenu_get_nentries(category);
+	int linestep = U.fontsize*2.0f;
+	short xs, ys;
+	int i;
+	int selected = -1;
+
+	for (i=0; i < nentries; ++i) {
+		fsmenu_get_pos(category, i, &xs, &ys);
+		if ( (y<=ys) && (y>ys-linestep) ) {
+			fsmenu_select_entry(category, i);
+			selected = i;
+			break;
+		}
+	}
+	return selected;
+}
+
 static void file_select_bookmark(SpaceFile* sfile, ARegion* ar, short x, short y)
 {
+	float fx, fy;
+	int selected;
+	FSMenuCategory category = FS_CATEGORY_SYSTEM;
+
 	if (BLI_in_rcti(&ar->v2d.mask, x, y)) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list