Revision: 21130
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21130
Author:   blendix
Date:     2009-06-24 16:16:56 +0200 (Wed, 24 Jun 2009)

Log Message:
-----------
UI

* Added SCROLL button type, use like a NUMSLI basically, with
  a1 used to define the scroller size.
* Add scroll and toggle colors to the Theme (toggle was set to
  draw like radio in a recent commit, but it's the intention
  these look different).
* Added rudimentary list template, used for object material
  slots, this is WIP though.
* In popup menu, split text with line breaks over multiple
  lines, makes python errors display slightly nicer.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_mesh.py
    branches/blender2.5/blender/release/ui/space_text.py
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
    
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_widgets.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_userdef_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui_api.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_userdef.c

Modified: branches/blender2.5/blender/release/ui/buttons_data_mesh.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_mesh.py 2009-06-24 
14:07:48 UTC (rev 21129)
+++ branches/blender2.5/blender/release/ui/buttons_data_mesh.py 2009-06-24 
14:16:56 UTC (rev 21130)
@@ -46,6 +46,34 @@
                        sub.itemR(mesh, "vertex_normal_flip")
                        sub.itemR(mesh, "double_sided")
                        
-                       layout.itemR(mesh, "texco_mesh")                        
-                                       
+                       layout.itemR(mesh, "texco_mesh")
+
+
+class DATA_PT_materials(DataButtonsPanel):
+       __idname__ = "DATA_PT_materials"
+       __label__ = "Materials"
+       
+       def poll(self, context):
+               return (context.object and context.object.type in ('MESH', 
'CURVE', 'FONT', 'SURFACE'))
+
+       def draw(self, context):
+               layout = self.layout
+               ob = context.object
+
+               row = layout.row()
+
+               row.template_list(ob, "materials", "active_material_index", 
items=10)
+
+               col = row.column(align=True)
+               col.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", 
text="")
+               col.itemO("OBJECT_OT_material_slot_remove", 
icon="ICON_ZOOMOUT", text="")
+
+               row = layout.row(align=True)
+
+               row.itemO("OBJECT_OT_material_slot_assign", text="Assign");
+               row.itemO("OBJECT_OT_material_slot_select", text="Select");
+               row.itemO("OBJECT_OT_material_slot_deselect", text="Deselect");
+
 bpy.types.register(DATA_PT_mesh)
+bpy.types.register(DATA_PT_materials)
+

Modified: branches/blender2.5/blender/release/ui/space_text.py
===================================================================
--- branches/blender2.5/blender/release/ui/space_text.py        2009-06-24 
14:07:48 UTC (rev 21129)
+++ branches/blender2.5/blender/release/ui/space_text.py        2009-06-24 
14:16:56 UTC (rev 21130)
@@ -1,10 +1,6 @@
 
 import bpy
 
-# temporary
-ICON_TEXT = 120
-ICON_HELP = 1
-
 class TEXT_HT_header(bpy.types.Header):
        __space_type__ = "TEXT_EDITOR"
        __idname__ = "TEXT_HT_header"

Modified: 
branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-06-24 14:07:48 UTC (rev 21129)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h   
2009-06-24 14:16:56 UTC (rev 21130)
@@ -617,6 +617,7 @@
 void uiTemplateCurveMapping(uiLayout *layout, struct CurveMapping *cumap, int 
type);
 void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char 
*propname);
 void uiTemplateImageLayers(uiLayout *layout, struct bContext *C, struct Image 
*ima, struct ImageUser *iuser);
+void uiTemplateList(uiLayout *layout, struct PointerRNA *ptr, char *propname, 
char *activeprop, int items);
 
 /* items */
 void uiItemO(uiLayout *layout, char *name, int icon, char *opname);

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-06-24 14:07:48 UTC (rev 21129)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-06-24 14:16:56 UTC (rev 21130)
@@ -746,11 +746,8 @@
                        ui_apply_but_ROW(C, block, but, data);
                        break;
                case SCROLL:
-                       break;
                case NUM:
                case NUMABS:
-                       ui_apply_but_NUM(C, but, data);
-                       break;
                case SLI:
                case NUMSLI:
                        ui_apply_but_NUM(C, but, data);
