UI
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 24 Jun 2009 14:16:56 +0000 (14:16 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Wed, 24 Jun 2009 14:16:56 +0000 (14:16 +0000)
* 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.

13 files changed:
release/ui/buttons_data_mesh.py
release/ui/space_text.py
source/blender/editors/include/UI_interface.h
source/blender/editors/interface/interface_handlers.c
source/blender/editors/interface/interface_intern.h
source/blender/editors/interface/interface_layout.c
source/blender/editors/interface/interface_regions.c
source/blender/editors/interface/interface_templates.c
source/blender/editors/interface/interface_utils.c
source/blender/editors/interface/interface_widgets.c
source/blender/makesdna/DNA_userdef_types.h
source/blender/makesrna/intern/rna_ui_api.c
source/blender/makesrna/intern/rna_userdef.c

index fb64f42c24a3d09b78076f969771fa2478d0e293..e5c1b8fc9eef37720878c716cab6a19d695556e4 100644 (file)
@@ -46,6 +46,34 @@ class DATA_PT_mesh(DataButtonsPanel):
                        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)
+
index 92e7639553f726c8a8c0d4d66f6ac72a42eb8a45..19a495d375ed08846b700bacdf3eb092ea2c1f9f 100644 (file)
@@ -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"
index 80e57f5e5be00887e0a0a4acb6a5504d592fd213..86516f9c973101459343bc4d49ef075bd3b4d149 100644 (file)
@@ -617,6 +617,7 @@ void uiTemplateColorRamp(uiLayout *layout, struct ColorBand *coba, int expand);
 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);
