[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35634] trunk/blender/source/blender: == file browser ==

Andrea Weikert elubie at gmx.net
Sun Mar 20 01:34:09 CET 2011


Revision: 35634
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35634
Author:   elubie
Date:     2011-03-20 00:34:08 +0000 (Sun, 20 Mar 2011)
Log Message:
-----------
== file browser ==
Patch from Alexander Kuznetsov: Real-time File Selection, thanks for the contribution.

Still made a few minor changes from latest patch:
1. Rename SELECTEDFILE to HILITED_FILE, since we are not actually selecting the file, but previewing/highliting the possible selection.
2. Also made this clearer by not drawing the files as selected, but just highlight them.
3. Removed the Select/Deselect toggle when clicking on file, will be committed separately soon.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_file/file_draw.c
    trunk/blender/source/blender/editors/space_file/file_ops.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_draw.c	2011-03-20 00:10:44 UTC (rev 35633)
+++ trunk/blender/source/blender/editors/space_file/file_draw.c	2011-03-20 00:34:08 UTC (rev 35634)
@@ -469,7 +469,6 @@
 	uiBlock *block = uiBeginBlock(C, ar, "FileNames", UI_EMBOSS);
 	int numfiles;
 	int numfiles_layout;
-	int colorid = 0;
 	int sx, sy;
 	int offset;
 	int textwidth, textheight;
@@ -516,14 +515,11 @@
 
 
 		if (!(file->flags & EDITING)) {
-			if (params->active_file == i) {
-				if (file->flags & ACTIVEFILE) colorid= TH_HILITE;
-				else colorid = TH_BACK;
-				draw_tile(sx, sy-1, layout->tile_w+4, sfile->layout->tile_h+layout->tile_border_y, colorid,20);
-			} else if (file->flags & ACTIVEFILE) {
-				colorid = TH_HILITE;
-				draw_tile(sx, sy-1, layout->tile_w+4, sfile->layout->tile_h+layout->tile_border_y, colorid,0);
-			} 
+			if  ((params->active_file == i) || (file->flags & HILITED_FILE) || (file->flags & ACTIVEFILE) ) {
+				int colorid = (file->flags & ACTIVEFILE) ? TH_HILITE : TH_BACK;
+				int shade = (params->active_file == i) || (file->flags & HILITED_FILE) ? 20 : 0;
+				draw_tile(sx, sy-1, layout->tile_w+4, sfile->layout->tile_h+layout->tile_border_y, colorid, shade);
+			}
 		}
 		uiSetRoundBox(0);
 

Modified: trunk/blender/source/blender/editors/space_file/file_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_ops.c	2011-03-20 00:10:44 UTC (rev 35633)
+++ trunk/blender/source/blender/editors/space_file/file_ops.c	2011-03-20 00:34:08 UTC (rev 35634)
@@ -225,7 +225,45 @@
 	return retval;
 }
 
+static int file_border_select_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+	ARegion *ar= CTX_wm_region(C);
+	SpaceFile *sfile= CTX_wm_space_file(C);
+	FileSelectParams *params = ED_fileselect_get_params(sfile);
+	FileSelection sel;
+	rcti rect;
 