@@ -2061,6 +2058,11 @@
 
        if(but->type==NUMSLI) deler= ((but->x2-but->x1) - 5.0*but->aspect);
        else if(but->type==HSVSLI) deler= ((but->x2-but->x1)/2 - 
5.0*but->aspect);
+       else if(but->type==SCROLL) {
+               int horizontal= (but->x2 - but->x1 > but->y2 - but->y1);
+               float size= (horizontal)? (but->x2-but->x1): -(but->y2-but->y1);
+               deler= size*(but->softmax - but->softmin)/(but->softmax - 
but->softmin + but->a1);
+       }
        else deler= (but->x2-but->x1- 5.0*but->aspect);
 
        f= (float)(mx-data->dragstartx)/deler + data->dragfstart;
@@ -2231,6 +2233,54 @@
        return retval;
 }
 
+static int ui_do_but_SCROLL(bContext *C, uiBlock *block, uiBut *but, 
uiHandleButtonData *data, wmEvent *event)
+{
+       int mx, my, click= 0;
+       int retval= WM_UI_HANDLER_CONTINUE;
+       int horizontal= (but->x2 - but->x1 > but->y2 - but->y1);
+       
+       mx= event->x;
+       my= event->y;
+       ui_window_to_block(data->region, block, &mx, &my);
+
+       if(data->state == BUTTON_STATE_HIGHLIGHT) {
+               if(event->val==KM_PRESS) {
+                       if(event->type == LEFTMOUSE) {
+                               if(horizontal) {
+                                       data->dragstartx= mx;
+                                       data->draglastx= mx;
+                               }
+                               else {
+                                       data->dragstartx= my;
+                                       data->draglastx= my;
+                               }
+                               button_activate_state(C, but, 
BUTTON_STATE_NUM_EDITING);
+                               retval= WM_UI_HANDLER_BREAK;
+                       }
+                       else if(ELEM(event->type, PADENTER, RETKEY) && 
event->val==KM_PRESS)
+                               click= 1;
+               }
+       }
+       else if(data->state == BUTTON_STATE_NUM_EDITING) {
+               if(event->type == ESCKEY) {
+                       data->cancel= 1;
+                       data->escapecancel= 1;
+                       button_activate_state(C, but, BUTTON_STATE_EXIT);
+               }
+               else if(event->type == LEFTMOUSE && event->val!=KM_PRESS) {
+                       button_activate_state(C, but, BUTTON_STATE_EXIT);
+               }
+               else if(event->type == MOUSEMOVE) {
+                       if(ui_numedit_but_SLI(but, data, 0, 0, (horizontal)? 
mx: my))
+                               ui_numedit_apply(C, block, but, data);
+               }
+
+               retval= WM_UI_HANDLER_BREAK;
+       }
+       
+       return retval;
+}
+
 static int ui_do_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data, 
wmEvent *event)
 {
        
@@ -3073,13 +3123,9 @@
        case OPTIONN:
                retval= ui_do_but_TOG(C, but, data, event);
                break;
-#if 0
        case SCROLL:
-               /* DrawBut(b, 1); */
-               /* do_scrollbut(b); */
-               /* DrawBut(b,0); */
+               retval= ui_do_but_SCROLL(C, block, but, data, event);
                break;
-#endif
        case NUM:
        case NUMABS:
                retval= ui_do_but_NUM(C, block, but, data, event);

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 
    2009-06-24 14:07:48 UTC (rev 21129)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h 
    2009-06-24 14:16:56 UTC (rev 21130)
@@ -50,6 +50,9 @@
 /* visual types for drawing */
 /* for time being separated from functional types */
 typedef enum {
+       /* default */
+       UI_WTYPE_REGULAR,
+
        /* standard set */
        UI_WTYPE_LABEL,
        UI_WTYPE_TOGGLE,
@@ -78,7 +81,8 @@
        UI_WTYPE_SWATCH,
        UI_WTYPE_RGB_PICKER,
        UI_WTYPE_NORMAL,
-       UI_WTYPE_BOX
+       UI_WTYPE_BOX,
+       UI_WTYPE_SCROLL
        
 } uiWidgetTypeEnum;
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 
    2009-06-24 14:07:48 UTC (rev 21129)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 
    2009-06-24 14:16:56 UTC (rev 21130)
@@ -1271,7 +1271,6 @@
        h= litem->h;
 
        litem->x += style->boxspace;
-       litem->y -= style->boxspace;
 
        if(w != 0) litem->w -= 2*style->boxspace;
        if(h != 0) litem->h -= 2*style->boxspace;
@@ -1352,6 +1351,7 @@
                }
        }
 