index 8eab0305047ae145ca25d717f824ebfdce7d71b1..bdbfce782b68662487893e9071f2757420a4eef1 100644 (file)
@@ -746,11 +746,8 @@ static void ui_apply_button(bContext *C, uiBlock *block, uiBut *but, uiHandleBut
                        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 @@ static int ui_numedit_but_SLI(uiBut *but, uiHandleButtonData *data, int shift, i
 
        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 @@ static int ui_do_but_SLI(bContext *C, uiBlock *block, uiBut *but, uiHandleButton
        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 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
        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);
index 187d7cccd97e5c030baa05aea330c57edc39f12a..3b40bd7c29af52410ce7d681f7c597552992d240 100644 (file)
@@ -50,6 +50,9 @@ struct bContextStore;
 /* 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 @@ typedef enum {
        UI_WTYPE_SWATCH,
        UI_WTYPE_RGB_PICKER,
        UI_WTYPE_NORMAL,
-       UI_WTYPE_BOX
+       UI_WTYPE_BOX,
+       UI_WTYPE_SCROLL
        
 } uiWidgetTypeEnum;
 
index 555500004ea9f5ae9d52d258f51534d89aebce0d..03da6861974d528b40894b6536546ecacc40ac22 100644 (file)
@@ -1271,7 +1271,6 @@ static void ui_litem_layout_box(uiLayout *litem)
        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 @@ static void ui_litem_estimate_column_flow(uiLayout *litem)
                }
        }
 
+       litem->w= x;
        litem->h= litem->y - miny;
 }
 
index af1d4e91c67215056df3ee1a34aad961721ea106..f7a0e97d05d39d9416dd09a333150a4591519642 100644 (file)
@@ -181,7 +181,7 @@ MenuData *decompose_menu_string(char *str)
                                *s= '\0';
                                s++;
                        }
-               } else if (c=='|' || c=='\0') {
+               } else if (c=='|' || c == '\n' || c=='\0') {
                        if (nitem) {
                                *s= '\0';
 
@@ -2567,7 +2567,6 @@ static uiPopupBlockHandle *ui_pup_menu(bContext *C, int maxrow, uiMenuHandleFunc
        return menu;
 }
 
-
 static void operator_name_cb(bContext *C, void *arg, int retval)
 {
        const char *opname= arg;
index 9dd7ae90f20c376600262678427b7c11e7bcbca6..facc0bb653752942d5d1d77c2e1268c6a65d0844 100644 (file)
@@ -1494,3 +1494,147 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname)
        }
 }
 
+
+/************************* 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)
+               activei= RNA_property_int_get(ptr, activeprop);
+       else if(activetype == PROP_STRING)
+               activename= RNA_property_string_get_alloc(ptr, activeprop, NULL, 0);
+
+       box= uiLayoutBox(layout);
+       row= uiLayoutRow(box, 0);
+       col = uiLayoutColumn(row, 1);
+
+       block= uiLayoutGetBlock(col);
+       uiBlockSetEmboss(block, UI_EMBOSSN);
+
+       len= RNA_property_collection_length(ptr, prop);
+       CLAMP(scroll, 1, len);
+
+       RNA_BEGIN(ptr, itemptr, propname) {
+               if(i >= scroll && i<scroll+items) {
+                       name= RNA_struct_name_get_alloc(&itemptr, NULL, 0);
+
+                       if(name) {
+                               ListItem *item= MEM_callocN(sizeof(ListItem), "uiTemplateList ListItem");
+
+                               item->ptr= *ptr;
+                               item->prop= prop;
+                               item->activeprop= activeprop;
+                               item->activeptr= itemptr;
+                               item->activei= i;
+
+                               if(activetype == PROP_POINTER)
+                                       item->selected= (activeptr.data == itemptr.data);
+                               else if(activetype == PROP_INT)
+                                       item->selected= (activei == i);
+                               else if(activetype == PROP_STRING)
+                                       item->selected= (strcmp(activename, name) == 0);
+
+                               but= uiDefIconTextButI(block, TOG, 0, RNA_struct_ui_icon(itemptr.type), name, 0,0,UI_UNIT_X*10,UI_UNIT_Y, &item->selected, 0, 0, 0, 0, "");
+                               uiButSetFlag(but, UI_ICON_LEFT|UI_TEXT_LEFT);
+                               uiButSetNFunc(but, list_item_cb, item, NULL);
+
+                               MEM_freeN(name);
+                       }
+               }
+
+               i++;
+       }
+       RNA_END;
+
+       while(i < scroll+items) {
+               if(i >= scroll)
+                       uiItemL(col, "", 0);
+               i++;
+       }
+
+       uiBlockSetEmboss(block, UI_EMBOSS);
+
+       if(len > items) {
+               col= uiLayoutColumn(row, 0);
+               uiDefButI(block, SCROLL, 0, "", 0,0,UI_UNIT_X*0.75,UI_UNIT_Y*items, &scroll, 1, len-items+1, items, 0, "");
+       }
+
+       //uiDefButI(block, SCROLL, 0, "", 0,0,UI_UNIT_X*15,UI_UNIT_Y*0.75, &scroll, 1, 16-5, 5, 0, "");
+}
+
index a75a3402774705ae413932064a085be428b64934..dff8e13aad5cc2dc6d07104df092cdafd5356907 100644 (file)
@@ -120,6 +120,8 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
                        if(!pptr.type)
                                pptr.type= RNA_property_pointer_type(ptr, prop);
                        icon= RNA_struct_ui_icon(pptr.type);
+                       if(icon == ICON_DOT)
+                               icon= 0;
 
                        but= uiDefIconTextButR(block, IDPOIN, 0, icon, name, x1, y1, x2, y2, ptr, propname, index, 0, 0, -1, -1, NULL);
                        break;
index bae8cdab2cdb6ad0c9f3ec7d33970cf89ff2dccf..fa3abd8a3ad74cdcaf00b3732d0ede6d5b5774b0 100644 (file)
@@ -102,6 +102,7 @@ typedef struct uiWidgetBase {
        float inner_uv[64][2];
        
        short inner, outline, emboss; /* set on/off */
+       short shadedir;
        
        uiWidgetTrias tria1;
        uiWidgetTrias tria2;
@@ -199,6 +200,7 @@ static void widget_init(uiWidgetBase *wtb)
        wtb->inner= 1;
        wtb->outline= 1;
        wtb->emboss= 1;
+       wtb->shadedir= 1;
 }
 
 /* helper call, makes shadow rect, with 'sun' above menu, so only shadow to left/right/bottom */
@@ -583,7 +585,7 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
                        glShadeModel(GL_SMOOTH);
                        glBegin(GL_POLYGON);
                        for(a=0; a<wtb->totvert; a++) {
-                               round_box_shade_col4(col1, col2, wtb->inner_uv[a][1]);
+                               round_box_shade_col4(col1, col2, wtb->inner_uv[a][wtb->shadedir]);
                                glVertex2fv(wtb->inner_v[a]);
                        }
                        glEnd();
@@ -1088,6 +1090,32 @@ static struct uiWidgetColors wcol_box= {
        0, 0
 };
 
+static struct uiWidgetColors wcol_toggle= {
+       {25, 25, 25, 255},
+       {153, 153, 153, 255},
+       {100, 100, 100, 255},
+       {25, 25, 25, 255},
+       
+       {0, 0, 0, 255},
+       {255, 255, 255, 255},
+       
+       0,
+       0, 0
+};
+
+static struct uiWidgetColors wcol_scroll= {
+       {25, 25, 25, 255},
+       {180, 180, 180, 255},
+       {153, 153, 153, 255},
+       {90, 90, 90, 255},
+       
+       {0, 0, 0, 255},
+       {255, 255, 255, 255},
+       
+       1,
+       0, -20
+};
+
 /* free wcol struct to play with */
 static struct uiWidgetColors wcol_tmp= {
        {0, 0, 0, 255},
@@ -1109,9 +1137,10 @@ void ui_widget_color_init(ThemeUI *tui)
 
        tui->wcol_regular= wcol_regular;
        tui->wcol_tool= wcol_tool;
-       tui->wcol_radio= wcol_radio;
        tui->wcol_text= wcol_text;
+       tui->wcol_radio= wcol_radio;
        tui->wcol_option= wcol_option;
+       tui->wcol_toggle= wcol_toggle;
        tui->wcol_num= wcol_num;
        tui->wcol_numslider= wcol_numslider;
        tui->wcol_menu= wcol_menu;
@@ -1119,6 +1148,7 @@ void ui_widget_color_init(ThemeUI *tui)
        tui->wcol_menu_back= wcol_menu_back;
        tui->wcol_menu_item= wcol_menu_item;
        tui->wcol_box= wcol_box;
+       tui->wcol_scroll= wcol_scroll;
 }
 
 /* ************ button callbacks, state ***************** */
@@ -1602,6 +1632,75 @@ void ui_draw_link_bezier(rcti *rect)
        }
 }
 
