[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56465] trunk/blender/source/blender/ editors: fix [#35178] Autoselect-in-list for Vertex Group selection doesn' t work.

Campbell Barton ideasman42 at gmail.com
Thu May 2 06:59:53 CEST 2013


Revision: 56465
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56465
Author:   campbellbarton
Date:     2013-05-02 04:59:52 +0000 (Thu, 02 May 2013)
Log Message:
-----------
fix [#35178] Autoselect-in-list for Vertex Group selection doesn't work.
disallow assigning values that don't exist into a text field with a search-box.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface_handlers.c
    trunk/blender/source/blender/editors/interface/interface_intern.h
    trunk/blender/source/blender/editors/interface/interface_regions.c

Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h	2013-05-02 04:30:05 UTC (rev 56464)
+++ trunk/blender/source/blender/editors/include/UI_interface.h	2013-05-02 04:59:52 UTC (rev 56465)
@@ -629,6 +629,8 @@
 /* height in pixels, it's using hardcoded values still */
 int     uiSearchBoxHeight(void);
 int     uiSearchBoxWidth(void);
+/* check if a string is in an existing search box */
+int     uiSearchItemFindIndex(uiSearchItems *items, const char *name);
 
 void    uiBlockSetHandleFunc(uiBlock *block,    uiBlockHandleFunc func, void *arg);
 void    uiBlockSetButmFunc(uiBlock *block,    uiMenuHandleFunc func, void *arg);

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-05-02 04:30:05 UTC (rev 56464)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-05-02 04:59:52 UTC (rev 56465)
@@ -2056,8 +2056,13 @@
 		}
 		
 		if (data->searchbox) {
-			if (data->cancel == false)
-				ui_searchbox_apply(but, data->searchbox);
+			if (data->cancel == false) {
+				if ((ui_searchbox_apply(but, data->searchbox) == false) ||
+				    (ui_searchbox_find_index(data->searchbox, but->editstr) == -1))
+				{
+					data->cancel = true;
+				}
+			}
 
 			ui_searchbox_free(C, data->searchbox);
 			data->searchbox = NULL;

Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h	2013-05-02 04:30:05 UTC (rev 56464)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h	2013-05-02 04:59:52 UTC (rev 56465)
@@ -475,10 +475,11 @@
 /* searchbox for string button */
 ARegion *ui_searchbox_create(struct bContext *C, struct ARegion *butregion, uiBut *but);
 bool ui_searchbox_inside(struct ARegion *ar, int x, int y);
+int  ui_searchbox_find_index(struct ARegion *ar, const char *name);
 void ui_searchbox_update(struct bContext *C, struct ARegion *ar, uiBut *but, const bool reset);
 void ui_searchbox_autocomplete(struct bContext *C, struct ARegion *ar, uiBut *but, char *str);
 void ui_searchbox_event(struct bContext *C, struct ARegion *ar, uiBut *but, const struct wmEvent *event);
-void ui_searchbox_apply(uiBut *but, struct ARegion *ar);
+bool ui_searchbox_apply(uiBut *but, struct ARegion *ar);
 void ui_searchbox_free(struct bContext *C, struct ARegion *ar);
 void ui_but_search_test(uiBut *but);
 

Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c	2013-05-02 04:30:05 UTC (rev 56464)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c	2013-05-02 04:59:52 UTC (rev 56465)
@@ -801,6 +801,17 @@
 	return 9 * UI_UNIT_X;
 }
 
+int uiSearchItemFindIndex(uiSearchItems *items, const char *name)
+{
+	int i;
+	for (i = 0; i < items->totitem; i++) {
+		if (STREQ(name, items->names[i])) {
+			return i;
+		}
+	}
+	return -1;
+}
+
 /* ar is the search box itself */
 static void ui_searchbox_select(bContext *C, ARegion *ar, uiBut *but, int step)
 {
@@ -866,6 +877,12 @@
 	
 }
 
+int ui_searchbox_find_index(ARegion *ar, const char *name)
+{
+	uiSearchboxData *data = ar->regiondata;
+	return uiSearchItemFindIndex(&data->items, name);
+}
+
 /* x and y in screencoords */
 bool ui_searchbox_inside(ARegion *ar, int x, int y)
 {
@@ -875,7 +892,7 @@
 }
 
 /* string validated to be of correct length (but->hardmax) */
-void ui_searchbox_apply(uiBut *but, ARegion *ar)
+bool ui_searchbox_apply(uiBut *but, ARegion *ar)
 {
 	uiSearchboxData *data = ar->regiondata;
 
@@ -890,7 +907,12 @@
 		if (cpoin) cpoin[0] = '|';
 		
 		but->func_arg2 = data->items.pointers[data->active - 1];
+
+		return true;
 	}
+	else {
+		return false;
+	}
 }
 
 void ui_searchbox_event(bContext *C, ARegion *ar, uiBut *but, const wmEvent *event)
@@ -1287,14 +1309,13 @@
 	but->search_func(but->block->evil_C, but->search_arg, but->drawstr, items);
 	
 	/* only redalert when we are sure of it, this can miss cases when >10 matches */
-	if (items->totitem == 0)
+	if (items->totitem == 0) {
 		uiButSetFlag(but, UI_BUT_REDALERT);
+	}
 	else if (items->more == 0) {
-		for (x1 = 0; x1 < items->totitem; x1++)
-			if (strcmp(but->drawstr, items->names[x1]) == 0)
-				break;
-		if (x1 == items->totitem)
+		if (uiSearchItemFindIndex(items, but->drawstr) == -1) {
 			uiButSetFlag(but, UI_BUT_REDALERT);
+		}
 	}
 	
 	for (x1 = 0; x1 < items->maxitem; x1++) {




More information about the Bf-blender-cvs mailing list