Fix #29024: Logic Bricks allow same name for multiple bricks
authorSergey Sharybin <sergey.vfx@gmail.com>
Fri, 4 Nov 2011 15:53:20 +0000 (15:53 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Fri, 4 Nov 2011 15:53:20 +0000 (15:53 +0000)
Check for unique name when setting name for logic bricks.

source/blender/makesrna/intern/rna_actuator.c
source/blender/makesrna/intern/rna_controller.c
source/blender/makesrna/intern/rna_sensor.c

index 596e1a7f35779fe8ac2d25bb29551ad92bb26a28..db71dee26ced3d3aa09fe50d0c4181b9acd29c8b 100644 (file)
@@ -109,6 +109,18 @@ static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
        }
 }
 
+void rna_Actuator_name_set(PointerRNA *ptr, const char *value)
+{
+       bActuator *act= (bActuator *)ptr->data;
+
+       BLI_strncpy_utf8(act->name, value, sizeof(act->name));
+
+       if (ptr->id.data) {
+               Object *ob= (Object *)ptr->id.data;
+               BLI_uniquename(&ob->actuators, act, "Actuator", '.', offsetof(bActuator, name), sizeof(act->name));
+       }
+}
+
 static void rna_Actuator_type_set(struct PointerRNA *ptr, int value)
 {
        bActuator *act= (bActuator *)ptr->data;
@@ -525,6 +537,7 @@ void rna_def_actuator(BlenderRNA *brna)
 
        prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
        RNA_def_property_ui_text(prop, "Name", "");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Actuator_name_set");
        RNA_def_struct_name_property(srna, prop);
 
        prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
index fe899f99ed276aea5a8c12a5031b99bd012a28f7..89239c10ffd4fdab109dc71cd4af4a5485770403 100644 (file)
@@ -75,6 +75,18 @@ static struct StructRNA* rna_Controller_refine(struct PointerRNA *ptr)
        }
 }
 
+void rna_Constroller_name_set(PointerRNA *ptr, const char *value)
+{
+       bController *cont= (bController *)ptr->data;
+
+       BLI_strncpy_utf8(cont->name, value, sizeof(cont->name));
+
+       if (ptr->id.data) {
+               Object *ob= (Object *)ptr->id.data;
+               BLI_uniquename(&ob->controllers, cont, "Controller", '.', offsetof(bController, name), sizeof(cont->name));
+       }
+}
+
 static void rna_Controller_type_set(struct PointerRNA *ptr, int value)
 {
        bController *cont= (bController *)ptr->data;
@@ -177,6 +189,7 @@ void RNA_def_controller(BlenderRNA *brna)
 
        prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
        RNA_def_property_ui_text(prop, "Name", "");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Constroller_name_set");
        RNA_def_struct_name_property(srna, prop);
        RNA_def_property_update(prop, NC_LOGIC, NULL);
 
index 217b50b38e5f5367ab43767172a624a2881cc1e3..ba58a66a2d6f1deebe08fa40e647784ee6f24079 100644 (file)
@@ -102,6 +102,18 @@ static StructRNA* rna_Sensor_refine(struct PointerRNA *ptr)
        }
 }
 
+void rna_Sensor_name_set(PointerRNA *ptr, const char *value)
+{
+       bSensor *sens= (bSensor *)ptr->data;
+
+       BLI_strncpy_utf8(sens->name, value, sizeof(sens->name));
+
+       if (ptr->id.data) {
+               Object *ob= (Object *)ptr->id.data;
+               BLI_uniquename(&ob->sensors, sens, "Sensor", '.', offsetof(bSensor, name), sizeof(sens->name));
+       }
+}
+
 static void rna_Sensor_type_set(struct PointerRNA *ptr, int value)
 {
        bSensor *sens= (bSensor *)ptr->data;
@@ -260,6 +272,7 @@ static void rna_def_sensor(BlenderRNA *brna)
 
        prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
        RNA_def_property_ui_text(prop, "Name", "Sensor name");
+       RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Sensor_name_set");
        RNA_def_struct_name_property(srna, prop);
        RNA_def_property_update(prop, NC_LOGIC, NULL);