[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