+static void widget_scroll(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
+{
+       uiWidgetBase wtb;
+       rcti rect1;
+       double value;
+       char inner[3];
+       float fac, size, rad;
+       int horizontal;
+
+       /* determine horizontal/vertical */
+       horizontal= (rect->xmax - rect->xmin > rect->ymax - rect->ymin);
+
+       if(horizontal)
+               rad= 0.5f*(rect->ymax - rect->ymin);
+       else
+               rad= 0.5f*(rect->xmax - rect->xmin);
+
+       widget_init(&wtb);
+       wtb.shadedir= (horizontal)? 1: 0;
+
+       /* draw back part, colors swapped and shading inverted */
+       VECCOPY(inner, wcol->inner);
+       VECCOPY(wcol->inner, wcol->item);
+       if(horizontal)
+               SWAP(short, wcol->shadetop, wcol->shadedown);
+       if(state & UI_SELECT)
+               SWAP(short, wcol->shadetop, wcol->shadedown);
+       
+       round_box_edges(&wtb, roundboxalign, rect, rad); /* XXX vertical gradient is wrong */
+       widgetbase_draw(&wtb, wcol);
+
+       VECCOPY(wcol->inner, inner);
+       if(horizontal)
+               SWAP(short, wcol->shadetop, wcol->shadedown);
+       if(state & UI_SELECT)
+               SWAP(short, wcol->shadetop, wcol->shadedown);
+       
+       /* front part */
+       value= ui_get_but_val(but);
+
+       size= (but->softmax + but->a1 - but->softmin);
+       size= MAX2(size, 2);
+       
+       /* position */
+       rect1= *rect;
+
+       if(horizontal) {
+               fac= (rect->xmax - rect->xmin)/(size-1);
+               rect1.xmin= rect1.xmin + ceil(fac*(value - but->softmin));
+               rect1.xmax= rect1.xmin + ceil(fac*(but->a1 - but->softmin));
+       }
+       else {
+               fac= (rect->ymax - rect->ymin)/(size-1);
+               rect1.ymax= rect1.ymax - ceil(fac*(value - but->softmin));
+               rect1.ymin= rect1.ymax - ceil(fac*(but->a1 - but->softmin));
+       }
+
+       /* draw */
+       wtb.emboss= 0; /* only emboss once */
+
+       if(!horizontal)
+               SWAP(short, wcol->shadetop, wcol->shadedown);
+
+       round_box_edges(&wtb, roundboxalign, &rect1, rad); /* XXX vertical gradient is wrong */
+       widgetbase_draw(&wtb, wcol);
+
+       if(!horizontal)
+               SWAP(short, wcol->shadetop, wcol->shadedown);
+}
 
 static void widget_link(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
 {
@@ -1896,13 +1995,16 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type)
        wt.text= widget_draw_text_icon;
        
        switch(type) {
+               case UI_WTYPE_REGULAR:
+                       break;
+
                case UI_WTYPE_LABEL:
                        wt.draw= NULL;
                        wt.state= widget_state_label;
                        break;
                        
                case UI_WTYPE_TOGGLE:
-                       wt.wcol_theme= &btheme->tui.wcol_radio;/*use radio theme for toggles*/
+                       wt.wcol_theme= &btheme->tui.wcol_toggle;
                        break;
                        
                case UI_WTYPE_OPTION:
@@ -1915,7 +2017,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type)
                        wt.wcol_theme= &btheme->tui.wcol_radio;
                        wt.draw= widget_radiobut;
                        break;
-                       
+
                case UI_WTYPE_NUMBER:
                        wt.wcol_theme= &btheme->tui.wcol_num;
                        wt.draw= widget_numbut;
@@ -1996,6 +2098,11 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type)
                        
                case UI_WTYPE_NORMAL:
                        break;
+
+               case UI_WTYPE_SCROLL:
+                       wt.wcol_theme= &btheme->tui.wcol_scroll;
+                       wt.custom= widget_scroll;
+                       break;
        }
        
        return &wt;
