[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