+       litem->w= x;
        litem->h= litem->y - miny;
 }
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    2009-06-24 14:07:48 UTC (rev 21129)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    2009-06-24 14:16:56 UTC (rev 21130)
@@ -181,7 +181,7 @@
                                *s= '\0';
                                s++;
                        }
-               } else if (c=='|' || c=='\0') {
+               } else if (c=='|' || c == '\n' || c=='\0') {
                        if (nitem) {
                                *s= '\0';
 
@@ -2567,7 +2567,6 @@
        return menu;
 }
 
-
 static void operator_name_cb(bContext *C, void *arg, int retval)
 {
        const char *opname= arg;

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-06-24 14:07:48 UTC (rev 21129)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
  2009-06-24 14:16:56 UTC (rev 21130)
@@ -1494,3 +1494,147 @@
        }
 }
 
+
+/************************* List Template **************************/
+
+typedef struct ListItem {
+       PointerRNA ptr;
+       PropertyRNA *prop;
+       PropertyRNA *activeprop;
+
+       PointerRNA activeptr;
+       int activei;
+
+       int selected;
+} ListItem;
+
+static void list_item_cb(bContext *C, void *arg_item, void *arg_unused)
+{
+       ListItem *item= (ListItem*)arg_item;
+       PropertyType activetype;
+       char *activename;
+
+       if(item->selected) {
+               activetype= RNA_property_type(item->activeprop);
+
+               if(activetype == PROP_POINTER)
+                       RNA_property_pointer_set(&item->ptr, item->activeprop, 
item->activeptr);
+               else if(activetype == PROP_INT)
+                       RNA_property_int_set(&item->ptr, item->activeprop, 
item->activei);
+               else if(activetype == PROP_STRING) {
+                       activename= RNA_struct_name_get_alloc(&item->activeptr, 
NULL, 0);
+                       RNA_property_string_set(&item->ptr, item->activeprop, 
activename);
+                       MEM_freeN(activename);
+               }
+       }
+}
+
+void uiTemplateList(uiLayout *layout, PointerRNA *ptr, char *propname, char 
*activepropname, int items)
+{
+       PropertyRNA *prop, *activeprop;
+       PropertyType type, activetype;
+       PointerRNA activeptr;
+       uiLayout *box, *row, *col;
+       uiBlock *block;
+       uiBut *but;
+       char *name, *activename= NULL;
+       int i= 1, activei= 0, len;
+       static int scroll = 1;
+       
+       /* validate arguments */
+       if(!ptr->data)
+               return;
+       
+       prop= RNA_struct_find_property(ptr, propname);
+       if(!prop) {
+               printf("uiTemplateList: property not found: %s\n", propname);
+               return;
+       }
+
+       activeprop= RNA_struct_find_property(ptr, activepropname);
+       if(!activeprop) {
+               printf("uiTemplateList: property not found: %s\n", 
activepropname);
+               return;
+       }
+
+       type= RNA_property_type(prop);
+       if(type != PROP_COLLECTION) {
+               printf("uiTemplateList: expected collection property.\n");
+               return;
+       }
+
+       activetype= RNA_property_type(activeprop);
+       if(!ELEM3(activetype, PROP_POINTER, PROP_INT, PROP_STRING)) {
+               printf("uiTemplateList: expected pointer, integer or string 
property.\n");
+               return;
+       }
+
+       if(items == 0)
+               items= 5;
+
+       /* get active data */
+       if(activetype == PROP_POINTER)
+               activeptr= RNA_property_pointer_get(ptr, activeprop);
+       else if(activetype == PROP_INT)

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to