Revision: 33706
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33706
Author:   lukastoenne
Date:     2010-12-16 11:18:32 +0100 (Thu, 16 Dec 2010)

Log Message:
-----------
Improved the type selection button for data nodes.

Modified Paths:
--------------
    branches/particles-2010/source/blender/editors/space_node/drawnode.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
    branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c

Modified: branches/particles-2010/source/blender/editors/space_node/drawnode.c
===================================================================
--- branches/particles-2010/source/blender/editors/space_node/drawnode.c        
2010-12-16 09:55:35 UTC (rev 33705)
+++ branches/particles-2010/source/blender/editors/space_node/drawnode.c        
2010-12-16 10:18:32 UTC (rev 33706)
@@ -1366,12 +1366,43 @@
        case SIM_NODE_SETDATA:  sim_setdata_foreach_type(ntree, node, items, 
str, node_data_type_foreach_cb);   break;
        }
 }
+static uiBlock *node_data_type_search_menu(bContext *C, ARegion *ar, void *arg)
+{
+       static char search[256];
+       bNode *node= ((NodeDataArgs*)arg)->node;
+       SimDataNode *data= (SimDataNode*)node->storage;
+       wmEvent event;
+       wmWindow *win= CTX_wm_window(C);
+       uiBlock *block;
+       uiBut *but;
+       
+       /* clear initial search string, then all items show */
+       search[0]= '\0';
+
+       block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS);
+       uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_RET_1);
+       
+       /* fake button, it holds space for search items */
+       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, 0, 0, "");
+       uiButSetSearchFunc(but, node_data_type_search_cb, arg, 
node_data_type_exec_cb, data->type);
+       
+       uiBoundsBlock(block, 6);
+       uiBlockSetDirection(block, UI_DOWN);
+       uiEndBlock(C, block);
+       
+       event= *(win->eventstate);      /* XXX huh huh? make api call */
+       event.type= EVT_BUT_OPEN;
+       event.val= KM_PRESS;
+       event.customdata= but;
+       event.customdatafree= FALSE;
+       wm_event_add(win, &event);
+       
+       return block;
+}
 static void node_data_type_search(uiLayout *layout, bContext *UNUSED(C), 
PointerRNA *ptr)
 {
-       /* XXX using static variables here is a hack, only reason is that these 
arguments must be persistent beyond this functions scope.
-        * This should not be a problem as long as only one instance of these 
buttons is used at a time.
-        */
-       static char search[256];
        static NodeDataArgs args;
        uiBlock *block;
        uiBut *but;
@@ -1383,8 +1414,10 @@
        block= uiLayoutGetBlock(layout);
        uiBlockSetCurLayout(block, layout);
 
-       but= uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, 256, 0, 0, 
UI_UNIT_X*25, UI_UNIT_Y, 0, 0, "Select the data node type");
-       uiButSetSearchFunc(but, node_data_type_search_cb, &args, 
node_data_type_exec_cb, NULL);
+       uiBlockBeginAlign(block);
+       but= uiDefBlockBut(block, node_data_type_search_menu, &args, "", 0, 0, 
UI_UNIT_X, UI_UNIT_Y, "Browse data node types");
+       but= uiDefButR(block, TEX, 0, "", 0, 0, UI_UNIT_X*16, UI_UNIT_Y, ptr, 
"type", -1, 0, 0, -1, -1, NULL);
+       uiBlockEndAlign(block);
 }
 
 /* Search field for adding property sockets */
@@ -1452,18 +1485,12 @@
 
 static void node_simulation_buts_data(uiLayout *layout, bContext *UNUSED(C), 
PointerRNA *ptr)
 {
-       bNode *node= (bNode*)ptr->data;
-       SimDataNode *data= (SimDataNode*)node->storage;
-       uiLayout *col, *row;
+       uiLayout *col;
        
        col= uiLayoutColumn(layout, 0);
        uiLayoutSetContextPointer(col, "node", ptr);
 
        uiItemR(col, ptr, "path", 0, NULL, 0);
-
-//     row= uiLayoutRow(col, 0);
-//     uiItemL(row, "Type:", 0);
-//     uiItemL(row, RNA_struct_ui_name(data->type), 
RNA_struct_ui_icon(data->type));
 }
 
 static void node_simulation_detailbuts_getdata(uiLayout *layout, bContext *C, 
PointerRNA *ptr)

Modified: 
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c
===================================================================
--- 
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c    
    2010-12-16 09:55:35 UTC (rev 33705)
+++ 
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_get_data.c    
    2010-12-16 10:18:32 UTC (rev 33706)
@@ -185,10 +185,10 @@
        
        data->type = type;
        
-       sprintf(node->name, "Get");
+       sprintf(node->name, "Get ");
        if (data->type)
                sprintf(node->name+strlen(node->name), "%s", 
RNA_struct_ui_name(data->type));
-       sprintf(node->name+strlen(node->name), "Data");
+       sprintf(node->name+strlen(node->name), " Data");
        nodeUniqueName(ntree, node);
 }
 

Modified: 
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c
===================================================================
--- 
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c    
    2010-12-16 09:55:35 UTC (rev 33705)
+++ 
branches/particles-2010/source/blender/nodes/intern/SIM_nodes/SIM_set_data.c    
    2010-12-16 10:18:32 UTC (rev 33706)
@@ -177,10 +177,10 @@
        
        data->type = type;
        
-       sprintf(node->name, "Set");
+       sprintf(node->name, "Set ");
        if (data->type)
                sprintf(node->name+strlen(node->name), "%s", 
RNA_struct_ui_name(data->type));
-       sprintf(node->name+strlen(node->name), "Data");
+       sprintf(node->name+strlen(node->name), " Data");
        nodeUniqueName(ntree, node);
 }
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to