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

Ton Roosendaal ton at blender.org
Mon Jun 29 13:29:52 CEST 2009


Revision: 21233
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21233
Author:   ton
Date:     2009-06-29 13:29:52 +0200 (Mon, 29 Jun 2009)

Log Message:
-----------
2.5

Search Menu: added feature that on opening, it shows the 
current ID block, and selects it. Same can be used for other
searches, just pass on pointer to active item for the search
callback.

Also fixed arrow triangle draw for search.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
    branches/blender2.5/blender/source/blender/editors/space_info/info_header.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-29 11:29:52 UTC (rev 21233)
@@ -456,7 +456,7 @@
 		/* use inside searchfunc to add items */
 int		uiSearchItemAdd(uiSearchItems *items, const char *name, void *poin, int iconid);
 		/* bfunc gets search item *poin as arg2, or if NULL the old string */
-void	uiButSetSearchFunc	(uiBut *but,		uiButSearchFunc sfunc, void *arg1, uiButHandleFunc bfunc);
+void	uiButSetSearchFunc	(uiBut *but,		uiButSearchFunc sfunc, void *arg1, uiButHandleFunc bfunc, void *active);
 		/* height in pixels, it's using hardcoded values still */
 int		uiSearchBoxhHeight(void);
 

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-06-29 11:29:52 UTC (rev 21233)
@@ -2919,15 +2919,15 @@
 }
 
 /* arg is user value, searchfunc and handlefunc both get it as arg */
-void uiButSetSearchFunc(uiBut *but, uiButSearchFunc sfunc, void *arg, uiButHandleFunc bfunc)
+/* if active set, button opens with this item visible and selected */
+void uiButSetSearchFunc(uiBut *but, uiButSearchFunc sfunc, void *arg, uiButHandleFunc bfunc, void *active)
 {
 	but->search_func= sfunc;
 	but->search_arg= arg;
 	
-	uiButSetFunc(but, bfunc, arg, NULL);
+	uiButSetFunc(but, bfunc, arg, active);
 }
 
-
 /* Program Init/Exit */
 
 void UI_init(void)

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c	2009-06-29 11:29:52 UTC (rev 21233)
@@ -936,7 +936,7 @@
 		but->rnasearchprop= searchprop;
 		but->flag |= UI_ICON_LEFT|UI_TEXT_LEFT;
 
-		uiButSetSearchFunc(but, rna_search_cb, but, NULL);
+		uiButSetSearchFunc(but, rna_search_cb, but, NULL, NULL);
 	}
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2009-06-29 11:29:52 UTC (rev 21233)
@@ -437,6 +437,7 @@
 	int *icons;
 
 	AutoComplete *autocpl;
+	void *active;
 };
 
 typedef struct uiSearchboxData {
@@ -459,6 +460,14 @@
 		return 1;
 	}
 	
