Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2009-06-24 18:16:56 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2009-06-24 18:16:56 +0400
commit5b26f520bb50f17b0a2193daf9b8b10616c4707b (patch)
tree868be9ac8f1bd3da6acb283198dec7291c779cd0 /source
parenta379fdd7fba460fdceb14d6dd164116d9a4744bd (diff)
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.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/include/UI_interface.h1
-rw-r--r--source/blender/editors/interface/interface_handlers.c62
-rw-r--r--source/blender/editors/interface/interface_intern.h6
-rw-r--r--source/blender/editors/interface/interface_layout.c2
-rw-r--r--source/blender/editors/interface/interface_regions.c3
-rw-r--r--source/blender/editors/interface/interface_templates.c144
-rw-r--r--source/blender/editors/interface/interface_utils.c2
-rw-r--r--source/blender/editors/interface/interface_widgets.c125
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h5
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c6
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c13
11 files changed, 348 insertions, 21 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 80e57f5e5be..86516f9c973 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -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);
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 8eab0305047..bdbfce782b6 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -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);
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 187d7cccd97..3b40bd7c29a 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -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;
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 555500004ea..03da6861974 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -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;
}
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index af1d4e91c67..f7a0e97d05d 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -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;
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 9dd7ae90f20..facc0bb6537 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -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, "");
+}
+
diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c
index a75a3402774..dff8e13aad5 100644
--- a/source/blender/editors/interface/interface_utils.c
+++ b/source/blender/editors/interface/interface_utils.c
@@ -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;
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index bae8cdab2cd..fa3abd8a3ad 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -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;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index db13acf12d5..771a7e43793 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -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
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index d8648e05153..75de9d53766 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -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
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 97337af5cb0..609082144e1 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -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");