[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33378] trunk/blender/source/blender/ editors/interface: For all buttons with search-menu option, the button will show a
Ton Roosendaal
ton at blender.org
Mon Nov 29 16:25:06 CET 2010
Revision: 33378
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33378
Author: ton
Date: 2010-11-29 16:25:06 +0100 (Mon, 29 Nov 2010)
Log Message:
-----------
For all buttons with search-menu option, the button will show a
red-alert drawing when input doesn't exist. Will help debugging
when messing with uv-layer names, vertex groups, etc.
Also closes bugreport #24905
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface.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/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c 2010-11-29 14:29:30 UTC (rev 33377)
+++ trunk/blender/source/blender/editors/interface/interface.c 2010-11-29 15:25:06 UTC (rev 33378)
@@ -3394,6 +3394,7 @@
return but;
}
+
/* arg is user value, searchfunc and handlefunc both get it as arg */
/* if active set, button opens with this item visible and selected */
void uiButSetSearchFunc(uiBut *but, uiButSearchFunc sfunc, void *arg, uiButHandleFunc bfunc, void *active)
@@ -3402,6 +3403,13 @@
but->search_arg= arg;
uiButSetFunc(but, bfunc, arg, active);
+
+ /* search buttons show red-alert if item doesn't exist, not for menus */
+ if(0==(but->block->flag & UI_BLOCK_LOOP)) {
+ /* skip empty buttons, not all buttons need input, we only show invalid */
+ if(but->drawstr[0])
+ ui_but_search_test(but);
+ }
}
/* Program Init/Exit */
Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h 2010-11-29 14:29:30 UTC (rev 33377)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h 2010-11-29 15:25:06 UTC (rev 33378)
@@ -421,6 +421,7 @@
void ui_searchbox_event(struct bContext *C, struct ARegion *ar, uiBut *but, struct wmEvent *event);
void 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);
typedef uiBlock* (*uiBlockHandleCreateFunc)(struct bContext *C, struct uiPopupBlockHandle *handle, void *arg1);
Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c 2010-11-29 14:29:30 UTC (rev 33377)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c 2010-11-29 15:25:06 UTC (rev 33378)
@@ -611,9 +611,12 @@
return 1;
}
- BLI_strncpy(items->names[items->totitem], name, items->maxstrlen);
- items->pointers[items->totitem]= poin;
- items->icons[items->totitem]= iconid;
+ if(items->names)
+ BLI_strncpy(items->names[items->totitem], name, items->maxstrlen);
+ if(items->pointers)
+ items->pointers[items->totitem]= poin;
+ if(items->icons)
+ items->icons[items->totitem]= iconid;
items->totitem++;
@@ -1077,7 +1080,33 @@
ui_remove_temporary_region(C, CTX_wm_screen(C), ar);
}
+/* sets red alert if button holds a string it can't find */
+void ui_but_search_test(uiBut *but)
+{
+ uiSearchItems *items= MEM_callocN(sizeof(uiSearchItems), "search items");
+ char *strp[2], str[256];
+
+ items->maxitem= 1;
+ items->maxstrlen= 256;
+ strp[0]= str;
+ items->names= strp;
+
+ /* changed flag makes search only find name */
+ but->changed= TRUE;
+ but->search_func(but->block->evil_C, but->search_arg, but->drawstr, items);
+ but->changed= 0;
+
+ if(items->totitem==0)
+ uiButSetFlag(but, UI_BUT_REDALERT);
+ else if(items->totitem==1) {
+ if(strcmp(but->drawstr, str)!=0)
+ uiButSetFlag(but, UI_BUT_REDALERT);
+ }
+
+ MEM_freeN(items);
+}
+
/************************* Creating Menu Blocks **********************/
/* position block relative to but, result is in window space */
More information about the Bf-blender-cvs
mailing list