[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23706] trunk/blender: - object. selected is now editable (uses update function to flag the scene base)

Campbell Barton ideasman42 at gmail.com
Thu Oct 8 09:54:21 CEST 2009


Revision: 23706
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23706
Author:   campbellbarton
Date:     2009-10-08 09:54:20 +0200 (Thu, 08 Oct 2009)

Log Message:
-----------
- object.selected is now editable (uses update function to flag the scene base)
- editing properties from python wasnt running their update function.
- missing commas made dir(context) give joined strings.
- added __undo__ as an operator class attribute so python ops can be set as undoable. (like existing __register__)

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_view3d.py
    trunk/blender/source/blender/editors/screen/screen_context.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py	2009-10-08 07:04:42 UTC (rev 23705)
+++ trunk/blender/release/scripts/ui/space_view3d.py	2009-10-08 07:54:20 UTC (rev 23706)
@@ -179,6 +179,7 @@
 		layout.itemO("object.select_by_layer", text="Select All by Layer")
 		layout.item_enumO("object.select_by_type", "type", "", text="Select All by Type...")
 		layout.itemO("object.select_grouped", text="Select Grouped...")
+		layout.itemO("object.select_pattern", text="Select Pattern...")
 
 class VIEW3D_MT_select_pose(bpy.types.Menu):
 	__space_type__ = 'VIEW_3D'
@@ -1306,7 +1307,42 @@
 		col.itemO("TFM_OT_select_orientation", text="Select")
 		col.itemO("TFM_OT_create_orientation", text="Create")
 		col.itemO("TFM_OT_delete_orientation", text="Delete")
-			
+
+# Operators 
+
+class OBJECT_OT_select_pattern(bpy.types.Operator):
+	'''Select object matching a naming pattern.'''
+	__idname__ = "object.select_pattern"
+	__label__ = "Select Pattern"
+	__register__ = True
+	__undo__ = True
+	__props__ = [
+		bpy.props.StringProperty(attr="pattern", name="Pattern", description="Name filter using '*' and '?' wildcard chars", maxlen= 32, default= "*"),
+		bpy.props.BoolProperty(attr="case_sensitive", name="Case Sensitive", description="Do a case sensitive compare", default= False),
+	]
+	
+	def execute(self, context):
+	
+		import fnmatch
+		if self.case_sensitive:	pattern_match = fnmatch.fnmatchcase
+		else:					pattern_match = lambda a, b: fnmatch.fnmatchcase(a.upper(), b.upper())
+
+		for ob in context.visible_objects:
+			if pattern_match(ob.name, self.pattern):
+				ob.selected = True
+
+		return ('FINISHED',)
+		
+		# TODO - python cant do popups yet
+	'''
+	def invoke(self, context, event):	
+		wm = context.manager
+		wm.add_fileselect(self.__operator__)
+		return ('RUNNING_MODAL',)
+	'''
+
+
+
 bpy.types.register(VIEW3D_HT_header) # Header
 
 bpy.types.register(VIEW3D_MT_view) #View Menus
@@ -1382,4 +1418,7 @@
 bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
 bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
 bpy.types.register(VIEW3D_PT_background_image)
-bpy.types.register(VIEW3D_PT_transform_orientations)
\ No newline at end of file
+bpy.types.register(VIEW3D_PT_transform_orientations)
+
+bpy.ops.add(OBJECT_OT_select_pattern)
+

