[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25268] trunk/blender/source/blender/ editors/interface/interface_layout.c: Fix for [#20216] Search List is unordered
Matt Ebb
matt at mke3.net
Thu Dec 10 02:29:43 CET 2009
Revision: 25268
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25268
Author: broken
Date: 2009-12-10 02:29:43 +0100 (Thu, 10 Dec 2009)
Log Message:
-----------
Fix for [#20216] Search List is unordered
This sorts RNA collection (bones, vgroups, etc) search lists alphabetically like ID data search lists are already.
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface_layout.c
Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c 2009-12-10 01:11:04 UTC (rev 25267)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c 2009-12-10 01:29:43 UTC (rev 25268)
@@ -1057,38 +1057,72 @@
/* Pointer RNA button with search */
+typedef struct CollItemSearch {
+ struct CollItemSearch *next, *prev;
+ char *name;
+ int index;
+ int iconid;
+} CollItemSearch;
+
+int sort_search_items_list(void *a, void *b)
+{
+ CollItemSearch *cis1 = (CollItemSearch *)a;
+ CollItemSearch *cis2 = (CollItemSearch *)b;
+
+ if (BLI_strcasecmp(cis1->name, cis2->name)>0)
+ return 1;
+ else
+ return 0;
+}
+
static void rna_search_cb(const struct bContext *C, void *arg_but, char *str, uiSearchItems *items)
{
uiBut *but= arg_but;
char *name;
- int i, iconid, flag= RNA_property_flag(but->rnaprop);
+ int i=0, iconid=0, flag= RNA_property_flag(but->rnaprop);
+ ListBase *items_list= MEM_callocN(sizeof(ListBase), "items_list");
+ CollItemSearch *cis;
- i = 0;
+ /* build a temporary list of relevant items first */
RNA_PROP_BEGIN(&but->rnasearchpoin, itemptr, but->rnasearchprop) {
if(flag & PROP_ID_SELF_CHECK)
if(itemptr.data == but->rnapoin.id.data)
continue;
-
- iconid= 0;
+
if(RNA_struct_is_ID(itemptr.type))
iconid= ui_id_icon_get((bContext*)C, itemptr.data);
-
+
name= RNA_struct_name_get_alloc(&itemptr, NULL, 0);
-
+
if(name) {
if(BLI_strcasestr(name, str)) {
- if(!uiSearchItemAdd(items, name, SET_INT_IN_POINTER(i), iconid)) {
- MEM_freeN(name);
- break;
- }
+ cis = MEM_callocN(sizeof(CollItemSearch), "CollectionItemSearch");
+ cis->name = MEM_dupallocN(name);
+ cis->index = i;
+ cis->iconid = iconid;
+ BLI_addtail(items_list, cis);
}
-
- MEM_freeN(name);
}
-
+ MEM_freeN(name);
+
i++;
}
RNA_PROP_END;
+
+ BLI_sortlist(items_list, sort_search_items_list);
+
+ /* add search items from temporary list */
+ for (cis=items_list->first; cis; cis=cis->next) {
+ if (!uiSearchItemAdd(items, cis->name, SET_INT_IN_POINTER(cis->index), cis->iconid)) {
+ break;
+ }
+ }
+
+ for (cis=items_list->first; cis; cis=cis->next) {
+ MEM_freeN(cis->name);
+ }
+ BLI_freelistN(items_list);
+ MEM_freeN(items_list);
}
static void search_id_collection(StructRNA *ptype, PointerRNA *ptr, PropertyRNA **prop)
More information about the Bf-blender-cvs
mailing list