@@ -2090,6 +2197,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
                        case BUT:
                                wt= widget_type(UI_WTYPE_EXEC);
                                break;
+
                        case NUM:
                                wt= widget_type(UI_WTYPE_NUMBER);
                                break;
@@ -2185,9 +2293,13 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
                        case BUT_CURVE:
                                ui_draw_but_CURVE(ar, but, &tui->wcol_regular, rect);
                                break;
-                               
+
+                       case SCROLL:
+                               wt= widget_type(UI_WTYPE_SCROLL);
+                               break;
+
                        default:
-                               wt= widget_type(UI_WTYPE_TOGGLE);
+                               wt= widget_type(UI_WTYPE_REGULAR);
                }
        }
        
@@ -2196,6 +2308,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
                int roundboxalign, state;
                
                roundboxalign= widget_roundbox_set(but, rect);
+
                state= but->flag;
                if(but->editstr) state |= UI_TEXTINPUT;
                
index db13acf12d5fdb8a9564c537b5d065e1e15d5e32..771a7e4379338046d5dbb8bed46764727bc240da 100644 (file)
@@ -124,10 +124,11 @@ typedef struct uiWidgetColors {
 typedef struct ThemeUI {
        
        /* Interface Elements (buttons, menus, icons) */
-       uiWidgetColors wcol_regular, wcol_tool, wcol_radio, wcol_text, wcol_option;
+       uiWidgetColors wcol_regular, wcol_tool, wcol_text;
+       uiWidgetColors wcol_radio, wcol_option, wcol_toggle;
        uiWidgetColors wcol_num, wcol_numslider;
        uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item;
-       uiWidgetColors wcol_box;
+       uiWidgetColors wcol_box, wcol_scroll;
        
        char iconfile[80];      // FILE_MAXFILE length
        
index d8648e051533d07e338b9f519965c948ce8d66b1..75de9d5376649d1ac36ce7d8b8b9c010dd0244c6 100644 (file)
@@ -249,6 +249,12 @@ void RNA_api_ui_layout(StructRNA *srna)
        RNA_def_property_flag(parm, PROP_REQUIRED);
        parm= RNA_def_pointer(func, "image_user", "ImageUser", "", "");
        RNA_def_property_flag(parm, PROP_REQUIRED);
+
+       func= RNA_def_function(srna, "template_list", "uiTemplateList");
+       api_ui_item_rna_common(func);
+       parm= RNA_def_string(func, "active_property", "", 0, "", "Identifier of property in data, indicating the active element.");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       parm= RNA_def_int(func, "items", 5, 0, INT_MAX, "", "Number of items to display.", 0, INT_MAX);
 }
 
 #endif
index 97337af5cb0b434c8eaa03b2d8cfa97c33f23112..609082144e1c2497e7913602825ce6c8c2853b65 100644 (file)
@@ -306,6 +306,12 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna)
        RNA_def_property_struct_type(prop, "ThemeWidgetColors");
        RNA_def_property_ui_text(prop, "Option Widget Colors", "");
        RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+       prop= RNA_def_property(srna, "wcol_toggle", PROP_POINTER, PROP_NEVER_NULL);
+       RNA_def_property_pointer_sdna(prop, NULL, "wcol_toggle");
+       RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+       RNA_def_property_ui_text(prop, "Toggle Widget Colors", "");
+       RNA_def_property_update(prop, NC_WINDOW, NULL);
        
        prop= RNA_def_property(srna, "wcol_num", PROP_POINTER, PROP_NEVER_NULL);
        RNA_def_property_pointer_sdna(prop, NULL, "wcol_num");
@@ -348,7 +354,12 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna)
        RNA_def_property_struct_type(prop, "ThemeWidgetColors");
        RNA_def_property_ui_text(prop, "Menu Item Colors", "");
        RNA_def_property_update(prop, NC_WINDOW, NULL);
-       
+
+       prop= RNA_def_property(srna, "wcol_scroll", PROP_POINTER, PROP_NEVER_NULL);
+       RNA_def_property_pointer_sdna(prop, NULL, "wcol_scroll");
+       RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+       RNA_def_property_ui_text(prop, "Scroll Widget Colors", "");
+       RNA_def_property_update(prop, NC_WINDOW, NULL);
        
        prop= RNA_def_property(srna, "icon_file", PROP_STRING, PROP_FILEPATH);
        RNA_def_property_string_sdna(prop, NULL, "iconfile");