[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28971] trunk/blender: Tweaks to copy game properties operator for Dalai
Matt Ebb
matt at mke3.net
Tue May 25 08:24:46 CEST 2010
Revision: 28971
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28971
Author: broken
Date: 2010-05-25 08:24:45 +0200 (Tue, 25 May 2010)
Log Message:
-----------
Tweaks to copy game properties operator for Dalai
Modified Paths:
--------------
trunk/blender/release/scripts/ui/space_view3d.py
trunk/blender/source/blender/editors/object/object_edit.c
Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py 2010-05-25 05:56:31 UTC (rev 28970)
+++ trunk/blender/release/scripts/ui/space_view3d.py 2010-05-25 06:24:45 UTC (rev 28971)
@@ -675,6 +675,7 @@
layout.menu("VIEW3D_MT_object_track")
layout.menu("VIEW3D_MT_object_group")
layout.menu("VIEW3D_MT_object_constraints")
+ layout.menu("VIEW3D_MT_object_game_properties")
layout.separator()
@@ -843,6 +844,17 @@
layout.operator_enums("object.make_links_data", "type") # inline
+class VIEW3D_MT_object_game_properties(bpy.types.Menu):
+ bl_label = "Game Properties"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("object.game_property_copy", text="Replace").operation="REPLACE"
+ layout.operator("object.game_property_copy", text="Merge").operation="MERGE"
+ # layout.operator("object.game_property_copy").operation="CLEAR" doesn't really belong as part of copy...
+ layout.operator_menu_enum("object.game_property_copy", "property", text="Copy...")
+
# ********** Vertex paint menu **********
@@ -2208,6 +2220,7 @@
VIEW3D_MT_object_track,
VIEW3D_MT_object_group,
VIEW3D_MT_object_constraints,
+ VIEW3D_MT_object_game_properties,
VIEW3D_MT_object_showhide,
VIEW3D_MT_make_single_user,
VIEW3D_MT_make_links,
Modified: trunk/blender/source/blender/editors/object/object_edit.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_edit.c 2010-05-25 05:56:31 UTC (rev 28970)
+++ trunk/blender/source/blender/editors/object/object_edit.c 2010-05-25 06:24:45 UTC (rev 28971)
@@ -2173,13 +2173,11 @@
{
Object *ob= CTX_data_active_object(C);
bProperty *prop;
- int index;
+ int index= RNA_int_get(op->ptr, "index");
if(!ob)
return OPERATOR_CANCELLED;
- index = RNA_int_get(op->ptr, "index");
-
prop= BLI_findlink(&ob->prop, index);
if(prop) {
@@ -2207,52 +2205,25 @@
RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "Property index to remove ", 0, INT_MAX);
}
-static EnumPropertyItem game_properties_copy_types[] ={
- {1, "REPLACE", 0, "Replace Properties", ""},
- {2, "MERGE", 0, "Merge Properties", ""},
- {3, "CLEAR", 0, "Clear All", ""},
- {4, "COPY", 0, "Copy a Property", ""},
- {0, NULL, 0, NULL, NULL}};
-static int game_property_copy_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
- Object *ob= CTX_data_active_object(C);
- bProperty *prop;
- int tot=0;
- uiPopupMenu *pup;
- uiLayout *menu;
+#define COPY_PROPERTIES_REPLACE 1
+#define COPY_PROPERTIES_MERGE 2
+#define COPY_PROPERTIES_CLEAR 3
+#define COPY_PROPERTIES_COPY 4
- /* count number of available properties */
- prop= ob->prop.first;
- while(prop) {
- tot++;
- prop= prop->next;
- }
+static EnumPropertyItem game_properties_copy_operations[] ={
+ {COPY_PROPERTIES_REPLACE, "REPLACE", 0, "Replace Properties", ""},
+ {COPY_PROPERTIES_MERGE, "MERGE", 0, "Merge Properties", ""},
+ {COPY_PROPERTIES_CLEAR, "CLEAR", 0, "Clear All", ""},
+ {COPY_PROPERTIES_COPY, "COPY", 0, "Copy a Property", ""},
+ {0, NULL, 0, NULL, NULL}};
- /* start building */
- pup= uiPupMenuBegin(C, op->type->name, 0);
- menu= uiPupMenuLayout(pup);
- uiLayoutSetOperatorContext(menu, WM_OP_EXEC_DEFAULT);
-
- if(!tot)
- uiItemEnumO(menu, "OBJECT_OT_game_property_copy", NULL, 0, "type", 3);//CLEAR);
- else {
- uiItemEnumO(menu, "OBJECT_OT_game_property_copy", NULL, 0, "type", 1);//REPLACE);
- uiItemEnumO(menu, "OBJECT_OT_game_property_copy", NULL, 0, "type", 2);//MERGE);
- uiItemMenuEnumO(menu, "OBJECT_OT_game_property_copy", "property", "Copy Property", 0);//COPY
- }
- uiPupMenuEnd(C, pup);
-
- /* this operator is only for a menu, not used further */
- return OPERATOR_CANCELLED;
-}
-
static EnumPropertyItem gameprops_items[]= {
{0, NULL, 0, NULL, NULL}};
static EnumPropertyItem *gameprops_itemf(bContext *C, PointerRNA *ptr, int *free)
{
- Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+ Object *ob= ED_object_active_context(C);
EnumPropertyItem tmp = {0, "", 0, "", ""};
EnumPropertyItem *item= NULL;
bProperty *prop;
@@ -2278,21 +2249,22 @@
{
Object *ob=ED_object_active_context(C);
bProperty *prop;
-
- int tmp_int; //need an int pointer to pass for the RNA_enum_name
- EnumPropertyItem *dyn_props= NULL;
- const char *prop_name= NULL;
-
- int type = RNA_enum_get(op->ptr, "type");
+ int type = RNA_enum_get(op->ptr, "operation");
int propid= RNA_enum_get(op->ptr, "property");
- // recreate the dynamic enum with the properties
- dyn_props = gameprops_itemf(C, NULL, &tmp_int);
-
- if (propid > 0)
- RNA_enum_name(dyn_props, propid, &prop_name);
-
- if ( type == 1 || type == 2 || type == 3) {
+ if(propid > 0) { /* copy */
+ prop = BLI_findlink(&ob->prop, propid-1);
+
+ if(prop) {
+ CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
+ if (ob != ob_iter) {
+ if (ob->data != ob_iter->data)
+ set_ob_property(ob_iter, prop);
+ }
+ } CTX_DATA_END;
+ }
+ }
+ else if (ELEM3(type, COPY_PROPERTIES_REPLACE, COPY_PROPERTIES_MERGE, COPY_PROPERTIES_CLEAR)) {
CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
if (ob != ob_iter) {
if (ob->data != ob_iter->data){
@@ -2307,18 +2279,7 @@
}
CTX_DATA_END;
}
- else if(prop_name) { /* copy */
- prop = (bProperty *) BLI_findstring(&ob->prop, prop_name, offsetof(bProperty, name));
-
- if(prop) {
- CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
- if (ob != ob_iter) {
- if (ob->data != ob_iter->data)
- set_ob_property(ob_iter, prop);
- }
- } CTX_DATA_END;
- }
- }
+
return OPERATOR_FINISHED;
}
@@ -2330,14 +2291,13 @@
ot->idname= "OBJECT_OT_game_property_copy";
/* api callbacks */
- ot->invoke= game_property_copy_invoke;
ot->exec= game_property_copy_exec;
ot->poll= ED_operator_object_active_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- RNA_def_enum(ot->srna, "type", game_properties_copy_types, 4, "Operation", "");
+ RNA_def_enum(ot->srna, "operation", game_properties_copy_operations, 4, "Operation", "");
prop=RNA_def_enum(ot->srna, "property", gameprops_items, 0, "Property", "Properties to copy");
RNA_def_enum_funcs(prop, gameprops_itemf);
ot->prop=prop;
More information about the Bf-blender-cvs
mailing list