Modified: trunk/blender/source/blender/editors/screen/screen_context.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_context.c	2009-10-08 07:04:42 UTC (rev 23705)
+++ trunk/blender/source/blender/editors/screen/screen_context.c	2009-10-08 07:54:20 UTC (rev 23706)
@@ -52,7 +52,7 @@
 	if(CTX_data_dir(member)) {
 		static const char *dir[] = {
 			"scene", "selected_objects", "selected_bases",
-			"selected_editable_objects", "selected_editable_bases"
+			"selected_editable_objects", "selected_editable_bases",
 			"active_base", "active_object", "edit_object",
 			"sculpt_object", "vertex_paint_object", "weight_paint_object",
 			"texture_paint_object", "brush", "particle_edit_object", NULL};

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2009-10-08 07:04:42 UTC (rev 23705)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2009-10-08 07:54:20 UTC (rev 23706)
@@ -620,10 +620,10 @@
 
 	if(CTX_data_dir(member)) {
 		static const char *dir[] = {
-			"selected_objects", "selected_bases" "selected_editable_objects",
-			"selected_editable_bases" "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
+			"selected_objects", "selected_bases", "selected_editable_objects",
+			"selected_editable_bases", "visible_objects", "visible_bases", "selectable_objects", "selectable_bases",
 			"active_base", "active_object", "visible_bones", "editable_bones",
-			"selected_bones", "selected_editable_bones" "visible_pchans",
+			"selected_bones", "selected_editable_bones", "visible_pchans",
 			"selected_pchans", "active_bone", "active_pchan", NULL};
 
 		CTX_data_dir_set(result, dir);

Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c	2009-10-08 07:04:42 UTC (rev 23705)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c	2009-10-08 07:54:20 UTC (rev 23706)
@@ -126,6 +126,14 @@
 	DAG_scene_sort(CTX_data_scene(C));
 }
 
+/* when changing the selection flag the scene needs updating */
+static void rna_Object_select_update(bContext *C, PointerRNA *ptr)
+{
+	Object *ob= (Object*)ptr->id.data;
+	short mode = ob->flag & SELECT ? BA_SELECT : BA_DESELECT;
+	ED_base_object_select(object_in_scene(ob, CTX_data_scene(C)), mode);
+}
+
 static void rna_Object_layer_update(bContext *C, PointerRNA *ptr)
 {
 	Object *ob= (Object*)ptr->id.data;
@@ -1145,9 +1153,8 @@
 
 	prop= RNA_def_property(srna, "selected", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
-	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 	RNA_def_property_ui_text(prop, "Selected", "Object selection state.");
-	RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+	RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_select_update");
 
 	/* parent and track */
 

Modified: trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-10-08 07:04:42 UTC (rev 23705)
+++ trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-10-08 07:54:20 UTC (rev 23706)
@@ -47,6 +47,7 @@
 #define PYOP_ATTR_IDNAME_BL		"__idname_bl__"	/* our own name converted into blender syntax, users wont see this */
 #define PYOP_ATTR_DESCRIPTION	"__doc__"	/* use pythons docstring */
 #define PYOP_ATTR_REGISTER		"__register__"	/* True/False. if this python operator should be registered */
+#define PYOP_ATTR_UNDO			"__undo__"	/* True/False. if this python operator should be undone */
 
 static struct BPY_flag_def pyop_ret_flags[] = {
 	{"RUNNING_MODAL", OPERATOR_RUNNING_MODAL},
@@ -277,16 +278,27 @@
 	ot->pyop_data= userdata;
 	
 	/* flags */
+	ot->flag= 0;
+
 	item= PyObject_GetAttrString(py_class, PYOP_ATTR_REGISTER);
 	if (item) {
-		ot->flag= PyObject_IsTrue(item)!=0 ? OPTYPE_REGISTER:0;
+		ot->flag |= PyObject_IsTrue(item)!=0 ? OPTYPE_REGISTER:0;
 		Py_DECREF(item);
 	}
 	else {
-		ot->flag= OPTYPE_REGISTER; /* unspesified, leave on for now to help debug */
 		PyErr_Clear();
 	}
-	
+	item= PyObject_GetAttrString(py_class, PYOP_ATTR_UNDO);
+	if (item) {
+		ot->flag |= PyObject_IsTrue(item)!=0 ? OPTYPE_UNDO:0;
+		Py_DECREF(item);
+	}
+	else {
+		PyErr_Clear();
+	}
+
+
+
 	props= PyObject_GetAttrString(py_class, PYOP_ATTR_PROP);
 	
 	if (props) {

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2009-10-08 07:04:42 UTC (rev 23705)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2009-10-08 07:54:20 UTC (rev 23706)
@@ -762,7 +762,10 @@
 			break;
 		}
 	}
-	
+
+	/* Run rna property functions */
+	RNA_property_update(BPy_GetContext(), ptr, prop);
+
 	return 0;
 }
 





More information about the Bf-blender-cvs mailing list