[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32070] trunk/blender/source/blender/ editors/interface: support for PROP_ENUM_FLAG buttons, these were only supported by python.
Campbell Barton
ideasman42 at gmail.com
Thu Sep 23 09:31:45 CEST 2010
Revision: 32070
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32070
Author: campbellbarton
Date: 2010-09-23 09:31:44 +0200 (Thu, 23 Sep 2010)
Log Message:
-----------
support for PROP_ENUM_FLAG buttons, these were only supported by python.
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface.c
trunk/blender/source/blender/editors/interface/interface_intern.h
trunk/blender/source/blender/editors/interface/interface_layout.c
Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c 2010-09-23 04:49:01 UTC (rev 32069)
+++ trunk/blender/source/blender/editors/interface/interface.c 2010-09-23 07:31:44 UTC (rev 32070)
@@ -811,7 +811,13 @@
break;
case ROW:
case LISTROW:
- if(value == but->hardmax) push= 1;
+ /* support for rna enum buts */
+ if(but->rnaprop && (RNA_property_flag(but->rnaprop) & PROP_ENUM_FLAG)) {
+ if((int)value & (int)but->hardmax) push= 1;
+ }
+ else {
+ if(value == but->hardmax) push= 1;
+ }
break;
case COL:
push= 2;
@@ -1355,7 +1361,14 @@
RNA_property_float_set(&but->rnapoin, prop, value);
break;
case PROP_ENUM:
- RNA_property_enum_set(&but->rnapoin, prop, value);
+ if(RNA_property_flag(prop) & PROP_ENUM_FLAG) {
+ int ivalue= (int)value;
+ ivalue ^= RNA_property_enum_get(&but->rnapoin, prop); /* toggle for enum/flag buttons */
+ RNA_property_enum_set(&but->rnapoin, prop, ivalue);
+ }
+ else {
+ RNA_property_enum_set(&but->rnapoin, prop, value);
+ }
break;
default:
break;
Modified: trunk/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_intern.h 2010-09-23 04:49:01 UTC (rev 32069)
+++ trunk/blender/source/blender/editors/interface/interface_intern.h 2010-09-23 07:31:44 UTC (rev 32070)
@@ -103,7 +103,7 @@
#define UI_PANEL_MINY 70
/* uiBut->flag */
-#define UI_SELECT 1
+#define UI_SELECT 1 /* use when the button is pressed */
#define UI_MOUSE_OVER 2
#define UI_ACTIVE 4
#define UI_HAS_ICON 8
Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c 2010-09-23 04:49:01 UTC (rev 32069)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c 2010-09-23 07:31:44 UTC (rev 32070)
@@ -917,8 +917,15 @@
if(layout->root->type == UI_LAYOUT_MENU) {
if(type == PROP_BOOLEAN)
icon= (RNA_property_boolean_get(ptr, prop))? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
- else if(type == PROP_ENUM && index == RNA_ENUM_VALUE)
- icon= (RNA_property_enum_get(ptr, prop) == value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ else if(type == PROP_ENUM && index == RNA_ENUM_VALUE) {
+ int enum_value= RNA_property_enum_get(ptr, prop);
+ if(RNA_property_flag(prop) & PROP_ENUM_FLAG) {
+ icon= (enum_value & value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ }
+ else {
+ icon= (enum_value == value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ }
+ }
}
slider= (flag & UI_ITEM_R_SLIDER);
@@ -948,7 +955,7 @@
uiDefButR(block, ROW, 0, name, 0, 0, w, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
}
/* expanded enum */
- else if(type == PROP_ENUM && expand)
+ else if(type == PROP_ENUM && (expand || RNA_property_flag(prop) & PROP_ENUM_FLAG))
ui_item_enum_expand(layout, block, ptr, prop, name, 0, 0, w, h, icon_only);
/* property with separate label */
else if(type == PROP_ENUM || type == PROP_STRING || type == PROP_POINTER) {
More information about the Bf-blender-cvs
mailing list