+	/* hijack for finding active item */
+	if(items->active) {
+		if(poin==items->active)
+			items->offset_i= items->totitem;
+		items->totitem++;
+		return 1;
+	}
+	
 	if(items->totitem>=items->maxitem) {
 		items->more= 1;
 		return 0;
@@ -597,20 +606,52 @@
 	/* reset vars */
 	data->items.totitem= 0;
 	data->items.more= 0;
-	if(reset==0)
+	if(reset==0) {
 		data->items.offset_i= data->items.offset;
+	}
 	else {
 		data->items.offset_i= data->items.offset= 0;
 		data->active= 0;
+		
+		/* handle active */
+		if(but->search_func && but->func_arg2) {
+			data->items.active= but->func_arg2;
+			but->search_func(C, but->search_arg, but->editstr, &data->items);
+			data->items.active= NULL;
+			
+			/* found active item, calculate real offset by centering it */
+			if(data->items.totitem) {
+				/* first case, begin of list */
+				if(data->items.offset_i < data->items.maxitem) {
+					data->active= data->items.offset_i+1;
+					data->items.offset_i= 0;
+				}
+				else {
+					/* second case, end of list */
+					if(data->items.totitem - data->items.offset_i <= data->items.maxitem) {
+						data->active= 1 + data->items.offset_i - data->items.totitem + data->items.maxitem;
+						data->items.offset_i= data->items.totitem - data->items.maxitem;
+					}
+					else {
+						/* center active item */
+						data->items.offset_i -= data->items.maxitem/2;
+						data->active= 1 + data->items.maxitem/2;
+					}
+				}
+			}
+			data->items.offset= data->items.offset_i;
+			data->items.totitem= 0;
+		}
 	}
 	
 	/* callback */
 	if(but->search_func)
 		but->search_func(C, but->search_arg, but->editstr, &data->items);
 	
-	if(reset) {
+	/* handle case where editstr is equal to one of items */
+	if(reset && data->active==0) {
 		int a;
-		/* handle case where editstr is equal to one of items */
+		
 		for(a=0; a<data->items.totitem; a++) {
 			char *cpoin= strchr(data->items.names[a], '|');
 			
@@ -666,13 +707,15 @@
 		}
 		/* indicate more */
 		if(data->items.more) {
+			ui_searchbox_butrect(&rect, data, data->items.maxitem-1);
 			glEnable(GL_BLEND);
-			UI_icon_draw((data->bbox.xmax-data->bbox.xmin)/2, 8, ICON_TRIA_DOWN);
+			UI_icon_draw((rect.xmax-rect.xmin)/2, rect.ymin-9, ICON_TRIA_DOWN);
 			glDisable(GL_BLEND);
 		}
 		if(data->items.offset) {
+			ui_searchbox_butrect(&rect, data, 0);
 			glEnable(GL_BLEND);
-			UI_icon_draw((data->bbox.xmax-data->bbox.xmin)/2, data->bbox.ymax-13, ICON_TRIA_UP);
+			UI_icon_draw((rect.xmax-rect.xmin)/2, rect.ymax-7, ICON_TRIA_UP);
 			glDisable(GL_BLEND);
 		}
 	}

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c	2009-06-29 11:29:52 UTC (rev 21233)
@@ -112,6 +112,7 @@
 {
 	static char search[256];
 	static TemplateID template;
+	PointerRNA idptr;
 	wmEvent event;
 	wmWindow *win= CTX_wm_window(C);
 	uiBlock *block;
@@ -122,6 +123,9 @@
 	/* arg_litem is malloced, can be freed by parent button */
 	template= *((TemplateID*)arg_litem);
 	
+	/* get active id for showing first item */
+	idptr= RNA_property_pointer_get(&template.ptr, template.prop);
+
 	block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS);
 	uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_RET_1);
 	
@@ -129,7 +133,7 @@
 	uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL);
 	
 	but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, 10, 0, 150, 19, "");
-	uiButSetSearchFunc(but, id_search_cb, &template, id_search_call_cb);
+	uiButSetSearchFunc(but, id_search_cb, &template, id_search_call_cb, idptr.data);
 	
 	uiBoundsBlock(block, 6);
 	uiBlockSetDirection(block, UI_DOWN);	

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c	2009-06-29 11:29:52 UTC (rev 21233)
@@ -327,7 +327,7 @@
 	uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL);
 	
 	but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, 10, 0, 150, 19, "");
-	uiButSetSearchFunc(but, id_search_cb, &params, id_search_call_cb);
+	uiButSetSearchFunc(but, id_search_cb, &params, id_search_call_cb, NULL);
 	
 	uiBoundsBlock(block, 6);
 	uiBlockSetDirection(block, UI_DOWN);	

Modified: branches/blender2.5/blender/source/blender/editors/space_info/info_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_info/info_header.c	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/space_info/info_header.c	2009-06-29 11:29:52 UTC (rev 21233)
@@ -491,7 +491,7 @@
 		static char search[256]= "";
 		uiBut *but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, xco+5, yco, 120, 19, "");
 		
-		uiButSetSearchFunc(but, operator_search_cb, NULL, operator_call_cb);
+		uiButSetSearchFunc(but, operator_search_cb, NULL, operator_call_cb, NULL);
 
 		xco+= 125;
 	}

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c	2009-06-29 03:15:13 UTC (rev 21232)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_toolbar.c	2009-06-29 11:29:52 UTC (rev 21233)
@@ -204,7 +204,7 @@
 	uiDefBut(block, LABEL, 0, "", 10, 15, 150, uiSearchBoxhHeight(), NULL, 0, 0, 0, 0, NULL);
 	
 	but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, OP_MAX_TYPENAME, 10, 0, 150, 19, "");
-	uiButSetSearchFunc(but, operator_search_cb, arg_listbase, operator_call_cb);
+	uiButSetSearchFunc(but, operator_search_cb, arg_listbase, operator_call_cb, NULL);
 	
 	uiBoundsBlock(block, 6);
 	uiBlockSetDirection(block, UI_DOWN);	





More information about the Bf-blender-cvs mailing list