+	int result;
+
+	result=	WM_border_select_modal(C, op, event);
+
+	if(result==OPERATOR_RUNNING_MODAL)	{
+
+		rect.xmin= RNA_int_get(op->ptr, "xmin");
+		rect.ymin= RNA_int_get(op->ptr, "ymin");
+		rect.xmax= RNA_int_get(op->ptr, "xmax");
+		rect.ymax= RNA_int_get(op->ptr, "ymax");
+
+		BLI_isect_rcti(&(ar->v2d.mask), &rect, &rect);
+
+		sel = file_selection_get(C, &rect, 0);
+		if ( (sel.first != params->sel_first) || (sel.last != params->sel_last) ) {
+			file_deselect_all(sfile, HILITED_FILE);
+			filelist_select(sfile->files, &sel, 1, HILITED_FILE);
+			WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+		}
+		params->sel_first = sel.first; params->sel_last = sel.last;
+
+	}else {
+		params->active_file = -1;
+		params->sel_first = params->sel_last = -1;
+		file_deselect_all(sfile, HILITED_FILE);
+		WM_event_add_notifier(C, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
+	}
+
+	return result;
+}
+
 static int file_border_select_exec(bContext *C, wmOperator *op)
 {
 	ARegion *ar= CTX_wm_region(C);
@@ -259,7 +297,7 @@
 	/* api callbacks */
 	ot->invoke= WM_border_select_invoke;
 	ot->exec= file_border_select_exec;
-	ot->modal= WM_border_select_modal;
+	ot->modal= file_border_select_modal;
 	ot->poll= ED_operator_file_active;
 
 	/* rna */

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2011-03-20 00:10:44 UTC (rev 35633)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2011-03-20 00:34:08 UTC (rev 35634)
@@ -188,7 +188,8 @@
 	short active_bookmark;
 
 	int	active_file;
-	int selstate;
+	int sel_first;
+	int sel_last;
 
 	/* short */
 	/* XXX --- still unused -- */
@@ -728,6 +729,7 @@
 #define BTXFILE				(1<<12)
 #define COLLADAFILE			(1<<13)
 #define OPERATORFILE		(1<<14) /* from filter_glob operator property */
+#define HILITED_FILE		(1<<15)
 
 /* SpaceImage->dt_uv */
 #define SI_UVDT_OUTLINE	0

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-03-20 00:10:44 UTC (rev 35633)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-03-20 00:34:08 UTC (rev 35634)
@@ -2075,31 +2075,34 @@
    It stores 4 values (xmin, xmax, ymin, ymax) and event it ended with (event_type)
 */
 
-static int border_apply(bContext *C, wmOperator *op, int gesture_mode)
+static int border_apply_rect(bContext *C, wmOperator *op)
 {
 	wmGesture *gesture= op->customdata;
 	rcti *rect= gesture->customdata;
 	
-	if(rect->xmin > rect->xmax)
-		SWAP(int, rect->xmin, rect->xmax);
-	if(rect->ymin > rect->ymax)
-		SWAP(int, rect->ymin, rect->ymax);
-	
 	if(rect->xmin==rect->xmax || rect->ymin==rect->ymax)
 		return 0;
-		
+
+	
 	/* operator arguments and storage. */
-	RNA_int_set(op->ptr, "xmin", rect->xmin);
-	RNA_int_set(op->ptr, "ymin", rect->ymin);
-	RNA_int_set(op->ptr, "xmax", rect->xmax);
-	RNA_int_set(op->ptr, "ymax", rect->ymax);
+	RNA_int_set(op->ptr, "xmin", MIN2(rect->xmin, rect->xmax) );
+	RNA_int_set(op->ptr, "ymin", MIN2(rect->ymin, rect->ymax) );
+	RNA_int_set(op->ptr, "xmax", MAX2(rect->xmin, rect->xmax) );
+	RNA_int_set(op->ptr, "ymax", MAX2(rect->ymin, rect->ymax) );
+
+	return 1;
+}
+
+static int border_apply(bContext *C, wmOperator *op, int gesture_mode)
+{
+	if (!border_apply_rect(C, op))
+		return 0;
 	
 	/* XXX weak; border should be configured for this without reading event types */
 	if( RNA_struct_find_property(op->ptr, "gesture_mode") )
 		RNA_int_set(op->ptr, "gesture_mode", gesture_mode);
 
 	op->type->exec(C, op);
-	
 	return 1;
 }
 
@@ -2148,6 +2151,7 @@
 			rect->xmax= event->x - sx;
 			rect->ymax= event->y - sy;
 		}
+		border_apply_rect(C, op);
 
 		wm_gesture_tag_redraw(C);
 	}




More information about the Bf-blender-cvs mailing list