[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